• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2021 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #include "eth_chip_driver.h"
10 #include "hdf_log.h"
11 
12 #define HDF_LOG_TAG HDF_ETH_CORE
13 
14 static struct HdfEthChipDriverFactory *g_ethChipDriverFactory[MAX_CHIPDRIVER_COUNT] = {NULL};
15 
HdfEthGetChipDriverByName(const char * driverName)16 struct HdfEthChipDriverFactory *HdfEthGetChipDriverByName(const char *driverName)
17 {
18     int32_t i;
19     if (driverName == NULL) {
20         HDF_LOGE("%s fail: drivreName is NULL", __func__);
21         return NULL;
22     }
23 
24     for (i = 0; i < MAX_CHIPDRIVER_COUNT; i++) {
25         if (g_ethChipDriverFactory[i] != NULL && g_ethChipDriverFactory[i]->driverName != NULL) {
26             struct HdfEthChipDriverFactory *factory = g_ethChipDriverFactory[i];
27             if (strcmp(factory->driverName, driverName) == 0) {
28                 return factory;
29             }
30         }
31     }
32     return NULL;
33 }
34 
HdfEthRegChipDriver(struct HdfEthChipDriverFactory * obj)35 int32_t HdfEthRegChipDriver(struct HdfEthChipDriverFactory *obj)
36 {
37     int32_t index;
38     if (obj == NULL || obj->driverName == NULL) {
39         HDF_LOGE("%s: HdfEthChipDriverFactory obj is NULL", __func__);
40         return HDF_ERR_INVALID_PARAM;
41     }
42     if (HdfEthGetChipDriverByName(obj->driverName) != NULL) {
43         HDF_LOGW("%s: chipDriver factory is already registed. name = %s", __func__, obj->driverName);
44         return HDF_FAILURE;
45     }
46     for (index = 0; index < MAX_CHIPDRIVER_COUNT; index++) {
47         if (g_ethChipDriverFactory[index] == NULL) {
48             g_ethChipDriverFactory[index] = obj;
49             HDF_LOGI("%s:Chip driver %s registed.", __func__, obj->driverName);
50             return HDF_SUCCESS;
51         }
52     }
53     HDF_LOGE("%s: Factory table is NULL", __func__);
54     return HDF_FAILURE;
55 }
56 
57 static struct HdfEthChipDriverManager g_chipDriverManager = {
58     .chipFactoryInsts = g_ethChipDriverFactory,
59     .RegChipDriver = HdfEthRegChipDriver,
60     .GetEthChipDriverByName = HdfEthGetChipDriverByName,
61 };
62 
HdfEthGetChipDriverMgr(void)63 struct HdfEthChipDriverManager *HdfEthGetChipDriverMgr(void)
64 {
65     return &g_chipDriverManager;
66 }