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 | * |-----+-----------------+------+--------------------------| |
