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 }