From bf9c6d72e8fccdda4f5f786678b9840021333b55 Mon Sep 17 00:00:00 2001 From: Andrei Emeltchenko Date: Thu, 31 Jan 2019 17:23:32 +0200 Subject: [PATCH] usb: Add instance parameter to descriptors definitions This allows to place instances of the class one after another in the linker section. Fixes #12908 Signed-off-by: Andrei Emeltchenko --- include/usb/usb_device.h | 4 ++-- subsys/usb/class/bluetooth.c | 3 ++- subsys/usb/class/cdc_acm.c | 2 +- subsys/usb/class/hid/core.c | 2 +- subsys/usb/class/loopback.c | 2 +- subsys/usb/class/mass_storage.c | 2 +- subsys/usb/class/netusb/function_ecm.c | 2 +- subsys/usb/class/netusb/function_eem.c | 2 +- subsys/usb/class/netusb/function_rndis.c | 2 +- subsys/usb/class/usb_dfu.c | 2 +- tests/subsys/usb/desc_sections/src/desc_sections.c | 4 ++-- 11 files changed, 14 insertions(+), 13 deletions(-) diff --git a/include/usb/usb_device.h b/include/usb/usb_device.h index c8fefd287f3..572f677b073 100644 --- a/include/usb/usb_device.h +++ b/include/usb/usb_device.h @@ -50,8 +50,8 @@ extern "C" { */ #define USBD_DEVICE_DESCR_DEFINE(p) \ static __in_section(usb, descriptor_##p, 0) __used -#define USBD_CLASS_DESCR_DEFINE(p) \ - static __in_section(usb, descriptor_##p, 1) __used +#define USBD_CLASS_DESCR_DEFINE(p, instance) \ + static __in_section(usb, descriptor_##p.1, instance) __used #define USBD_MISC_DESCR_DEFINE(p) \ static __in_section(usb, descriptor_##p, 2) __used #define USBD_USER_DESCR_DEFINE(p) \ diff --git a/subsys/usb/class/bluetooth.c b/subsys/usb/class/bluetooth.c index b07401342ac..2d30ee3a4dc 100644 --- a/subsys/usb/class/bluetooth.c +++ b/subsys/usb/class/bluetooth.c @@ -57,7 +57,8 @@ struct usb_bluetooth_config { struct usb_ep_descriptor if0_in_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_bluetooth_config bluetooth_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) + struct usb_bluetooth_config bluetooth_cfg = { /* Interface descriptor 0 */ .if0 = { .bLength = sizeof(struct usb_if_descriptor), diff --git a/subsys/usb/class/cdc_acm.c b/subsys/usb/class/cdc_acm.c index 038bd6026b1..70539d31ee7 100644 --- a/subsys/usb/class/cdc_acm.c +++ b/subsys/usb/class/cdc_acm.c @@ -99,7 +99,7 @@ struct usb_cdc_acm_config { struct usb_ep_descriptor if1_out_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_cdc_acm_config cdc_acm_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_cdc_acm_config cdc_acm_cfg = { #ifdef CONFIG_USB_COMPOSITE_DEVICE .iad_cdc = { .bLength = sizeof(struct usb_association_descriptor), diff --git a/subsys/usb/class/hid/core.c b/subsys/usb/class/hid/core.c index bf5da769076..e64b7f04c37 100644 --- a/subsys/usb/class/hid/core.c +++ b/subsys/usb/class/hid/core.c @@ -35,7 +35,7 @@ struct usb_hid_config { #endif } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_hid_config hid_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_hid_config hid_cfg = { /* Interface descriptor */ .if0 = { .bLength = sizeof(struct usb_if_descriptor), diff --git a/subsys/usb/class/loopback.c b/subsys/usb/class/loopback.c index 0300c440a05..ccc3ceda06a 100644 --- a/subsys/usb/class/loopback.c +++ b/subsys/usb/class/loopback.c @@ -36,7 +36,7 @@ struct usb_loopback_config { struct usb_ep_descriptor if0_in_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_loopback_config loopback_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_loopback_config loopback_cfg = { /* Interface descriptor 0 */ .if0 = { .bLength = sizeof(struct usb_if_descriptor), diff --git a/subsys/usb/class/mass_storage.c b/subsys/usb/class/mass_storage.c index eec2129fa0c..933a13ef181 100644 --- a/subsys/usb/class/mass_storage.c +++ b/subsys/usb/class/mass_storage.c @@ -68,7 +68,7 @@ struct usb_mass_config { struct usb_ep_descriptor if0_out_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_mass_config mass_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_mass_config mass_cfg = { /* Interface descriptor */ .if0 = { .bLength = sizeof(struct usb_if_descriptor), diff --git a/subsys/usb/class/netusb/function_ecm.c b/subsys/usb/class/netusb/function_ecm.c index 65a8c53dff8..d5049c6db01 100644 --- a/subsys/usb/class/netusb/function_ecm.c +++ b/subsys/usb/class/netusb/function_ecm.c @@ -53,7 +53,7 @@ struct usb_cdc_ecm_config { struct usb_ep_descriptor if1_1_out_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_cdc_ecm_config cdc_ecm_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_cdc_ecm_config cdc_ecm_cfg = { #ifdef CONFIG_USB_COMPOSITE_DEVICE .iad = { .bLength = sizeof(struct usb_association_descriptor), diff --git a/subsys/usb/class/netusb/function_eem.c b/subsys/usb/class/netusb/function_eem.c index 97a25450501..ed7bc8c5b5b 100644 --- a/subsys/usb/class/netusb/function_eem.c +++ b/subsys/usb/class/netusb/function_eem.c @@ -27,7 +27,7 @@ struct usb_cdc_eem_config { struct usb_ep_descriptor if0_out_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_cdc_eem_config cdc_eem_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_cdc_eem_config cdc_eem_cfg = { /* Interface descriptor 0 */ /* CDC Communication interface */ .if0 = { diff --git a/subsys/usb/class/netusb/function_rndis.c b/subsys/usb/class/netusb/function_rndis.c index e7649cde640..d15a739d545 100644 --- a/subsys/usb/class/netusb/function_rndis.c +++ b/subsys/usb/class/netusb/function_rndis.c @@ -69,7 +69,7 @@ struct usb_rndis_config { struct usb_ep_descriptor if1_out_ep; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_rndis_config rndis_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_rndis_config rndis_cfg = { #ifdef CONFIG_USB_COMPOSITE_DEVICE .iad = { .bLength = sizeof(struct usb_association_descriptor), diff --git a/subsys/usb/class/usb_dfu.c b/subsys/usb/class/usb_dfu.c index bedd01a45da..22f70a4b699 100644 --- a/subsys/usb/class/usb_dfu.c +++ b/subsys/usb/class/usb_dfu.c @@ -78,7 +78,7 @@ struct usb_dfu_config { struct dfu_runtime_descriptor dfu_descr; } __packed; -USBD_CLASS_DESCR_DEFINE(primary) struct usb_dfu_config dfu_cfg = { +USBD_CLASS_DESCR_DEFINE(primary, 0) struct usb_dfu_config dfu_cfg = { /* Interface descriptor */ .if0 = { .bLength = sizeof(struct usb_if_descriptor), diff --git a/tests/subsys/usb/desc_sections/src/desc_sections.c b/tests/subsys/usb/desc_sections/src/desc_sections.c index 2d61c393020..fc9171efbfa 100644 --- a/tests/subsys/usb/desc_sections/src/desc_sections.c +++ b/tests/subsys/usb/desc_sections/src/desc_sections.c @@ -64,7 +64,7 @@ struct usb_loopback_config { #define DEFINE_LOOPBACK_DESC(x) \ - USBD_CLASS_DESCR_DEFINE(primary) \ + USBD_CLASS_DESCR_DEFINE(primary, x) \ struct usb_loopback_config loopback_cfg_##x = { \ .if0 = INITIALIZER_IF, \ .if0_out_ep = INITIALIZER_IF_EP(LOOPBACK_OUT_EP_ADDR, \ @@ -88,7 +88,7 @@ struct usb_loopback_config { } #define DEFINE_LOOPBACK_CFG_DATA(x) \ - USBD_CFG_DATA_DEFINE(loopback) \ + USBD_CFG_DATA_DEFINE(loopback_##x) \ struct usb_cfg_data loopback_config_##x = { \ .usb_device_description = NULL, \ .interface_config = NULL, \