zephyr/include/usb/bos.h
Nicolas Pitre 9d11900dc3 usb: enforce byte alignment on USB records
As seen previously, some toolchain are willing to insert padding
at section changes to apply greater alignments by default. This is
especially true with 64-bit builds. USB structures are marked with the
packed attribute and therefore the linker section they land into
must also be byte aligned.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
2019-06-17 16:41:43 -04:00

62 lines
1.5 KiB
C

/*
* Copyright (c) 2018 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_USB_BOS_H_
#define ZEPHYR_INCLUDE_USB_BOS_H_
#if defined(CONFIG_USB_DEVICE_BOS)
#define USB_DEVICE_BOS_DESC_DEFINE_HDR \
static __in_section(usb, bos_desc_area, 0) __aligned(1) __used
#define USB_DEVICE_BOS_DESC_DEFINE_CAP \
static __in_section(usb, bos_desc_area, 1) __aligned(1) __used
/* BOS descriptor type */
#define DESCRIPTOR_TYPE_BOS 0x0F
#define USB_BOS_CAPABILITY_PLATFORM 0x05
/* BOS Capability Descriptor */
struct usb_bos_platform_descriptor {
u8_t bLength;
u8_t bDescriptorType;
u8_t bDevCapabilityType;
u8_t bReserved;
u8_t PlatformCapabilityUUID[16];
} __packed;
/* BOS Descriptor */
struct usb_bos_descriptor {
u8_t bLength;
u8_t bDescriptorType;
u16_t wTotalLength;
u8_t bNumDeviceCaps;
} __packed;
/* BOS Capability webusb */
struct usb_bos_capability_webusb {
u16_t bcdVersion;
u8_t bVendorCode;
u8_t iLandingPage;
} __packed;
/* BOS Capability MS OS Descriptors version 2 */
struct usb_bos_capability_msos {
u32_t dwWindowsVersion;
u16_t wMSOSDescriptorSetTotalLength;
u8_t bMS_VendorCode;
u8_t bAltEnumCode;
} __packed;
size_t usb_bos_get_length(void);
void usb_bos_fix_total_length(void);
void usb_bos_register_cap(struct usb_bos_platform_descriptor *hdr);
const void *usb_bos_get_header(void);
int usb_handle_bos(struct usb_setup_packet *setup, s32_t *len, u8_t **data);
#else
#define usb_handle_bos(x, y, z) -ENOTSUP
#endif
#endif /* ZEPHYR_INCLUDE_USB_BOS_H_ */