| /* | |
| * Wireless USB Wire Adapter constants and structures. | |
| * | |
| * Copyright (C) 2005-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. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
| * 02110-1301, USA. | |
| * | |
| * | |
| * FIXME: docs | |
| * FIXME: organize properly, group logically | |
| * | |
| * All the event structures are defined in uwb/spec.h, as they are | |
| * common to the WHCI and WUSB radio control interfaces. | |
| * | |
| * References: | |
| * [WUSB] Wireless Universal Serial Bus Specification, revision 1.0, ch8 | |
| */ | |
| #ifndef __LINUX_USB_WUSB_WA_H | |
| #define __LINUX_USB_WUSB_WA_H | |
| /** | |
| * Radio Command Request for the Radio Control Interface | |
| * | |
| * Radio Control Interface command and event codes are the same as | |
| * WHCI, and listed in include/linux/uwb.h:UWB_RC_{CMD,EVT}_* | |
| */ | |
| enum { | |
| WA_EXEC_RC_CMD = 40, /* Radio Control command Request */ | |
| }; | |
| /* Wireless Adapter Requests ([WUSB] table 8-51) */ | |
| enum { | |
| WUSB_REQ_ADD_MMC_IE = 20, | |
| WUSB_REQ_REMOVE_MMC_IE = 21, | |
| WUSB_REQ_SET_NUM_DNTS = 22, | |
| WUSB_REQ_SET_CLUSTER_ID = 23, | |
| WUSB_REQ_SET_DEV_INFO = 24, | |
| WUSB_REQ_GET_TIME = 25, | |
| WUSB_REQ_SET_STREAM_IDX = 26, | |
| WUSB_REQ_SET_WUSB_MAS = 27, | |
| WUSB_REQ_CHAN_STOP = 28, | |
| }; | |
| /* Wireless Adapter WUSB Channel Time types ([WUSB] table 8-52) */ | |
| enum { | |
| WUSB_TIME_ADJ = 0, | |
| WUSB_TIME_BPST = 1, | |
| WUSB_TIME_WUSB = 2, | |
| }; | |
| enum { | |
| WA_ENABLE = 0x01, | |
| WA_RESET = 0x02, | |
| RPIPE_PAUSE = 0x1, | |
| }; | |
| /* Responses from Get Status request ([WUSB] section 8.3.1.6) */ | |
| enum { | |
| WA_STATUS_ENABLED = 0x01, | |
| WA_STATUS_RESETTING = 0x02 | |
| }; | |
| enum rpipe_crs { | |
| RPIPE_CRS_CTL = 0x01, | |
| RPIPE_CRS_ISO = 0x02, | |
| RPIPE_CRS_BULK = 0x04, | |
| RPIPE_CRS_INTR = 0x08 | |
| }; | |
| /** | |
| * RPipe descriptor ([WUSB] section 8.5.2.11) | |
| * | |
| * FIXME: explain rpipes | |
| */ | |
| struct usb_rpipe_descriptor { | |
| u8 bLength; | |
| u8 bDescriptorType; | |
| __le16 wRPipeIndex; | |
| __le16 wRequests; | |
| __le16 wBlocks; /* rw if 0 */ | |
| __le16 wMaxPacketSize; /* rw? */ | |
| u8 bHSHubAddress; /* reserved: 0 */ | |
| u8 bHSHubPort; /* ??? FIXME ??? */ | |
| u8 bSpeed; /* rw: xfer rate 'enum uwb_phy_rate' */ | |
| u8 bDeviceAddress; /* rw: Target device address */ | |
| u8 bEndpointAddress; /* rw: Target EP address */ | |
| u8 bDataSequence; /* ro: Current Data sequence */ | |
| __le32 dwCurrentWindow; /* ro */ | |
| u8 bMaxDataSequence; /* ro?: max supported seq */ | |
| u8 bInterval; /* rw: */ | |
| u8 bOverTheAirInterval; /* rw: */ | |
| u8 bmAttribute; /* ro? */ | |
| u8 bmCharacteristics; /* ro? enum rpipe_attr, supported xsactions */ | |
| u8 bmRetryOptions; /* rw? */ | |
| __le16 wNumTransactionErrors; /* rw */ | |
| } __attribute__ ((packed)); | |
| /** | |
| * Wire Adapter Notification types ([WUSB] sections 8.4.5 & 8.5.4) | |
| * | |
| * These are the notifications coming on the notification endpoint of | |
| * an HWA and a DWA. | |
| */ | |
| enum wa_notif_type { | |
| DWA_NOTIF_RWAKE = 0x91, | |
| DWA_NOTIF_PORTSTATUS = 0x92, | |
| WA_NOTIF_TRANSFER = 0x93, | |
| HWA_NOTIF_BPST_ADJ = 0x94, | |
| HWA_NOTIF_DN = 0x95, | |
| }; | |
| /** | |
| * Wire Adapter notification header | |
| * | |
| * Notifications coming from a wire adapter use a common header | |
| * defined in [WUSB] sections 8.4.5 & 8.5.4. | |
| */ | |
| struct wa_notif_hdr { | |
| u8 bLength; | |
| u8 bNotifyType; /* enum wa_notif_type */ | |
| } __attribute__((packed)); | |
| /** | |
| * HWA DN Received notification [(WUSB] section 8.5.4.2) | |
| * | |
| * The DNData is specified in WUSB1.0[7.6]. For each device | |
| * notification we received, we just need to dispatch it. | |
| * | |
| * @dndata: this is really an array of notifications, but all start | |
| * with the same header. | |
| */ | |
| struct hwa_notif_dn { | |
| struct wa_notif_hdr hdr; | |
| u8 bSourceDeviceAddr; /* from errata 2005/07 */ | |
| u8 bmAttributes; | |
| struct wusb_dn_hdr dndata[]; | |
| } __attribute__((packed)); | |
| /* [WUSB] section 8.3.3 */ | |
| enum wa_xfer_type { | |
| WA_XFER_TYPE_CTL = 0x80, | |
| WA_XFER_TYPE_BI = 0x81, /* bulk/interrupt */ | |
| WA_XFER_TYPE_ISO = 0x82, | |
| WA_XFER_RESULT = 0x83, | |
| WA_XFER_ABORT = 0x84, | |
| }; | |
| /* [WUSB] section 8.3.3 */ | |
| struct wa_xfer_hdr { | |
| u8 bLength; /* 0x18 */ | |
| u8 bRequestType; /* 0x80 WA_REQUEST_TYPE_CTL */ | |
| __le16 wRPipe; /* RPipe index */ | |
| __le32 dwTransferID; /* Host-assigned ID */ | |
| __le32 dwTransferLength; /* Length of data to xfer */ | |
| u8 bTransferSegment; | |
| } __attribute__((packed)); | |
| struct wa_xfer_ctl { | |
| struct wa_xfer_hdr hdr; | |
| u8 bmAttribute; | |
| __le16 wReserved; | |
| struct usb_ctrlrequest baSetupData; | |
| } __attribute__((packed)); | |
| struct wa_xfer_bi { | |
| struct wa_xfer_hdr hdr; | |
| u8 bReserved; | |
| __le16 wReserved; | |
| } __attribute__((packed)); | |
| struct wa_xfer_hwaiso { | |
| struct wa_xfer_hdr hdr; | |
| u8 bReserved; | |
| __le16 wPresentationTime; | |
| __le32 dwNumOfPackets; | |
| /* FIXME: u8 pktdata[]? */ | |
| } __attribute__((packed)); | |
| /* [WUSB] section 8.3.3.5 */ | |
| struct wa_xfer_abort { | |
| u8 bLength; | |
| u8 bRequestType; | |
| __le16 wRPipe; /* RPipe index */ | |
| __le32 dwTransferID; /* Host-assigned ID */ | |
| } __attribute__((packed)); | |
| /** | |
| * WA Transfer Complete notification ([WUSB] section 8.3.3.3) | |
| * | |
| */ | |
| struct wa_notif_xfer { | |
| struct wa_notif_hdr hdr; | |
| u8 bEndpoint; | |
| u8 Reserved; | |
| } __attribute__((packed)); | |
| /** Transfer result basic codes [WUSB] table 8-15 */ | |
| enum { | |
| WA_XFER_STATUS_SUCCESS, | |
| WA_XFER_STATUS_HALTED, | |
| WA_XFER_STATUS_DATA_BUFFER_ERROR, | |
| WA_XFER_STATUS_BABBLE, | |
| WA_XFER_RESERVED, | |
| WA_XFER_STATUS_NOT_FOUND, | |
| WA_XFER_STATUS_INSUFFICIENT_RESOURCE, | |
| WA_XFER_STATUS_TRANSACTION_ERROR, | |
| WA_XFER_STATUS_ABORTED, | |
| WA_XFER_STATUS_RPIPE_NOT_READY, | |
| WA_XFER_INVALID_FORMAT, | |
| WA_XFER_UNEXPECTED_SEGMENT_NUMBER, | |
| WA_XFER_STATUS_RPIPE_TYPE_MISMATCH, | |
| }; | |
| /** [WUSB] section 8.3.3.4 */ | |
| struct wa_xfer_result { | |
| struct wa_notif_hdr hdr; | |
| __le32 dwTransferID; | |
| __le32 dwTransferLength; | |
| u8 bTransferSegment; | |
| u8 bTransferStatus; | |
| __le32 dwNumOfPackets; | |
| } __attribute__((packed)); | |
| /** | |
| * Wire Adapter Class Descriptor ([WUSB] section 8.5.2.7). | |
| * | |
| * NOTE: u16 fields are read Little Endian from the hardware. | |
| * | |
| * @bNumPorts is the original max number of devices that the host can | |
| * connect; we might chop this so the stack can handle | |
| * it. In case you need to access it, use wusbhc->ports_max | |
| * if it is a Wireless USB WA. | |
| */ | |
| struct usb_wa_descriptor { | |
| u8 bLength; | |
| u8 bDescriptorType; | |
| u16 bcdWAVersion; | |
| u8 bNumPorts; /* don't use!! */ | |
| u8 bmAttributes; /* Reserved == 0 */ | |
| u16 wNumRPipes; | |
| u16 wRPipeMaxBlock; | |
| u8 bRPipeBlockSize; | |
| u8 bPwrOn2PwrGood; | |
| u8 bNumMMCIEs; | |
| u8 DeviceRemovable; /* FIXME: in DWA this is up to 16 bytes */ | |
| } __attribute__((packed)); | |
| /** | |
| * HWA Device Information Buffer (WUSB1.0[T8.54]) | |
| */ | |
| struct hwa_dev_info { | |
| u8 bmDeviceAvailability[32]; /* FIXME: ignored for now */ | |
| u8 bDeviceAddress; | |
| __le16 wPHYRates; | |
| u8 bmDeviceAttribute; | |
| } __attribute__((packed)); | |
| #endif /* #ifndef __LINUX_USB_WUSB_WA_H */ |