1*9430SRaymond.Chen@Sun.COM /* 2*9430SRaymond.Chen@Sun.COM * CDDL HEADER START 3*9430SRaymond.Chen@Sun.COM * 4*9430SRaymond.Chen@Sun.COM * The contents of this file are subject to the terms of the 5*9430SRaymond.Chen@Sun.COM * Common Development and Distribution License (the "License"). 6*9430SRaymond.Chen@Sun.COM * You may not use this file except in compliance with the License. 7*9430SRaymond.Chen@Sun.COM * 8*9430SRaymond.Chen@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9430SRaymond.Chen@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*9430SRaymond.Chen@Sun.COM * See the License for the specific language governing permissions 11*9430SRaymond.Chen@Sun.COM * and limitations under the License. 12*9430SRaymond.Chen@Sun.COM * 13*9430SRaymond.Chen@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*9430SRaymond.Chen@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9430SRaymond.Chen@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*9430SRaymond.Chen@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*9430SRaymond.Chen@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*9430SRaymond.Chen@Sun.COM * 19*9430SRaymond.Chen@Sun.COM * CDDL HEADER END 20*9430SRaymond.Chen@Sun.COM */ 21*9430SRaymond.Chen@Sun.COM /* 22*9430SRaymond.Chen@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*9430SRaymond.Chen@Sun.COM * Use is subject to license terms. 24*9430SRaymond.Chen@Sun.COM */ 25*9430SRaymond.Chen@Sun.COM 26*9430SRaymond.Chen@Sun.COM #ifndef _SYS_USB_WUSBA_H 27*9430SRaymond.Chen@Sun.COM #define _SYS_USB_WUSBA_H 28*9430SRaymond.Chen@Sun.COM 29*9430SRaymond.Chen@Sun.COM #ifdef __cplusplus 30*9430SRaymond.Chen@Sun.COM extern "C" { 31*9430SRaymond.Chen@Sun.COM #endif 32*9430SRaymond.Chen@Sun.COM 33*9430SRaymond.Chen@Sun.COM /* Wireless USB feature selectors */ 34*9430SRaymond.Chen@Sun.COM #define WUSB_FEAT_TX_DRP_IE 0 35*9430SRaymond.Chen@Sun.COM #define WUSB_FEAT_DEV_XMIT_PKT 1 36*9430SRaymond.Chen@Sun.COM #define WUSB_FEAT_COUNT_PKTS 2 37*9430SRaymond.Chen@Sun.COM #define WUSB_FEAT_CAPT_PKTS 3 38*9430SRaymond.Chen@Sun.COM 39*9430SRaymond.Chen@Sun.COM /* Wireless USB status selector for GET_STATUS request */ 40*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_STANDARD 0 41*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_WIRELESS_FEAT 1 42*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_CHANNEL_INFO 2 43*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_RECVD_DATA 3 44*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_MAS_AVAIL 4 45*9430SRaymond.Chen@Sun.COM #define WUSB_STS_TYPE_TRANS_PWR 5 46*9430SRaymond.Chen@Sun.COM 47*9430SRaymond.Chen@Sun.COM /* 48*9430SRaymond.Chen@Sun.COM * Device buffer length for count packets and capture packet functions, 49*9430SRaymond.Chen@Sun.COM * refer to WUSB 1.0 4.3.7.2 50*9430SRaymond.Chen@Sun.COM */ 51*9430SRaymond.Chen@Sun.COM #define WUSB_COUNT_CAPT_PKT_LEN 512 52*9430SRaymond.Chen@Sun.COM 53*9430SRaymond.Chen@Sun.COM /* Length for Wireless USB GET_STATUS request */ 54*9430SRaymond.Chen@Sun.COM #define WUSB_STANDARD_STS_LEN 2 55*9430SRaymond.Chen@Sun.COM #define WUSB_FEAT_STAT_LEN 1 56*9430SRaymond.Chen@Sun.COM #define WUSB_CHANNEL_INFO_STS_LEN 1 57*9430SRaymond.Chen@Sun.COM #define WUSB_RECVD_DATA_STS_LEN WUSB_COUNT_CAPT_PKT_LEN 58*9430SRaymond.Chen@Sun.COM #define WUSB_MAS_AVAIL_STS_LEN 1 59*9430SRaymond.Chen@Sun.COM #define WUSB_TRANS_PWR_STS_LEN 2 60*9430SRaymond.Chen@Sun.COM 61*9430SRaymond.Chen@Sun.COM /* Wiless USB feature status bits */ 62*9430SRaymond.Chen@Sun.COM #define WUSB_TX_DRP_IE_STATUS 1 63*9430SRaymond.Chen@Sun.COM #define WUSB_TRANS_PWR_STATUS 2 64*9430SRaymond.Chen@Sun.COM #define WUSB_COUNT_PKTS_STATUS 4 65*9430SRaymond.Chen@Sun.COM #define WUSB_CAPT_PKTS_STATUS 8 66*9430SRaymond.Chen@Sun.COM 67*9430SRaymond.Chen@Sun.COM /* Status data */ 68*9430SRaymond.Chen@Sun.COM typedef struct wusb_counted_pkt { 69*9430SRaymond.Chen@Sun.COM uint8_t recp_time[3]; 70*9430SRaymond.Chen@Sun.COM uint8_t mac_header[6]; 71*9430SRaymond.Chen@Sun.COM uint8_t lqi; 72*9430SRaymond.Chen@Sun.COM } wusb_counted_pkt_t; 73*9430SRaymond.Chen@Sun.COM 74*9430SRaymond.Chen@Sun.COM typedef struct wusb_count_pkts { 75*9430SRaymond.Chen@Sun.COM uint8_t pkt_count; 76*9430SRaymond.Chen@Sun.COM wusb_counted_pkt_t pkt_block[51]; 77*9430SRaymond.Chen@Sun.COM } wusb_count_pkts_t; 78*9430SRaymond.Chen@Sun.COM 79*9430SRaymond.Chen@Sun.COM typedef struct wusb_trans_pwr { 80*9430SRaymond.Chen@Sun.COM uint8_t bTxNotifTransPwr; 81*9430SRaymond.Chen@Sun.COM uint8_t bTxBeaconTransPwr; 82*9430SRaymond.Chen@Sun.COM } wusb_trans_pwr_t; 83*9430SRaymond.Chen@Sun.COM 84*9430SRaymond.Chen@Sun.COM /* Wireless USB data selectors for SetWUSBDate request */ 85*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_DRPIE_INFO 1 86*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_TRANS_DATA 2 87*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_TRANS_PARAMS 3 88*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RECV_PARAMS 4 89*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_TRANS_PWR 5 90*9430SRaymond.Chen@Sun.COM 91*9430SRaymond.Chen@Sun.COM typedef struct wusb_trans_params { 92*9430SRaymond.Chen@Sun.COM uint8_t trans_time[3]; 93*9430SRaymond.Chen@Sun.COM uint8_t trans_adjust; 94*9430SRaymond.Chen@Sun.COM } wusb_trans_params_t; 95*9430SRaymond.Chen@Sun.COM 96*9430SRaymond.Chen@Sun.COM typedef struct wusb_recv_params { 97*9430SRaymond.Chen@Sun.COM uint8_t recv_filter; 98*9430SRaymond.Chen@Sun.COM uint8_t recv_channel; 99*9430SRaymond.Chen@Sun.COM uint8_t recv_start_time[3]; 100*9430SRaymond.Chen@Sun.COM uint8_t recv_end_time[3]; 101*9430SRaymond.Chen@Sun.COM } wusb_recv_params_t; 102*9430SRaymond.Chen@Sun.COM 103*9430SRaymond.Chen@Sun.COM /* Wireless USB key index bits */ 104*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_INDEX_MASK 0x0f 105*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_TYPE_MASK 0x30 106*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_TYPE_ASSOCIATION 0x10 107*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_TYPE_GTK 0x20 108*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_ORIGIN_MASK 0x40 109*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_ORIGIN_HOST 0x00 110*9430SRaymond.Chen@Sun.COM #define WUSB_KEY_ORIGIN_DEV 0x40 111*9430SRaymond.Chen@Sun.COM 112*9430SRaymond.Chen@Sun.COM typedef struct wusb_key { 113*9430SRaymond.Chen@Sun.COM #if defined(_BIT_FIELDS_LTOH) 114*9430SRaymond.Chen@Sun.COM uint8_t key_index :4, 115*9430SRaymond.Chen@Sun.COM key_type :2, 116*9430SRaymond.Chen@Sun.COM key_origin :1, 117*9430SRaymond.Chen@Sun.COM key_resv :1; 118*9430SRaymond.Chen@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 119*9430SRaymond.Chen@Sun.COM uint8_t key_resv :1, 120*9430SRaymond.Chen@Sun.COM key_origin :1, 121*9430SRaymond.Chen@Sun.COM key_type :2, 122*9430SRaymond.Chen@Sun.COM key_index :4; 123*9430SRaymond.Chen@Sun.COM #endif 124*9430SRaymond.Chen@Sun.COM } wusb_key_t; 125*9430SRaymond.Chen@Sun.COM 126*9430SRaymond.Chen@Sun.COM /* Wireless USB handshake data */ 127*9430SRaymond.Chen@Sun.COM typedef struct wusb_hndshk_data { 128*9430SRaymond.Chen@Sun.COM uint8_t bMessageNumber; 129*9430SRaymond.Chen@Sun.COM uint8_t bStatus; 130*9430SRaymond.Chen@Sun.COM uint8_t tTKID[3]; 131*9430SRaymond.Chen@Sun.COM uint8_t bReserved; 132*9430SRaymond.Chen@Sun.COM uint8_t CDID[16]; 133*9430SRaymond.Chen@Sun.COM uint8_t Nonce[16]; 134*9430SRaymond.Chen@Sun.COM uint8_t MIC[8]; 135*9430SRaymond.Chen@Sun.COM } wusb_hndshk_data_t; 136*9430SRaymond.Chen@Sun.COM 137*9430SRaymond.Chen@Sun.COM /* Handshake stage */ 138*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_MSG_NUM1 1 139*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_MSG_NUM2 2 140*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_MSG_NUM3 3 141*9430SRaymond.Chen@Sun.COM 142*9430SRaymond.Chen@Sun.COM /* Handshake status */ 143*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_NORMAL 0 144*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_ABORT_PER_POLICY 1 145*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_IN_PROGRESS 2 146*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_TKID_CONFLICT 3 147*9430SRaymond.Chen@Sun.COM 148*9430SRaymond.Chen@Sun.COM #define WUSB_HNDSHK_DATA_LEN 46 149*9430SRaymond.Chen@Sun.COM 150*9430SRaymond.Chen@Sun.COM /* Wireless USB connection context */ 151*9430SRaymond.Chen@Sun.COM #define WUSB_CHID_LEN 16 152*9430SRaymond.Chen@Sun.COM #define WUSB_CDID_LEN 16 153*9430SRaymond.Chen@Sun.COM #define WUSB_CK_LEN 16 154*9430SRaymond.Chen@Sun.COM #define WUSB_CC_LEN 48 155*9430SRaymond.Chen@Sun.COM 156*9430SRaymond.Chen@Sun.COM 157*9430SRaymond.Chen@Sun.COM /* 158*9430SRaymond.Chen@Sun.COM * **************************************** 159*9430SRaymond.Chen@Sun.COM * IE definitions 160*9430SRaymond.Chen@Sun.COM * **************************************** 161*9430SRaymond.Chen@Sun.COM */ 162*9430SRaymond.Chen@Sun.COM 163*9430SRaymond.Chen@Sun.COM /* Wireless USB channel IE identifiers */ 164*9430SRaymond.Chen@Sun.COM #define WUSB_IE_WCTA 0x80 165*9430SRaymond.Chen@Sun.COM #define WUSB_IE_CONNECTACK 0x81 166*9430SRaymond.Chen@Sun.COM #define WUSB_IE_HOSTINFO 0x82 167*9430SRaymond.Chen@Sun.COM #define WUSB_IE_CHCHANGEANNOUNCE 0x83 168*9430SRaymond.Chen@Sun.COM #define WUSB_IE_DEV_DISCONNECT 0x84 169*9430SRaymond.Chen@Sun.COM #define WUSB_IE_HOST_DISCONNECT 0x85 170*9430SRaymond.Chen@Sun.COM #define WUSB_IE_RELEASE_CHANNEL 0x86 171*9430SRaymond.Chen@Sun.COM #define WUSB_IE_WORK 0x87 172*9430SRaymond.Chen@Sun.COM #define WUSB_IE_CHANNEL_STOP 0x88 173*9430SRaymond.Chen@Sun.COM #define WUSB_IE_DEV_KEEPALIVE 0x89 174*9430SRaymond.Chen@Sun.COM #define WUSB_IE_ISOC_DISCARD 0x8a 175*9430SRaymond.Chen@Sun.COM #define WUSB_IE_RESETDEVICE 0x8b 176*9430SRaymond.Chen@Sun.COM #define WUSB_IE_XMIT_PACKET_ADJUST 0x8c 177*9430SRaymond.Chen@Sun.COM 178*9430SRaymond.Chen@Sun.COM /* Array-based IE must not include more than 4 elements */ 179*9430SRaymond.Chen@Sun.COM #define WUSB_IE_MAX_ELEMENT 4 180*9430SRaymond.Chen@Sun.COM #define WUSB_ACK_BLOCK_SIZE 18 181*9430SRaymond.Chen@Sun.COM #define WUSB_ACK_IE_MAX_DATA_LEN \ 182*9430SRaymond.Chen@Sun.COM (WUSB_ACK_BLOCK_SIZE * WUSB_IE_MAX_ELEMENT) 183*9430SRaymond.Chen@Sun.COM #define WUSB_DISCONN_IE_MAX_DATA_LEN (WUSB_IE_MAX_ELEMENT + 2) 184*9430SRaymond.Chen@Sun.COM 185*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_header { 186*9430SRaymond.Chen@Sun.COM uint8_t bLength; 187*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 188*9430SRaymond.Chen@Sun.COM } wusb_ie_header_t; 189*9430SRaymond.Chen@Sun.COM 190*9430SRaymond.Chen@Sun.COM typedef struct wusb_connectack_block { 191*9430SRaymond.Chen@Sun.COM uint8_t CDID[16]; 192*9430SRaymond.Chen@Sun.COM uint8_t bDeviceAddress; 193*9430SRaymond.Chen@Sun.COM uint8_t bReserved; 194*9430SRaymond.Chen@Sun.COM } wusb_connectack_block_t; 195*9430SRaymond.Chen@Sun.COM 196*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_connect_ack { 197*9430SRaymond.Chen@Sun.COM uint8_t bLength; 198*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 199*9430SRaymond.Chen@Sun.COM uint8_t bAckBlock[WUSB_ACK_IE_MAX_DATA_LEN]; 200*9430SRaymond.Chen@Sun.COM } wusb_ie_connect_ack_t; 201*9430SRaymond.Chen@Sun.COM 202*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_host_info { 203*9430SRaymond.Chen@Sun.COM uint8_t bLength; 204*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 205*9430SRaymond.Chen@Sun.COM uint8_t bmAttributes[2]; 206*9430SRaymond.Chen@Sun.COM uint8_t CHID[16]; 207*9430SRaymond.Chen@Sun.COM } wusb_ie_host_info_t; 208*9430SRaymond.Chen@Sun.COM 209*9430SRaymond.Chen@Sun.COM #define WUSB_HI_RECONN_ONLY 0x00 210*9430SRaymond.Chen@Sun.COM #define WUSB_HI_CONN_LMTED 0x01 211*9430SRaymond.Chen@Sun.COM #define WUSB_HI_CONN_ALL 0x03 212*9430SRaymond.Chen@Sun.COM #define WUSB_HI_P2P_DRD_CAP 0x04 213*9430SRaymond.Chen@Sun.COM #define WUSB_HI_STRIDX_SHIFT 3 214*9430SRaymond.Chen@Sun.COM #define WUSB_HI_STRIDX_MASK 0x38 215*9430SRaymond.Chen@Sun.COM 216*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_chchange_announce { 217*9430SRaymond.Chen@Sun.COM uint8_t bLength; 218*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 219*9430SRaymond.Chen@Sun.COM uint8_t bNewPHYChannelNumber; 220*9430SRaymond.Chen@Sun.COM uint8_t SwitchTime[3]; 221*9430SRaymond.Chen@Sun.COM } wusb_ie_chchange_announce_t; 222*9430SRaymond.Chen@Sun.COM 223*9430SRaymond.Chen@Sun.COM /* the size must be even multiple of 2 bytes */ 224*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_dev_disconnect { 225*9430SRaymond.Chen@Sun.COM uint8_t bLength; 226*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 227*9430SRaymond.Chen@Sun.COM uint8_t bDeviceAddress[WUSB_DISCONN_IE_MAX_DATA_LEN]; 228*9430SRaymond.Chen@Sun.COM } wusb_ie_dev_disconnect_t; 229*9430SRaymond.Chen@Sun.COM 230*9430SRaymond.Chen@Sun.COM typedef wusb_ie_dev_disconnect_t wusb_ie_keepalive_t; 231*9430SRaymond.Chen@Sun.COM 232*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_host_disconnect { 233*9430SRaymond.Chen@Sun.COM uint8_t bLength; 234*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 235*9430SRaymond.Chen@Sun.COM } wusb_ie_host_disconnect_t; 236*9430SRaymond.Chen@Sun.COM 237*9430SRaymond.Chen@Sun.COM typedef struct wusb_udrb { 238*9430SRaymond.Chen@Sun.COM uint16_t wStart; 239*9430SRaymond.Chen@Sun.COM uint16_t wDurationValue; 240*9430SRaymond.Chen@Sun.COM uint8_t bDeviceAddress; 241*9430SRaymond.Chen@Sun.COM uint8_t bReserved; 242*9430SRaymond.Chen@Sun.COM } wusb_udrb_t; 243*9430SRaymond.Chen@Sun.COM 244*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_release_channel { 245*9430SRaymond.Chen@Sun.COM uint8_t bLength; 246*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 247*9430SRaymond.Chen@Sun.COM wusb_udrb_t udrb[WUSB_IE_MAX_ELEMENT]; 248*9430SRaymond.Chen@Sun.COM } wusb_ie_release_channel_t; 249*9430SRaymond.Chen@Sun.COM 250*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_channel_stop { 251*9430SRaymond.Chen@Sun.COM uint8_t bLength; 252*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 253*9430SRaymond.Chen@Sun.COM uint8_t bmAttributes; 254*9430SRaymond.Chen@Sun.COM uint8_t StopTime[3]; 255*9430SRaymond.Chen@Sun.COM } wusb_ie_channel_stop_t; 256*9430SRaymond.Chen@Sun.COM 257*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_isoc_discard { 258*9430SRaymond.Chen@Sun.COM uint8_t bLength; 259*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 260*9430SRaymond.Chen@Sun.COM uint8_t bDiscardID; 261*9430SRaymond.Chen@Sun.COM uint8_t bDeviceAddress; 262*9430SRaymond.Chen@Sun.COM uint8_t bmAttributes; 263*9430SRaymond.Chen@Sun.COM uint8_t bFirstReceiveWindowPosition; 264*9430SRaymond.Chen@Sun.COM uint16_t wNumberDiscardedPackets; 265*9430SRaymond.Chen@Sun.COM uint16_t wNumberDiscardedSegments; 266*9430SRaymond.Chen@Sun.COM uint8_t bmDeviceReceiveWindow[4]; 267*9430SRaymond.Chen@Sun.COM } wusb_ie_isoc_discard_t; 268*9430SRaymond.Chen@Sun.COM 269*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_reset_device { 270*9430SRaymond.Chen@Sun.COM uint8_t bLength; 271*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 272*9430SRaymond.Chen@Sun.COM uint8_t CDID[4 * WUSB_IE_MAX_ELEMENT]; 273*9430SRaymond.Chen@Sun.COM } wusb_ie_reset_device_t; 274*9430SRaymond.Chen@Sun.COM 275*9430SRaymond.Chen@Sun.COM typedef struct wusb_ie_xmit_packet_adjust { 276*9430SRaymond.Chen@Sun.COM uint8_t bLength; 277*9430SRaymond.Chen@Sun.COM uint8_t bIEIdentifier; 278*9430SRaymond.Chen@Sun.COM uint8_t bTransmitAdjustment; 279*9430SRaymond.Chen@Sun.COM uint8_t bReserved; 280*9430SRaymond.Chen@Sun.COM } wusb_ie_xmit_packet_adjust_t; 281*9430SRaymond.Chen@Sun.COM 282*9430SRaymond.Chen@Sun.COM /* 283*9430SRaymond.Chen@Sun.COM * ************************************** 284*9430SRaymond.Chen@Sun.COM * Device notification definitions 285*9430SRaymond.Chen@Sun.COM * ************************************** 286*9430SRaymond.Chen@Sun.COM */ 287*9430SRaymond.Chen@Sun.COM 288*9430SRaymond.Chen@Sun.COM /* Device notification message types */ 289*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONNECT 1 290*9430SRaymond.Chen@Sun.COM #define WUSB_DN_DISCONNECT 2 291*9430SRaymond.Chen@Sun.COM #define WUSB_DN_EPRDY 3 292*9430SRaymond.Chen@Sun.COM #define WUSB_DN_MASAVAILCHANGED 4 293*9430SRaymond.Chen@Sun.COM #define WUSB_DN_REMOTEWAKEUP 5 294*9430SRaymond.Chen@Sun.COM #define WUSB_DN_SLEEP 6 295*9430SRaymond.Chen@Sun.COM #define WUSB_DN_ALIVE 7 296*9430SRaymond.Chen@Sun.COM 297*9430SRaymond.Chen@Sun.COM /* WUSB Errata 06.12 specifies WUSB header must not be included */ 298*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_header { 299*9430SRaymond.Chen@Sun.COM uint8_t bType; 300*9430SRaymond.Chen@Sun.COM } wusb_dn_header_t; 301*9430SRaymond.Chen@Sun.COM 302*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_PKT_LEN 19 303*9430SRaymond.Chen@Sun.COM #define WUSB_DN_DISCONN_PKT_LEN 1 304*9430SRaymond.Chen@Sun.COM #define WUSB_DN_EPRDY_HDR_LEN 2 305*9430SRaymond.Chen@Sun.COM #define WUSB_DN_MASAVAILCHANGED_PKT_LEN 1 306*9430SRaymond.Chen@Sun.COM #define WUSB_DN_SLEEP_PKT_LEN 2 307*9430SRaymond.Chen@Sun.COM #define WUSB_DN_REMOTEWAKEUP_PKT_LEN 1 308*9430SRaymond.Chen@Sun.COM #define WUSB_DN_ALIVE_PKT_LEN 1 309*9430SRaymond.Chen@Sun.COM 310*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_connect { 311*9430SRaymond.Chen@Sun.COM uint8_t bType; 312*9430SRaymond.Chen@Sun.COM uint8_t bmConnAttributes[2]; 313*9430SRaymond.Chen@Sun.COM uint8_t CDID[16]; 314*9430SRaymond.Chen@Sun.COM } wusb_dn_connect_t; 315*9430SRaymond.Chen@Sun.COM 316*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_disconnect { 317*9430SRaymond.Chen@Sun.COM uint8_t bType; 318*9430SRaymond.Chen@Sun.COM } wusb_dn_disconnect_t; 319*9430SRaymond.Chen@Sun.COM 320*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_eprdy { 321*9430SRaymond.Chen@Sun.COM uint8_t bType; 322*9430SRaymond.Chen@Sun.COM uint8_t bLength; 323*9430SRaymond.Chen@Sun.COM uint8_t bEPsReadyArray[1]; 324*9430SRaymond.Chen@Sun.COM } wusb_dn_eprdy_t; 325*9430SRaymond.Chen@Sun.COM 326*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_masavail_changed { 327*9430SRaymond.Chen@Sun.COM uint8_t bType; 328*9430SRaymond.Chen@Sun.COM } wusb_dn_masavail_changed_t; 329*9430SRaymond.Chen@Sun.COM 330*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_sleep { 331*9430SRaymond.Chen@Sun.COM uint8_t bType; 332*9430SRaymond.Chen@Sun.COM uint8_t bmSlpAttributes; 333*9430SRaymond.Chen@Sun.COM } wusb_dn_sleep_t; 334*9430SRaymond.Chen@Sun.COM 335*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_remote_wakeup { 336*9430SRaymond.Chen@Sun.COM uint8_t bType; 337*9430SRaymond.Chen@Sun.COM } wusb_dn_remote_wakeup_t; 338*9430SRaymond.Chen@Sun.COM 339*9430SRaymond.Chen@Sun.COM typedef struct wusb_dn_alive { 340*9430SRaymond.Chen@Sun.COM uint8_t bType; 341*9430SRaymond.Chen@Sun.COM } wusb_dn_alive_t; 342*9430SRaymond.Chen@Sun.COM 343*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_NEW 0x01 344*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_BEACON_MASK 0x06 345*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_SELF_BEACON 0x02 346*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_DIRECTED_BEACON 0x04 347*9430SRaymond.Chen@Sun.COM #define WUSB_DN_CONN_NO_BEACON 0x06 348*9430SRaymond.Chen@Sun.COM 349*9430SRaymond.Chen@Sun.COM #define WUSB_DN_SLP_ATTR_GTS 0 350*9430SRaymond.Chen@Sun.COM #define WUSB_DN_SLP_ATTR_WTS 1 351*9430SRaymond.Chen@Sun.COM 352*9430SRaymond.Chen@Sun.COM /* 353*9430SRaymond.Chen@Sun.COM * WUSB data rate definitions. See WUSB 7.4.1.1 354*9430SRaymond.Chen@Sun.COM */ 355*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_53 1 << 0 /* 53.3 Mbps */ 356*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_80 1 << 1 /* 80 Mbps */ 357*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_106 1 << 2 /* 106.7 Mbps */ 358*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_160 1 << 3 /* 160 Mbps */ 359*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_200 1 << 4 /* 200 Mbps */ 360*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_320 1 << 5 /* 320 Mbps */ 361*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_400 1 << 6 /* 400 Mbps */ 362*9430SRaymond.Chen@Sun.COM #define WUSB_DATA_RATE_BIT_480 1 << 7 /* 480 Mbps */ 363*9430SRaymond.Chen@Sun.COM 364*9430SRaymond.Chen@Sun.COM /* 365*9430SRaymond.Chen@Sun.COM * WUSB PHY Transfer Rate. See WUSB 5.6 366*9430SRaymond.Chen@Sun.COM */ 367*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_53 0 /* 53.3 Mbps */ 368*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_80 1 /* 80 Mbps */ 369*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_106 2 /* 106.7 Mbps */ 370*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_160 3 /* 160 Mbps */ 371*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_200 4 /* 200 Mbps */ 372*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_320 5 /* 320 Mbps */ 373*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_400 6 /* 400 Mbps */ 374*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_480 7 /* 480 Mbps */ 375*9430SRaymond.Chen@Sun.COM #define WUSB_PHY_TX_RATE_RES 8 /* 8~1F, reserved */ 376*9430SRaymond.Chen@Sun.COM 377*9430SRaymond.Chen@Sun.COM /* 378*9430SRaymond.Chen@Sun.COM * ***************************************** 379*9430SRaymond.Chen@Sun.COM * crypto definition 380*9430SRaymond.Chen@Sun.COM * ***************************************** 381*9430SRaymond.Chen@Sun.COM */ 382*9430SRaymond.Chen@Sun.COM 383*9430SRaymond.Chen@Sun.COM typedef struct wusb_ccm_nonce { 384*9430SRaymond.Chen@Sun.COM uint64_t sfn; 385*9430SRaymond.Chen@Sun.COM uint32_t tkid; 386*9430SRaymond.Chen@Sun.COM uint16_t daddr; 387*9430SRaymond.Chen@Sun.COM uint16_t saddr; 388*9430SRaymond.Chen@Sun.COM } wusb_ccm_nonce_t; 389*9430SRaymond.Chen@Sun.COM 390*9430SRaymond.Chen@Sun.COM #define CCM_MAC_LEN 8 /* from WUSB 6.4 */ 391*9430SRaymond.Chen@Sun.COM #define CCM_NONCE_LEN 13 /* from WUSB 6.4 */ 392*9430SRaymond.Chen@Sun.COM 393*9430SRaymond.Chen@Sun.COM /* WUSB encryption types. see table 7-35 */ 394*9430SRaymond.Chen@Sun.COM #define WUSB_ENCRYP_TYPE_UNSECURE 0 395*9430SRaymond.Chen@Sun.COM #define WUSB_ENCRYP_TYPE_WIRED 1 396*9430SRaymond.Chen@Sun.COM #define WUSB_ENCRYP_TYPE_CCM_1 2 397*9430SRaymond.Chen@Sun.COM #define WUSB_ENCRYP_TYPE_RSA_1 3 398*9430SRaymond.Chen@Sun.COM 399*9430SRaymond.Chen@Sun.COM /* association, refer to WUSB AM Spec 3.8 */ 400*9430SRaymond.Chen@Sun.COM enum wusb_association_attr { 401*9430SRaymond.Chen@Sun.COM attrAssociationTypeId = 0x0000, 402*9430SRaymond.Chen@Sun.COM attrAssociationSubTypeId = 0x0001, 403*9430SRaymond.Chen@Sun.COM attrLength = 0x0002, 404*9430SRaymond.Chen@Sun.COM attrAssociationStatus = 0x0004, 405*9430SRaymond.Chen@Sun.COM attrLangID = 0x0008, 406*9430SRaymond.Chen@Sun.COM attrDeviceFriendlyName = 0x000B, 407*9430SRaymond.Chen@Sun.COM attrHostFriendlyName = 0x000C, 408*9430SRaymond.Chen@Sun.COM attrCHID = 0x1000, 409*9430SRaymond.Chen@Sun.COM attrCDID = 0x1001, 410*9430SRaymond.Chen@Sun.COM attrConnectionContext = 0x1002, 411*9430SRaymond.Chen@Sun.COM attrBandGroups = 0x1004 412*9430SRaymond.Chen@Sun.COM }; 413*9430SRaymond.Chen@Sun.COM 414*9430SRaymond.Chen@Sun.COM typedef uint16_t wusb_asso_attr_t; 415*9430SRaymond.Chen@Sun.COM 416*9430SRaymond.Chen@Sun.COM typedef struct wusb_cbaf_info_item { 417*9430SRaymond.Chen@Sun.COM wusb_asso_attr_t typeID; 418*9430SRaymond.Chen@Sun.COM uint16_t length; 419*9430SRaymond.Chen@Sun.COM } wusb_cbaf_info_item_t; 420*9430SRaymond.Chen@Sun.COM 421*9430SRaymond.Chen@Sun.COM #define fieldAssociationTypeId "\x00\x00\x02\x00" 422*9430SRaymond.Chen@Sun.COM #define fieldAssociationSubTypeId "\x01\x00\x02\x00" 423*9430SRaymond.Chen@Sun.COM #define fieldLength "\x02\x00\x04\x00" 424*9430SRaymond.Chen@Sun.COM #define fieldAssociationStatus "\x04\x00\x04\x00" 425*9430SRaymond.Chen@Sun.COM #define fieldLangID "\x08\x00\x02\x00" 426*9430SRaymond.Chen@Sun.COM #define fieldDeviceFriendlyName "\x0B\x00\x40\x00" 427*9430SRaymond.Chen@Sun.COM #define fieldHostFriendlyName "\x0C\x00\x40\x00" 428*9430SRaymond.Chen@Sun.COM #define fieldCHID "\x00\x10\x10\x00" 429*9430SRaymond.Chen@Sun.COM #define fieldCDID "\x01\x10\x10\x00" 430*9430SRaymond.Chen@Sun.COM #define fieldConnectionContext "\x02\x10\x30\x00" 431*9430SRaymond.Chen@Sun.COM #define fieldBandGroups "\x04\x10\x02\x00" 432*9430SRaymond.Chen@Sun.COM 433*9430SRaymond.Chen@Sun.COM 434*9430SRaymond.Chen@Sun.COM #ifdef __cplusplus 435*9430SRaymond.Chen@Sun.COM } 436*9430SRaymond.Chen@Sun.COM #endif 437*9430SRaymond.Chen@Sun.COM 438*9430SRaymond.Chen@Sun.COM #endif /* _SYS_USB_WUSBA_H */ 439