[funini.com] -> [kei@sodan] -> Kernel Reading

root/include/linux/usb/association.h

/* [<][>][^][v][top][bottom][index][help] */
/*
 * 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 */

/* [<][>][^][v][top][bottom][index][help] */

[funini.com] -> [kei@sodan] -> Kernel Reading