diff options
author | Michal Nazarewicz <mina86@mina86.com> | 2014-02-28 06:20:23 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2014-03-05 15:40:11 -0500 |
commit | ac8dde11f2b397fe2282f585d5eb427a13675ea2 (patch) | |
tree | c871cc0fcb74b6f4d0794b5dac0719436c8dfed8 /include/uapi/linux/usb | |
parent | 8d4e897bd0150fab594a871484e554472ee01452 (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.h | 49 |
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 | ||
11 | enum { | 11 | enum { |
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 | 17 | enum 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 | |||
36 | struct 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 | * |-----+-----------------+------+--------------------------| |