openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

builtins.c (2880B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        builtins.c
      8  * Purpose:     board driver loader
      9  */
     10 
     11 #include <sal/core/libc.h>
     12 #include <bcm/error.h>
     13 #include <board/board.h>
     14 #include <board/driver.h>
     15 
     16 /* Built in driver list */
     17 STATIC board_driver_t *_board_builtin_driver[] = {
     18 #if defined(INCLUDE_BOARD_GENERIC)
     19     &generic_board,
     20 #endif /* INCLUDE_BOARD_GENERIC */
     21 #if defined(INCLUDE_BOARD_BCM956504R48)
     22     &bcm956504r48_board,
     23 #endif /* INCLUDE_BOARD_BCM956504R48 */
     24 #if defined(INCLUDE_BOARD_BCM956504R24)
     25     &bcm956504r24_board,
     26 #endif
     27 #if defined(INCLUDE_BOARD_BCM988230)
     28     &bcm988230_board,
     29 #endif /* INCLUDE_BOARD_BCM988230 */
     30     /* keep as last */
     31     &default_board
     32 };
     33 
     34 
     35 /*
     36  * Function:
     37  *     board_driver_builtins_add
     38  * Purpose:
     39  *     Registers all known SDK provided board drivers.
     40  * Parameters:
     41  *     none
     42  * Returns:
     43  *     BCM_E_NONE - success
     44  *     BCM_E_XXX  - failed
     45  */
     46 int
     47 board_driver_builtins_add(void)
     48 {
     49     int i, rv = BCM_E_NOT_FOUND;
     50 
     51     for (i=0; i<COUNTOF(_board_builtin_driver); i++) {
     52         rv = board_driver_add(_board_builtin_driver[i]);
     53         if (BCM_FAILURE(rv) && rv != BCM_E_EXISTS) {
     54             break;
     55         }
     56     }
     57 
     58     return rv;
     59 }
     60 
     61 /*
     62  * Function:
     63  *     board_driver_builtins_delete
     64  * Purpose:
     65  *     Unregisters all known SDK provided board drivers.
     66  * Parameters:
     67  *     none
     68  * Returns:
     69  *     BCM_E_NONE - success
     70  *     BCM_E_XXX  - failed
     71  */
     72 int
     73 board_driver_builtins_delete(void)
     74 {
     75     int i, rv = BCM_E_NOT_FOUND;
     76 
     77     for (i=0; i<COUNTOF(_board_builtin_driver); i++) {
     78         rv = board_driver_delete(_board_builtin_driver[i]);
     79         if (BCM_FAILURE(rv) && rv != BCM_E_NOT_FOUND) {
     80             break;
     81         }
     82     }
     83 
     84     return rv;
     85 }
     86 
     87 /*
     88  * Function:
     89  *     board_driver_builtins_get
     90  * Purpose:
     91  *     Returns an array of all built in board drivers.
     92  * Parameters:
     93  *     max_num - (IN)  length of board driver array
     94  *     driver  - (OUT) array of pointers to board_driver_t
     95  *     actual  - (OUT) actual board driver array length
     96  * Returns:
     97  *     BCM_E_NONE - success
     98  *     BCM_E_XXX  - failed
     99  */
    100 int
    101 board_driver_builtins_get(int max_num,
    102                           board_driver_t **driver,
    103                           int *actual)
    104 {
    105     if (!max_num) {
    106         if (actual) {
    107             *actual = COUNTOF(_board_builtin_driver);
    108         }
    109         return actual ? BCM_E_NONE : BCM_E_PARAM;
    110     } else {
    111         if (max_num < COUNTOF(_board_builtin_driver)) {
    112             max_num = COUNTOF(_board_builtin_driver);
    113         }
    114         sal_memcpy(driver, _board_builtin_driver,
    115                    max_num * sizeof(_board_builtin_driver[0]));
    116     }
    117 
    118     if (actual) {
    119         *actual = max_num;
    120     }
    121 
    122     return BCM_E_NONE;
    123 }