| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SYSROOT_ZIRCON_HW_USB_CDC_H_ |
| #define SYSROOT_ZIRCON_HW_USB_CDC_H_ |
| |
| #include <stdint.h> |
| |
| // clang-format off |
| |
| #include <zircon/compiler.h> |
| |
| /* CDC Subclasses for the Communications Interface Class */ |
| #define USB_CDC_SUBCLASS_DIRECT_LINE 0x01 |
| #define USB_CDC_SUBCLASS_ABSTRACT 0x02 |
| #define USB_CDC_SUBCLASS_TELEPHONE 0x03 |
| #define USB_CDC_SUBCLASS_MULTI_CHANNEL 0x04 |
| #define USB_CDC_SUBCLASS_CAPI 0x05 |
| #define USB_CDC_SUBCLASS_ETHERNET 0x06 |
| #define USB_CDC_SUBCLASS_ATM 0x07 |
| #define USB_CDC_SUBCLASS_WIRELESS_HANDSET 0x08 |
| #define USB_CDC_SUBCLASS_DEVICE_MGMT 0x09 |
| #define USB_CDC_SUBCLASS_MOBILE_DIRECT 0x0A |
| #define USB_CDC_SUBCLASS_OBEX 0x0B |
| #define USB_CDC_SUBCLASS_ETHERNET_EMU 0x0C |
| #define USB_CDC_SUBCLASS_NETWORK_CTRL 0x0D |
| |
| /* CDC Descriptor SubTypes */ |
| #define USB_CDC_DST_HEADER 0x00 |
| #define USB_CDC_DST_CALL_MGMT 0x01 |
| #define USB_CDC_DST_ABSTRACT_CTRL_MGMT 0x02 |
| #define USB_CDC_DST_DIRECT_LINE_MGMT 0x03 |
| #define USB_CDC_DST_TELEPHONE_RINGER 0x04 |
| #define USB_CDC_DST_TELEPHONE_CALL_REPORTING 0x05 |
| #define USB_CDC_DST_UNION 0x06 |
| #define USB_CDC_DST_COUNTRY_SELECTION 0x07 |
| #define USB_CDC_DST_TELEPHONE_OP_MODES 0x08 |
| #define USB_CDC_DST_USB_TERMINAL 0x09 |
| #define USB_CDC_DST_NETWORK_CHANNEL 0x0A |
| #define USB_CDC_DST_PROTOCOL_UNIT 0x0B |
| #define USB_CDC_DST_EXTENSION_UNIT 0x0C |
| #define USB_CDC_DST_MULTI_CHANNEL_MGMT 0x0D |
| #define USB_CDC_DST_CAPI_CTRL_MGMT 0x0E |
| #define USB_CDC_DST_ETHERNET 0x0F |
| #define USB_CDC_DST_ATM_NETWORKING 0x10 |
| #define USB_CDC_DST_WIRELESS_HANDSET_CTRL 0x11 |
| #define USB_CDC_DST_MOBILE_DIRECT_LINE 0x12 |
| #define USB_CDC_DST_MDLM_DETAIL 0x13 |
| #define USB_CDC_DST_DEVICE_MGMT 0x14 |
| #define USB_CDC_DST_OBEX 0x15 |
| #define USB_CDC_DST_COMMAND_SET 0x16 |
| #define USB_CDC_DST_COMMAND_SET_DETAIL 0x17 |
| #define USB_CDC_DST_TELEPHONE_CTRL 0x18 |
| #define USB_CDC_DST_OBEX_SERVICE_ID 0x19 |
| #define USB_CDC_DST_NCM 0x1A |
| |
| /* CDC Class-Specific Notification Codes */ |
| #define USB_CDC_NC_NETWORK_CONNECTION 0x00 |
| #define USB_CDC_NC_RESPONSE_AVAILABLE 0x01 |
| #define USB_CDC_NC_SERIAL_STATE 0x20 |
| #define USB_CDC_NC_CONNECTION_SPEED_CHANGE 0x2A |
| |
| /* CDC Ethernet Class-Specific Request Codes */ |
| #define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40 |
| #define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41 |
| #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 |
| #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 |
| #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 |
| |
| /* CDC Ethernet Packet Filter Modes Bits */ |
| #define USB_CDC_PACKET_TYPE_PROMISCUOUS (1 << 0) |
| #define USB_CDC_PACKET_TYPE_ALL_MULTICAST (1 << 1) |
| #define USB_CDC_PACKET_TYPE_DIRECTED (1 << 2) |
| #define USB_CDC_PACKET_TYPE_BROADCAST (1 << 3) |
| #define USB_CDC_PACKET_TYPE_MULTICAST (1 << 4) |
| |
| /* CDC Class-Specific Requests */ |
| #define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00 |
| #define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01 |
| |
| __BEGIN_CDECLS |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_HEADER |
| uint16_t bcdCDC; |
| } __attribute__ ((packed)) usb_cs_header_interface_descriptor_t; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_CALL_MGMT |
| uint8_t bmCapabilities; |
| uint8_t bDataInterface; |
| } __attribute__ ((packed)) usb_cs_call_mgmt_interface_descriptor_t; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_ABSTRACT_CTRL_MGMT |
| uint8_t bmCapabilities; |
| } __attribute__ ((packed)) usb_cs_abstract_ctrl_mgmt_interface_descriptor_t; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_UNION |
| uint8_t bControlInterface; |
| uint8_t bSubordinateInterface[]; |
| } __attribute__ ((packed)) usb_cs_union_interface_descriptor_t; |
| |
| // fixed size version of usb_cs_union_interface_descriptor_t |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_UNION |
| uint8_t bControlInterface; |
| uint8_t bSubordinateInterface; |
| } __attribute__ ((packed)) usb_cs_union_interface_descriptor_1_t; |
| |
| typedef struct { |
| uint8_t bLength; |
| uint8_t bDescriptorType; // USB_DT_CS_INTERFACE |
| uint8_t bDescriptorSubType; // USB_CDC_DST_ETHERNET |
| uint8_t iMACAddress; |
| uint32_t bmEthernetStatistics; |
| uint16_t wMaxSegmentSize; |
| uint16_t wNumberMCFilters; |
| uint8_t bNumberPowerFilters; |
| } __attribute__ ((packed)) usb_cs_ethernet_interface_descriptor_t; |
| |
| typedef struct { |
| uint8_t bmRequestType; |
| uint8_t bNotification; |
| uint16_t wValue; |
| uint16_t wIndex; |
| uint16_t wLength; |
| } __attribute__ ((packed)) usb_cdc_notification_t; |
| |
| typedef struct { |
| usb_cdc_notification_t notification; |
| uint32_t downlink_br; |
| uint32_t uplink_br; |
| } __attribute__ ((packed)) usb_cdc_speed_change_notification_t; |
| |
| __END_CDECLS |
| |
| #endif // SYSROOT_ZIRCON_HW_USB_CDC_H_ |