1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2020-2024 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci *
4094332d3Sopenharmony_ci * HDF is dual licensed: you can use it either under the terms of
5094332d3Sopenharmony_ci * the GPL, or the BSD license, at your option.
6094332d3Sopenharmony_ci * See the LICENSE file in the root of this repository for complete details.
7094332d3Sopenharmony_ci */
8094332d3Sopenharmony_ci
9094332d3Sopenharmony_ci#ifndef HDF_USB_PNP_MANAGE_H
10094332d3Sopenharmony_ci#define HDF_USB_PNP_MANAGE_H
11094332d3Sopenharmony_ci
12094332d3Sopenharmony_ci#include "hdf_base.h"
13094332d3Sopenharmony_ci
14094332d3Sopenharmony_ci#define USB_PNP_NOTIFY_TEST_MODE        false
15094332d3Sopenharmony_ci#define USB_PNP_INFO_MAX_INTERFACES     32
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_cienum UsbPnpNotifyServiceCmd {
18094332d3Sopenharmony_ci    USB_PNP_NOTIFY_ADD_INTERFACE,
19094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REMOVE_INTERFACE,
20094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REPORT_INTERFACE,
21094332d3Sopenharmony_ci    USB_PNP_NOTIFY_ADD_DEVICE,
22094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REMOVE_DEVICE,
23094332d3Sopenharmony_ci    #if USB_PNP_NOTIFY_TEST_MODE == true
24094332d3Sopenharmony_ci    USB_PNP_NOTIFY_ADD_TEST,
25094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REMOVE_TEST,
26094332d3Sopenharmony_ci    #endif
27094332d3Sopenharmony_ci    USB_PNP_DRIVER_REGISTER_DEVICE,
28094332d3Sopenharmony_ci    USB_PNP_DRIVER_UNREGISTER_DEVICE,
29094332d3Sopenharmony_ci    USB_PNP_DRIVER_GETDEVICES = 20,
30094332d3Sopenharmony_ci    USB_PNP_DRIVER_GADGET_ADD = 30,
31094332d3Sopenharmony_ci    USB_PNP_DRIVER_GADGET_REMOVE,
32094332d3Sopenharmony_ci    USB_PNP_DRIVER_PORT_HOST = 40,
33094332d3Sopenharmony_ci    USB_PNP_DRIVER_PORT_DEVICE,
34094332d3Sopenharmony_ci    USB_PNP_DRIVER_GET_GADGET_LINK_STATUS,
35094332d3Sopenharmony_ci};
36094332d3Sopenharmony_ci
37094332d3Sopenharmony_cienum UsbPnpNotifyRemoveType {
38094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REMOVE_BUS_DEV_NUM,
39094332d3Sopenharmony_ci    USB_PNP_NOTIFY_REMOVE_INTERFACE_NUM,
40094332d3Sopenharmony_ci};
41094332d3Sopenharmony_ci
42094332d3Sopenharmony_cienum {
43094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_VENDOR = 0x0001,
44094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_PRODUCT = 0x0002,
45094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_DEV_LOW = 0x0004,
46094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_DEV_HIGH = 0x0008,
47094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_DEV_CLASS = 0x0010,
48094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_DEV_SUBCLASS = 0x0020,
49094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_DEV_PROTOCOL = 0x0040,
50094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_INT_CLASS = 0x0080,
51094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_INT_SUBCLASS = 0x0100,
52094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_INT_PROTOCOL = 0x0200,
53094332d3Sopenharmony_ci    USB_PNP_NOTIFY_MATCH_INT_NUMBER = 0x0400,
54094332d3Sopenharmony_ci};
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_cistruct UsbPnpNotifyServiceInfo {
57094332d3Sopenharmony_ci    uint8_t curInterfaceNumber;
58094332d3Sopenharmony_ci    uint32_t length;
59094332d3Sopenharmony_ci
60094332d3Sopenharmony_ci    int32_t devNum;
61094332d3Sopenharmony_ci    int32_t busNum;
62094332d3Sopenharmony_ci
63094332d3Sopenharmony_ci    int32_t interfaceLength;
64094332d3Sopenharmony_ci    uint8_t interfaceNumber[USB_PNP_INFO_MAX_INTERFACES];
65094332d3Sopenharmony_ci} __attribute__ ((packed));
66094332d3Sopenharmony_ci
67094332d3Sopenharmony_cistruct UsbPnpNotifyInterfaceInfo {
68094332d3Sopenharmony_ci    uint8_t interfaceClass;
69094332d3Sopenharmony_ci    uint8_t interfaceSubClass;
70094332d3Sopenharmony_ci    uint8_t interfaceProtocol;
71094332d3Sopenharmony_ci
72094332d3Sopenharmony_ci    uint8_t interfaceNumber;
73094332d3Sopenharmony_ci};
74094332d3Sopenharmony_ci
75094332d3Sopenharmony_cistruct UsbPnpNotifyDeviceInfo {
76094332d3Sopenharmony_ci    uint16_t vendorId;
77094332d3Sopenharmony_ci    uint16_t productId;
78094332d3Sopenharmony_ci
79094332d3Sopenharmony_ci    uint16_t bcdDeviceLow;
80094332d3Sopenharmony_ci    uint16_t bcdDeviceHigh;
81094332d3Sopenharmony_ci
82094332d3Sopenharmony_ci    uint8_t deviceClass;
83094332d3Sopenharmony_ci    uint8_t deviceSubClass;
84094332d3Sopenharmony_ci    uint8_t deviceProtocol;
85094332d3Sopenharmony_ci};
86094332d3Sopenharmony_ci
87094332d3Sopenharmony_cistruct UsbPnpNotifyMatchInfoTable {
88094332d3Sopenharmony_ci    uint64_t usbDevAddr;
89094332d3Sopenharmony_ci    int32_t devNum;
90094332d3Sopenharmony_ci    int32_t busNum;
91094332d3Sopenharmony_ci
92094332d3Sopenharmony_ci    struct UsbPnpNotifyDeviceInfo deviceInfo;
93094332d3Sopenharmony_ci
94094332d3Sopenharmony_ci    uint8_t removeType;
95094332d3Sopenharmony_ci    uint8_t numInfos;
96094332d3Sopenharmony_ci
97094332d3Sopenharmony_ci    struct UsbPnpNotifyInterfaceInfo interfaceInfo[USB_PNP_INFO_MAX_INTERFACES];
98094332d3Sopenharmony_ci};
99094332d3Sopenharmony_ci
100094332d3Sopenharmony_cistruct UsbPnpAddRemoveInfo {
101094332d3Sopenharmony_ci    int32_t devNum;
102094332d3Sopenharmony_ci    int32_t busNum;
103094332d3Sopenharmony_ci    uint8_t interfaceNumber;
104094332d3Sopenharmony_ci    uint8_t interfaceClass;
105094332d3Sopenharmony_ci    uint8_t interfaceSubClass;
106094332d3Sopenharmony_ci    uint8_t interfaceProtocol;
107094332d3Sopenharmony_ci};
108094332d3Sopenharmony_ci
109094332d3Sopenharmony_ci#endif /* HDF_USB_PNP_MANAGE_H */
110