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