home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / usb / wusb-wa.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  7.0 KB  |  272 lines

  1. /*
  2.  * Wireless USB Wire Adapter constants and structures.
  3.  *
  4.  * Copyright (C) 2005-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.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  19.  * 02110-1301, USA.
  20.  *
  21.  *
  22.  * FIXME: docs
  23.  * FIXME: organize properly, group logically
  24.  *
  25.  * All the event structures are defined in uwb/spec.h, as they are
  26.  * common to the WHCI and WUSB radio control interfaces.
  27.  *
  28.  * References:
  29.  *   [WUSB] Wireless Universal Serial Bus Specification, revision 1.0, ch8
  30.  */
  31. #ifndef __LINUX_USB_WUSB_WA_H
  32. #define __LINUX_USB_WUSB_WA_H
  33.  
  34. /**
  35.  * Radio Command Request for the Radio Control Interface
  36.  *
  37.  * Radio Control Interface command and event codes are the same as
  38.  * WHCI, and listed in include/linux/uwb.h:UWB_RC_{CMD,EVT}_*
  39.  */
  40. enum {
  41.     WA_EXEC_RC_CMD = 40,    /* Radio Control command Request */
  42. };
  43.  
  44. /* Wireless Adapter Requests ([WUSB] table 8-51) */
  45. enum {
  46.     WUSB_REQ_ADD_MMC_IE     = 20,
  47.     WUSB_REQ_REMOVE_MMC_IE  = 21,
  48.     WUSB_REQ_SET_NUM_DNTS   = 22,
  49.     WUSB_REQ_SET_CLUSTER_ID = 23,
  50.     WUSB_REQ_SET_DEV_INFO   = 24,
  51.     WUSB_REQ_GET_TIME       = 25,
  52.     WUSB_REQ_SET_STREAM_IDX = 26,
  53.     WUSB_REQ_SET_WUSB_MAS   = 27,
  54. };
  55.  
  56.  
  57. /* Wireless Adapter WUSB Channel Time types ([WUSB] table 8-52) */
  58. enum {
  59.     WUSB_TIME_ADJ   = 0,
  60.     WUSB_TIME_BPST  = 1,
  61.     WUSB_TIME_WUSB  = 2,
  62. };
  63.  
  64. enum {
  65.     WA_ENABLE = 0x01,
  66.     WA_RESET = 0x02,
  67.     RPIPE_PAUSE = 0x1,
  68. };
  69.  
  70. /* Responses from Get Status request ([WUSB] section 8.3.1.6) */
  71. enum {
  72.     WA_STATUS_ENABLED = 0x01,
  73.     WA_STATUS_RESETTING = 0x02
  74. };
  75.  
  76. enum rpipe_crs {
  77.     RPIPE_CRS_CTL = 0x01,
  78.     RPIPE_CRS_ISO = 0x02,
  79.     RPIPE_CRS_BULK = 0x04,
  80.     RPIPE_CRS_INTR = 0x08
  81. };
  82.  
  83. /**
  84.  * RPipe descriptor ([WUSB] section 8.5.2.11)
  85.  *
  86.  * FIXME: explain rpipes
  87.  */
  88. struct usb_rpipe_descriptor {
  89.     u8     bLength;
  90.     u8    bDescriptorType;
  91.     __le16  wRPipeIndex;
  92.     __le16    wRequests;
  93.     __le16    wBlocks;        /* rw if 0 */
  94.     __le16    wMaxPacketSize;        /* rw? */
  95.     u8    bHSHubAddress;        /* reserved: 0 */
  96.     u8    bHSHubPort;        /* ??? FIXME ??? */
  97.     u8    bSpeed;            /* rw: xfer rate 'enum uwb_phy_rate' */
  98.     u8    bDeviceAddress;        /* rw: Target device address */
  99.     u8    bEndpointAddress;    /* rw: Target EP address */
  100.     u8    bDataSequence;        /* ro: Current Data sequence */
  101.     __le32    dwCurrentWindow;    /* ro */
  102.     u8    bMaxDataSequence;    /* ro?: max supported seq */
  103.     u8    bInterval;        /* rw:  */
  104.     u8    bOverTheAirInterval;    /* rw:  */
  105.     u8    bmAttribute;        /* ro?  */
  106.     u8    bmCharacteristics;    /* ro? enum rpipe_attr, supported xsactions */
  107.     u8    bmRetryOptions;        /* rw? */
  108.     __le16    wNumTransactionErrors;    /* rw */
  109. } __attribute__ ((packed));
  110.  
  111. /**
  112.  * Wire Adapter Notification types ([WUSB] sections 8.4.5 & 8.5.4)
  113.  *
  114.  * These are the notifications coming on the notification endpoint of
  115.  * an HWA and a DWA.
  116.  */
  117. enum wa_notif_type {
  118.     DWA_NOTIF_RWAKE = 0x91,
  119.     DWA_NOTIF_PORTSTATUS = 0x92,
  120.     WA_NOTIF_TRANSFER = 0x93,
  121.     HWA_NOTIF_BPST_ADJ = 0x94,
  122.     HWA_NOTIF_DN = 0x95,
  123. };
  124.  
  125. /**
  126.  * Wire Adapter notification header
  127.  *
  128.  * Notifications coming from a wire adapter use a common header
  129.  * defined in [WUSB] sections 8.4.5 & 8.5.4.
  130.  */
  131. struct wa_notif_hdr {
  132.     u8 bLength;
  133.     u8 bNotifyType;            /* enum wa_notif_type */
  134. } __attribute__((packed));
  135.  
  136. /**
  137.  * HWA DN Received notification [(WUSB] section 8.5.4.2)
  138.  *
  139.  * The DNData is specified in WUSB1.0[7.6]. For each device
  140.  * notification we received, we just need to dispatch it.
  141.  *
  142.  * @dndata:  this is really an array of notifications, but all start
  143.  *           with the same header.
  144.  */
  145. struct hwa_notif_dn {
  146.     struct wa_notif_hdr hdr;
  147.     u8 bSourceDeviceAddr;        /* from errata 2005/07 */
  148.     u8 bmAttributes;
  149.     struct wusb_dn_hdr dndata[];
  150. } __attribute__((packed));
  151.  
  152. /* [WUSB] section 8.3.3 */
  153. enum wa_xfer_type {
  154.     WA_XFER_TYPE_CTL = 0x80,
  155.     WA_XFER_TYPE_BI = 0x81,        /* bulk/interrupt */
  156.     WA_XFER_TYPE_ISO = 0x82,
  157.     WA_XFER_RESULT = 0x83,
  158.     WA_XFER_ABORT = 0x84,
  159. };
  160.  
  161. /* [WUSB] section 8.3.3 */
  162. struct wa_xfer_hdr {
  163.     u8 bLength;            /* 0x18 */
  164.     u8 bRequestType;        /* 0x80 WA_REQUEST_TYPE_CTL */
  165.     __le16 wRPipe;            /* RPipe index */
  166.     __le32 dwTransferID;        /* Host-assigned ID */
  167.     __le32 dwTransferLength;    /* Length of data to xfer */
  168.     u8 bTransferSegment;
  169. } __attribute__((packed));
  170.  
  171. struct wa_xfer_ctl {
  172.     struct wa_xfer_hdr hdr;
  173.     u8 bmAttribute;
  174.     __le16 wReserved;
  175.     struct usb_ctrlrequest baSetupData;
  176. } __attribute__((packed));
  177.  
  178. struct wa_xfer_bi {
  179.     struct wa_xfer_hdr hdr;
  180.     u8 bReserved;
  181.     __le16 wReserved;
  182. } __attribute__((packed));
  183.  
  184. struct wa_xfer_hwaiso {
  185.     struct wa_xfer_hdr hdr;
  186.     u8 bReserved;
  187.     __le16 wPresentationTime;
  188.     __le32 dwNumOfPackets;
  189.     /* FIXME: u8 pktdata[]? */
  190. } __attribute__((packed));
  191.  
  192. /* [WUSB] section 8.3.3.5 */
  193. struct wa_xfer_abort {
  194.     u8 bLength;
  195.     u8 bRequestType;
  196.     __le16 wRPipe;            /* RPipe index */
  197.     __le32 dwTransferID;        /* Host-assigned ID */
  198. } __attribute__((packed));
  199.  
  200. /**
  201.  * WA Transfer Complete notification ([WUSB] section 8.3.3.3)
  202.  *
  203.  */
  204. struct wa_notif_xfer {
  205.     struct wa_notif_hdr hdr;
  206.     u8 bEndpoint;
  207.     u8 Reserved;
  208. } __attribute__((packed));
  209.  
  210. /** Transfer result basic codes [WUSB] table 8-15 */
  211. enum {
  212.     WA_XFER_STATUS_SUCCESS,
  213.     WA_XFER_STATUS_HALTED,
  214.     WA_XFER_STATUS_DATA_BUFFER_ERROR,
  215.     WA_XFER_STATUS_BABBLE,
  216.     WA_XFER_RESERVED,
  217.     WA_XFER_STATUS_NOT_FOUND,
  218.     WA_XFER_STATUS_INSUFFICIENT_RESOURCE,
  219.     WA_XFER_STATUS_TRANSACTION_ERROR,
  220.     WA_XFER_STATUS_ABORTED,
  221.     WA_XFER_STATUS_RPIPE_NOT_READY,
  222.     WA_XFER_INVALID_FORMAT,
  223.     WA_XFER_UNEXPECTED_SEGMENT_NUMBER,
  224.     WA_XFER_STATUS_RPIPE_TYPE_MISMATCH,
  225. };
  226.  
  227. /** [WUSB] section 8.3.3.4 */
  228. struct wa_xfer_result {
  229.     struct wa_notif_hdr hdr;
  230.     __le32 dwTransferID;
  231.     __le32 dwTransferLength;
  232.     u8     bTransferSegment;
  233.     u8     bTransferStatus;
  234.     __le32 dwNumOfPackets;
  235. } __attribute__((packed));
  236.  
  237. /**
  238.  * Wire Adapter Class Descriptor ([WUSB] section 8.5.2.7).
  239.  *
  240.  * NOTE: u16 fields are read Little Endian from the hardware.
  241.  *
  242.  * @bNumPorts is the original max number of devices that the host can
  243.  *            connect; we might chop this so the stack can handle
  244.  *            it. In case you need to access it, use wusbhc->ports_max
  245.  *            if it is a Wireless USB WA.
  246.  */
  247. struct usb_wa_descriptor {
  248.     u8    bLength;
  249.     u8    bDescriptorType;
  250.     u16    bcdWAVersion;
  251.     u8    bNumPorts;        /* don't use!! */
  252.     u8    bmAttributes;        /* Reserved == 0 */
  253.     u16    wNumRPipes;
  254.     u16    wRPipeMaxBlock;
  255.     u8    bRPipeBlockSize;
  256.     u8    bPwrOn2PwrGood;
  257.     u8    bNumMMCIEs;
  258.     u8    DeviceRemovable;    /* FIXME: in DWA this is up to 16 bytes */
  259. } __attribute__((packed));
  260.  
  261. /**
  262.  * HWA Device Information Buffer (WUSB1.0[T8.54])
  263.  */
  264. struct hwa_dev_info {
  265.     u8    bmDeviceAvailability[32];       /* FIXME: ignored for now */
  266.     u8    bDeviceAddress;
  267.     __le16    wPHYRates;
  268.     u8    bmDeviceAttribute;
  269. } __attribute__((packed));
  270.  
  271. #endif /* #ifndef __LINUX_USB_WUSB_WA_H */
  272.