1/*
2 * Copyright (c) 2020-2024 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_USB_PNP_MANAGE_H
10#define HDF_USB_PNP_MANAGE_H
11
12#include "hdf_base.h"
13
14#define USB_PNP_NOTIFY_TEST_MODE        false
15#define USB_PNP_INFO_MAX_INTERFACES     32
16
17enum UsbPnpNotifyServiceCmd {
18    USB_PNP_NOTIFY_ADD_INTERFACE,
19    USB_PNP_NOTIFY_REMOVE_INTERFACE,
20    USB_PNP_NOTIFY_REPORT_INTERFACE,
21    USB_PNP_NOTIFY_ADD_DEVICE,
22    USB_PNP_NOTIFY_REMOVE_DEVICE,
23    #if USB_PNP_NOTIFY_TEST_MODE == true
24    USB_PNP_NOTIFY_ADD_TEST,
25    USB_PNP_NOTIFY_REMOVE_TEST,
26    #endif
27    USB_PNP_DRIVER_REGISTER_DEVICE,
28    USB_PNP_DRIVER_UNREGISTER_DEVICE,
29    USB_PNP_DRIVER_GETDEVICES = 20,
30    USB_PNP_DRIVER_GADGET_ADD = 30,
31    USB_PNP_DRIVER_GADGET_REMOVE,
32    USB_PNP_DRIVER_PORT_HOST = 40,
33    USB_PNP_DRIVER_PORT_DEVICE,
34    USB_PNP_DRIVER_GET_GADGET_LINK_STATUS,
35};
36
37enum UsbPnpNotifyRemoveType {
38    USB_PNP_NOTIFY_REMOVE_BUS_DEV_NUM,
39    USB_PNP_NOTIFY_REMOVE_INTERFACE_NUM,
40};
41
42enum {
43    USB_PNP_NOTIFY_MATCH_VENDOR = 0x0001,
44    USB_PNP_NOTIFY_MATCH_PRODUCT = 0x0002,
45    USB_PNP_NOTIFY_MATCH_DEV_LOW = 0x0004,
46    USB_PNP_NOTIFY_MATCH_DEV_HIGH = 0x0008,
47    USB_PNP_NOTIFY_MATCH_DEV_CLASS = 0x0010,
48    USB_PNP_NOTIFY_MATCH_DEV_SUBCLASS = 0x0020,
49    USB_PNP_NOTIFY_MATCH_DEV_PROTOCOL = 0x0040,
50    USB_PNP_NOTIFY_MATCH_INT_CLASS = 0x0080,
51    USB_PNP_NOTIFY_MATCH_INT_SUBCLASS = 0x0100,
52    USB_PNP_NOTIFY_MATCH_INT_PROTOCOL = 0x0200,
53    USB_PNP_NOTIFY_MATCH_INT_NUMBER = 0x0400,
54};
55
56struct UsbPnpNotifyServiceInfo {
57    uint8_t curInterfaceNumber;
58    uint32_t length;
59
60    int32_t devNum;
61    int32_t busNum;
62
63    int32_t interfaceLength;
64    uint8_t interfaceNumber[USB_PNP_INFO_MAX_INTERFACES];
65} __attribute__ ((packed));
66
67struct UsbPnpNotifyInterfaceInfo {
68    uint8_t interfaceClass;
69    uint8_t interfaceSubClass;
70    uint8_t interfaceProtocol;
71
72    uint8_t interfaceNumber;
73};
74
75struct UsbPnpNotifyDeviceInfo {
76    uint16_t vendorId;
77    uint16_t productId;
78
79    uint16_t bcdDeviceLow;
80    uint16_t bcdDeviceHigh;
81
82    uint8_t deviceClass;
83    uint8_t deviceSubClass;
84    uint8_t deviceProtocol;
85};
86
87struct UsbPnpNotifyMatchInfoTable {
88    uint64_t usbDevAddr;
89    int32_t devNum;
90    int32_t busNum;
91
92    struct UsbPnpNotifyDeviceInfo deviceInfo;
93
94    uint8_t removeType;
95    uint8_t numInfos;
96
97    struct UsbPnpNotifyInterfaceInfo interfaceInfo[USB_PNP_INFO_MAX_INTERFACES];
98};
99
100struct UsbPnpAddRemoveInfo {
101    int32_t devNum;
102    int32_t busNum;
103    uint8_t interfaceNumber;
104    uint8_t interfaceClass;
105    uint8_t interfaceSubClass;
106    uint8_t interfaceProtocol;
107};
108
109#endif /* HDF_USB_PNP_MANAGE_H */
110