diff options
Diffstat (limited to 'include/linux/usb/cdc.h')
| -rw-r--r-- | include/linux/usb/cdc.h | 94 | 
1 files changed, 94 insertions, 0 deletions
diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h index c24124a42ce..c117a68d04a 100644 --- a/include/linux/usb/cdc.h +++ b/include/linux/usb/cdc.h @@ -18,6 +18,7 @@  #define USB_CDC_SUBCLASS_MDLM			0x0a  #define USB_CDC_SUBCLASS_OBEX			0x0b  #define USB_CDC_SUBCLASS_EEM			0x0c +#define USB_CDC_SUBCLASS_NCM			0x0d  #define USB_CDC_PROTO_NONE			0 @@ -49,6 +50,7 @@  #define USB_CDC_MDLM_DETAIL_TYPE	0x13	/* mdlm_detail_desc */  #define USB_CDC_DMM_TYPE		0x14  #define USB_CDC_OBEX_TYPE		0x15 +#define USB_CDC_NCM_TYPE		0x1a  /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */  struct usb_cdc_header_desc { @@ -174,6 +176,15 @@ struct usb_cdc_obex_desc {  	__le16	bcdVersion;  } __attribute__ ((packed)); +/* "NCM Control Model Functional Descriptor" */ +struct usb_cdc_ncm_desc { +	__u8	bLength; +	__u8	bDescriptorType; +	__u8	bDescriptorSubType; + +	__le16	bcdNcmVersion; +	__u8	bmNetworkCapabilities; +} __attribute__ ((packed));  /*-------------------------------------------------------------------------*/  /* @@ -197,6 +208,17 @@ struct usb_cdc_obex_desc {  #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER	0x42  #define USB_CDC_SET_ETHERNET_PACKET_FILTER	0x43  #define USB_CDC_GET_ETHERNET_STATISTIC		0x44 +#define USB_CDC_GET_NTB_PARAMETERS		0x80 +#define USB_CDC_GET_NET_ADDRESS			0x81 +#define USB_CDC_SET_NET_ADDRESS			0x82 +#define USB_CDC_GET_NTB_FORMAT			0x83 +#define USB_CDC_SET_NTB_FORMAT			0x84 +#define USB_CDC_GET_NTB_INPUT_SIZE		0x85 +#define USB_CDC_SET_NTB_INPUT_SIZE		0x86 +#define USB_CDC_GET_MAX_DATAGRAM_SIZE		0x87 +#define USB_CDC_SET_MAX_DATAGRAM_SIZE		0x88 +#define USB_CDC_GET_CRC_MODE			0x89 +#define USB_CDC_SET_CRC_MODE			0x8a  /* Line Coding Structure from CDC spec 6.2.13 */  struct usb_cdc_line_coding { @@ -247,4 +269,76 @@ struct usb_cdc_notification {  	__le16	wLength;  } __attribute__ ((packed)); +/*-------------------------------------------------------------------------*/ + +/* + * Class Specific structures and constants + * + * CDC NCM parameter structure, CDC NCM subclass 6.2.1 + * + */ + +struct usb_cdc_ncm_ntb_parameter { +	__le16	wLength; +	__le16	bmNtbFormatSupported; +	__le32	dwNtbInMaxSize; +	__le16	wNdpInDivisor; +	__le16	wNdpInPayloadRemainder; +	__le16	wNdpInAlignment; +	__le16	wPadding1; +	__le32	dwNtbOutMaxSize; +	__le16	wNdpOutDivisor; +	__le16	wNdpOutPayloadRemainder; +	__le16	wNdpOutAlignment; +	__le16	wPadding2; +} __attribute__ ((packed)); + +/* + * CDC NCM transfer headers, CDC NCM subclass 3.2 + */ + +#define NCM_NTH16_SIGN		0x484D434E /* NCMH */ +#define NCM_NTH32_SIGN		0x686D636E /* ncmh */ + +struct usb_cdc_ncm_nth16 { +	__le32	dwSignature; +	__le16	wHeaderLength; +	__le16	wSequence; +	__le16	wBlockLength; +	__le16	wFpIndex; +} __attribute__ ((packed)); + +struct usb_cdc_ncm_nth32 { +	__le32	dwSignature; +	__le16	wHeaderLength; +	__le16	wSequence; +	__le32	dwBlockLength; +	__le32	dwFpIndex; +} __attribute__ ((packed)); + +/* + * CDC NCM datagram pointers, CDC NCM subclass 3.3 + */ + +#define NCM_NDP16_CRC_SIGN	0x314D434E /* NCM1 */ +#define NCM_NDP16_NOCRC_SIGN	0x304D434E /* NCM0 */ +#define NCM_NDP32_CRC_SIGN	0x316D636E /* ncm1 */ +#define NCM_NDP32_NOCRC_SIGN	0x306D636E /* ncm0 */ + +struct usb_cdc_ncm_ndp16 { +	__le32	dwSignature; +	__le16	wLength; +	__le16	wNextFpIndex; +	__u8	data[0]; +} __attribute__ ((packed)); + +struct usb_cdc_ncm_ndp32 { +	__le32	dwSignature; +	__le16	wLength; +	__le16	wReserved6; +	__le32	dwNextFpIndex; +	__le32	dwReserved12; +	__u8	data[0]; +} __attribute__ ((packed)); +  #endif /* __LINUX_USB_CDC_H */  |