• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef USBFN_CFG_MGR_H
17 #define USBFN_CFG_MGR_H
18 
19 #include <device_resource_if.h>
20 #include "usbfn_device.h"
21 #include "usbfn_request.h"
22 #include "usbfn_interface.h"
23 
24 #define DESC_LENGTH "bLength"
25 #define DESC_TYPE "bDescriptorType"
26 
27 /* USB_DT_DEVICE: Device descriptor */
28 #define USBDEV_CLASS "bDeviceClass"
29 #define USBDEV_SUBCLASS "bDeviceSubClass"
30 #define USBDEV_PROTOCOL "bDeviceProtocol"
31 #define USBDEV_MAXSIZE "bMaxPacketSize0"
32 #define USBDEV_MANUFACTURER "manufacturer"
33 #define USBDEV_PRODUCT "product"
34 #define USBDEV_SERIALNUM "serialnumber"
35 #define USBDEV_NUMCFG "numConfigurations"
36 #define USBDEV_BCD "bcdUSB"
37 #define USBDEV_VENDOR "idVendor"
38 #define USBDEV_IDPRODUCT "idProduct"
39 #define USBDEV_BCDDEVICE "bcdDevice"
40 
41 /* USB_DT_INTERFACE */
42 #define INTERFACE_NUMBER "bInterfaceNumber"
43 #define INTERFACE_ALTERNATE "bAlternateSetting"
44 #define INTERFACE_NENDPOINT "bNumEndpoints"
45 #define INTERFACE_CLASS "bInterfaceClass"
46 #define INTERFACE_SUBCLASS "bInterfaceSubClass"
47 #define INTERFACE_PROTOCOL "bInterfaceProtocol"
48 #define INTERFACE_INTERFACE "iInterface"
49 
50 /* USB_DT_INTERFACE_ASSOCIATION */
51 #define INTERFACE_FIRST "bFirstInterface"
52 #define INTERFACE_COUNT "bInterfaceCount"
53 #define FUNCTION_CLASS "bFunctionClass"
54 #define FUNCTION_SUBCLASS "bFunctionSubClass"
55 #define FUNCTION_PROTOCOL "bFunctionProtocol"
56 #define FUNCTION_INDEX "iFunction"
57 
58 /* USB_DT_ENDPOINT */
59 #define ENDPOINT_ADDRESS "bEndpointAddress"
60 #define ENDPOINT_MATTR "bmAttributes"
61 #define ENDPOINT_MAXPACKSIZE_W "wMaxPacketSize"
62 #define ENDPOINT_INTERVAL "bInterval"
63 #define ENDPOINT_REFRESH "bRefresh"
64 #define ENDPOINT_SYNCADDR "bSynchAddress"
65 
66 /* USB_DT_STRING: String descriptor */
67 #define STRING_DATA "wData"
68 
69 /* USB_DT_SSP_ISOC_ENDPOINT_COMP */
70 #define SSP_ISOC_EPCOMP_WRESEVED "wReseved"
71 #define SSP_ISOC_EPCOMP_DWPERINTERVAL "dwBytesPerInterval"
72 
73 /* USB_DT_SS_ENDPOINT_COMP */
74 #define SS_EP_COMP_MAXBURST "bMaxBurst"
75 #define SS_EP_COMP_MTTRIBUTE "bmAttributes"
76 #define SS_EP_COMP_WPERINTERVAL "wBytesPerInterval"
77 
78 /* USB_DT_DEVICE_QUALIFIER */
79 #define QUALIFIER_BCD "bcdUSB"
80 #define QUALIFIER_CLASS "bDeviceClass"
81 #define QUALIFIER_SUBCLASS "bDeviceSubClass"
82 #define QUALIFIER_PROTOCOL "bDeviceProtocol"
83 #define QUALIFIER_MAXSIZE "bMaxPacketSize0"
84 #define QUALIFIER_NUMCFG "bNumConfigurations"
85 #define QUALIFIER_RESERVED "bRESERVED"
86 
87 /* USB_DT_OTG (from OTG 2.0 supplement) */
88 #define OTG_MTTRIBUTE "bmAttributes"
89 #define OTG_BCDOTG "bcdOTG"
90 
91 /* USB_DT_DEBUG */
92 #define DEBUG_IN "bDebugInEndpoint"
93 #define DEBUG_OUT "bDebugOutEndpoint"
94 
95 /* USB_DT_SECURITY */
96 #define SECURITY_TOTALLENGTH "wTotalLength"
97 #define SECURITY_ENCRYTYPE "bNumEncryptionTypes"
98 
99 #define MAX_LEN 64
100 
101 typedef struct  {
102     uint8_t size;
103     uint8_t cmd;
104     uint8_t type;
105     uint8_t nameLen;
106     uint8_t dataLen;
107 }SelfProp;
108 
109 typedef enum  {
110     PROP_TYPE_UINT,
111     PROP_TYPE_STRING
112 }FuncDescType;
113 
114 struct UsbFnCfgPropMgr {
115     const struct UsbFnInterface *intf;
116     char name[MAX_LEN];
117     char value[MAX_LEN];
118     uint8_t isDevProp;
119     UsbFnPropCallback getPropCallback;
120     UsbFnPropCallback setPropCallback;
121     struct DListHead entry;
122 };
123 
124 struct UsbFnDeviceDesc *UsbFnCfgMgrGetInstanceFromHCS(const struct DeviceResourceNode *node);
125 void UsbFnCfgMgrFreeUsbFnDeviceDesc(struct UsbFnDeviceDesc *fnDevDesc);
126 int32_t UsbFnCfgMgrSetProp(const struct UsbFnInterface *intf, const char *name, const char *value);
127 int32_t UsbFnCfgMgrGetProp(const struct UsbFnInterface *intf, const char *name, char *value);
128 int32_t UsbFnCfgMgrRegisterProp(const struct UsbFnInterface *intf,
129     const struct UsbFnRegistInfo *registInfo);
130 void UsbFnCfgMgrUnRegisterAllProp(void);
131 
132 #endif /* USBFN_CFG_MGR_H */
133