tools: usb: ffs-aio-example: Fix build error with aarch64-*-gnu-gcc toolchain(s)
The tools/usb/aio_simple.c file when cross-compiled with aarch64-*-gnu-gcc toolchain(s) leads to the following errors: aio_simple.c:30:10: fatal error: endian.h: No such file or directory 30 | #include <endian.h> | ^~~~~~~~~~ aio_simple.c:88:14: note: (near initialization for 'descriptors.fs_count') aio_simple.c:110:14: error: initializer element is not constant 110 | .hs_count = htole32(3), | ^~~~~~~ aio_simple.c:110:14: note: (near initialization for 'descriptors.hs_count') aio_simple.c:124:22: error: initializer element is not constant 124 | .wMaxPacketSize = htole16(512), | ^~~~~~~ aio_simple.c:124:22: note: (near initialization for 'descriptors.hs_descs.bulk_sink.wMaxPacketSize') Fix these compilation issues by: - Switching to _DEFAULT_SOURCE: _BSD_SOURCE is deprecated and gives a build warning. Let's use _DEFAULT_SOURCE instead. - Currently this file uses library htole16/32 function calls. Replace these with equivalent 'cpu_to_le16/32' calls. Cc: Felipe Balbi <balbi@kernel.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org> Link: https://lore.kernel.org/r/20221029161312.171165-1-bhupesh.sharma@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
dced88922c
commit
c5edb757ba
|
@ -25,7 +25,9 @@
|
||||||
* For more information, please refer to <http://unlicense.org/>
|
* For more information, please refer to <http://unlicense.org/>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _BSD_SOURCE /* for endian.h */
|
/* $(CROSS_COMPILE)cc -g -o aio_simple aio_simple.c -laio */
|
||||||
|
|
||||||
|
#define _DEFAULT_SOURCE /* for endian.h */
|
||||||
|
|
||||||
#include <endian.h>
|
#include <endian.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -49,6 +51,22 @@
|
||||||
|
|
||||||
#define BUF_LEN 8192
|
#define BUF_LEN 8192
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cpu_to_le16/32 are used when initializing structures, a context where a
|
||||||
|
* function call is not allowed. To solve this, we code cpu_to_le16/32 in a way
|
||||||
|
* that allows them to be used when initializing structures.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
#define cpu_to_le16(x) (x)
|
||||||
|
#define cpu_to_le32(x) (x)
|
||||||
|
#else
|
||||||
|
#define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
|
||||||
|
#define cpu_to_le32(x) \
|
||||||
|
((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \
|
||||||
|
(((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************** Descriptors and Strings *******************************/
|
/******************** Descriptors and Strings *******************************/
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
@ -62,12 +80,12 @@ static const struct {
|
||||||
} __attribute__ ((__packed__)) fs_descs, hs_descs;
|
} __attribute__ ((__packed__)) fs_descs, hs_descs;
|
||||||
} __attribute__ ((__packed__)) descriptors = {
|
} __attribute__ ((__packed__)) descriptors = {
|
||||||
.header = {
|
.header = {
|
||||||
.magic = htole32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2),
|
.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2),
|
||||||
.flags = htole32(FUNCTIONFS_HAS_FS_DESC |
|
.flags = cpu_to_le32(FUNCTIONFS_HAS_FS_DESC |
|
||||||
FUNCTIONFS_HAS_HS_DESC),
|
FUNCTIONFS_HAS_HS_DESC),
|
||||||
.length = htole32(sizeof(descriptors)),
|
.length = cpu_to_le32(sizeof(descriptors)),
|
||||||
},
|
},
|
||||||
.fs_count = htole32(3),
|
.fs_count = cpu_to_le32(3),
|
||||||
.fs_descs = {
|
.fs_descs = {
|
||||||
.intf = {
|
.intf = {
|
||||||
.bLength = sizeof(descriptors.fs_descs.intf),
|
.bLength = sizeof(descriptors.fs_descs.intf),
|
||||||
|
@ -89,7 +107,7 @@ static const struct {
|
||||||
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.hs_count = htole32(3),
|
.hs_count = cpu_to_le32(3),
|
||||||
.hs_descs = {
|
.hs_descs = {
|
||||||
.intf = {
|
.intf = {
|
||||||
.bLength = sizeof(descriptors.hs_descs.intf),
|
.bLength = sizeof(descriptors.hs_descs.intf),
|
||||||
|
@ -103,14 +121,14 @@ static const struct {
|
||||||
.bDescriptorType = USB_DT_ENDPOINT,
|
.bDescriptorType = USB_DT_ENDPOINT,
|
||||||
.bEndpointAddress = 1 | USB_DIR_IN,
|
.bEndpointAddress = 1 | USB_DIR_IN,
|
||||||
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
||||||
.wMaxPacketSize = htole16(512),
|
.wMaxPacketSize = cpu_to_le16(512),
|
||||||
},
|
},
|
||||||
.bulk_source = {
|
.bulk_source = {
|
||||||
.bLength = sizeof(descriptors.hs_descs.bulk_source),
|
.bLength = sizeof(descriptors.hs_descs.bulk_source),
|
||||||
.bDescriptorType = USB_DT_ENDPOINT,
|
.bDescriptorType = USB_DT_ENDPOINT,
|
||||||
.bEndpointAddress = 2 | USB_DIR_OUT,
|
.bEndpointAddress = 2 | USB_DIR_OUT,
|
||||||
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
.bmAttributes = USB_ENDPOINT_XFER_BULK,
|
||||||
.wMaxPacketSize = htole16(512),
|
.wMaxPacketSize = cpu_to_le16(512),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -125,13 +143,13 @@ static const struct {
|
||||||
} __attribute__ ((__packed__)) lang0;
|
} __attribute__ ((__packed__)) lang0;
|
||||||
} __attribute__ ((__packed__)) strings = {
|
} __attribute__ ((__packed__)) strings = {
|
||||||
.header = {
|
.header = {
|
||||||
.magic = htole32(FUNCTIONFS_STRINGS_MAGIC),
|
.magic = cpu_to_le32(FUNCTIONFS_STRINGS_MAGIC),
|
||||||
.length = htole32(sizeof(strings)),
|
.length = cpu_to_le32(sizeof(strings)),
|
||||||
.str_count = htole32(1),
|
.str_count = cpu_to_le32(1),
|
||||||
.lang_count = htole32(1),
|
.lang_count = cpu_to_le32(1),
|
||||||
},
|
},
|
||||||
.lang0 = {
|
.lang0 = {
|
||||||
htole16(0x0409), /* en-us */
|
cpu_to_le16(0x0409), /* en-us */
|
||||||
STR_INTERFACE,
|
STR_INTERFACE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue