aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/usb
diff options
context:
space:
mode:
authorMichal Nazarewicz <mina86@mina86.com>2014-02-28 06:20:23 -0500
committerFelipe Balbi <balbi@ti.com>2014-03-05 15:40:11 -0500
commitac8dde11f2b397fe2282f585d5eb427a13675ea2 (patch)
treec871cc0fcb74b6f4d0794b5dac0719436c8dfed8 /include/uapi/linux/usb
parent8d4e897bd0150fab594a871484e554472ee01452 (diff)
usb: gadget: f_fs: Add flags to descriptors block
This reworks the way SuperSpeed descriptors are added and instead of having a magic after full and high speed descriptors, it reworks the whole descriptors block to include a flags field which lists which descriptors are present and makes future extensions possible. Signed-off-by: Michal Nazarewicz <mina86@mina86.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'include/uapi/linux/usb')
-rw-r--r--include/uapi/linux/usb/functionfs.h49
1 files changed, 30 insertions, 19 deletions
diff --git a/include/uapi/linux/usb/functionfs.h b/include/uapi/linux/usb/functionfs.h
index 0f8f7be5b0d3..2a4b4a72a4f9 100644
--- a/include/uapi/linux/usb/functionfs.h
+++ b/include/uapi/linux/usb/functionfs.h
@@ -10,10 +10,15 @@
10 10
11enum { 11enum {
12 FUNCTIONFS_DESCRIPTORS_MAGIC = 1, 12 FUNCTIONFS_DESCRIPTORS_MAGIC = 1,
13 FUNCTIONFS_STRINGS_MAGIC = 2 13 FUNCTIONFS_STRINGS_MAGIC = 2,
14 FUNCTIONFS_DESCRIPTORS_MAGIC_V2 = 3,
14}; 15};
15 16
16#define FUNCTIONFS_SS_DESC_MAGIC 0x0055DE5C 17enum functionfs_flags {
18 FUNCTIONFS_HAS_FS_DESC = 1,
19 FUNCTIONFS_HAS_HS_DESC = 2,
20 FUNCTIONFS_HAS_SS_DESC = 4,
21};
17 22
18#ifndef __KERNEL__ 23#ifndef __KERNEL__
19 24
@@ -30,33 +35,39 @@ struct usb_endpoint_descriptor_no_audio {
30 35
31 36
32/* 37/*
33 * All numbers must be in little endian order.
34 */
35
36struct usb_functionfs_descs_head {
37 __le32 magic;
38 __le32 length;
39 __le32 fs_count;
40 __le32 hs_count;
41} __attribute__((packed));
42
43/*
44 * Descriptors format: 38 * Descriptors format:
45 * 39 *
46 * | off | name | type | description | 40 * | off | name | type | description |
47 * |-----+-----------+--------------+--------------------------------------| 41 * |-----+-----------+--------------+--------------------------------------|
48 * | 0 | magic | LE32 | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | 42 * | 0 | magic | LE32 | FUNCTIONFS_DESCRIPTORS_MAGIC_V2 |
43 * | 4 | length | LE32 | length of the whole data chunk |
44 * | 8 | flags | LE32 | combination of functionfs_flags |
45 * | | fs_count | LE32 | number of full-speed descriptors |
46 * | | hs_count | LE32 | number of high-speed descriptors |
47 * | | ss_count | LE32 | number of super-speed descriptors |
48 * | | fs_descrs | Descriptor[] | list of full-speed descriptors |
49 * | | hs_descrs | Descriptor[] | list of high-speed descriptors |
50 * | | ss_descrs | Descriptor[] | list of super-speed descriptors |
51 *
52 * Depending on which flags are set, various fields may be missing in the
53 * structure. Any flags that are not recognised cause the whole block to be
54 * rejected with -ENOSYS.
55 *
56 * Legacy descriptors format:
57 *
58 * | off | name | type | description |
59 * |-----+-----------+--------------+--------------------------------------|
60 * | 0 | magic | LE32 | FUNCTIONFS_DESCRIPTORS_MAGIC |
49 * | 4 | length | LE32 | length of the whole data chunk | 61 * | 4 | length | LE32 | length of the whole data chunk |
50 * | 8 | fs_count | LE32 | number of full-speed descriptors | 62 * | 8 | fs_count | LE32 | number of full-speed descriptors |
51 * | 12 | hs_count | LE32 | number of high-speed descriptors | 63 * | 12 | hs_count | LE32 | number of high-speed descriptors |
52 * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors | 64 * | 16 | fs_descrs | Descriptor[] | list of full-speed descriptors |
53 * | | hs_descrs | Descriptor[] | list of high-speed descriptors | 65 * | | hs_descrs | Descriptor[] | list of high-speed descriptors |
54 * | | ss_magic | LE32 | FUNCTIONFS_SS_DESC_MAGIC |
55 * | | ss_count | LE32 | number of super-speed descriptors |
56 * | | ss_descrs | Descriptor[] | list of super-speed descriptors |
57 * 66 *
58 * ss_magic: if present then it implies that SS_DESCs are also present 67 * All numbers must be in little endian order.
59 * descs are just valid USB descriptors and have the following format: 68 *
69 * Descriptor[] is an array of valid USB descriptors which have the following
70 * format:
60 * 71 *
61 * | off | name | type | description | 72 * | off | name | type | description |
62 * |-----+-----------------+------+--------------------------| 73 * |-----+-----------------+------+--------------------------|