1 /*******************************************************************************
2  * Copyright 2019-2020 Microchip FPGA Embedded Systems Solutions.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * PolarFire SoC MSS USB Driver Stack
7  *
8  * Standard USB definitions.
9  *
10  */
11 #ifndef __MSS_USB_STD_DEF_H_
12 #define __MSS_USB_STD_DEF_H_
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 /*-------------------------------------------------------------------------*//**
19   Constant values which are internally used by the driver.
20   ============================
21  */
22 
23 /* USB request types */
24 #define USB_STANDARD_REQUEST                            0x00u
25 #define USB_CLASS_REQUEST                               0x20u
26 #define USB_VENDOR_REQUEST                              0x40u
27 
28 /* USB request type masks */
29 #define USB_STD_REQ_DATA_DIR_MASK                       0x80u
30 #define USB_STD_REQ_TYPE_MASK                           0x60u
31 #define USB_STD_REQ_RECIPIENT_MASK                      0x1Fu
32 
33 #define USB_STD_REQ_DATA_DIR_OUT                        0x00u
34 #define USB_STD_REQ_DATA_DIR_IN                         0x80u
35 
36 #define USB_STD_REQ_RECIPIENT_DEVICE                    0x00u
37 #define USB_STD_REQ_RECIPIENT_INTERFACE                 0x01u
38 #define USB_STD_REQ_RECIPIENT_ENDPOINT                  0x02u
39 
40 #define USB_STD_REQ_GET_STATUS                          0x00u
41 #define USB_STD_REQ_CLEAR_FEATURE                       0x01u
42 #define USB_STD_REQ_SET_FEATURE                         0x03u
43 #define USB_STD_REQ_SET_ADDRESS                         0x05u
44 #define USB_STD_REQ_GET_DESCRIPTOR                      0x06u
45 #define USB_STD_REQ_SET_DESCRIPTOR                      0x07u
46 #define USB_STD_REQ_GET_CONFIG                          0x08u
47 #define USB_STD_REQ_SET_CONFIG                          0x09u
48 #define USB_STD_REQ_GET_INTERFACE                       0x0Au
49 #define USB_STD_REQ_SET_INTERFACE                       0x0Bu
50 #define USB_STD_REQ_SYNCH_FRAME                         0x0Cu
51 
52 /* USB Feature selector */
53 #define USB_STD_FEATURE_REMOTE_WAKEUP                   0x0001u
54 #define USB_STD_FEATURE_TEST_MODE                       0x0002u
55 #define USB_STD_FEATURE_EP_HALT                         0x0000u
56 
57 /* USB Test Mode, Test selectors */
58 #define USB_TEST_MODE_SELECTOR_TEST_J                   0x01u
59 #define USB_TEST_MODE_SELECTOR_TEST_K                   0x02u
60 #define USB_TEST_MODE_SELECTOR_TEST_SE0NAK              0x03u
61 #define USB_TEST_MODE_SELECTOR_TEST_PACKET              0x04u
62 #define USB_TEST_MODE_SELECTOR_TEST_FORCE_ENA           0x05u
63 
64 /* Descriptor types */
65 #define USB_DEVICE_DESCRIPTOR_TYPE                      1u
66 #define USB_CONFIGURATION_DESCRIPTOR_TYPE               2u
67 #define USB_STRING_DESCRIPTOR_TYPE                      3u
68 #define USB_INTERFACE_DESCRIPTOR_TYPE                   4u
69 #define USB_ENDPOINT_DESCRIPTOR_TYPE                    5u
70 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE            6u
71 #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE          7u
72 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE             8u
73 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE       11u
74 
75 #define USB_WVALUE_HIBITE_SHIFT                         8u
76 #define USB_WINDEX_HIBITE_SHIFT                         8u
77 
78 #define USB_EP_DESCR_ATTR_CONTROL                       0x00u
79 #define USB_EP_DESCR_ATTR_ISO                           0x01u
80 #define USB_EP_DESCR_ATTR_BULK                          0x02u
81 #define USB_EP_DESCR_ATTR_INTR                          0x03u
82 
83 #define USB_BCD_VERSION_2_0                             0x0200u
84 #define USB_BCD_VERSION_2_1                             0x0210u
85 #define USB_BCD_VERSION_1_1                             0x0110u
86 #define USB_BCD_VERSION_1_0                             0x0100u
87 
88 #define USB_DEFAULT_TARGET_ADDR                         0u
89 #define USB_SETUP_PKT_LEN                               8u
90 
91 #define USB_STD_DEVICE_DESCR_LEN                        18u
92 #define USB_STD_CONFIG_DESCR_LEN                        9u
93 #define USB_STD_INTERFACE_DESCR_LEN                     9u
94 #define USB_STD_ENDPOINT_DESCR_LEN                      7u
95 #define USB_STD_IA_DESCR_LEN                            8u
96 #define USB_STD_DEV_QUAL_DESCR_LENGTH                   10u
97 
98 #define USB_DEVICE_BUS_POWER_MASK                       0x40u
99 #define USB_DEVICE_REM_WAKEUP_MASK                      0x20u
100 #define USB_MAX_BUS_POWER                               250u   /*num = mA/2*/
101 
102 #define USB_CLASS_CODE_MSD                              0x08u  /* bInterfaceClass */
103 #define USB_CLASS_MSD_SUBCLASS_SCSI                     0x06u  /* bInterfaceSubClass */
104 #define USB_CLAS_MSD_PROTOCOL_BOT                       0x50u  /* bInterfaceProtocol */
105 
106 #define USB_DEF_CONFIG_NUM                              0u
107 
108 /*-------------------------------------------------------------------------*//**
109   Maximum allowed Packet Sizes for respective transfer types
110  */
111 #define USB_HS_BULK_MAX_PKT_SIZE                        512u
112 #define USB_HS_INTERRUPT_MAX_PKT_SIZE                   1024u
113 #define USB_HS_ISO_MAX_PKT_SIZE                         1024u
114 
115 #define USB_FS_BULK_MAX_PKT_SIZE                        64u
116 #define USB_FS_INTERRUPT_MAX_PKT_SIZE                   64u
117 #define USB_FS_ISO_MAX_PKT_SIZE                         1023u
118 
119 /*-------------------------------------------------------------------------*//**
120  MSC class related definitions
121  */
122 /* BoT protocol constants */
123 #define USBD_MSC_BOT_CSW_LENGTH                         13u
124 #define USBD_MSC_BOT_CBW_LENGTH                         31u
125 
126 #define USB_MSC_BOT_REQ_GET_MAX_LUN                     0xFEu
127 #define USB_MSC_BOT_REQ_BMS_RESET                       0xFFu
128 
129 #define USB_MSC_BOT_CBW_SIGNATURE                       0x43425355u
130 #define USB_MSC_BOT_CSW_SIGNATURE                       0x53425355u
131 
132 /* Supported SCSI commands*/
133 #define USB_MSC_SCSI_INQUIRY                            0x12u
134 #define USB_MSC_SCSI_READ_FORMAT_CAPACITIES             0x23u
135 #define USB_MSC_SCSI_READ_CAPACITY_10                   0x25u
136 #define USB_MSC_SCSI_READ_10                            0x28u
137 #define USB_MSC_SCSI_REQUEST_SENSE                      0x03u
138 #define USB_MSC_SCSI_TEST_UNIT_READY                    0x00u
139 #define USB_MSC_SCSI_WRITE_10                           0x2Au
140 #define USB_MSC_SCSI_MODE_SENSE_6                       0x1Au
141 #define USB_MSC_SCSI_MODE_SELECT_6                      0x15u
142 #define USB_MSC_SCSI_PREVENT_ALLW_MDM_RMVL              0x1Eu
143 #define USB_MSC_SCSI_VERIFY_10                          0x2Fu
144 #define USB_MSC_SCSI_INVALID_COMMAND_CODE               0xFFu
145 
146 /* Additional sense codes */
147 #define SC_NO_SENSE                                     0x00u
148 #define SC_RECOVERED_ERR                                0x01u
149 #define SC_NOT_READY                                    0x02u
150 #define SC_MEDIUM_ERROR                                 0x03u
151 #define SC_HARDWARE_ERR                                 0x04u
152 #define SC_ILLEGAL_REQUEST                              0x05u
153 #define SC_UNIT_ATTENTION                               0x06u
154 #define SC_DATA_PROTECT                                 0x07u
155 #define SC_BLANK_CHECK                                  0x08u
156 #define SC_VENDOR_SPECIFIC                              0x09u
157 #define SC_COPY_ABORTED                                 0x0Au
158 #define SC_ABORTED_COMMAND                              0x0Bu
159 /*0x0C is obsolete*/
160 #define SC_VOLUME_OVERFLOW                              0x0Du
161 #define SC_MISCOMPARE                                   0x0Eu
162 /*0x0F is reserved*/
163 
164 #define ASC_INVALID_CDB                                 0x20u
165 #define ASC_INVALID_FIELED_IN_COMMAND                   0x24u
166 #define ASC_PARAMETER_LIST_LENGTH_ERROR                 0x1Au
167 #define ASC_INVALID_FIELD_IN_PARAMETER_LIST             0x26u
168 #define ASC_ADDRESS_OUT_OF_RANGE                        0x21u
169 #define ASC_MEDIUM_NOT_PRESENT                          0x3Au
170 #define ASC_MEDIUM_HAS_CHANGED                          0x28u
171 #define ASC_WRITE_PROTECTED                             0x27u
172 #define ASC_UNRECOVERED_READ_ERROR                      0x11u
173 #define ASC_WRITE_FAULT                                 0x03u
174 
175 /*-------------------------------------------------------------------------*//**
176   CDC class related definitions
177  */
178 /* CDC Requests for ACM sub-class */
179 #define USB_CDC_SEND_ENCAPSULATED_COMMAND               0x00u
180 #define USB_CDC_GET_ENCAPSULATED_RESPONSE               0x01u
181 #define USB_CDC_SET_COMM_FEATURE                        0x02u
182 #define USB_CDC_GET_COMM_FEATURE                        0x03u
183 #define USB_CDC_CLEAR_COMM_FEATURE                      0x04u
184 #define USB_CDC_SET_LINE_CODING                         0x20u
185 #define USB_CDC_GET_LINE_CODING                         0x21u
186 #define USB_CDC_SET_CONTROL_LINE_STATE                  0x22u
187 #define USB_CDC_SEND_BREAK                              0x23u
188 
189 /*-------------------------------------------------------------------------*//**
190   HID class related definitions
191  */
192 #define USB_HID_DESCR_LENGTH                            9u
193 
194 #define USB_HID_DESCRIPTOR_TYPE                         0x21u
195 #define USB_REPORT_DESCRIPTOR_TYPE                      0x22u
196 
197 
198 #ifdef __cplusplus
199 }
200 #endif
201 
202 #endif  /* __MSS_USB_STD_DEF_H_ */
203