703dd4971a84c6fad1c57aac88abc10ef03d6cdd
[bcm963xx.git] / bcmdrivers / broadcom / include / bcm963xx / bcmatmapi.h
1 /*
2 <:copyright-broadcom
3
4  Copyright (c) 2002 Broadcom Corporation
5  All Rights Reserved
6  No portions of this material may be reproduced in any form without the
7  written permission of:
8           Broadcom Corporation
9           16215 Alton Parkway
10           Irvine, California 92619
11  All information contained in this document is Broadcom Corporation
12  company private, proprietary, and trade secret.
13
14 :>
15 */
16 //**************************************************************************
17 // File Name  : BcmAtmApi.h
18 //
19 // Description: This file contains the definitions, structures and function
20 //              prototypes for the Broadcom Asynchronous Transfer Mode (ATM)
21 //              Application Program Interface (API).
22 //
23 // Updates    : 09/15/2000  lat.  Created.
24 //**************************************************************************
25
26 #if !defined(_BCMATMAPI_H_)
27 #define _BCMATMAPI_H_
28
29 #if defined(__cplusplus)
30 extern "C" {
31 #endif
32
33 //**************************************************************************
34 // Constant Definitions
35 //**************************************************************************
36
37 // ATM physical port constants.
38 #define PHY_NUM_PORTS                       4
39 #define PHY_0                               0
40 #define PHY_1                               1
41 #define PHY_2                               2 // [BCM635x Only]
42 #define PHY_3                               3 // [BCM635x Only]
43
44 // Used for backwards compatibility.
45 #define PHY_UTOPIA0                         0
46 #define PHY_UTOPIA1                         1
47 #define PHY_UTOPIA2                         2
48 #define PHY_UTOPIA3_TC_LOOPBACK             3
49
50 // Values for ATM_PORT_CFG ucPortType.
51 #define PT_DISABLED                         0
52 #define PT_UTOPIA                           1
53 #define PT_LOOPBACK                         2
54 #define PT_TC                               3 // [BCM635x Only]
55 #define PT_ADSL_INTERLEAVED                 4 // [BCM6345 Only]
56 #define PT_ADSL_FAST                        5 // [BCM6345 Only]
57
58 // Wildcard definitions.
59 #define ALL_INTERFACES                      0xffffffff
60 #define ANY_PRIORITY                        0xff
61
62 // Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulTrafficDescrType.
63 #define TDT_ATM_NO_TRAFFIC_DESCRIPTOR       1
64 #define TDT_ATM_NO_CLP_NO_SCR               2
65 #define TDT_ATM_CLP_NO_TAGGING_NO_SCR       3
66 #define TDT_ATM_CLP_TAGGING_NO_SCR          4
67 #define TDT_ATM_NO_CLP_SCR                  5
68 #define TDT_ATM_CLP_NO_TAGGING_SCR          6 // [BCM635x Only]
69 #define TDT_ATM_CLP_TAGGING_SCR             7 // [BCM635x Only]
70 #define TDT_ATM_CLP_NO_TAGGING_MCR          8 // [BCM6348 Only]
71 #define TDT_ATM_CLP_TRANSPARENT_NO_SCR      9
72 #define TDT_ATM_CLP_TRANSPARENT_SCR         10
73 #define TDT_ATM_NO_CLP_TAGGING_NO_SCR       11
74 #define TDT_ATM_NO_CLP_NO_SCR_CDVT          12
75 #define TDT_ATM_NO_CLP_SCR_CDVT             13
76 #define TDT_ATM_CLP_NO_TAGGING_SCR_CDVT     14 // [BCM635x Only]
77 #define TDT_ATM_CLP_TAGGING_SCR_CDVT        15 // [BCM635x Only]
78
79 // Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulTrafficDescrRowStatus.
80 #define TDRS_ACTIVE                         1
81 #define TDRS_NOT_IN_SERVICE                 2
82
83 // Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulServiceCategory.
84 #define SC_OTHER                            1
85 #define SC_CBR                              2
86 #define SC_RT_VBR                           3
87 #define SC_NRT_VBR                          4
88 #define SC_UBR                              6
89
90 // Values for ATM_INTERFACE_CFG ulIfAdminStatus and ATM_VCC_CFG
91 // ulAtmVclAdminStatus.
92 #define ADMSTS_UP                           1
93 #define ADMSTS_DOWN                         2
94 #define ADMSTS_TESTING                      3
95
96 // Values for ATM_INTERFACE_CFG ulIfOperStatus and ATM_VCC_CFG
97 // ulAtmVclOperStatus.
98 #define OPRSTS_UP                           1
99 #define OPRSTS_DOWN                         2
100 #define OPRSTS_UNKNOWN                      3
101
102 // Values for ATM_INTERFACE_LINK_INFO ulLinkState.
103 #define LINK_UP                             1
104 #define LINK_DOWN                           2
105
106 // Values for ulAalType.
107 #define AAL_2                               0 // [BCM635x Only]
108 #define AAL_TRANSPARENT                     1
109 #define AAL_0_PACKET                        2
110 #define AAL_0_CELL_CRC                      3
111 #define AAL_5                               7
112
113 // Values for ATM_VCC_CFG ulAtmVccEncapsType.
114 #define ET_VC_MULTIPLEX_ROUTED_PROTOCOL     1
115 #define ET_VC_MULTIPLEX_BRG_PROTOCOL_8023   2
116 #define ET_VC_MULTIPLEX_BRG_PROTOCOL_8025   3
117 #define ET_VC_MULTIPLEX_BRG_PROTOCOL_8026   4
118 #define ET_VC_MULTIPLEX_LAN_EMULATION_8023  5
119 #define ET_VC_MULTIPLEX_LAN_EMULATION_8025  6
120 #define ET_LLC_ENCAPSULATION                7
121 #define ET_MULTI_PROTOCOL_FRAME_RELAY_SSCS  8
122 #define ET_OTHER                            9
123 #define ET_UNKNOWN                          10
124
125 // [BCM635x Only] Values for ATM_AAL2_VCC_CFG ucAal2CpsOptimisation.
126 #define OPT_SNG_PKT_PER_PDU_NO_OVERLAP      1
127 #define OPT_MULT_PKTS_PER_PDU_OVERLAP       2
128
129 // [BCM635x Only] Values for ATM_INTERFACE_STATS ulTcAlarmState.
130 #define TCALM_NO_ALARM                      1
131 #define TCALM_LCD_FAILURE                   2
132
133 // Values for ATM_NOTIFY_PARMS ulNotificationType.
134 #define ATM_NOTIFY_INTERFACE_CHANGE         1
135
136 // Values for AN_INTF_CHANGE_PARMS ulInterfaceState.
137 #define ATM_INTERFACE_UP                    1
138 #define ATM_INTERFACE_DOWN                  2
139
140 // Values for AN_VCC_CHANGE_PARMS ulInterfaceState.
141 #define ATM_VCC_UP                          1
142 #define ATM_VCC_DOWN                        2
143
144 // Values for ATM_VCC_ATTACH_PARMS ulFlags.
145 #define AVAP_ALLOW_OAM_F5_SEGMENT_CELLS     0x0001
146 #define AVAP_ALLOW_OAM_F5_END_TO_END_CELLS  0x0002
147 #define AVAP_ALLOW_RM_CELLS                 0x0004
148 #define AVAP_ALLOW_OAM_F4_SEGMENT_CELLS     0x0008
149 #define AVAP_ALLOW_OAM_F4_END_TO_END_CELLS  0x0010
150 #define AVAP_ALLOW_CELLS_WITH_ERRORS        0x0020
151 #define AVAP_ADD_AAL0_CRC10                 0x0040
152 #define AVAP_DSP                            0x8000 // [BCM635x Only]
153
154 // [BCM635x Only] Values for ATM_VCC_AAL2_CHANNEL_ID_PARMS ucVoiceRouting.
155 #define VOICE_ROUTE_MIPS                    0
156 #define VOICE_ROUTE_DSP                     2
157
158 // [BCM635x Only] Values for ATM_VCC_AAL2_CHANNEL_ID_PARMS ucFlags.
159 #define CID_USE_FRAME_MODE                  0x01
160
161 // Values for ATM_VCC_DATA_PARMS ucCircuitType.
162 #define CT_AAL0_PACKET                      0x02
163 #define CT_AAL0_CELL_CRC                    0x03
164 #define CT_OAM_F5_SEGMENT                   0x04
165 #define CT_OAM_F5_END_TO_END                0x05
166 #define CT_RM                               0x06
167 #define CT_AAL5                             0x07
168 #define CT_HDLC_PACKET                      0x08 // [BCM6348 Only]
169 #define CT_ANY_AAL2_MASK                    0x08 // [BCM635x Only]
170 #define CT_AAL2_ALARM                       0x08 // [BCM635x Only]
171 #define CT_AAL2_TYPE_3                      0x09 // [BCM635x Only]
172 #define CT_AAL2_TYPE_1                      0x0A // [BCM635x Only]
173 #define CT_AAL2_FRAME                       0x0B // [BCM635x Only]
174 #define CT_TRANSPARENT                      0x10
175 #define CT_OAM_F4_ANY                       0x20
176
177 // OAM F4 VCI values.
178 #define VCI_OAM_F4_SEGMENT                  3
179 #define VCI_OAM_F4_END_TO_END               4
180 #define VCI_RM                              6
181
182 // Values for ATM_VCC_DATA_PARMS ucFlags.
183 #define ATMDATA_CI                          0x04
184 #define ATMDATA_CLP                         0x08
185
186 // [BCM635x Only] DSP specific values.
187 #define DSP_VCID                            31
188
189 // ATM cell layer interface name
190 #define ATM_CELL_LAYER_IFNAME               "atm0"
191
192 // AAL5 CPCS layer interface name
193 #define AAL5_CPCS_LAYER_IFNAME              "cpcs0"
194
195 //**************************************************************************
196 // Type Definitions
197 //**************************************************************************
198
199 // Return status values
200 typedef enum BcmAtmStatus
201 {
202     STS_SUCCESS = 0,
203     STS_ERROR,
204     STS_STATE_ERROR,
205     STS_PARAMETER_ERROR,
206     STS_ALLOC_ERROR,
207     STS_RESOURCE_ERROR,
208     STS_IN_USE,
209     STS_VCC_DOWN,
210     STS_INTERFACE_DOWN,
211     STS_LINK_DOWN,
212     STS_NOT_FOUND,
213     STS_NOT_SUPPORTED,
214     STS_VCAM_MULT_MATCH_ERROR,
215     STS_CCAM_MULT_MATCH_ERROR,
216     STS_PKTERR_INVALID_VPI_VCI,
217     STS_PKTERR_PORT_NOT_ENABLED,
218     STS_PKTERR_HEC_ERROR,
219     STS_PKTERR_PTI_ERROR,
220     STS_PKTERR_RECEIVED_IDLE_CELL,
221     STS_PKTERR_CIRCUIT_TYPE_ERROR,
222     STS_PKTERR_OAM_RM_CRC_ERROR,
223     STS_PKTERR_GFC_ERROR,
224     STS_PKTERR_AAL5_AAL0_CRC_ERROR,
225     STS_PKTERR_AAL5_AAL0_SHORT_PKT_ERROR,
226     STS_PKTERR_AAL5_AAL0_LENGTH_ERROR,
227     STS_PKTERR_AAL5_AAL0_BIG_PKT_ERROR,
228     STS_PKTERR_AAL5_AAL0_SAR_TIMEOUT_ERROR,
229     STS_PKTERR_AAL2F_HEC_ERROR,
230     STS_PKTERR_AAL2F_SEQ_NUM_ERROR,
231     STS_PKTERR_AAL2F_PARITY_ERROR,
232     STS_PKTERR_AAL2F_CRC_ERROR,
233     STS_PKTERR_AAL2F_CAM_ERROR,
234     STS_PKTERR_AAL2F_BIG_PKT_ERROR,
235     STS_PKTERR_AAL2F_RAS_TIMEOUT_ERROR,
236     STS_PKTERR_AAL2F_SHORT_PKT_ERROR,
237     STS_PKTERR_AAL2F_LENGTH_MISMATCH_ERROR,
238     STS_PKTERR_AAL2V_HEC_ERROR,
239     STS_PKTERR_AAL2V_SEQ_NUM_ERROR,
240     STS_PKTERR_AAL2V_PARITY_ERROR,
241     STS_PKTERR_AAL2V_CRC_ERROR,
242     STS_PKTERR_AAL2V_CAM_ERROR,
243     STS_PKTERR_AAL2V_OSF_MISMATCH_ERROR,
244     STS_PKTERR_AAL2V_OSF_ERROR,
245     STS_PKTERR_AAL2V_HEC_OVERLAP_ERROR,
246     STS_PKTERR_AAL2V_BIG_PKT_ERROR,
247     STS_PKTERR_AAL2V_RAS_ERROR,
248     STS_PKTERR_AAL2V_UUI_ERROR
249 } BCMATM_STATUS;
250
251
252 // ATM_VCC_ADDR identifies a Virtual Channel Connection (VCC).
253 typedef struct AtmVccAddr
254 {
255     UINT32 ulInterfaceId;
256     UINT16 usVpi;
257     UINT16 usVci;
258 } ATM_VCC_ADDR, *PATM_VCC_ADDR;
259
260
261 // ATM_PORT_CFG contains ATM physical port configuration parameters.
262 typedef struct AtmPortCfg
263 {
264     UINT32 ulInterfaceId;
265     UINT8 ucPortType;
266     UINT8 ucPortAddr;
267     UINT8 ucReserved[2];
268 } ATM_PORT_CFG, *PATM_PORT_CFG;
269
270
271 // ATM_INITIALIZATION_PARMS contains ATM API module initialization parameters.
272 #define ID_ATM_INITIALIZATION_PARMS         2
273 typedef struct AtmInitialization
274 {
275     UINT32 ulStructureId;
276     UINT32 ulThreadPriority;
277     UINT16 usFreeCellQSize;
278     UINT16 usFreePktQSize;
279     UINT16 usFreePktQBufferSize;
280     UINT16 usFreePktQBufferOffset; // offset into buffer to start receiving data
281     UINT16 usReceiveCellQSize;
282     UINT16 usReceivePktQSize;
283     UINT8  ucTransmitFifoPriority; // [BCM635x Only]
284     UINT8  ucReserved;
285     UINT16 usAal5CpcsMaxSduLength;
286     UINT16 usAal2SscsMaxSsarSduLength; // [BCM635x Only]
287     ATM_PORT_CFG PortCfg[PHY_NUM_PORTS];
288 } ATM_INITIALIZATION_PARMS, *PATM_INITIALIZATION_PARMS;
289
290
291 // ATM_TRAFFIC_DESCR_PARM_ENTRY contains the fields needed to create a Traffic
292 // Descriptor Table parameter entry.
293 #define ID_ATM_TRAFFIC_DESCR_PARM_ENTRY     1
294 typedef struct AtmTrafficDescrParmEntry
295 {
296     UINT32 ulStructureId;
297     UINT32 ulTrafficDescrIndex;
298     UINT32 ulTrafficDescrType;
299     UINT32 ulTrafficDescrParm1;
300     UINT32 ulTrafficDescrParm2;
301     UINT32 ulTrafficDescrParm3;
302     UINT32 ulTrafficDescrParm4;
303     UINT32 ulTrafficDescrParm5;
304     UINT32 ulTrafficDescrRowStatus;
305     UINT32 ulServiceCategory;
306     UINT32 ulTrafficFrameDiscard;
307 } ATM_TRAFFIC_DESCR_PARM_ENTRY, *PATM_TRAFFIC_DESCR_PARM_ENTRY;
308
309
310 // ATM_INTERFACE_CFG contains configuration fields for an ATM interface.
311 #define ID_ATM_INTERFACE_CFG                3
312 typedef struct AtmInterfaceCfg
313 {
314     UINT32 ulStructureId;
315     UINT32 ulAtmInterfaceMaxVccs;
316     UINT32 ulAtmInterfaceConfVccs;
317     UINT32 ulAtmInterfaceMaxActiveVpiBits;
318     UINT32 ulAtmInterfaceMaxActiveVciBits;
319     UINT32 ulAtmInterfaceCurrentMaxVpiBits;
320     UINT32 ulAtmInterfaceCurrentMaxVciBits;
321     UINT32 ulIfAdminStatus;
322     UINT32 ulIfOperStatus;                  // read-only
323     UINT32 ulSendNullCells;
324     UINT32 ulTcScramble;
325     UINT32 ulPortType;                      // read-only
326     UINT32 ulIfLastChange;
327 } ATM_INTERFACE_CFG, *PATM_INTERFACE_CFG;
328
329
330 // ATM_VCC_TRANSMIT_QUEUE_PARMS contains fields for configuring an transmit
331 // queue.
332 #define ID_ATM_VCC_TRANSMIT_QUEUE_PARMS     1
333 typedef struct AtmVccTransmitQueueParms
334 {
335     UINT32 ulStructureId;
336     UINT32 ulSize;
337     UINT32 ulPriority;
338     UINT32 ulReserved;
339 } ATM_VCC_TRANSMIT_QUEUE_PARMS, *PATM_VCC_TRANSMIT_QUEUE_PARMS;
340
341
342 // ATM_AAL5_VCC_CFG contains configuration fields for an ATM AAL5 Virtual
343 // Channel Connection (VCC).
344 typedef struct AtmAal5VccCfg
345 {
346     UINT32 ulAtmVccEncapsType;
347     UINT32 ulAtmVccCpcsAcceptCorruptedPdus;
348 } ATM_AAL5_VCC_CFG, *PATM_AAL5_VCC_CFG;
349
350
351 // [BCM635x Only] ATM_AAL2_VCC_CFG contains configuration fields for an ATM
352 // AAL2 Virtual Channel Connection (VCC).
353 typedef struct AtmAal2VccCfg
354 {
355     UINT8 ucAal2CpsMaxMultiplexedChannels;
356     UINT8 ucAal2CpsMaxSduLength;
357     UINT8 ucAal2CpsCidLowerLimit;
358     UINT8 ucAal2CpsCidUpperLimit;
359     UINT8 ucAal2CpsOptimisation;
360     UINT8 ucReserved[3];
361 } ATM_AAL2_VCC_CFG, *PATM_AAL2_VCC_CFG;
362
363
364 // ATM_AAL0_VCC_CFG contains configuration fields for an ATM AAL0 Virtual
365 // Channel Connection (VCC).
366 typedef struct AtmAal0VccCfg
367 {
368     UINT8 ucReserved;
369     // Reserved for future use.
370 } ATM_AAL0_VCC_CFG, *PATM_AAL0_VCC_CFG;
371
372
373 // ATM_VCC_CFG contains configuration fields for an ATM Virtual Channel
374 // Connection (VCC).
375 #define ID_ATM_VCC_CFG                      2
376 #define TX_Q_PARM_SIZE                      8
377 typedef struct AtmVccCfg
378 {
379     UINT32 ulStructureId;
380     UINT32 ulAalType;
381     UINT32 ulAtmVclAdminStatus;
382     UINT32 ulAtmVclOperStatus;
383     UINT32 ulAtmVclLastChange;
384     UINT32 ulAtmVclReceiveTrafficDescrIndex;
385     UINT32 ulAtmVclTransmitTrafficDescrIndex;
386     UINT32 ulTransmitQParmsSize;
387     ATM_VCC_TRANSMIT_QUEUE_PARMS TransmitQParms[TX_Q_PARM_SIZE];
388     union
389     {
390         ATM_AAL5_VCC_CFG Aal5Cfg;
391         ATM_AAL2_VCC_CFG Aal2Cfg; // [BCM635x Only]
392         ATM_AAL0_VCC_CFG Aal0Cfg;
393     } u;
394 } ATM_VCC_CFG, *PATM_VCC_CFG;
395
396
397 // ATM_INTF_ATM_STATS contains statistics for the ATM layer of an interface.
398 typedef struct AtmIntfAtmStats
399 {
400     UINT32 ulIfInOctets;
401     UINT32 ulIfOutOctets;
402     UINT32 ulIfInErrors;
403     UINT32 ulIfInUnknownProtos;
404     UINT32 ulIfOutErrors;
405
406     // The following fields are added together to calculate ulIfInErrors.
407     UINT32 ulIfInHecErrors;
408
409     // The following fields are added together to calculate ulIfInUnknownProtos.
410     UINT32 ulIfInInvalidVpiVciErrors;
411     UINT32 ulIfInPortNotEnabledErrors;
412     UINT32 ulIfInPtiErrors;
413     UINT32 ulIfInIdleCells;
414     UINT32 ulIfInCircuitTypeErrors;
415     UINT32 ulIfInOamRmCrcErrors;
416     UINT32 ulIfInGfcErrors;
417 } ATM_INTF_ATM_STATS, *PATM_INTF_ATM_STATS;
418
419
420 // [BCM635x Only] ATM_INTF_ATM_STATS contains statistics for the TC layer.
421 typedef struct AtmIntfTcStats
422 {
423     UINT32 ulTcInDataCells;
424     UINT32 ulTcInTotalCells;
425     UINT32 ulTcInHecErrors;
426     UINT32 ulTcInOcdEvents;
427     UINT32 ulTcAlarmState;
428 } ATM_INTF_TC_STATS, *PATM_INTF_TC_STATS;
429
430
431 // ATM_INTF_AAL5_AAL0_STATS contains statistics for all AAL5/AAL0 VCCs on an
432 // ATM interface.
433 typedef struct AtmIntfAal5Aal0Stats
434 {
435     UINT32 ulIfInOctets;
436     UINT32 ulIfOutOctets;
437     UINT32 ulIfInUcastPkts;
438     UINT32 ulIfOutUcastPkts;
439     UINT32 ulIfInErrors;
440     UINT32 ulIfOutErrors;
441     UINT32 ulIfInDiscards;
442     UINT32 ulIfOutDiscards;
443 } ATM_INTF_AAL5_AAL0_STATS, *PATM_INTF_AAL5_AAL0_STATS;
444
445
446 // [BCM635x Only] ATM_INTF_AAL2_STATS contains statistics for all AAL2 VCCs
447 // on an ATM interface.
448 typedef struct AtmIntfAal2Stats
449 {
450     UINT32 ulIfInOctets;
451     UINT32 ulIfOutOctets;
452     UINT32 ulIfInUcastPkts;
453     UINT32 ulIfOutUcastPkts;
454     UINT32 ulIfInErrors;
455     UINT32 ulIfOutErrors;
456     UINT32 ulIfInDiscards;
457     UINT32 ulIfOutDiscards;
458 } ATM_INTF_AAL2_STATS, *PATM_INTF_AAL2_STATS;
459
460
461 // ATM_INTERFACE_STATS contains statistics for an ATM interface.
462 #define ID_ATM_INTERFACE_STATS              1
463 typedef struct AtmInterfaceStats
464 {
465     UINT32 ulStructureId;
466     ATM_INTF_ATM_STATS       AtmIntfStats;
467     ATM_INTF_TC_STATS        TcIntfStats;   // [BCM635x Only]
468     ATM_INTF_AAL5_AAL0_STATS Aal5IntfStats;
469     ATM_INTF_AAL2_STATS      Aal2IntfStats; // [BCM635x Only]
470     ATM_INTF_AAL5_AAL0_STATS Aal0IntfStats;
471 } ATM_INTERFACE_STATS, *PATM_INTERFACE_STATS;
472
473
474 // ATM_VCC_AAL5_STATS contains statistics for an AAL5 VCC.
475 typedef struct AtmVccAal5Stats
476 {
477     UINT32 ulAal5VccCrcErrors;
478     UINT32 ulAal5VccSarTimeOuts;
479     UINT32 ulAal5VccOverSizedSdus;
480     UINT32 ulAal5VccShortPacketErrors;
481     UINT32 ulAal5VccLengthErrors;
482 } ATM_VCC_AAL5_STATS, *PATM_VCC_AAL5_STATS;
483
484
485 // [BCM635x Only] ATM_VCC_AAL2_STATS contains statistics for an AAL2 VCC.
486 typedef struct AtmVccAal2Stats
487 {
488     UINT32 ulAal2CpsInPkts;
489     UINT32 ulAal2CpsOutPkts;
490     UINT32 ulAal2CpsParityErrors;
491     UINT32 ulAal2CpsSeqNumErrors;
492     UINT32 ulAal2CpsOsfMismatchErrors;
493     UINT32 ulAal2CpsOsfErrors;
494     UINT32 ulAal2CpsHecOverlapErrors;
495     UINT32 ulAal2CpsHecErrors;
496     UINT32 ulAal2CpsOversizedSduErrors;
497     UINT32 ulAal2CpsReassemblyErrors;
498     UINT32 ulAal2CpsUuiErrors;
499     UINT32 ulAal2CpsCidErrors;
500     UINT32 ulAal2SscsOversizedSssarSduErrors;
501     UINT32 ulAal2SscsSssarRasTimerExipiryErrors;
502     UINT32 ulAal2SscsUndersizedSstedPduErrors;
503     UINT32 ulAal2SscsSstedPduLengthMismatchErrors;
504     UINT32 ulAal2SscsSstedCrcMismatchErrors;
505 } ATM_VCC_AAL2_STATS, *PATM_VCC_AAL2_STATS;
506
507
508 // ATM_VCC_AAL0PKT_STATS contains statistics for an AAL0 Packet VCC.
509 typedef struct AtmVccAal0PktStats
510 {
511     UINT32 ulAal0VccSarTimeOuts;
512     UINT32 ulAal0VccOverSizedSdus;
513 } ATM_VCC_AAL0PKT_STATS, *PATM_VCC_AAL0PKT_STATS;
514
515
516 // ATM_VCC_AAL0CELL_STATS contains statistics for an AAL0 Cell with CRC VCC.
517 typedef struct AtmVccAal0CellStats
518 {
519     UINT32 ulAal0VccCrcErrors;
520 } ATM_VCC_AAL0CELL_STATS, *PATM_VCC_AAL0CELL_STATS;
521
522
523 // ATM_VCC_STATS contains statistics for a VCC.
524 #define ID_ATM_VCC_STATS                    1
525 typedef struct AtmVccStatistics
526 {
527     UINT32 ulStructureId;
528     UINT32 ulAalType;
529     union
530     {
531         ATM_VCC_AAL5_STATS AtmVccAal5Stats;
532         ATM_VCC_AAL2_STATS AtmVccAal2Stats; // [BCM635x Only]
533         ATM_VCC_AAL0PKT_STATS AtmVccAal0PktStats;
534         ATM_VCC_AAL0CELL_STATS AtmVccAal0CellStats;
535     } u;
536 } ATM_VCC_STATS, *PATM_VCC_STATS;
537
538
539 // ATM_INTERFACE_LINK_INFO contains fields for the physical link that the
540 // ATM interface is using.
541 #define ID_ATM_INTERFACE_LINK_INFO          1
542 typedef struct AtmInterfaceLinkInfo
543 {
544     UINT32 ulStructureId;
545     UINT32 ulLinkState;
546     UINT32 ulLineRate;
547     UINT32 ulReserved[2];
548 } ATM_INTERFACE_LINK_INFO, *PATM_INTERFACE_LINK_INFO;
549
550
551 // AN_INTF_CHANGE_PARMS contains notification fields that passed to an
552 // application callback function when the ATM interface goes up or down.
553 #define ID_AN_INTF_CHANGE_PARMS             1
554 typedef struct AnIntfChangeParms
555 {
556     UINT32 ulInterfaceId;
557     UINT32 ulInterfaceState;
558     UINT32 ulInterfaceLineRate;
559 } AN_INTF_CHANGE_PARMS, *PAN_INTF_CHANGE_PARMS;
560
561
562 // ATM_NOTIFY_PARMS contains notification fields that passed to an application
563 // callback function when an ATM notification event occurs.
564 typedef struct AtmNotifyParms
565 {
566     UINT32 ulNotifyType;
567     union
568     {
569         AN_INTF_CHANGE_PARMS IntfChangeParms;
570
571         // Other fields and structures that are specific
572         // to the type of notification are declared here.
573     } u;
574 } ATM_NOTIFY_PARMS, *PATM_NOTIFY_PARMS;
575
576 typedef void (*FN_NOTIFY_CB) (PATM_NOTIFY_PARMS pNotifyParms);
577
578
579 // ATM_VCC_ATTACH_PARMS contains fields for attaching to a VCC.  It is used
580 // by all BcmAtm_Attach... functions.
581 struct AtmVccDataParms;
582 typedef void (*FN_RECEIVE_CB) (UINT32 ulHandle, PATM_VCC_ADDR pVccAddr,
583     struct AtmVccDataParms *pDataParms, UINT32 ulParmReceiveData);
584
585 #define ID_ATM_VCC_ATTACH_PARMS             1
586 typedef struct AtmAttachParms
587 {
588     UINT32 ulStructureId;
589     UINT32 ulFlags;
590     FN_RECEIVE_CB pFnReceiveDataCb;
591     UINT32 ulParmReceiveData;
592     ATM_VCC_TRANSMIT_QUEUE_PARMS *pTransmitQParms;
593     UINT32 ulTransmitQParmsSize;
594     UINT32 ulHandle;
595     UINT32 ulReserved;
596 } ATM_VCC_ATTACH_PARMS, *PATM_VCC_ATTACH_PARMS;
597
598
599 // [BCM635x Only] ATM_VCC_AAL2_CHANNEL_ID_PARMS contains fields for
600 // configuring an transmit queue.
601 #define ID_ATM_VCC_AAL2_CHANNEL_ID_PARMS    1
602 typedef struct AtmVccAal2ChannelIdParms
603 {
604     UINT32 ulStructureId;
605     UINT8 ucChannelId;
606     UINT8 ucVoiceRouting;
607     UINT8 ucFlags;
608     UINT8 ucReserved[5];
609 } ATM_VCC_AAL2_CHANNEL_ID_PARMS, *PATM_VCC_AAL2_CHANNEL_ID_PARMS;
610
611
612 // ATM_BUFFER contains fields for passing data to, and receive data from, the
613 // ATM API.
614 typedef struct AtmBuffer
615 {
616     struct AtmBuffer *pNextAtmBuf;
617     UINT8 *pDataBuf;
618     UINT32 ulDataLen;
619     UINT16 usDataOffset;
620     UINT16 usReserved;
621     UINT32 ulReserved;
622 } ATM_BUFFER, *PATM_BUFFER;
623
624
625 // ATM_VCC_DATA_PARMS contains fields for sending or receiving data on a VCC.
626 // It is used by all BcmAtm_Send... and receive functions.
627 typedef void (*FN_FREE_DATA_PARMS) (struct AtmVccDataParms *pDataParms);
628
629 #define ID_ATM_VCC_DATA_PARMS               2
630 typedef struct AtmVccDataParms
631 {
632     UINT32 ulStructureId;
633     UINT8 ucCircuitType;
634     UINT8 ucAal2ChannelId; // [BCM635x Only]
635     UINT8 ucUuData8;
636     UINT8 ucUuData5;
637     UINT8 ucFlags;
638     UINT8 ucSendPriority;
639     UINT8 ucReserved[2];
640     BCMATM_STATUS baReceiveStatus;
641     PATM_BUFFER pAtmBuffer;
642     FN_FREE_DATA_PARMS pFnFreeDataParms;
643     UINT32 ulParmFreeDataParms;
644     struct AtmVccDataParms *pApplicationLink;
645     UINT32 ulApplicationDefined[2];
646 } ATM_VCC_DATA_PARMS, *PATM_VCC_DATA_PARMS;
647
648
649 //**************************************************************************
650 // Function Prototypes
651 //**************************************************************************
652
653 BCMATM_STATUS BcmAtm_Initialize( PATM_INITIALIZATION_PARMS pInitValues );
654 BCMATM_STATUS BcmAtm_Uninitialize( void );
655 BCMATM_STATUS BcmAtm_GetInterfaceId( UINT8 ucPhyPort, UINT32 *pulInterfaceId );
656 BCMATM_STATUS BcmAtm_GetTrafficDescrTableSize(UINT32 *pulTrafficDescrTableSize);
657 BCMATM_STATUS BcmAtm_GetTrafficDescrTable( PATM_TRAFFIC_DESCR_PARM_ENTRY
658     pTrafficDescTable, UINT32 ulTrafficDescrTableSize );
659 BCMATM_STATUS BcmAtm_SetTrafficDescrTable( PATM_TRAFFIC_DESCR_PARM_ENTRY
660     pTrafficDescTable, UINT32  ulTrafficDescrTableSize );
661 BCMATM_STATUS BcmAtm_GetInterfaceCfg( UINT32 ulInterfaceId, PATM_INTERFACE_CFG
662     pInterfaceCfg );
663 BCMATM_STATUS BcmAtm_SetInterfaceCfg( UINT32 ulInterfaceId, PATM_INTERFACE_CFG
664     pInterfaceCfg );
665 BCMATM_STATUS BcmAtm_GetVccCfg( PATM_VCC_ADDR pVccAddr, PATM_VCC_CFG pVccCfg );
666 BCMATM_STATUS BcmAtm_SetVccCfg( PATM_VCC_ADDR pVccAddr, PATM_VCC_CFG pVccCfg );
667 BCMATM_STATUS BcmAtm_GetVccAddrs( UINT32 ulInterfaceId, PATM_VCC_ADDR pVccAddrs,
668     UINT32 ulNumVccs, UINT32 *pulNumReturned );
669 BCMATM_STATUS BcmAtm_GetInterfaceStatistics( UINT32 ulInterfaceId,
670     PATM_INTERFACE_STATS pStatistics, UINT32 ulReset );
671 BCMATM_STATUS BcmAtm_GetVccStatistics( PATM_VCC_ADDR pVccAddr, PATM_VCC_STATS
672     pVccStatistics, UINT32 ulReset );
673 BCMATM_STATUS BcmAtm_SetInterfaceLinkInfo( UINT32 ulInterfaceId,
674     PATM_INTERFACE_LINK_INFO pInterfaceCfg );
675 BCMATM_STATUS BcmAtm_SetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb );
676 BCMATM_STATUS BcmAtm_ResetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb );
677 BCMATM_STATUS BcmAtm_AttachVcc( PATM_VCC_ADDR pVccAddr, PATM_VCC_ATTACH_PARMS
678     pAttachParms );
679 BCMATM_STATUS BcmAtm_AttachMgmtCells( UINT32 ulInterfaceId,
680     PATM_VCC_ATTACH_PARMS pAttachParms );
681 BCMATM_STATUS BcmAtm_AttachTransparent( UINT32 ulInterfaceId,
682     PATM_VCC_ATTACH_PARMS pAttachParms );
683 BCMATM_STATUS BcmAtm_Detach( UINT32 ulHandle );
684 BCMATM_STATUS BcmAtm_SetAal2ChannelIds( UINT32 ulHandle,
685     PATM_VCC_AAL2_CHANNEL_ID_PARMS pChannelIdParms, UINT32
686     ulNumChannelIdParms ); // [BCM635x Only]
687 BCMATM_STATUS BcmAtm_SendVccData( UINT32 ulHandle,
688     PATM_VCC_DATA_PARMS pDataParms );
689 BCMATM_STATUS BcmAtm_SendMgmtData( UINT32 ulHandle, PATM_VCC_ADDR pVccAddr,
690     PATM_VCC_DATA_PARMS pDataParms );
691 BCMATM_STATUS BcmAtm_SendTransparentData( UINT32 ulHandle, UINT32 ulInterfaceId,
692     PATM_VCC_DATA_PARMS pDataParms );
693
694 #if defined(__cplusplus)
695 }
696 #endif
697
698 #endif // _BCMATMAPI_H_
699