mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.6 KiB
150 lines
4.6 KiB
/* |
|
* Wireless USB - Cable Based Association |
|
* |
|
* Copyright (C) 2006 Intel Corporation |
|
* Inaky Perez-Gonzalez <[email protected]> |
|
* |
|
* 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 */
|
|
|