diff options
author | Shawn Nematbakhsh <shawnn@google.com> | 2015-11-07 15:17:11 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2015-11-08 17:31:11 -0800 |
commit | 6f4595ff7ac0821c9e4a4097444e6838e33b52c1 (patch) | |
tree | 86dd5f6fd1f28c8cc1b725c4f36941704fabdd13 /include/usb_descriptor.h | |
parent | 2d26ba2d24a4856557dc3cabf1162bd50d4cd6f5 (diff) | |
download | chrome-ec-6f4595ff7ac0821c9e4a4097444e6838e33b52c1.tar.gz |
cleanup: Rename usb.h to usb_descriptor.h
Rename usb.h to usb_descriptor.h to prevent conflict with a
commonly-used libusb header.
BUG=chromium:552006
BRANCH=None
TEST=`make buildall -j`
Change-Id: I6145ce120e1fda41bc5c4d4da0313272e76839c7
Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/311429
Commit-Ready: Shawn N <shawnn@chromium.org>
Tested-by: Shawn N <shawnn@chromium.org>
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'include/usb_descriptor.h')
-rw-r--r-- | include/usb_descriptor.h | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/include/usb_descriptor.h b/include/usb_descriptor.h new file mode 100644 index 0000000000..62dfe093e1 --- /dev/null +++ b/include/usb_descriptor.h @@ -0,0 +1,247 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * USB definitions. + */ + +#ifndef __CROS_EC_USB_DESCRIPTOR_H +#define __CROS_EC_USB_DESCRIPTOR_H + +#include <stddef.h> /* for wchar_t */ + +#include "usb_api.h" +#include "usb_hw.h" + +#define USB_MAX_PACKET_SIZE 64 + +/* USB 2.0 chapter 9 definitions */ + +/* Descriptor types */ +#define USB_DT_DEVICE 0x01 +#define USB_DT_CONFIGURATION 0x02 +#define USB_DT_STRING 0x03 +#define USB_DT_INTERFACE 0x04 +#define USB_DT_ENDPOINT 0x05 +#define USB_DT_DEVICE_QUALIFIER 0x06 +#define USB_DT_OTHER_SPEED_CONFIG 0x07 +#define USB_DT_INTERFACE_POWER 0x08 +#define USB_DT_DEBUG 0x0a +#define USB_DT_BOS 0x0f +#define USB_DT_DEVICE_CAPABILITY 0x10 + +/* USB Device Descriptor */ +struct usb_device_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t bcdUSB; + uint8_t bDeviceClass; + uint8_t bDeviceSubClass; + uint8_t bDeviceProtocol; + uint8_t bMaxPacketSize0; + uint16_t idVendor; + uint16_t idProduct; + uint16_t bcdDevice; + uint8_t iManufacturer; + uint8_t iProduct; + uint8_t iSerialNumber; + uint8_t bNumConfigurations; +} __packed; +#define USB_DT_DEVICE_SIZE 18 + +/* BOS Descriptor ( USB3.1 rev1 Section 9.6.2 ) */ +struct bos_context { + void *descp; + int size; +}; + +struct usb_bos_hdr_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; /* USB_DT_BOS */ + uint16_t wTotalLength; /* Total length of of hdr + all dev caps */ + uint8_t bNumDeviceCaps; /* Container ID Descriptor + others */ +} __packed; +#define USB_DT_BOS_SIZE 5 + +/* Container ID Descriptor */ +struct usb_contid_caps_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; /* USB_DT_DEVICE_CAPABILITY */ + uint8_t bDevCapabilityType; /* USB_DC_DTYPE_xxx */ + uint8_t bReserved; /* SBZ */ + uint8_t ContainerID[16]; /* UUID */ +} __packed; +#define USB_DT_CONTID_SIZE 20 + +/* Device Cap Type Codes ( offset 2 of Device Capability Descriptor */ +#define USB_DC_DTYPE_WIRELESS 0x01 +#define USB_DC_DTYPE_USB20EXT 0x02 +#define USB_DC_DTYPE_USBSS 0x03 +#define USB_DC_DTYPE_CONTID 0x04 +#define USB_DC_DTYPE_PLATFORM 0x05 +#define USB_DC_DTYPE_PD 0x06 +#define USB_DC_DTYPE_BATTINFO 0x07 +#define USB_DC_DTYPE_CONSUMER 0x08 +#define USB_DC_DTYPE_PRODUCER 0x09 +#define USB_DC_DTYPE_USBSSP 0x0a +#define USB_DC_DTYPE_PCSTIME 0x0b +#define USB_DC_DTYPE_WUSBEXT 0x0c +#define USB_DC_DTYPE_BILLBOARD 0x0d +/* RESERVED 0x00, 0xOe - 0xff */ + +/* Configuration Descriptor */ +struct usb_config_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wTotalLength; + uint8_t bNumInterfaces; + uint8_t bConfigurationValue; + uint8_t iConfiguration; + uint8_t bmAttributes; + uint8_t bMaxPower; +} __packed; +#define USB_DT_CONFIG_SIZE 9 + +/* String Descriptor */ +struct usb_string_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint16_t wData[1]; +} __packed; + +/* Interface Descriptor */ +struct usb_interface_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bInterfaceNumber; + uint8_t bAlternateSetting; + uint8_t bNumEndpoints; + uint8_t bInterfaceClass; + uint8_t bInterfaceSubClass; + uint8_t bInterfaceProtocol; + uint8_t iInterface; +} __packed; +#define USB_DT_INTERFACE_SIZE 9 + +/* Endpoint Descriptor */ +struct usb_endpoint_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint16_t wMaxPacketSize; + uint8_t bInterval; +} __packed; +#define USB_DT_ENDPOINT_SIZE 7 + +/* USB Class codes */ +#define USB_CLASS_PER_INTERFACE 0x00 +#define USB_CLASS_AUDIO 0x01 +#define USB_CLASS_COMM 0x02 +#define USB_CLASS_HID 0x03 +#define USB_CLASS_PHYSICAL 0x05 +#define USB_CLASS_STILL_IMAGE 0x06 +#define USB_CLASS_PRINTER 0x07 +#define USB_CLASS_MASS_STORAGE 0x08 +#define USB_CLASS_HUB 0x09 +#define USB_CLASS_CDC_DATA 0x0a +#define USB_CLASS_CSCID 0x0b +#define USB_CLASS_CONTENT_SEC 0x0d +#define USB_CLASS_VIDEO 0x0e +#define USB_CLASS_BILLBOARD 0x11 +#define USB_CLASS_WIRELESS_CONTROLLER 0xe0 +#define USB_CLASS_MISC 0xef +#define USB_CLASS_APP_SPEC 0xfe +#define USB_CLASS_VENDOR_SPEC 0xff + +/* USB Vendor ID assigned to Google Inc. */ +#define USB_VID_GOOGLE 0x18d1 + +/* Google specific SubClass/Protocol assignments */ +#define USB_SUBCLASS_GOOGLE_SERIAL 0x50 +#define USB_PROTOCOL_GOOGLE_SERIAL 0x01 + +#define USB_SUBCLASS_GOOGLE_SPI 0x51 +#define USB_PROTOCOL_GOOGLE_SPI 0x01 + +/* Control requests */ + +/* bRequestType fields */ +/* direction field */ +#define USB_DIR_OUT 0 /* from host to uC */ +#define USB_DIR_IN 0x80 /* from uC to host */ +/* type field */ +#define USB_TYPE_MASK (0x03 << 5) +#define USB_TYPE_STANDARD (0x00 << 5) +#define USB_TYPE_CLASS (0x01 << 5) +#define USB_TYPE_VENDOR (0x02 << 5) +#define USB_TYPE_RESERVED (0x03 << 5) +/* recipient field */ +#define USB_RECIP_MASK 0x1f +#define USB_RECIP_DEVICE 0x00 +#define USB_RECIP_INTERFACE 0x01 +#define USB_RECIP_ENDPOINT 0x02 +#define USB_RECIP_OTHER 0x03 + +/* Standard requests for bRequest field in a SETUP packet. */ +#define USB_REQ_GET_STATUS 0x00 +#define USB_REQ_CLEAR_FEATURE 0x01 +#define USB_REQ_SET_FEATURE 0x03 +#define USB_REQ_SET_ADDRESS 0x05 +#define USB_REQ_GET_DESCRIPTOR 0x06 +#define USB_REQ_SET_DESCRIPTOR 0x07 +#define USB_REQ_GET_CONFIGURATION 0x08 +#define USB_REQ_SET_CONFIGURATION 0x09 +#define USB_REQ_GET_INTERFACE 0x0A +#define USB_REQ_SET_INTERFACE 0x0B +#define USB_REQ_SYNCH_FRAME 0x0C + +/* Setup Packet */ +struct usb_setup_packet { + uint8_t bmRequestType; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; +}; + +/* Helpers for descriptors */ + +#define WIDESTR(quote) WIDESTR2(quote) +#define WIDESTR2(quote) L##quote + +#define USB_STRING_DESC(str) \ + (const void *)&(const struct { \ + uint8_t _len; \ + uint8_t _type; \ + wchar_t _data[sizeof(str)]; \ + }) { \ + /* Total size of the descriptor is : \ + * size of the UTF-16 text plus the len/type fields \ + * minus the string 0-termination \ + */ \ + sizeof(WIDESTR(str)) + 2 - 2, \ + USB_DT_STRING, \ + WIDESTR(str) \ + } + +/* Use these macros for declaring descriptors, to order them properly */ +#define USB_CONF_DESC(name) CONCAT2(usb_desc_, name) \ + __attribute__((section(".rodata.usb_desc_" STRINGIFY(name)))) +#define USB_IFACE_DESC(num) USB_CONF_DESC(CONCAT3(iface, num, _0iface)) +#define USB_EP_DESC(i, num) USB_CONF_DESC(CONCAT4(iface, i, _1ep, num)) +#define USB_CUSTOM_DESC(i, name) USB_CONF_DESC(CONCAT4(iface, i, _2, name)) + +/* USB Linker data */ +extern const uint8_t __usb_desc[]; +extern const uint8_t __usb_desc_end[]; +#define USB_DESC_SIZE (__usb_desc_end - __usb_desc) + +/* These descriptors defined in board code */ +extern const void * const usb_strings[]; +extern const uint8_t usb_string_desc[]; +/* USB string descriptor with the firmware version */ +extern const void * const usb_fw_version; +extern const struct bos_context bos_ctx; + +#endif /* __CROS_EC_USB_DESCRIPTOR_H */ |