USB_DT_USB_SSP_CAP_SIZE(ssac) gives the size of the SSP capability descriptor. The descriptor consists of 12 bytes plus a array of SSA entries. The number of SSA entries is stored in a SSAC value in the first 12 bytes, The USB3.1 specification 9.6.2.5 defines SSAC as zero based: "The number of Sublink Speed Attributes = SSAC + 1." This is not intuitive and has already caused some confusion. Make a small modifiaction to the USB_DT_USB_SSP_CAP_SIZE(ssac) definition to make it a bit clearer
Showing the changes to include/uapi/linux (1 of 1 file). Show all
Unified · Split
| @@ -1077,9 +1077,9 @@ struct usb_ptm_cap_descriptor { · 1076 unmodified lines | ||
| 1077 | 1077 | #define USB_DT_USB_PTM_ID_SIZE 3 |
| 1078 | 1078 | /* |
| 1079 | 1079 | * The size of the descriptor for the Sublink Speed Attribute Count |
| 1080 | − * (SSAC) specified in bmAttributes[4:0]. | |
| 1080 | + * (SSAC) specified in bmAttributes[4:0]. SSAC is zero-based | |
| 1081 | 1081 | */ |
| 1082 | −#define USB_DT_USB_SSP_CAP_SIZE(ssac) (16 + ssac * 4) | |
| 1082 | +#define USB_DT_USB_SSP_CAP_SIZE(ssac) (12 + (ssac + 1) * 4) | |
| 1083 | 1083 | |
| 1084 | 1084 | /*-------------------------------------------------------------------------*/ |
| 1085 | 1085 | |