| /* |
| * Wireless USB - Cable Based Association |
| * |
| * Copyright (C) 2006 Intel Corporation |
| * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License version |
| * 2 as published by the Free Software Foundation. |
| * |
| */ |
| #ifndef __LINUX_USB_ASSOCIATION_H |
| #define __LINUX_USB_ASSOCIATION_H |
| |
| |
| /* |
| * Association attributes |
| * |
| * Association Models Supplement to WUSB 1.0 T[3-1] |
| * |
| * Each field in the structures has it's ID, it's length and then the |
| * value. This is the actual definition of the field's ID and its |
| * length. |
| */ |
| struct wusb_am_attr { |
| __u8 id; |
| __u8 len; |
| }; |
| |
| /* Different fields defined by the spec */ |
| #define WUSB_AR_AssociationTypeId { .id = cpu_to_le16(0x0000), .len = cpu_to_le16(2) } |
| #define WUSB_AR_AssociationSubTypeId { .id = cpu_to_le16(0x0001), .len = cpu_to_le16(2) } |
| #define WUSB_AR_Length { .id = cpu_to_le16(0x0002), .len = cpu_to_le16(4) } |
| #define WUSB_AR_AssociationStatus { .id = cpu_to_le16(0x0004), .len = cpu_to_le16(4) } |
| #define WUSB_AR_LangID { .id = cpu_to_le16(0x0008), .len = cpu_to_le16(2) } |
| #define WUSB_AR_DeviceFriendlyName { .id = cpu_to_le16(0x000b), .len = cpu_to_le16(64) } /* max */ |
| #define WUSB_AR_HostFriendlyName { .id = cpu_to_le16(0x000c), .len = cpu_to_le16(64) } /* max */ |
| #define WUSB_AR_CHID { .id = cpu_to_le16(0x1000), .len = cpu_to_le16(16) } |
| #define WUSB_AR_CDID { .id = cpu_to_le16(0x1001), .len = cpu_to_le16(16) } |
| #define WUSB_AR_ConnectionContext { .id = cpu_to_le16(0x1002), .len = cpu_to_le16(48) } |
| #define WUSB_AR_BandGroups { .id = cpu_to_le16(0x1004), .len = cpu_to_le16(2) } |
| |
| /* CBAF Control Requests (AMS1.0[T4-1] */ |
| enum { |
| CBAF_REQ_GET_ASSOCIATION_INFORMATION = 0x01, |
| CBAF_REQ_GET_ASSOCIATION_REQUEST, |
| CBAF_REQ_SET_ASSOCIATION_RESPONSE |
| }; |
| |
| /* |
| * CBAF USB-interface defitions |
| * |
| * No altsettings, one optional interrupt endpoint. |
| */ |
| enum { |
| CBAF_IFACECLASS = 0xef, |
| CBAF_IFACESUBCLASS = 0x03, |
| CBAF_IFACEPROTOCOL = 0x01, |
| }; |
| |
| /* Association Information (AMS1.0[T4-3]) */ |
| struct wusb_cbaf_assoc_info { |
| __le16 Length; |
| __u8 NumAssociationRequests; |
| __le16 Flags; |
| __u8 AssociationRequestsArray[]; |
| } __attribute__((packed)); |
| |
| /* Association Request (AMS1.0[T4-4]) */ |
| struct wusb_cbaf_assoc_request { |
| __u8 AssociationDataIndex; |
| __u8 Reserved; |
| __le16 AssociationTypeId; |
| __le16 AssociationSubTypeId; |
| __le32 AssociationTypeInfoSize; |
| } __attribute__((packed)); |
| |
| enum { |
| AR_TYPE_WUSB = 0x0001, |
| AR_TYPE_WUSB_RETRIEVE_HOST_INFO = 0x0000, |
| AR_TYPE_WUSB_ASSOCIATE = 0x0001, |
| }; |
| |
| /* Association Attribute header (AMS1.0[3.8]) */ |
| struct wusb_cbaf_attr_hdr { |
| __le16 id; |
| __le16 len; |
| } __attribute__((packed)); |
| |
| /* Host Info (AMS1.0[T4-7]) (yeah, more headers and fields...) */ |
| struct wusb_cbaf_host_info { |
| struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; |
| __le16 AssociationTypeId; |
| struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; |
| __le16 AssociationSubTypeId; |
| struct wusb_cbaf_attr_hdr CHID_hdr; |
| struct wusb_ckhdid CHID; |
| struct wusb_cbaf_attr_hdr LangID_hdr; |
| __le16 LangID; |
| struct wusb_cbaf_attr_hdr HostFriendlyName_hdr; |
| __u8 HostFriendlyName[]; |
| } __attribute__((packed)); |
| |
| /* Device Info (AMS1.0[T4-8]) |
| * |
| * I still don't get this tag'n'header stuff for each goddamn |
| * field... |
| */ |
| struct wusb_cbaf_device_info { |
| struct wusb_cbaf_attr_hdr Length_hdr; |
| __le32 Length; |
| struct wusb_cbaf_attr_hdr CDID_hdr; |
| struct wusb_ckhdid CDID; |
| struct wusb_cbaf_attr_hdr BandGroups_hdr; |
| __le16 BandGroups; |
| struct wusb_cbaf_attr_hdr LangID_hdr; |
| __le16 LangID; |
| struct wusb_cbaf_attr_hdr DeviceFriendlyName_hdr; |
| __u8 DeviceFriendlyName[]; |
| } __attribute__((packed)); |
| |
| /* Connection Context; CC_DATA - Success case (AMS1.0[T4-9]) */ |
| struct wusb_cbaf_cc_data { |
| struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; |
| __le16 AssociationTypeId; |
| struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; |
| __le16 AssociationSubTypeId; |
| struct wusb_cbaf_attr_hdr Length_hdr; |
| __le32 Length; |
| struct wusb_cbaf_attr_hdr ConnectionContext_hdr; |
| struct wusb_ckhdid CHID; |
| struct wusb_ckhdid CDID; |
| struct wusb_ckhdid CK; |
| struct wusb_cbaf_attr_hdr BandGroups_hdr; |
| __le16 BandGroups; |
| } __attribute__((packed)); |
| |
| /* CC_DATA - Failure case (AMS1.0[T4-10]) */ |
| struct wusb_cbaf_cc_data_fail { |
| struct wusb_cbaf_attr_hdr AssociationTypeId_hdr; |
| __le16 AssociationTypeId; |
| struct wusb_cbaf_attr_hdr AssociationSubTypeId_hdr; |
| __le16 AssociationSubTypeId; |
| struct wusb_cbaf_attr_hdr Length_hdr; |
| __le16 Length; |
| struct wusb_cbaf_attr_hdr AssociationStatus_hdr; |
| __u32 AssociationStatus; |
| } __attribute__((packed)); |
| |
| #endif /* __LINUX_USB_ASSOCIATION_H */ |