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