1 /***************************************************************************
2 * Broadcom Corp. Confidential
3 * Copyright 2001 Broadcom Corp. All Rights Reserved.
5 * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
6 * SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM.
7 * YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
8 * SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
10 ***************************************************************************
11 * File Name : AtmApiUser.c
13 * Description: This file contains the implementation of the user mode
16 * Updates : 08/27/2001 lat. Created.
17 ***************************************************************************/
20 typedef unsigned char UINT8;
21 typedef unsigned short UINT16;
22 typedef unsigned long UINT32;
29 #include <fcntl.h> /* open */
30 #include <unistd.h> /* exit */
31 #include <sys/ioctl.h> /* ioctl */
32 #include "atmapidrv.h"
39 /***************************************************************************
40 * Function Name: OpenBcmAtm
41 * Description : Opens the bcmatm device.
42 * Returns : device handle if successsful or -1 if error
43 ***************************************************************************/
44 static int OpenBcmAtm( void )
46 int nFd = open( "/dev/bcmatm0", O_RDWR );
49 printf( "BcmAtm_Initialize: open error %d\n", errno );
54 #ifdef BUILD_SNMP_ATM_MIB
55 /***************************************************************************
56 * Function Name: BcmAtm_Initialize
57 * Description : Initializes the object.
58 * Returns : STS_SUCCESS if successful or error status.
59 ***************************************************************************/
60 BCMATM_STATUS BcmAtm_Initialize( PATM_INITIALIZATION_PARMS pInitParms )
62 ATMDRV_INITIALIZE Arg = {pInitParms, STS_ERROR};
65 g_nAtmFd = OpenBcmAtm();
68 ioctl( g_nAtmFd, ATMIOCTL_INITIALIZE, &Arg );
70 Arg.baStatus = STS_STATE_ERROR;
72 return( Arg.baStatus );
73 } // BcmAtm_Initialize
76 /***************************************************************************
77 * Function Name: BcmAtm_Uninitialize
78 * Description : Clean up resources allocated during BcmAtm_Initialize.
79 * Returns : STS_SUCCESS if successful or error status.
80 ***************************************************************************/
81 BCMATM_STATUS BcmAtm_Uninitialize( void )
83 ATMDRV_STATUS_ONLY Arg = {STS_ERROR};
86 g_nAtmFd = OpenBcmAtm();
90 ioctl( g_nAtmFd, ATMIOCTL_UNINITIALIZE, &Arg );
95 Arg.baStatus = STS_STATE_ERROR;
97 return( Arg.baStatus );
98 } // BcmAtm_Uninitialize
99 #endif /* BUILD_SNMP_ATM_MIB */
101 /***************************************************************************
102 * Function Name: BcmAtm_GetInterfaceId
103 * Description : Returns the interface id for the specified ATM port.
104 * Returns : STS_SUCCESS if successful or error status.
105 ***************************************************************************/
106 BCMATM_STATUS BcmAtm_GetInterfaceId( UINT8 ucPhyPort,
107 UINT32 *pulInterfaceId )
109 ATMDRV_INTERFACE_ID Arg = {ucPhyPort,{0,0,0}, 0, STS_ERROR};
112 g_nAtmFd = OpenBcmAtm();
116 Arg.ulInterfaceId = *pulInterfaceId;
117 ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_ID, &Arg );
118 *pulInterfaceId = Arg.ulInterfaceId;
121 Arg.baStatus = STS_STATE_ERROR;
123 return( Arg.baStatus );
124 } // BcmAtm_GetInterfaceId
127 #ifdef BUILD_SNMP_ATM_MIB
128 /***************************************************************************
129 * Function Name: BcmAtm_GetTrafficDescrTableSize
130 * Description : Returns the number of entries in the Traffic Descriptor
132 * Returns : STS_SUCCESS if successful or error status.
133 ***************************************************************************/
134 BCMATM_STATUS BcmAtm_GetTrafficDescrTableSize(
135 UINT32 *pulTrafficDescrTableSize )
137 ATMDRV_TRAFFIC_DESCR_TABLE_SIZE Arg = {0, STS_ERROR};
140 g_nAtmFd = OpenBcmAtm();
144 ioctl( g_nAtmFd, ATMIOCTL_GET_TRAFFIC_DESCR_TABLE_SIZE, &Arg );
145 *pulTrafficDescrTableSize = Arg.ulTrafficDescrTableSize;
148 Arg.baStatus = STS_STATE_ERROR;
150 return( Arg.baStatus );
151 } // BcmAtm_GetTrafficDescrTableSize
154 /***************************************************************************
155 * Function Name: BcmAtm_GetTrafficDescrTable
156 * Description : Returns the Traffic Descriptor Table.
157 * Returns : STS_SUCCESS if successful or error status.
158 ***************************************************************************/
159 BCMATM_STATUS BcmAtm_GetTrafficDescrTable(
160 PATM_TRAFFIC_DESCR_PARM_ENTRY pTrafficDescrTable,
161 UINT32 ulTrafficDescrTableSize )
163 ATMDRV_TRAFFIC_DESCR_TABLE Arg =
164 {pTrafficDescrTable, ulTrafficDescrTableSize, STS_ERROR};
167 g_nAtmFd = OpenBcmAtm();
170 ioctl( g_nAtmFd, ATMIOCTL_GET_TRAFFIC_DESCR_TABLE, &Arg );
172 Arg.baStatus = STS_STATE_ERROR;
174 return( Arg.baStatus );
175 } // BcmAtm_GetTrafficDescrTable
178 /***************************************************************************
179 * Function Name: BcmAtm_SetTrafficDescrTable
180 * Description : Saves the supplied Traffic Descriptor Table to a private
182 * Returns : STS_SUCCESS if successful or error status.
183 ***************************************************************************/
184 BCMATM_STATUS BcmAtm_SetTrafficDescrTable(
185 PATM_TRAFFIC_DESCR_PARM_ENTRY pTrafficDescrTable,
186 UINT32 ulTrafficDescrTableSize )
188 ATMDRV_TRAFFIC_DESCR_TABLE Arg =
189 {pTrafficDescrTable, ulTrafficDescrTableSize, STS_ERROR};
192 g_nAtmFd = OpenBcmAtm();
195 ioctl( g_nAtmFd, ATMIOCTL_SET_TRAFFIC_DESCR_TABLE, &Arg );
197 Arg.baStatus = STS_STATE_ERROR;
199 return( Arg.baStatus );
200 } // BcmAtm_SetTrafficDescrTable
201 #endif /* BUILD_SNMP_ATM_MIB */
203 /***************************************************************************
204 * Function Name: BcmAtm_GetInterfaceCfg
205 * Description : Calls the interface object for the specified interface id
206 * to return the interface configuration record.
207 * Returns : STS_SUCCESS if successful or error status.
208 ***************************************************************************/
209 BCMATM_STATUS BcmAtm_GetInterfaceCfg( UINT32 ulInterfaceId,
210 PATM_INTERFACE_CFG pInterfaceCfg )
212 ATMDRV_INTERFACE_CFG Arg = {ulInterfaceId, pInterfaceCfg, STS_ERROR};
215 g_nAtmFd = OpenBcmAtm();
218 ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_CFG, &Arg );
220 Arg.baStatus = STS_STATE_ERROR;
222 return( Arg.baStatus );
223 } // BcmAtm_GetInterfaceCfg
226 /***************************************************************************
227 * Function Name: BcmAtm_SetInterfaceCfg
228 * Description : Calls the interface object for the specified interface id
229 * to save a new interface configuration record.
230 * Returns : STS_SUCCESS if successful or error status.
231 ***************************************************************************/
232 BCMATM_STATUS BcmAtm_SetInterfaceCfg( UINT32 ulInterfaceId,
233 PATM_INTERFACE_CFG pInterfaceCfg )
235 ATMDRV_INTERFACE_CFG Arg = {ulInterfaceId, pInterfaceCfg, STS_ERROR};
238 g_nAtmFd = OpenBcmAtm();
241 ioctl( g_nAtmFd, ATMIOCTL_SET_INTERFACE_CFG, &Arg );
243 Arg.baStatus = STS_STATE_ERROR;
245 return( Arg.baStatus );
246 } // BcmAtm_SetInterfaceCfg
248 #ifdef BUILD_SNMP_ATM_MIB
249 /***************************************************************************
250 * Function Name: BcmAtm_GetVccCfg
251 * Description : Returns the VCC configuration record for the specified VCC
253 * Returns : STS_SUCCESS if successful or error status.
254 ***************************************************************************/
255 BCMATM_STATUS BcmAtm_GetVccCfg( PATM_VCC_ADDR pVccAddr,
256 PATM_VCC_CFG pVccCfg )
258 ATMDRV_VCC_CFG Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
259 pVccAddr->usVci}, pVccCfg, STS_ERROR};
262 g_nAtmFd = OpenBcmAtm();
265 ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_CFG, &Arg );
267 Arg.baStatus = STS_STATE_ERROR;
269 return( Arg.baStatus );
270 } // BcmAtm_GetVccCfg
273 /***************************************************************************
274 * Function Name: BcmAtm_SetVccCfg
275 * Description : Saves the VCC configuration record for the specified VCC
277 * Returns : STS_SUCCESS if successful or error status.
278 ***************************************************************************/
279 BCMATM_STATUS BcmAtm_SetVccCfg( PATM_VCC_ADDR pVccAddr,
280 PATM_VCC_CFG pVccCfg )
282 ATMDRV_VCC_CFG Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
283 pVccAddr->usVci}, pVccCfg, STS_ERROR};
286 g_nAtmFd = OpenBcmAtm();
289 ioctl( g_nAtmFd, ATMIOCTL_SET_VCC_CFG, &Arg );
291 Arg.baStatus = STS_STATE_ERROR;
293 return( Arg.baStatus );
294 } // BcmAtm_SetVccCfg
297 /***************************************************************************
298 * Function Name: BcmAtm_GetVccAddrs
299 * Description : Returns the configured VCC addresses for an interface.
300 * Returns : STS_SUCCESS if successful or error status.
301 ***************************************************************************/
302 BCMATM_STATUS BcmAtm_GetVccAddrs( UINT32 ulInterfaceId, PATM_VCC_ADDR pVccAddrs,
303 UINT32 ulNumVccs, UINT32 *pulNumReturned )
305 ATMDRV_VCC_ADDRS Arg = {ulInterfaceId, pVccAddrs, ulNumVccs, 0, STS_ERROR};
308 g_nAtmFd = OpenBcmAtm();
312 ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_ADDRS, &Arg );
313 *pulNumReturned = Arg.ulNumReturned;
316 Arg.baStatus = STS_STATE_ERROR;
318 return( Arg.baStatus );
319 } // BcmAtm_GetVccAddrs
322 /***************************************************************************
323 * Function Name: BcmAtm_GetInterfaceStatistics
324 * Description : Returns the statistics record for an interface.
325 * Returns : STS_SUCCESS if successful or error status.
326 ***************************************************************************/
327 BCMATM_STATUS BcmAtm_GetInterfaceStatistics( UINT32 ulInterfaceId,
328 PATM_INTERFACE_STATS pStatistics, UINT32 ulReset )
330 ATMDRV_INTERFACE_STATISTICS Arg = {ulInterfaceId, pStatistics, ulReset,
334 g_nAtmFd = OpenBcmAtm();
337 ioctl( g_nAtmFd, ATMIOCTL_GET_INTERFACE_STATISTICS, &Arg );
339 Arg.baStatus = STS_STATE_ERROR;
341 return( Arg.baStatus );
342 } // BcmAtm_GetInterfaceStatistics
345 /***************************************************************************
346 * Function Name: BcmAtm_GetVccStatistics
347 * Description : Returns the VCC statistics record for the specified VCC
349 * Returns : STS_SUCCESS if successful or error status.
350 ***************************************************************************/
351 BCMATM_STATUS BcmAtm_GetVccStatistics( PATM_VCC_ADDR pVccAddr,
352 PATM_VCC_STATS pVccStatistics, UINT32 ulReset )
354 ATMDRV_VCC_STATISTICS Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
355 pVccAddr->usVci}, pVccStatistics, ulReset, STS_ERROR};
358 g_nAtmFd = OpenBcmAtm();
361 ioctl( g_nAtmFd, ATMIOCTL_GET_VCC_STATISTICS, &Arg );
363 Arg.baStatus = STS_STATE_ERROR;
365 return( Arg.baStatus );
366 } // BcmAtm_GetVccStatistics
369 /***************************************************************************
370 * Function Name: BcmAtm_SetInterfaceLinkInfo
371 * Description : Calls the interface object for the specified interface id
372 * to set physical link information.
373 * Returns : STS_SUCCESS if successful or error status.
374 ***************************************************************************/
375 BCMATM_STATUS BcmAtm_SetInterfaceLinkInfo( UINT32 ulInterfaceId,
376 PATM_INTERFACE_LINK_INFO pLi )
378 ATMDRV_INTERFACE_LINK_INFO Arg = {ulInterfaceId, {pLi->ulStructureId,
379 pLi->ulLinkState, pLi->ulLineRate}, STS_ERROR};
382 g_nAtmFd = OpenBcmAtm();
385 ioctl( g_nAtmFd, ATMIOCTL_SET_INTERFACE_LINK_INFO, &Arg );
387 Arg.baStatus = STS_STATE_ERROR;
389 return( Arg.baStatus );
390 } // BcmAtm_SetInterfaceLinkInfo
393 /***************************************************************************
394 * Function Name: BcmAtm_SetNotifyCallback
395 * Description : Adds the specified callback function to the list of
396 * functions that are called when an ATM notification
398 * Returns : STS_SUCCESS if successful or error status.
399 ***************************************************************************/
400 BCMATM_STATUS BcmAtm_SetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb )
402 return( STS_NOT_SUPPORTED );
403 } // BcmAtm_SetNotifyCallback
406 /***************************************************************************
407 * Function Name: BcmAtm_ResetNotifyCallback
408 * Description : Removes the specified callback function from the list of
409 * functions that are called when an ATM notification
411 * Returns : STS_SUCCESS if successful or error status.
412 ***************************************************************************/
413 BCMATM_STATUS BcmAtm_ResetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb )
415 return( STS_NOT_SUPPORTED );
416 } // BcmAtm_ResetNotifyCallback
419 /***************************************************************************
420 * Function Name: BcmAtm_AttachVcc
421 * Description : Attaches an application to a VCC.
422 * Returns : STS_SUCCESS if successful or error status.
423 ***************************************************************************/
424 BCMATM_STATUS BcmAtm_AttachVcc( PATM_VCC_ADDR pVccAddr,
425 PATM_VCC_ATTACH_PARMS pAttachParms )
427 return( STS_NOT_SUPPORTED );
428 } // BcmAtm_AttachVcc
431 /***************************************************************************
432 * Function Name: BcmAtm_AttachMgmtCells
433 * Description : Attaches an application to send and receive ATM managment
435 * Returns : STS_SUCCESS if successful or error status.
436 ***************************************************************************/
437 BCMATM_STATUS BcmAtm_AttachMgmtCells( UINT32 ulInterfaceId,
438 PATM_VCC_ATTACH_PARMS pAttachParms )
440 return( STS_NOT_SUPPORTED );
441 } // BcmAtm_AttachMgmtCells
444 /***************************************************************************
445 * Function Name: BcmAtm_AttachTransparent
446 * Description : Attaches an application to send and receive transparent
448 * Returns : STS_SUCCESS if successful or error status.
449 ***************************************************************************/
450 BCMATM_STATUS BcmAtm_AttachTransparent( UINT32 ulInterfaceId,
451 PATM_VCC_ATTACH_PARMS pAttachParms )
453 return( STS_NOT_SUPPORTED );
454 } // BcmAtm_AttachTransparent
457 /***************************************************************************
458 * Function Name: BcmAtm_Detach
459 * Description : Ends an application attachment to a VCC, management cells
460 * or transparent cells.
461 * Returns : STS_SUCCESS if successful or error status.
462 ***************************************************************************/
463 BCMATM_STATUS BcmAtm_Detach( UINT32 ulHandle )
465 return( STS_NOT_SUPPORTED );
469 /***************************************************************************
470 * Function Name: BcmAtm_SetAal2ChannelIds
471 * Description : Specifies a list of AAL2 channel ids that an application
472 * wants to send and receive data for an AAL2 VCC.
473 * Returns : STS_SUCCESS if successful or error status.
474 ***************************************************************************/
475 BCMATM_STATUS BcmAtm_SetAal2ChannelIds( UINT32 ulHandle,
476 PATM_VCC_AAL2_CHANNEL_ID_PARMS pChannelIdParms, UINT32 ulNumChannelIdParms )
478 return( STS_NOT_SUPPORTED );
479 } // BcmAtm_SetAal2ChannelIds
482 /***************************************************************************
483 * Function Name: BcmAtm_SendVccData
484 * Description : Sends data on a VCC.
485 * Returns : STS_SUCCESS if successful or error status.
486 ***************************************************************************/
487 BCMATM_STATUS BcmAtm_SendVccData( UINT32 ulHandle,
488 PATM_VCC_DATA_PARMS pDataParms )
490 return( STS_NOT_SUPPORTED );
491 } // BcmAtm_SendVccData
494 /***************************************************************************
495 * Function Name: BcmAtm_SendMgmtData
496 * Description : Sends a managment cell.
497 * Returns : STS_SUCCESS if successful or error status.
498 ***************************************************************************/
499 BCMATM_STATUS BcmAtm_SendMgmtData( UINT32 ulHandle,
500 PATM_VCC_ADDR pVccAddr, PATM_VCC_DATA_PARMS pDataParms )
502 return( STS_NOT_SUPPORTED );
503 } // BcmAtm_SendMgmtData
506 /***************************************************************************
507 * Function Name: BcmAtm_SendTransparentData
508 * Description : Sends a transparent ATM cell.
509 * Returns : STS_SUCCESS if successful or error status.
510 ***************************************************************************/
511 BCMATM_STATUS BcmAtm_SendTransparentData( UINT32 ulHandle,
512 UINT32 ulInterfaceId, PATM_VCC_DATA_PARMS pDataParms )
514 return( STS_NOT_SUPPORTED );
515 } // BcmAtm_SendTransparentData
518 /***************************************************************************
519 * Function Name: AtmDrv_DoTest
520 * Description : Undocumented entry point that executes a loopback test.
521 * Returns : STS_SUCCESS if successful or error status.
522 ***************************************************************************/
523 BCMATM_STATUS AtmDrv_DoTest( PATM_VCC_ADDR pVccAddr, UINT32 ulNumToSend )
525 ATMDRV_TEST Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
526 pVccAddr->usVci}, ulNumToSend, STS_ERROR};
529 g_nAtmFd = OpenBcmAtm();
532 ioctl( g_nAtmFd, ATMIOCTL_TEST, &Arg );
534 Arg.baStatus = STS_STATE_ERROR;
536 return( Arg.baStatus );
540 BCMATM_STATUS BcmAtm_SendOamLoopbackTest(UINT32 type, PATM_VCC_ADDR pVccAddr)
542 ATMDRV_OAM_LOOPBACK Arg = {{pVccAddr->ulInterfaceId, pVccAddr->usVpi,
543 pVccAddr->usVci}, type, STS_ERROR};
545 g_nAtmFd = OpenBcmAtm();
548 ioctl( g_nAtmFd, ATMIOCTL_OAM_LOOPBACK_TEST, &Arg );
550 Arg.baStatus = STS_STATE_ERROR;
552 return( Arg.baStatus );
553 } //BcmAtm_SendOamLoopbackTest
554 #endif /* BUILD_SNMP_ATM_MIB */