diff options
author | Michael Brown <mcb30@ipxe.org> | 2015-12-01 14:46:48 +0000 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2015-12-07 13:16:53 +0000 |
commit | 296dee6d38ffb9db4da79e868b741a689953246f (patch) | |
tree | 604d15e68e8c137fb26d1af300e7a2c12e9d28f6 /src/include/ipxe/cdc.h | |
parent | 53ba5936b5c70b030d81e8f2349d75a7264581ae (diff) | |
download | ipxe-296dee6d38ffb9db4da79e868b741a689953246f.tar.gz |
[acm] Add support for CDC-ACM (aka USB RNDIS) devices
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include/ipxe/cdc.h')
-rw-r--r-- | src/include/ipxe/cdc.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/include/ipxe/cdc.h b/src/include/ipxe/cdc.h index f1799cd9a..b8b4a59d9 100644 --- a/src/include/ipxe/cdc.h +++ b/src/include/ipxe/cdc.h @@ -14,6 +14,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); /** Class code for communications devices */ #define USB_CLASS_CDC 2 +/** Send encapsulated command */ +#define CDC_SEND_ENCAPSULATED_COMMAND \ + ( USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \ + USB_REQUEST_TYPE ( 0x00 ) ) + +/** Get encapsulated response */ +#define CDC_GET_ENCAPSULATED_RESPONSE \ + ( USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \ + USB_REQUEST_TYPE ( 0x01 ) ) + /** Union functional descriptor */ struct cdc_union_descriptor { /** Descriptor header */ @@ -30,6 +40,11 @@ struct cdc_union_descriptor { /** Ethernet descriptor subtype */ #define CDC_SUBTYPE_ETHERNET 15 +/** Response available */ +#define CDC_RESPONSE_AVAILABLE \ + ( USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \ + USB_REQUEST_TYPE ( 0x01 ) ) + /** Network connection notification */ #define CDC_NETWORK_CONNECTION \ ( USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \ @@ -52,4 +67,38 @@ extern struct cdc_union_descriptor * cdc_union_descriptor ( struct usb_configuration_descriptor *config, struct usb_interface_descriptor *interface ); +/** + * Send encapsulated command + * + * @v usb USB device + * @v interface Interface number + * @v data Command + * @v len Length of command + * @ret rc Return status code + */ +static inline __attribute__ (( always_inline )) int +cdc_send_encapsulated_command ( struct usb_device *usb, unsigned int interface, + void *data, size_t len ) { + + return usb_control ( usb, CDC_SEND_ENCAPSULATED_COMMAND, 0, interface, + data, len ); +} + +/** +* Get encapsulated response +* +* @v usb USB device +* @v interface Interface number +* @v data Response buffer +* @v len Length of response buffer +* @ret rc Return status code +*/ +static inline __attribute__ (( always_inline )) int +cdc_get_encapsulated_response ( struct usb_device *usb, unsigned int interface, + void *data, size_t len ) { + + return usb_control ( usb, CDC_GET_ENCAPSULATED_RESPONSE, 0, interface, + data, len ); +} + #endif /* _IPXE_CDC_H */ |