USB: add association.h
authorGreg Kroah-Hartman <gregkh@suse.de>
Sat, 26 Apr 2008 02:23:16 +0000 (19:23 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 14 May 2008 17:00:26 +0000 (10:00 -0700)
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>
include/linux/usb/association.h [new file with mode: 0644]

diff --git a/include/linux/usb/association.h b/include/linux/usb/association.h
new file mode 100644 (file)
index 0000000..07c5e3c
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * 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 = 0x0000, .len =  2 }
+#define WUSB_AR_AssociationSubTypeId   { .id = 0x0001, .len =  2 }
+#define WUSB_AR_Length                 { .id = 0x0002, .len =  4 }
+#define WUSB_AR_AssociationStatus      { .id = 0x0004, .len =  4 }
+#define WUSB_AR_LangID                 { .id = 0x0008, .len =  2 }
+#define WUSB_AR_DeviceFriendlyName     { .id = 0x000b, .len = 64 } /* max */
+#define WUSB_AR_HostFriendlyName       { .id = 0x000c, .len = 64 } /* max */
+#define WUSB_AR_CHID                   { .id = 0x1000, .len = 16 }
+#define WUSB_AR_CDID                   { .id = 0x1001, .len = 16 }
+#define WUSB_AR_ConnectionContext      { .id = 0x1002, .len = 48 }
+#define WUSB_AR_BandGroups             { .id = 0x1004, .len =  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 */