• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #ifndef HDF_ATTRIBUTE_MACRO_H
10 #define HDF_ATTRIBUTE_MACRO_H
11 
12 #include "hdf_log.h"
13 #include "hdf_dlist.h"
14 
15 struct HdfDevHostMgr {
16     struct DListHead hosts;
17 };
18 
19 struct HdfHostType {
20     const char *devHostName;
21     uint16_t priority;
22     struct DListHead devices;
23     struct DListHead hostEntry;
24 };
25 
26 struct HdfDeviceType {
27     struct DListHead deviceNodes;
28     struct DListHead deviceEntry;
29 };
30 
31 struct HdfDeviceNodeType {
32     uint16_t policy;
33     uint16_t priority;
34     uint16_t preload;
35     uint16_t permission;
36     const char *moduleName;
37     const char *svcName;
38     const char *deviceMatchAttr;
39     struct DListHead deviceNodeEntry;
40 };
41 
42 #define HDF_DEAL_DEVICE_NODE(node, deviceNodes) \
43     do { \
44         deviceNode = (struct HdfDeviceNodeType *)OsalMemCalloc(sizeof(*deviceNode)); \
45         if (deviceNode == NULL) { \
46             HDF_LOGE("%s malloc fail", __func__); \
47             return false; \
48         } \
49         deviceNode->policy = HCS_PROP(node, policy); \
50         deviceNode->priority = HCS_PROP(node, priority); \
51         deviceNode->preload = HCS_PROP(node, preload); \
52         deviceNode->permission = HCS_PROP(node, permission); \
53         deviceNode->moduleName = HCS_PROP(node, moduleName); \
54         deviceNode->svcName = HCS_PROP(node, serviceName); \
55         deviceNode->deviceMatchAttr = HCS_PROP(node, deviceMatchAttr); \
56         DListInsertTail(&deviceNode->deviceNodeEntry, &(deviceNodes)); \
57     } while (0)
58 
59 #define HDF_DEAL_DEVICE(node, devices) \
60     do { \
61         device = (struct HdfDeviceType *)OsalMemCalloc(sizeof(*device)); \
62         if (device == NULL) { \
63             HDF_LOGE("%s malloc fail", __func__); \
64             return false; \
65         } \
66         DListHeadInit(&device->deviceNodes); \
67         node##_foreach_child_vargs(HDF_DEAL_DEVICE_NODE, device->deviceNodes); \
68         DListInsertTail(&device->deviceEntry, &(devices)); \
69     } while (0)
70 
71 #define HDF_FIND_HOST(node, name, host) \
72     do { \
73         if (strcmp(HCS_PROP(node, hostName), name) == 0) { \
74             (host)->devHostName = HCS_PROP(node, hostName); \
75             (host)->priority = HCS_PROP(node, priority); \
76             node##_foreach_child_vargs(HDF_DEAL_DEVICE, host->devices); \
77             break; \
78         } \
79     } while (0)
80 
81 #define HDF_DEAL_HOST(node, hosts) \
82     do { \
83         host = (struct HdfHostType *)OsalMemCalloc(sizeof(*host)); \
84         if (host == NULL) { \
85             HDF_LOGE("%s malloc fail", __func__); \
86             return false; \
87         } \
88         host->devHostName = HCS_PROP(node, hostName); \
89         host->priority = HCS_PROP(node, priority); \
90         DListInsertTail(&(host)->hostEntry, &(hosts)); \
91     } while (0)
92 
93 #define HDF_DEVICE_INFO HCS_NODE(HCS_ROOT, device_info)
94 
95 #endif /* HDF_ATTRIBUTE_MACRO_H */
96