| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- /*
- * Copyright : (C) 2022 Phytium Information Technology, Inc.
- * All Rights Reserved.
- *
- * This program is OPEN SOURCE software: you can redistribute it and/or modify it
- * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
- * either version 1.0 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the Phytium Public License for more details.
- *
- *
- * FilePath: fusb_def.h
- * Date: 2022-02-11 13:33:11
- * LastEditTime: 2022-02-18 09:18:24
- * Description: This files is for definition of spec defined USB data structure
- *
- * Modify History:
- * Ver Who Date Changes
- * ----- ------ -------- --------------------------------------
- * 1.0 Zhugengyu 2022/2/7 init commit
- */
- #ifndef DRIVERS_FUSB_DEF_H
- #define DRIVERS_FUSB_DEF_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /***************************** Include Files *********************************/
- #include "ftypes.h"
- /************************** Constant Definitions *****************************/
- typedef enum
- {
- FUSB_UNKNOWN_SPEED = -1,
- FUSB_FULL_SPEED = 0,
- FUSB_LOW_SPEED = 1,
- FUSB_HIGH_SPEED = 2,
- FUSB_SUPER_SPEED = 3,
- FUSB_SUPER_SPEED_PLUS = 4,
- } FUsbSpeed;
- typedef enum
- {
- FUSB_REQ_HOST_TO_DEVICE = 0,
- FUSB_REQ_DEVICE_TO_HOST = 1
- } FUsbReqDirection;
- typedef enum
- {
- FUSB_REQ_TYPE_STANDARD = 0,
- FUSB_REQ_TYPE_CLASS = 1,
- FUSB_REQ_TYPE_VENDOR = 2,
- FUSB_REQ_TYPE_RESERVED = 3
- } FUsbReqType;
- typedef enum
- {
- FUSB_REQ_RECP_DEV = 0,
- FUSB_REQ_RECP_IF = 1,
- FUSB_REQ_RECP_EP = 2,
- FUSB_REQ_RECP_OTHER = 3
- } FUsbReqRecpient;
- /* refer to Table 9-5. Descriptor Types in USB spec. for details */
- typedef enum
- {
- FUSB_DESC_TYPE_NONE = 0,
- FUSB_DESC_TYPE_DEVICE = 1,
- FUSB_DESC_TYPE_CONFIG = 2,
- FUSB_DESC_TYPE_STRING = 3,
- FUSB_DESC_TYPE_INTERFACE = 4,
- FUSB_DESC_TYPE_ENDPOINT = 5,
- FUSB_DESC_TYPE_HUB = 41,
- FUSB_DESC_TYPE_SUPER_SPEED_HUB = 42
- } FUsbDescriptorType;
- typedef enum
- {
- FUSB_GET_STATUS = 0,
- FUSB_CLEAR_FEATURE = 1,
- FUSB_SET_FEATURE = 3,
- FUSB_SET_ADDRESS = 5,
- FUSB_GET_DESCRIPTOR = 6,
- FUSB_SET_DESCRIPTOR = 7,
- FUSB_GET_CONFIGURATION = 8,
- FUSB_SET_CONFIGURATION = 9,
- FUSB_GET_INTERFACE = 10,
- FUSB_SET_INTERFACE = 11,
- FUSB_SYNCH_FRAME = 12
- } FUsbRequestCode;
- typedef enum
- {
- FUSB_ENDPOINT_HALT = 0,
- FUSB_DEVICE_REMOTE_WAKEUP = 1,
- FUSB_TEST_MODE = 2
- } FUsbFeatureSelectors;
- typedef enum
- {
- FUSB_SETUP,
- FUSB_IN,
- FUSB_OUT
- } FUsbDirection;
- typedef enum
- {
- FUSB_CONTROL_EP = 0,
- FUSB_ISOCHRONOUS_EP = 1,
- FUSB_BULK_EP = 2,
- FUSB_INTERRUPT_EP = 3
- } FUsbEpType;
- typedef enum
- {
- FUSB_UNKOWN_DEVICE = 0x0,
- FUSB_AUDIO_DEVICE = 0x01,
- FUSB_COMM_DEVICE = 0x02,
- FUSB_HID_DEVICE = 0x03,
- FUSB_PHYSICAL_DEVICE = 0x05,
- FUSB_IMAGE_DEVICE = 0x06,
- FUSB_PRINTER_DEVICE = 0x07,
- FUSB_MASS_STORAGE_DEVICE = 0x08,
- FUSB_HUB_DEVICE = 0x09,
- } FUsbDevClass; /* definition of device class */
- /**************************** Type Definitions *******************************/
- /* following data structure is defined according to spec. name their member
- may not compliant with code convention */
- typedef struct
- {
- unsigned char bDescLength;
- unsigned char bDescriptorType;
- unsigned char bNbrPorts; /* Number of downstream facing ports supports */
- union
- {
- struct
- {
- unsigned long logicalPowerSwitchingMode: 2; /* BIT[1:0] */
- unsigned long isCompoundDevice: 1; /* BIT[2] */
- unsigned long overcurrentProtectionMode: 2; /* BIT[4:3] */
- unsigned long ttThinkTime: 2; /* BIT[6:5] */
- unsigned long arePortIndicatorsSupported: 1; /* BIT[7] */
- unsigned long: 8;
- } __attribute__((packed));
- unsigned short wHubCharacteristics;
- } __attribute__((packed));
- unsigned char bPowerOn2PwrGood; /* in 2 ms intervals */
- unsigned char bHubContrCurrent; /* max current requirements */
- char DeviceRemovable[]; /* indicates if a port has a removable device attached */
- } __attribute__((packed)) FUsbHubDescriptor;
- typedef struct
- {
- unsigned char bLength;
- unsigned char bDescriptorType;
- unsigned short bcdUSB;
- unsigned char bDeviceClass;
- unsigned char bDeviceSubClass;
- unsigned char bDeviceProtocol;
- unsigned char bMaxPacketSize0;
- unsigned short idVendor;
- unsigned short idProduct;
- unsigned short bcdDevice;
- unsigned char iManufacturer;
- unsigned char iProduct;
- unsigned char iSerialNumber;
- unsigned char bNumConfigurations;
- } __attribute__((packed)) FUsbDeviceDescriptor;
- typedef struct
- {
- unsigned char bLength;
- unsigned char bDescriptorType;
- unsigned short wTotalLength;
- unsigned char bNumInterfaces;
- unsigned char bConfigurationValue;
- unsigned char iConfiguration;
- unsigned char bmAttributes;
- #define FUSB_CONFIG_DESC_ATTR_REMOTE_WEAKUP BIT(5) /* 1: remote wakeup feature */
- #define FUSB_CONFIG_DESC_ATTR_SELF_POWER BIT(6) /* 1: self-powered 0: bus-powered */
- #define FUSB_CONFIG_DESC_ATTR_USB1_COMPATIABLE BIT(7) /* 1: compatibility with USB 1.0 */
- unsigned char bMaxPower;
- /* configuration descriptor may follow more buffers, need to allocate dynamic memory for all contents */
- } __attribute__((packed)) FUsbConfigurationDescriptor;
- typedef struct
- {
- unsigned char bLength;
- unsigned char bDescriptorType;
- unsigned char bInterfaceNumber;
- unsigned char bAlternateSetting;
- unsigned char bNumEndpoints;
- unsigned char bInterfaceClass;
- unsigned char bInterfaceSubClass;
- unsigned char bInterfaceProtocol;
- unsigned char iInterface;
- } __attribute__((packed)) FUsbInterfaceDescriptor;
- typedef struct
- {
- unsigned char bLength;
- unsigned char bDescriptorType;
- unsigned char bEndpointAddress;
- /* Low-speed devices can have a maximum of 3 endpoint, other devices can have 16 (0–15) */
- #define FUSB_EP_DESC_EP_NUM(x) (GENMASK(3, 0) & (x)) /* endpoint number */
- #define FUSB_EP_DESC_EP_DIR_IN BIT(7) /* direction, 0: OUT, 1: IN */
- unsigned char bmAttributes;
- #define FUSB_EP_DESC_TRANS_TYPE(x) (GENMASK(1, 0) & (x))
- #define FUSB_EP_DESC_TRANS_CTRL 0b00 /* control */
- #define FUSB_EP_DESC_TRANS_ISOC 0b01 /* isochronous */
- #define FUSB_EP_DESC_TRANS_BULK 0b10 /* bulk */
- #define FUSB_EP_DESC_TRANS_INTR 0b11 /* interrupt */
- unsigned short wMaxPacketSize;
- #define FUSB_EP_DESC_MAX_PACKET_SZ GENMASK(10, 0)
- unsigned char bInterval;
- } __attribute__((packed)) FUsbEndpointDescriptor;
- typedef union
- {
- struct
- {
- u8 len;
- u8 type;
- } header;
- #define FUSB_DESCRIPTOR_HEADER_SIZE 2
- FUsbConfigurationDescriptor configuration;
- FUsbInterfaceDescriptor interface;
- FUsbEndpointDescriptor endpoint;
- } __attribute__((packed)) FUsbDescriptor;
- typedef struct
- {
- unsigned char bLength;
- unsigned char bDescriptorType;
- unsigned short bcdHID;
- unsigned char bCountryCode;
- unsigned char bNumDescriptors;
- unsigned char bReportDescriptorType;
- unsigned short wReportDescriptorLength;
- } __attribute__((packed)) FUsbHidDescriptor;
- typedef struct
- {
- u8 len; /* Descriptor size in bytes (variable) */
- u8 type; /* The constant String (0x03 DESCRIPTOR_STRING) */
- u16 string[0]; /* Unicode UTF- 16LE string */
- } __attribute__((packed)) FUsbStringDescriptor;
- typedef struct
- {
- union
- {
- struct
- {
- FUsbReqRecpient req_recp: 5;
- FUsbReqType req_type: 2;
- FUsbReqDirection data_dir: 1;
- } __attribute__((packed));
- unsigned char bmRequestType;
- } __attribute__((packed));
- unsigned char bRequest;
- unsigned short wValue;
- unsigned short wIndex;
- unsigned short wLength;
- } __attribute__((packed)) FUsbDevReq;
- /************************** Variable Definitions *****************************/
- /***************** Macros (Inline Functions) Definitions *********************/
- #define FUSB_DEFAULT_LANG_ID 0x409 /* English */
- /************************** Function Prototypes ******************************/
- #ifdef __cplusplus
- }
- #endif
- #endif
|