diff options
-rw-r--r-- | include/linux/usb/association.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/include/linux/usb/association.h b/include/linux/usb/association.h new file mode 100644 index 000000000000..07c5e3cf5898 --- /dev/null +++ b/include/linux/usb/association.h | |||
@@ -0,0 +1,150 @@ | |||
1 | /* | ||
2 | * Wireless USB - Cable Based Association | ||
3 | * | ||
4 | * Copyright (C) 2006 Intel Corporation | ||
5 | * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License version | ||
9 | * 2 as published by the Free Software Foundation. | ||
10 | * | ||
11 | */ | ||
12 | #ifndef __LINUX_USB_ASSOCIATION_H | ||
13 | #define __LINUX_USB_ASSOCIATION_H | ||
14 | |||
15 | |||
16 | /* | ||
17 | * Association attributes | ||
18 | * | ||
19 | * Association Models Supplement to WUSB 1.0 T[3-1] | ||
20 | * | ||
21 | * Each field in the structures has it's ID, it's length and then the | ||
22 | * value. This is the actual definition of the field's ID and its | ||
23 | * length. | ||
24 | */ | ||
25 | struct wusb_am_attr { | ||
26 | __u8 id; | ||
27 | __u8 len; | ||
28 | }; | ||
29 | |||
30 | /* Different fields defined by the spec */ | ||
31 | #define WUSB_AR_AssociationTypeId { .id = 0x0000, .len = 2 } | ||
32 | #define WUSB_AR_AssociationSubTypeId { .id = 0x0001, .len = 2 } | ||
33 | #define WUSB_AR_Length { .id = 0x0002, .len = 4 } | ||
34 | #define WUSB_AR_AssociationStatus { .id = 0x0004, .len = 4 } | ||
35 | #define WUSB_AR_LangID { .id = 0x0008, .len = 2 } | ||
36 | #define WUSB_AR_DeviceFriendlyName { .id = 0x000b, .len = 64 } /* max */ | ||
37 | #define WUSB_AR_HostFriendlyName { .id = 0x000c, .len = 64 } /* max */ | ||
38 | #define WUSB_AR_CHID { .id = 0x1000, .len = 16 } | ||
39 | #define WUSB_AR_CDID { .id = 0x1001, .len = 16 } | ||
40 | #define WUSB_AR_ConnectionContext { .id = 0x1002, .len = 48 } | ||
41 | #define WUSB_AR_BandGroups { .id = 0x1004, .len = 2 } | ||
42 | |||
43 | /* CBAF Control Requests (AMS1.0[T4-1] */ | ||
44 | enum { | ||
45 | CBAF_REQ_GET_ASSOCIATION_INFORMATION = 0x01, | ||
46 | CBAF_REQ_GET_ASSOCIATION_REQUEST, | ||
47 | CBAF_REQ_SET_ASSOCIATION_RESPONSE | ||
48 | }; | ||
49 | |||
50 | /* | ||
51 | * CBAF USB-interface defitions | ||
52 | * | ||
53 | * No altsettings, one optional interrupt endpoint. | ||
54 | */ | ||
55 | enum { | ||
56 | CBAF_IFACECLASS = 0xef, | ||
57 | CBAF_IFACESUBCLASS = 0x03, | ||
58 | CBAF_IFACEPROTOCOL = 0x01, | ||
59 | }; | ||
60 | |||
61 | /* Association Information (AMS1.0[T4-3]) */ | ||
62 | struct wusb_cbaf_assoc_info { | ||
63 | __le16 Length; | ||
64 | __u8 NumAssociationRequests; | ||
65 | __le16 Flags; | ||
66 | __u8 AssociationRequestsArray[]; | ||
67 | } __attribute__((packed)); | ||
68 | |||
69 | /* Association Request (AMS1.0[T4-4]) */ | ||
70 | struct wusb_cbaf_assoc_request { | ||
71 | __u8 AssociationDataIndex; | ||
72 | __u8 Reserved; | ||
73 | __le16 AssociationTypeId; | ||
74 | __le16 AssociationSubTypeId; | ||
75 | __le32 AssociationTypeInfoSize; | ||
76 | } __attribute__((packed)); | ||
77 | |||
78 | enum { | ||
79 | AR_TYPE_WUSB = 0x0001, | ||
80 | AR_TYPE_WUSB_RETRIEVE_HOST_INFO = 0x0000, | ||
81 | AR_TYPE_WUSB_ASSOCIATE = 0x0001, | ||
82 | }; | ||
83 | |||
84 | /* Association Attribute header (AMS1.0[3.8]) */ | ||
85 | struct wusb_cbaf_attr_hdr { | ||
86 | __le16 id; | ||
87 | __le16 len; | ||
88 | } __attribute__((packed)); | ||
89 | |||
90 | /* Host Info (AMS1.0[T4-7]) (yeah, more headers and fields...) */ | ||
91 | struct wusb_cbaf_host_info { | ||
92 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
93 | __le16 AssociationTypeId; | ||
94 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
95 | __le16 AssociationSubTypeId; | ||
96 | struct wusb_cbaf_attr_hdr CHID_hdr; | ||
97 | struct wusb_ckhdid CHID; | ||
98 | struct wusb_cbaf_attr_hdr LangID_hdr; | ||
99 | __le16 LangID; | ||
100 | struct wusb_cbaf_attr_hdr HostFriendlyName_hdr; | ||
101 | __u8 HostFriendlyName[]; | ||
102 | } __attribute__((packed)); | ||
103 | |||
104 | /* Device Info (AMS1.0[T4-8]) | ||
105 | * | ||
106 | * I still don't get this tag'n'header stuff for each goddamn | ||
107 | * field... | ||
108 | */ | ||
109 | struct wusb_cbaf_device_info { | ||
110 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
111 | __le32 Length; | ||
112 | struct wusb_cbaf_attr_hdr CDID_hdr; | ||
113 | struct wusb_ckhdid CDID; | ||
114 | struct wusb_cbaf_attr_hdr BandGroups_hdr; | ||
115 | __le16 BandGroups; | ||
116 | struct wusb_cbaf_attr_hdr LangID_hdr; | ||
117 | __le16 LangID; | ||
118 | struct wusb_cbaf_attr_hdr DeviceFriendlyName_hdr; | ||
119 | __u8 DeviceFriendlyName[]; | ||
120 | } __attribute__((packed)); | ||
121 | |||
122 | /* Connection Context; CC_DATA - Success case (AMS1.0[T4-9]) */ | ||
123 | struct wusb_cbaf_cc_data { | ||
124 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
125 | __le16 AssociationTypeId; | ||
126 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
127 | __le16 AssociationSubTypeId; | ||
128 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
129 | __le32 Length; | ||
130 | struct wusb_cbaf_attr_hdr ConnectionContext_hdr; | ||
131 | struct wusb_ckhdid CHID; | ||
132 | struct wusb_ckhdid CDID; | ||
133 | struct wusb_ckhdid CK; | ||
134 | struct wusb_cbaf_attr_hdr BandGroups_hdr; | ||
135 | __le16 BandGroups; | ||
136 | } __attribute__((packed)); | ||
137 | |||
138 | /* CC_DATA - Failure case (AMS1.0[T4-10]) */ | ||
139 | struct wusb_cbaf_cc_data_fail { | ||
140 | struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; | ||
141 | __le16 AssociationTypeId; | ||
142 | struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; | ||
143 | __le16 AssociationSubTypeId; | ||
144 | struct wusb_cbaf_attr_hdr Length_hdr; | ||
145 | __le16 Length; | ||
146 | struct wusb_cbaf_attr_hdr AssociationStatus_hdr; | ||
147 | __u32 AssociationStatus; | ||
148 | } __attribute__((packed)); | ||
149 | |||
150 | #endif /* __LINUX_USB_ASSOCIATION_H */ | ||