1 /* $OpenBSD: if_wi_usb.h,v 1.2 2005/10/31 05:37:13 jsg Exp $ */ 2 3 /* 4 * Copyright (c) 2003 Dale Rahn. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * 26 * Effort sponsored in part by the Defense Advanced Research Projects 27 * Agency (DARPA) and Air Force Research Laboratory, Air Force 28 * Materiel Command, USAF, under agreement number F30602-01-2-0537. 29 */ 30 31 #define WI_USB_CONFIG_NO 1 32 33 #define WI_USB_ENDPT_TX 1 34 #define WI_USB_ENDPT_RX 2 35 #define WI_USB_ENDPT_INTR 3 36 #define WI_USB_ENDPT_MAX 4 37 38 #define WI_USB_IFACE_IDX 0 39 40 41 /* XXX */ 42 #define WI_USB_DATA_MAXLEN WI_DEFAULT_DATALEN 43 #define WI_USB_BUFSZ 2368 /* MAX PACKET LEN ??? n%64 == 0 */ 44 #define WI_USB_INTR_INTERVAL 100 /* ms */ 45 46 struct wi_usb_softc; 47 48 struct wi_usb_chain { 49 struct wi_usb_softc *wi_usb_sc; 50 struct usbd_xfer *wi_usb_xfer; 51 void *wi_usb_buf; 52 struct mbuf *wi_usb_mbuf; 53 int wi_usb_idx; 54 }; 55 #define WI_USB_TX_LIST_CNT 1 56 #define WI_USB_RX_LIST_CNT 1 57 58 struct wi_rridreq { 59 u_int16_t type; /* 0x00 */ 60 u_int16_t frmlen; /* 0x02 */ 61 u_int16_t rid; /* 0x04 */ 62 u_int8_t pad[58]; /* 0x06 + sizeof(.) == 64 */ 63 }; 64 struct wi_rridresp { 65 u_int16_t type; /* 0x00 */ 66 u_int16_t frmlen; /* 0x02 */ 67 u_int16_t rid; /* 0x04 */ 68 u_int8_t data[1658]; /* 0x06 */ 69 /* sizeof(struct wi_rridresp) == WI_USB_BUFSZ */ 70 }; 71 struct wi_wridreq { 72 u_int16_t type; /* 0x00 */ 73 u_int16_t frmlen; /* 0x02 */ 74 u_int16_t rid; /* 0x04 */ 75 u_int8_t data[2048]; /* 0x06 */ 76 }; 77 struct wi_wridresp { 78 u_int16_t type; 79 u_int16_t status; 80 u_int16_t resp0; 81 u_int16_t resp1; 82 u_int16_t resp2; 83 }; 84 struct wi_info { 85 u_int16_t type; 86 u_int16_t info; 87 }; 88 89 90 #define WI_USB_CMD_INIT 0x0 91 #define WI_USB_CMD_ENABLE 0x1 92 #define WI_USB_CMD_DISABLE 0x2 93 #define WI_USB_CMD_DIAG 0x3 94 95 struct wi_cmdreq { 96 u_int16_t type; 97 u_int16_t cmd; 98 u_int16_t param0; 99 u_int16_t param1; 100 u_int16_t param2; 101 u_int8_t pad[54]; 102 }; 103 struct wi_cmdresp { 104 u_int16_t type; 105 u_int16_t status; 106 u_int16_t resp0; 107 u_int16_t resp1; 108 u_int16_t resp2; 109 }; 110 111 typedef union { 112 u_int16_t type; 113 struct wi_rridreq rridreq; 114 struct wi_rridresp rridresp; 115 struct wi_cmdreq cmdreq; 116 struct wi_cmdresp cmdresp; 117 } wi_usb_usbin; 118 #define WI_USB_INTR_PKTLEN 8 119 120 #define WI_USB_TX_TIMEOUT 10000 /* ms */ 121 122 123 /* Should be sent to the bulkout endpoint */ 124 #define WI_USB_TXFRM 0 125 #define WI_USB_CMDREQ 1 126 #define WI_USB_WRIDREQ 2 127 #define WI_USB_RRIDREQ 3 128 #define WI_USB_WMEMREQ 4 129 #define WI_USB_RMEMREQ 5 130 131 /* Received from the bulkin endpoint */ 132 #define WI_USB_ISTXFRM(a) (((a) & 0xf000) == 0x0000) 133 #define WI_USB_ISRXFRM(a) (((a) & 0xf000) == 0x2000) 134 135 #define WI_USB_INFOFRM 0x8000 136 #define WI_USB_CMDRESP 0x8001 137 #define WI_USB_WRIDRESP 0x8002 138 #define WI_USB_RRIDRESP 0x8003 139 #define WI_USB_WMEMRESP 0x8004 140 #define WI_USB_RMEMRESP 0x8005 141 #define WI_USB_BUFAVAIL 0x8006 142 #define WI_USB_ERROR 0x8007 143 144 #define WI_GET_IFP(sc) &(sc)->sc_wi.sc_ic.ic_if 145 146 /* USB */ 147 int wi_cmd_usb(struct wi_softc *sc, int cmd, int val0, int val1, int val2); 148 int wi_read_record_usb(struct wi_softc *sc, struct wi_ltv_gen *ltv); 149 int wi_write_record_usb(struct wi_softc *sc, struct wi_ltv_gen *ltv); 150 int wi_read_data_usb(struct wi_softc *sc, int id, int off, caddr_t buf, 151 int len); 152 int wi_write_data_usb(struct wi_softc *sc, int id, int off, caddr_t buf, 153 int len); 154 int wi_alloc_nicmem_usb(struct wi_softc *sc, int len, int *id); 155 int wi_get_fid_usb(struct wi_softc *sc, int fid); 156 void wi_init_usb(struct wi_softc *sc); 157 158 void wi_start_usb(struct ifnet *ifp); 159 int wi_ioctl_usb(struct ifnet *, u_long, caddr_t); 160 void wi_inquire_usb(void *xsc); 161 void wi_watchdog_usb(struct ifnet *ifp); 162