Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: add association.h

This will be used by the wireless usb code, as well as potentially other
USB code.

Originally based on some .c code written by Inaky Perez-Gonzalez
<inaky.perez-gonzalez@intel.com>

Cc: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

+150
+150
include/linux/usb/association.h
··· 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 */