1 /* 2 * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 2005, 2006 8 * Damien Bergamini <damien.bergamini@free.fr> 9 * 10 * Permission to use, copy, modify, and distribute this software for any 11 * purpose with or without fee is hereby granted, provided that the above 12 * copyright notice and this permission notice appear in all copies. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 15 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23 /* 24 * Ralink Technology RT2500USB chipset driver 25 * http://www.ralinktech.com/ 26 */ 27 #include <sys/types.h> 28 #include <sys/cmn_err.h> 29 #include <sys/strsubr.h> 30 #include <sys/modctl.h> 31 #include <sys/devops.h> 32 #include <sys/byteorder.h> 33 #include <sys/mac_provider.h> 34 #include <sys/mac_wifi.h> 35 #include <sys/net80211.h> 36 37 #define USBDRV_MAJOR_VER 2 38 #define USBDRV_MINOR_VER 0 39 #include <sys/usb/usba.h> 40 #include <sys/usb/usba/usba_types.h> 41 42 #include "ural_reg.h" 43 #include "ural_var.h" 44 45 static void *ural_soft_state_p = NULL; 46 47 #define RAL_TXBUF_SIZE (IEEE80211_MAX_LEN) 48 #define RAL_RXBUF_SIZE (IEEE80211_MAX_LEN) 49 50 /* quickly determine if a given rate is CCK or OFDM */ 51 #define RAL_RATE_IS_OFDM(rate) ((rate) >= 12 && (rate) != 22) 52 #define RAL_ACK_SIZE 14 /* 10 + 4(FCS) */ 53 #define RAL_CTS_SIZE 14 /* 10 + 4(FCS) */ 54 #define RAL_SIFS 10 /* us */ 55 #define RAL_RXTX_TURNAROUND 5 /* us */ 56 57 #define URAL_N(a) (sizeof (a) / sizeof ((a)[0])) 58 59 /* 60 * Supported rates for 802.11a/b/g modes (in 500Kbps unit). 61 */ 62 static const struct ieee80211_rateset ural_rateset_11a = 63 { 8, { 12, 18, 24, 36, 48, 72, 96, 108 } }; 64 65 static const struct ieee80211_rateset ural_rateset_11b = 66 { 4, { 2, 4, 11, 22 } }; 67 68 static const struct ieee80211_rateset ural_rateset_11g = 69 { 12, { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 } }; 70 71 /* 72 * Default values for MAC registers; values taken from the reference driver. 73 */ 74 static const struct { 75 uint16_t reg; 76 uint16_t val; 77 } ural_def_mac[] = { 78 { RAL_TXRX_CSR5, 0x8c8d }, 79 { RAL_TXRX_CSR6, 0x8b8a }, 80 { RAL_TXRX_CSR7, 0x8687 }, 81 { RAL_TXRX_CSR8, 0x0085 }, 82 { RAL_MAC_CSR13, 0x1111 }, 83 { RAL_MAC_CSR14, 0x1e11 }, 84 { RAL_TXRX_CSR21, 0xe78f }, 85 { RAL_MAC_CSR9, 0xff1d }, 86 { RAL_MAC_CSR11, 0x0002 }, 87 { RAL_MAC_CSR22, 0x0053 }, 88 { RAL_MAC_CSR15, 0x0000 }, 89 { RAL_MAC_CSR8, 0x0780 }, 90 { RAL_TXRX_CSR19, 0x0000 }, 91 { RAL_TXRX_CSR18, 0x005a }, 92 { RAL_PHY_CSR2, 0x0000 }, 93 { RAL_TXRX_CSR0, 0x1ec0 }, 94 { RAL_PHY_CSR4, 0x000f } 95 }; 96 97 /* 98 * Default values for BBP registers; values taken from the reference driver. 99 */ 100 static const struct { 101 uint8_t reg; 102 uint8_t val; 103 } ural_def_bbp[] = { 104 { 3, 0x02 }, 105 { 4, 0x19 }, 106 { 14, 0x1c }, 107 { 15, 0x30 }, 108 { 16, 0xac }, 109 { 17, 0x48 }, 110 { 18, 0x18 }, 111 { 19, 0xff }, 112 { 20, 0x1e }, 113 { 21, 0x08 }, 114 { 22, 0x08 }, 115 { 23, 0x08 }, 116 { 24, 0x80 }, 117 { 25, 0x50 }, 118 { 26, 0x08 }, 119 { 27, 0x23 }, 120 { 30, 0x10 }, 121 { 31, 0x2b }, 122 { 32, 0xb9 }, 123 { 34, 0x12 }, 124 { 35, 0x50 }, 125 { 39, 0xc4 }, 126 { 40, 0x02 }, 127 { 41, 0x60 }, 128 { 53, 0x10 }, 129 { 54, 0x18 }, 130 { 56, 0x08 }, 131 { 57, 0x10 }, 132 { 58, 0x08 }, 133 { 61, 0x60 }, 134 { 62, 0x10 }, 135 { 75, 0xff } 136 }; 137 138 /* 139 * Default values for RF register R2 indexed by channel numbers. 140 */ 141 static const uint32_t ural_rf2522_r2[] = { 142 0x307f6, 0x307fb, 0x30800, 0x30805, 0x3080a, 0x3080f, 0x30814, 143 0x30819, 0x3081e, 0x30823, 0x30828, 0x3082d, 0x30832, 0x3083e 144 }; 145 146 static const uint32_t ural_rf2523_r2[] = { 147 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d, 148 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346 149 }; 150 151 static const uint32_t ural_rf2524_r2[] = { 152 0x00327, 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d, 153 0x0032e, 0x0032f, 0x00340, 0x00341, 0x00342, 0x00343, 0x00346 154 }; 155 156 static const uint32_t ural_rf2525_r2[] = { 157 0x20327, 0x20328, 0x20329, 0x2032a, 0x2032b, 0x2032c, 0x2032d, 158 0x2032e, 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20346 159 }; 160 161 static const uint32_t ural_rf2525_hi_r2[] = { 162 0x2032f, 0x20340, 0x20341, 0x20342, 0x20343, 0x20344, 0x20345, 163 0x20346, 0x20347, 0x20348, 0x20349, 0x2034a, 0x2034b, 0x2034e 164 }; 165 166 static const uint32_t ural_rf2525e_r2[] = { 167 0x2044d, 0x2044e, 0x2044f, 0x20460, 0x20461, 0x20462, 0x20463, 168 0x20464, 0x20465, 0x20466, 0x20467, 0x20468, 0x20469, 0x2046b 169 }; 170 171 static const uint32_t ural_rf2526_hi_r2[] = { 172 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d, 0x0022d, 173 0x0022e, 0x0022e, 0x0022f, 0x0022d, 0x00240, 0x00240, 0x00241 174 }; 175 176 static const uint32_t ural_rf2526_r2[] = { 177 0x00226, 0x00227, 0x00227, 0x00228, 0x00228, 0x00229, 0x00229, 178 0x0022a, 0x0022a, 0x0022b, 0x0022b, 0x0022c, 0x0022c, 0x0022d 179 }; 180 181 /* 182 * For dual-band RF, RF registers R1 and R4 also depend on channel number; 183 * values taken from the reference driver. 184 */ 185 static const struct { 186 uint8_t chan; 187 uint32_t r1; 188 uint32_t r2; 189 uint32_t r4; 190 } ural_rf5222[] = { 191 { 1, 0x08808, 0x0044d, 0x00282 }, 192 { 2, 0x08808, 0x0044e, 0x00282 }, 193 { 3, 0x08808, 0x0044f, 0x00282 }, 194 { 4, 0x08808, 0x00460, 0x00282 }, 195 { 5, 0x08808, 0x00461, 0x00282 }, 196 { 6, 0x08808, 0x00462, 0x00282 }, 197 { 7, 0x08808, 0x00463, 0x00282 }, 198 { 8, 0x08808, 0x00464, 0x00282 }, 199 { 9, 0x08808, 0x00465, 0x00282 }, 200 { 10, 0x08808, 0x00466, 0x00282 }, 201 { 11, 0x08808, 0x00467, 0x00282 }, 202 { 12, 0x08808, 0x00468, 0x00282 }, 203 { 13, 0x08808, 0x00469, 0x00282 }, 204 { 14, 0x08808, 0x0046b, 0x00286 }, 205 206 { 36, 0x08804, 0x06225, 0x00287 }, 207 { 40, 0x08804, 0x06226, 0x00287 }, 208 { 44, 0x08804, 0x06227, 0x00287 }, 209 { 48, 0x08804, 0x06228, 0x00287 }, 210 { 52, 0x08804, 0x06229, 0x00287 }, 211 { 56, 0x08804, 0x0622a, 0x00287 }, 212 { 60, 0x08804, 0x0622b, 0x00287 }, 213 { 64, 0x08804, 0x0622c, 0x00287 }, 214 215 { 100, 0x08804, 0x02200, 0x00283 }, 216 { 104, 0x08804, 0x02201, 0x00283 }, 217 { 108, 0x08804, 0x02202, 0x00283 }, 218 { 112, 0x08804, 0x02203, 0x00283 }, 219 { 116, 0x08804, 0x02204, 0x00283 }, 220 { 120, 0x08804, 0x02205, 0x00283 }, 221 { 124, 0x08804, 0x02206, 0x00283 }, 222 { 128, 0x08804, 0x02207, 0x00283 }, 223 { 132, 0x08804, 0x02208, 0x00283 }, 224 { 136, 0x08804, 0x02209, 0x00283 }, 225 { 140, 0x08804, 0x0220a, 0x00283 }, 226 227 { 149, 0x08808, 0x02429, 0x00281 }, 228 { 153, 0x08808, 0x0242b, 0x00281 }, 229 { 157, 0x08808, 0x0242d, 0x00281 }, 230 { 161, 0x08808, 0x0242f, 0x00281 } 231 }; 232 233 /* 234 * device operations 235 */ 236 static int ural_attach(dev_info_t *, ddi_attach_cmd_t); 237 static int ural_detach(dev_info_t *, ddi_detach_cmd_t); 238 239 /* 240 * Module Loading Data & Entry Points 241 */ 242 DDI_DEFINE_STREAM_OPS(ural_dev_ops, nulldev, nulldev, ural_attach, 243 ural_detach, nodev, NULL, D_MP, NULL, ddi_quiesce_not_needed); 244 245 static struct modldrv ural_modldrv = { 246 &mod_driverops, /* Type of module. This one is a driver */ 247 "ural driver v1.4", /* short description */ 248 &ural_dev_ops /* driver specific ops */ 249 }; 250 251 static struct modlinkage modlinkage = { 252 MODREV_1, 253 (void *)&ural_modldrv, 254 NULL 255 }; 256 257 static int ural_m_stat(void *, uint_t, uint64_t *); 258 static int ural_m_start(void *); 259 static void ural_m_stop(void *); 260 static int ural_m_promisc(void *, boolean_t); 261 static int ural_m_multicst(void *, boolean_t, const uint8_t *); 262 static int ural_m_unicst(void *, const uint8_t *); 263 static mblk_t *ural_m_tx(void *, mblk_t *); 264 static void ural_m_ioctl(void *, queue_t *, mblk_t *); 265 static int ural_m_setprop(void *, const char *, mac_prop_id_t, 266 uint_t, const void *); 267 static int ural_m_getprop(void *, const char *, mac_prop_id_t, 268 uint_t, void *); 269 static void ural_m_propinfo(void *, const char *, mac_prop_id_t, 270 mac_prop_info_handle_t); 271 272 static mac_callbacks_t ural_m_callbacks = { 273 MC_IOCTL | MC_SETPROP | MC_GETPROP | MC_PROPINFO, 274 ural_m_stat, 275 ural_m_start, 276 ural_m_stop, 277 ural_m_promisc, 278 ural_m_multicst, 279 ural_m_unicst, 280 ural_m_tx, 281 NULL, 282 ural_m_ioctl, 283 NULL, /* mc_getcapab */ 284 NULL, 285 NULL, 286 ural_m_setprop, 287 ural_m_getprop, 288 ural_m_propinfo 289 }; 290 291 static void ural_amrr_start(struct ural_softc *, struct ieee80211_node *); 292 static int ural_tx_trigger(struct ural_softc *, mblk_t *); 293 static int ural_rx_trigger(struct ural_softc *); 294 295 uint32_t ural_dbg_flags = 0; 296 297 void 298 ral_debug(uint32_t dbg_flags, const int8_t *fmt, ...) 299 { 300 va_list args; 301 302 if (dbg_flags & ural_dbg_flags) { 303 va_start(args, fmt); 304 vcmn_err(CE_CONT, fmt, args); 305 va_end(args); 306 } 307 } 308 309 static uint16_t 310 ural_read(struct ural_softc *sc, uint16_t reg) 311 { 312 usb_ctrl_setup_t req; 313 usb_cr_t cr; 314 usb_cb_flags_t cf; 315 mblk_t *mp; 316 int err; 317 uint16_t val; 318 319 bzero(&req, sizeof (req)); 320 req.bmRequestType = USB_DEV_REQ_TYPE_VENDOR | USB_DEV_REQ_DEV_TO_HOST; 321 req.bRequest = RAL_READ_MAC; 322 req.wValue = 0; 323 req.wIndex = reg; 324 req.wLength = sizeof (uint16_t); 325 326 mp = NULL; 327 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, 328 &cr, &cf, 0); 329 330 if (err != USB_SUCCESS) { 331 ral_debug(RAL_DBG_ERR, 332 "ural_read(): could not read MAC register:" 333 " cr:%s(%d), cf:(%x)\n", 334 usb_str_cr(cr), cr, cf); 335 return (0); 336 } 337 338 bcopy(mp->b_rptr, &val, sizeof (uint16_t)); 339 340 if (mp) 341 freemsg(mp); 342 343 return (LE_16(val)); 344 } 345 346 static void 347 ural_read_multi(struct ural_softc *sc, uint16_t reg, void *buf, int len) 348 { 349 usb_ctrl_setup_t req; 350 usb_cr_t cr; 351 usb_cb_flags_t cf; 352 mblk_t *mp; 353 int err; 354 355 bzero(&req, sizeof (req)); 356 req.bmRequestType = USB_DEV_REQ_TYPE_VENDOR | USB_DEV_REQ_DEV_TO_HOST; 357 req.bRequest = RAL_READ_MULTI_MAC; 358 req.wValue = 0; 359 req.wIndex = reg; 360 req.wLength = (uint16_t)len; 361 req.attrs = USB_ATTRS_AUTOCLEARING; 362 363 mp = NULL; 364 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, 365 &cr, &cf, 0); 366 367 if (err != USB_SUCCESS) { 368 ral_debug(RAL_DBG_ERR, 369 "ural_read_multi(): could not read MAC register:" 370 "cr:%s(%d), cf:(%x)\n", 371 usb_str_cr(cr), cr, cf); 372 return; 373 } 374 375 bcopy(mp->b_rptr, buf, len); 376 377 if (mp) 378 freemsg(mp); 379 } 380 381 static void 382 ural_write(struct ural_softc *sc, uint16_t reg, uint16_t val) 383 { 384 usb_ctrl_setup_t req; 385 usb_cr_t cr; 386 usb_cb_flags_t cf; 387 int err; 388 389 bzero(&req, sizeof (req)); 390 req.bmRequestType = USB_DEV_REQ_TYPE_VENDOR | USB_DEV_REQ_HOST_TO_DEV; 391 req.bRequest = RAL_WRITE_MAC; 392 req.wValue = val; 393 req.wIndex = reg; 394 req.wLength = 0; 395 req.attrs = USB_ATTRS_NONE; 396 397 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, NULL, 398 &cr, &cf, 0); 399 400 if (err != USB_SUCCESS) { 401 ral_debug(RAL_DBG_ERR, 402 "ural_write(): could not write MAC register:" 403 "cr:%s(%d), cf:(%x)\n", 404 usb_str_cr(cr), cr, cf); 405 } 406 } 407 408 /* ARGSUSED */ 409 static void 410 ural_txeof(usb_pipe_handle_t pipe, usb_bulk_req_t *req) 411 { 412 struct ural_softc *sc = (struct ural_softc *)req->bulk_client_private; 413 struct ieee80211com *ic = &sc->sc_ic; 414 415 ral_debug(RAL_DBG_TX, 416 "ural_txeof(): cr:%s(%d), flags:0x%x, tx_queued:%d", 417 usb_str_cr(req->bulk_completion_reason), 418 req->bulk_completion_reason, 419 req->bulk_cb_flags, 420 sc->tx_queued); 421 422 if (req->bulk_completion_reason != USB_CR_OK) 423 sc->sc_tx_err++; 424 425 mutex_enter(&sc->tx_lock); 426 427 sc->tx_queued--; 428 sc->sc_tx_timer = 0; 429 430 if (sc->sc_need_sched) { 431 sc->sc_need_sched = 0; 432 mac_tx_update(ic->ic_mach); 433 } 434 435 mutex_exit(&sc->tx_lock); 436 usb_free_bulk_req(req); 437 } 438 439 /* ARGSUSED */ 440 static void 441 ural_rxeof(usb_pipe_handle_t pipe, usb_bulk_req_t *req) 442 { 443 struct ural_softc *sc = (struct ural_softc *)req->bulk_client_private; 444 struct ieee80211com *ic = &sc->sc_ic; 445 446 struct ural_rx_desc *desc; 447 struct ieee80211_frame *wh; 448 struct ieee80211_node *ni; 449 450 mblk_t *m, *mp; 451 int len, pktlen; 452 char *rxbuf; 453 454 mp = req->bulk_data; 455 req->bulk_data = NULL; 456 457 ral_debug(RAL_DBG_RX, 458 "ural_rxeof(): cr:%s(%d), flags:0x%x, rx_queued:%d", 459 usb_str_cr(req->bulk_completion_reason), 460 req->bulk_completion_reason, 461 req->bulk_cb_flags, 462 sc->rx_queued); 463 464 if (req->bulk_completion_reason != USB_CR_OK) { 465 sc->sc_rx_err++; 466 goto fail; 467 } 468 469 len = (uintptr_t)mp->b_wptr - (uintptr_t)mp->b_rptr; 470 rxbuf = (char *)mp->b_rptr; 471 472 if (len < RAL_RX_DESC_SIZE + IEEE80211_MIN_LEN) { 473 ral_debug(RAL_DBG_ERR, 474 "ural_rxeof(): xfer too short %d\n", len); 475 sc->sc_rx_err++; 476 goto fail; 477 } 478 479 /* rx descriptor is located at the end */ 480 desc = (struct ural_rx_desc *)(rxbuf + len - RAL_RX_DESC_SIZE); 481 482 if ((LE_32(desc->flags) & RAL_RX_PHY_ERROR) || 483 (LE_32(desc->flags) & RAL_RX_CRC_ERROR)) { 484 /* 485 * This should not happen since we did not request to receive 486 * those frames when we filled RAL_TXRX_CSR2. 487 */ 488 ral_debug(RAL_DBG_ERR, "PHY or CRC error\n"); 489 sc->sc_rx_err++; 490 goto fail; 491 } 492 493 pktlen = (LE_32(desc->flags) >> 16) & 0xfff; 494 495 if (pktlen > (len - RAL_RX_DESC_SIZE)) { 496 ral_debug(RAL_DBG_ERR, 497 "ural_rxeof(): pktlen mismatch <%d, %d>.\n", pktlen, len); 498 goto fail; 499 } 500 501 /* Strip trailing 802.11 MAC FCS. */ 502 pktlen -= IEEE80211_CRC_LEN; 503 504 if ((m = allocb(pktlen, BPRI_MED)) == NULL) { 505 ral_debug(RAL_DBG_ERR, 506 "ural_rxeof(): allocate mblk failed.\n"); 507 sc->sc_rx_nobuf++; 508 goto fail; 509 } 510 511 bcopy(rxbuf, m->b_rptr, pktlen); 512 m->b_wptr += pktlen; 513 514 wh = (struct ieee80211_frame *)m->b_rptr; 515 ni = ieee80211_find_rxnode(ic, wh); 516 517 /* send the frame to the 802.11 layer */ 518 (void) ieee80211_input(ic, m, ni, desc->rssi, 0); 519 520 /* node is no longer needed */ 521 ieee80211_free_node(ni); 522 fail: 523 mutex_enter(&sc->rx_lock); 524 sc->rx_queued--; 525 mutex_exit(&sc->rx_lock); 526 527 freemsg(mp); 528 usb_free_bulk_req(req); 529 530 if (RAL_IS_RUNNING(sc)) 531 (void) ural_rx_trigger(sc); 532 } 533 534 /* 535 * Return the expected ack rate for a frame transmitted at rate `rate'. 536 * this should depend on the destination node basic rate set. 537 */ 538 static int 539 ural_ack_rate(struct ieee80211com *ic, int rate) 540 { 541 switch (rate) { 542 /* CCK rates */ 543 case 2: 544 return (2); 545 case 4: 546 case 11: 547 case 22: 548 return ((ic->ic_curmode == IEEE80211_MODE_11B) ? 4 : rate); 549 550 /* OFDM rates */ 551 case 12: 552 case 18: 553 return (12); 554 case 24: 555 case 36: 556 return (24); 557 case 48: 558 case 72: 559 case 96: 560 case 108: 561 return (48); 562 } 563 564 /* default to 1Mbps */ 565 return (2); 566 } 567 568 /* 569 * Compute the duration (in us) needed to transmit `len' bytes at rate `rate'. 570 * The function automatically determines the operating mode depending on the 571 * given rate. `flags' indicates whether short preamble is in use or not. 572 */ 573 static uint16_t 574 ural_txtime(int len, int rate, uint32_t flags) 575 { 576 uint16_t txtime; 577 578 if (RAL_RATE_IS_OFDM(rate)) { 579 /* IEEE Std 802.11a-1999, pp. 37 */ 580 txtime = (8 + 4 * len + 3 + rate - 1) / rate; 581 txtime = 16 + 4 + 4 * txtime + 6; 582 } else { 583 /* IEEE Std 802.11b-1999, pp. 28 */ 584 txtime = (16 * len + rate - 1) / rate; 585 if (rate != 2 && (flags & IEEE80211_F_SHPREAMBLE)) 586 txtime += 72 + 24; 587 else 588 txtime += 144 + 48; 589 } 590 return (txtime); 591 } 592 593 static uint8_t 594 ural_plcp_signal(int rate) 595 { 596 switch (rate) { 597 /* CCK rates (returned values are device-dependent) */ 598 case 2: return (0x0); 599 case 4: return (0x1); 600 case 11: return (0x2); 601 case 22: return (0x3); 602 603 /* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */ 604 case 12: return (0xb); 605 case 18: return (0xf); 606 case 24: return (0xa); 607 case 36: return (0xe); 608 case 48: return (0x9); 609 case 72: return (0xd); 610 case 96: return (0x8); 611 case 108: return (0xc); 612 613 /* unsupported rates (should not get there) */ 614 default: return (0xff); 615 } 616 } 617 618 static void 619 ural_setup_tx_desc(struct ural_softc *sc, struct ural_tx_desc *desc, 620 uint32_t flags, int len, int rate) 621 { 622 struct ieee80211com *ic = &sc->sc_ic; 623 uint16_t plcp_length; 624 int remainder; 625 626 desc->flags = LE_32(flags); 627 desc->flags |= LE_32(RAL_TX_NEWSEQ); 628 desc->flags |= LE_32(len << 16); 629 630 desc->wme = LE_16(RAL_AIFSN(2) | RAL_LOGCWMIN(3) | RAL_LOGCWMAX(5)); 631 desc->wme |= LE_16(RAL_IVOFFSET(sizeof (struct ieee80211_frame))); 632 633 /* setup PLCP fields */ 634 desc->plcp_signal = ural_plcp_signal(rate); 635 desc->plcp_service = 4; 636 637 len += IEEE80211_CRC_LEN; 638 if (RAL_RATE_IS_OFDM(rate)) { 639 desc->flags |= LE_32(RAL_TX_OFDM); 640 641 plcp_length = len & 0xfff; 642 desc->plcp_length_hi = plcp_length >> 6; 643 desc->plcp_length_lo = plcp_length & 0x3f; 644 } else { 645 plcp_length = (16 * len + rate - 1) / rate; 646 if (rate == 22) { 647 remainder = (16 * len) % 22; 648 if (remainder != 0 && remainder < 7) 649 desc->plcp_service |= RAL_PLCP_LENGEXT; 650 } 651 desc->plcp_length_hi = plcp_length >> 8; 652 desc->plcp_length_lo = plcp_length & 0xff; 653 654 if (rate != 2 && (ic->ic_flags & IEEE80211_F_SHPREAMBLE)) 655 desc->plcp_signal |= 0x08; 656 } 657 658 desc->iv = 0; 659 desc->eiv = 0; 660 } 661 662 #define RAL_TX_TIMEOUT 5 663 664 static int 665 ural_send(ieee80211com_t *ic, mblk_t *mp, uint8_t type) 666 { 667 struct ural_softc *sc = (struct ural_softc *)ic; 668 struct ural_tx_desc *desc; 669 670 struct ieee80211_frame *wh; 671 struct ieee80211_key *k; 672 673 uint16_t dur; 674 uint32_t flags = 0; 675 int rate, err = DDI_SUCCESS; 676 677 struct ieee80211_node *ni = NULL; 678 mblk_t *m, *m0; 679 int off, mblen, pktlen, xferlen; 680 681 /* discard packets while suspending or not inited */ 682 if (!RAL_IS_RUNNING(sc)) { 683 freemsg(mp); 684 return (ENXIO); 685 } 686 687 mutex_enter(&sc->tx_lock); 688 689 if (sc->tx_queued > RAL_TX_LIST_COUNT) { 690 ral_debug(RAL_DBG_TX, "ural_send(): " 691 "no TX buffer available!\n"); 692 if ((type & IEEE80211_FC0_TYPE_MASK) == 693 IEEE80211_FC0_TYPE_DATA) { 694 sc->sc_need_sched = 1; 695 } 696 sc->sc_tx_nobuf++; 697 err = ENOMEM; 698 goto fail; 699 } 700 701 m = allocb(RAL_TXBUF_SIZE + RAL_TX_DESC_SIZE, BPRI_MED); 702 if (m == NULL) { 703 ral_debug(RAL_DBG_ERR, "ural_send(): can't alloc mblk.\n"); 704 err = DDI_FAILURE; 705 goto fail; 706 } 707 708 m->b_rptr += RAL_TX_DESC_SIZE; /* skip TX descriptor */ 709 m->b_wptr += RAL_TX_DESC_SIZE; 710 711 for (off = 0, m0 = mp; m0 != NULL; m0 = m0->b_cont) { 712 mblen = (uintptr_t)m0->b_wptr - (uintptr_t)m0->b_rptr; 713 (void) memcpy(m->b_rptr + off, m0->b_rptr, mblen); 714 off += mblen; 715 } 716 m->b_wptr += off; 717 718 wh = (struct ieee80211_frame *)m->b_rptr; 719 720 ni = ieee80211_find_txnode(ic, wh->i_addr1); 721 if (ni == NULL) { 722 err = DDI_FAILURE; 723 sc->sc_tx_err++; 724 freemsg(m); 725 goto fail; 726 } 727 728 if ((type & IEEE80211_FC0_TYPE_MASK) == 729 IEEE80211_FC0_TYPE_DATA) { 730 (void) ieee80211_encap(ic, m, ni); 731 } 732 733 if (wh->i_fc[1] & IEEE80211_FC1_WEP) { 734 k = ieee80211_crypto_encap(ic, m); 735 if (k == NULL) { 736 sc->sc_tx_err++; 737 freemsg(m); 738 err = DDI_FAILURE; 739 goto fail; 740 } 741 /* packet header may have moved, reset our local pointer */ 742 wh = (struct ieee80211_frame *)m->b_rptr; 743 } 744 745 m->b_rptr -= RAL_TX_DESC_SIZE; /* restore */ 746 desc = (struct ural_tx_desc *)m->b_rptr; 747 748 if ((type & IEEE80211_FC0_TYPE_MASK) == 749 IEEE80211_FC0_TYPE_DATA) { /* DATA */ 750 if (ic->ic_fixed_rate != IEEE80211_FIXED_RATE_NONE) 751 rate = ic->ic_bss->in_rates.ir_rates[ic->ic_fixed_rate]; 752 else 753 rate = ni->in_rates.ir_rates[ni->in_txrate]; 754 755 rate &= IEEE80211_RATE_VAL; 756 if (rate <= 0) { 757 rate = 2; /* basic rate */ 758 } 759 760 if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) { 761 flags |= RAL_TX_ACK; 762 flags |= RAL_TX_RETRY(7); 763 764 dur = ural_txtime(RAL_ACK_SIZE, ural_ack_rate(ic, rate), 765 ic->ic_flags) + RAL_SIFS; 766 *(uint16_t *)(uintptr_t)wh->i_dur = LE_16(dur); 767 } 768 } else { /* MGMT */ 769 rate = IEEE80211_IS_CHAN_5GHZ(ic->ic_curchan) ? 12 : 2; 770 771 if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) { 772 flags |= RAL_TX_ACK; 773 774 dur = ural_txtime(RAL_ACK_SIZE, rate, ic->ic_flags) 775 + RAL_SIFS; 776 *(uint16_t *)(uintptr_t)wh->i_dur = LE_16(dur); 777 778 /* tell hardware to add timestamp for probe responses */ 779 if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == 780 IEEE80211_FC0_TYPE_MGT && 781 (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) == 782 IEEE80211_FC0_SUBTYPE_PROBE_RESP) 783 flags |= RAL_TX_TIMESTAMP; 784 } 785 } 786 787 pktlen = (uintptr_t)m->b_wptr - (uintptr_t)m->b_rptr - RAL_TX_DESC_SIZE; 788 ural_setup_tx_desc(sc, desc, flags, pktlen, rate); 789 790 /* align end on a 2-bytes boundary */ 791 xferlen = (RAL_TX_DESC_SIZE + pktlen + 1) & ~1; 792 793 /* 794 * No space left in the last URB to store the extra 2 bytes, force 795 * sending of another URB. 796 */ 797 if ((xferlen % 64) == 0) 798 xferlen += 2; 799 800 m->b_wptr = m->b_rptr + xferlen; 801 802 ral_debug(RAL_DBG_TX, "sending data frame len=%u rate=%u xfer len=%u\n", 803 pktlen, rate, xferlen); 804 805 (void) ural_tx_trigger(sc, m); 806 807 ic->ic_stats.is_tx_frags++; 808 ic->ic_stats.is_tx_bytes += pktlen; 809 810 fail: 811 if (ni != NULL) 812 ieee80211_free_node(ni); 813 814 if ((type & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_DATA || 815 err == 0) { 816 freemsg(mp); 817 } 818 819 mutex_exit(&sc->tx_lock); 820 821 return (err); 822 } 823 824 static mblk_t * 825 ural_m_tx(void *arg, mblk_t *mp) 826 { 827 struct ural_softc *sc = (struct ural_softc *)arg; 828 struct ieee80211com *ic = &sc->sc_ic; 829 mblk_t *next; 830 831 /* 832 * No data frames go out unless we're associated; this 833 * should not happen as the 802.11 layer does not enable 834 * the xmit queue until we enter the RUN state. 835 */ 836 if (ic->ic_state != IEEE80211_S_RUN) { 837 ral_debug(RAL_DBG_ERR, "ural_m_tx(): " 838 "discard, state %u\n", ic->ic_state); 839 freemsgchain(mp); 840 return (NULL); 841 } 842 843 while (mp != NULL) { 844 next = mp->b_next; 845 mp->b_next = NULL; 846 if (ural_send(ic, mp, IEEE80211_FC0_TYPE_DATA) != DDI_SUCCESS) { 847 mp->b_next = next; 848 freemsgchain(mp); 849 return (NULL); 850 } 851 mp = next; 852 } 853 return (mp); 854 } 855 856 static void 857 ural_set_testmode(struct ural_softc *sc) 858 { 859 usb_ctrl_setup_t req; 860 usb_cr_t cr; 861 usb_cb_flags_t cf; 862 int err; 863 864 bzero(&req, sizeof (req)); 865 req.bmRequestType = USB_DEV_REQ_TYPE_VENDOR | USB_DEV_REQ_HOST_TO_DEV; 866 req.bRequest = RAL_VENDOR_REQUEST; 867 req.wValue = 4; 868 req.wIndex = 1; 869 req.wLength = 0; 870 req.attrs = USB_ATTRS_NONE; 871 872 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, NULL, 873 &cr, &cf, 0); 874 875 if (err != USB_SUCCESS) { 876 ral_debug(RAL_DBG_USB, 877 "ural_set_testmode(): could not set test mode:" 878 "cr:%s(%d), cf:%(x)\n", 879 usb_str_cr(cr), cr, cf); 880 } 881 } 882 883 static void 884 ural_eeprom_read(struct ural_softc *sc, uint16_t addr, void *buf, int len) 885 { 886 usb_ctrl_setup_t req; 887 usb_cr_t cr; 888 usb_cb_flags_t cf; 889 mblk_t *mp; 890 int err; 891 892 bzero(&req, sizeof (req)); 893 req.bmRequestType = USB_DEV_REQ_TYPE_VENDOR | USB_DEV_REQ_DEV_TO_HOST; 894 req.bRequest = RAL_READ_EEPROM; 895 req.wValue = 0; 896 req.wIndex = addr; 897 req.wLength = (uint16_t)len; 898 899 mp = NULL; 900 err = usb_pipe_ctrl_xfer_wait(sc->sc_udev->dev_default_ph, &req, &mp, 901 &cr, &cf, 0); 902 903 if (err != USB_SUCCESS) { 904 ral_debug(RAL_DBG_USB, 905 "ural_eeprom_read(): could not read EEPROM:" 906 "cr:%s(%d), cf:(%x)\n", 907 usb_str_cr(cr), cr, cf); 908 return; 909 } 910 911 bcopy(mp->b_rptr, buf, len); 912 913 if (mp) 914 freemsg(mp); 915 } 916 917 static void 918 ural_bbp_write(struct ural_softc *sc, uint8_t reg, uint8_t val) 919 { 920 uint16_t tmp; 921 int ntries; 922 923 for (ntries = 0; ntries < 5; ntries++) { 924 if (!(ural_read(sc, RAL_PHY_CSR8) & RAL_BBP_BUSY)) 925 break; 926 } 927 if (ntries == 5) { 928 ral_debug(RAL_DBG_ERR, 929 "ural_bbp_write(): could not write to BBP\n"); 930 return; 931 } 932 933 tmp = reg << 8 | val; 934 ural_write(sc, RAL_PHY_CSR7, tmp); 935 } 936 937 static uint8_t 938 ural_bbp_read(struct ural_softc *sc, uint8_t reg) 939 { 940 uint16_t val; 941 int ntries; 942 943 val = RAL_BBP_WRITE | reg << 8; 944 ural_write(sc, RAL_PHY_CSR7, val); 945 946 for (ntries = 0; ntries < 5; ntries++) { 947 if (!(ural_read(sc, RAL_PHY_CSR8) & RAL_BBP_BUSY)) 948 break; 949 } 950 if (ntries == 5) { 951 ral_debug(RAL_DBG_ERR, "ural_bbp_read(): could not read BBP\n"); 952 return (0); 953 } 954 955 return (ural_read(sc, RAL_PHY_CSR7) & 0xff); 956 } 957 958 static void 959 ural_rf_write(struct ural_softc *sc, uint8_t reg, uint32_t val) 960 { 961 uint32_t tmp; 962 int ntries; 963 964 for (ntries = 0; ntries < 5; ntries++) { 965 if (!(ural_read(sc, RAL_PHY_CSR10) & RAL_RF_LOBUSY)) 966 break; 967 } 968 if (ntries == 5) { 969 ral_debug(RAL_DBG_ERR, 970 "ural_rf_write(): could not write to RF\n"); 971 return; 972 } 973 974 tmp = RAL_RF_BUSY | RAL_RF_20BIT | (val & 0xffff) << 2 | (reg & 0x3); 975 ural_write(sc, RAL_PHY_CSR9, tmp & 0xffff); 976 ural_write(sc, RAL_PHY_CSR10, tmp >> 16); 977 978 /* remember last written value in sc */ 979 sc->rf_regs[reg] = val; 980 981 ral_debug(RAL_DBG_HW, "RF R[%u] <- 0x%05x\n", reg & 0x3, val & 0xfffff); 982 } 983 984 /* 985 * Disable RF auto-tuning. 986 */ 987 static void 988 ural_disable_rf_tune(struct ural_softc *sc) 989 { 990 uint32_t tmp; 991 992 if (sc->rf_rev != RAL_RF_2523) { 993 tmp = sc->rf_regs[RAL_RF1] & ~RAL_RF1_AUTOTUNE; 994 ural_rf_write(sc, RAL_RF1, tmp); 995 } 996 997 tmp = sc->rf_regs[RAL_RF3] & ~RAL_RF3_AUTOTUNE; 998 ural_rf_write(sc, RAL_RF3, tmp); 999 1000 ral_debug(RAL_DBG_HW, "disabling RF autotune\n"); 1001 } 1002 1003 1004 static void 1005 ural_set_chan(struct ural_softc *sc, struct ieee80211_channel *c) 1006 { 1007 struct ieee80211com *ic = &sc->sc_ic; 1008 uint8_t power, tmp; 1009 uint_t i, chan; 1010 1011 chan = ieee80211_chan2ieee(ic, c); 1012 if (chan == 0 || chan == IEEE80211_CHAN_ANY) 1013 return; 1014 1015 if (IEEE80211_IS_CHAN_2GHZ(c)) 1016 power = min(sc->txpow[chan - 1], 31); 1017 else 1018 power = 31; 1019 1020 /* adjust txpower using ifconfig settings */ 1021 power -= (100 - ic->ic_txpowlimit) / 8; 1022 1023 ral_debug(RAL_DBG_HW, "setting channel to %u, txpower to %u\n", 1024 chan, power); 1025 1026 switch (sc->rf_rev) { 1027 case RAL_RF_2522: 1028 ural_rf_write(sc, RAL_RF1, 0x00814); 1029 ural_rf_write(sc, RAL_RF2, ural_rf2522_r2[chan - 1]); 1030 ural_rf_write(sc, RAL_RF3, power << 7 | 0x00040); 1031 break; 1032 1033 case RAL_RF_2523: 1034 ural_rf_write(sc, RAL_RF1, 0x08804); 1035 ural_rf_write(sc, RAL_RF2, ural_rf2523_r2[chan - 1]); 1036 ural_rf_write(sc, RAL_RF3, power << 7 | 0x38044); 1037 ural_rf_write(sc, RAL_RF4, (chan == 14) ? 0x00280 : 0x00286); 1038 break; 1039 1040 case RAL_RF_2524: 1041 ural_rf_write(sc, RAL_RF1, 0x0c808); 1042 ural_rf_write(sc, RAL_RF2, ural_rf2524_r2[chan - 1]); 1043 ural_rf_write(sc, RAL_RF3, power << 7 | 0x00040); 1044 ural_rf_write(sc, RAL_RF4, (chan == 14) ? 0x00280 : 0x00286); 1045 break; 1046 1047 case RAL_RF_2525: 1048 ural_rf_write(sc, RAL_RF1, 0x08808); 1049 ural_rf_write(sc, RAL_RF2, ural_rf2525_hi_r2[chan - 1]); 1050 ural_rf_write(sc, RAL_RF3, power << 7 | 0x18044); 1051 ural_rf_write(sc, RAL_RF4, (chan == 14) ? 0x00280 : 0x00286); 1052 1053 ural_rf_write(sc, RAL_RF1, 0x08808); 1054 ural_rf_write(sc, RAL_RF2, ural_rf2525_r2[chan - 1]); 1055 ural_rf_write(sc, RAL_RF3, power << 7 | 0x18044); 1056 ural_rf_write(sc, RAL_RF4, (chan == 14) ? 0x00280 : 0x00286); 1057 break; 1058 1059 case RAL_RF_2525E: 1060 ural_rf_write(sc, RAL_RF1, 0x08808); 1061 ural_rf_write(sc, RAL_RF2, ural_rf2525e_r2[chan - 1]); 1062 ural_rf_write(sc, RAL_RF3, power << 7 | 0x18044); 1063 ural_rf_write(sc, RAL_RF4, (chan == 14) ? 0x00286 : 0x00282); 1064 break; 1065 1066 case RAL_RF_2526: 1067 ural_rf_write(sc, RAL_RF2, ural_rf2526_hi_r2[chan - 1]); 1068 ural_rf_write(sc, RAL_RF4, (chan & 1) ? 0x00386 : 0x00381); 1069 ural_rf_write(sc, RAL_RF1, 0x08804); 1070 1071 ural_rf_write(sc, RAL_RF2, ural_rf2526_r2[chan - 1]); 1072 ural_rf_write(sc, RAL_RF3, power << 7 | 0x18044); 1073 ural_rf_write(sc, RAL_RF4, (chan & 1) ? 0x00386 : 0x00381); 1074 break; 1075 1076 /* dual-band RF */ 1077 case RAL_RF_5222: 1078 for (i = 0; ural_rf5222[i].chan != chan; i++) { 1079 if (i > URAL_N(ural_rf5222)) break; 1080 } 1081 1082 ural_rf_write(sc, RAL_RF1, ural_rf5222[i].r1); 1083 ural_rf_write(sc, RAL_RF2, ural_rf5222[i].r2); 1084 ural_rf_write(sc, RAL_RF3, power << 7 | 0x00040); 1085 ural_rf_write(sc, RAL_RF4, ural_rf5222[i].r4); 1086 break; 1087 } 1088 1089 if (ic->ic_opmode != IEEE80211_M_MONITOR && 1090 ic->ic_state != IEEE80211_S_SCAN) { 1091 /* set Japan filter bit for channel 14 */ 1092 tmp = ural_bbp_read(sc, 70); 1093 1094 tmp &= ~RAL_JAPAN_FILTER; 1095 if (chan == 14) 1096 tmp |= RAL_JAPAN_FILTER; 1097 1098 ural_bbp_write(sc, 70, tmp); 1099 1100 /* clear CRC errs */ 1101 (void) ural_read(sc, RAL_STA_CSR0); 1102 1103 drv_usecwait(10000); 1104 ural_disable_rf_tune(sc); 1105 } 1106 } 1107 1108 /* 1109 * Refer to IEEE Std 802.11-1999 pp. 123 for more information on TSF 1110 * synchronization. 1111 */ 1112 static void 1113 ural_enable_tsf_sync(struct ural_softc *sc) 1114 { 1115 struct ieee80211com *ic = &sc->sc_ic; 1116 uint16_t logcwmin, preload, tmp; 1117 1118 /* first, disable TSF synchronization */ 1119 ural_write(sc, RAL_TXRX_CSR19, 0); 1120 1121 tmp = (16 * ic->ic_bss->in_intval) << 4; 1122 ural_write(sc, RAL_TXRX_CSR18, tmp); 1123 1124 logcwmin = (ic->ic_opmode == IEEE80211_M_IBSS) ? 2 : 0; 1125 preload = (ic->ic_opmode == IEEE80211_M_IBSS) ? 320 : 6; 1126 tmp = logcwmin << 12 | preload; 1127 ural_write(sc, RAL_TXRX_CSR20, tmp); 1128 1129 /* finally, enable TSF synchronization */ 1130 tmp = RAL_ENABLE_TSF | RAL_ENABLE_TBCN; 1131 if (ic->ic_opmode == IEEE80211_M_STA) 1132 tmp |= RAL_ENABLE_TSF_SYNC(1); 1133 else 1134 tmp |= RAL_ENABLE_TSF_SYNC(2) | RAL_ENABLE_BEACON_GENERATOR; 1135 ural_write(sc, RAL_TXRX_CSR19, tmp); 1136 1137 ral_debug(RAL_DBG_HW, "enabling TSF synchronization\n"); 1138 } 1139 1140 /* 1141 * This function can be called by ieee80211_set_shortslottime(). Refer to 1142 * IEEE Std 802.11-1999 pp. 85 to know how these values are computed. 1143 */ 1144 /* ARGSUSED */ 1145 static void 1146 ural_update_slot(struct ieee80211com *ic, int onoff) 1147 { 1148 struct ural_softc *sc = (struct ural_softc *)ic; 1149 uint16_t slottime, sifs, eifs; 1150 1151 slottime = (ic->ic_flags & IEEE80211_F_SHSLOT) ? 9 : 20; 1152 /* slottime = (onoff ? 9 : 20); */ 1153 1154 /* 1155 * These settings may sound a bit inconsistent but this is what the 1156 * reference driver does. 1157 */ 1158 if (ic->ic_curmode == IEEE80211_MODE_11B) { 1159 sifs = 16 - RAL_RXTX_TURNAROUND; 1160 eifs = 364; 1161 } else { 1162 sifs = 10 - RAL_RXTX_TURNAROUND; 1163 eifs = 64; 1164 } 1165 1166 ural_write(sc, RAL_MAC_CSR10, slottime); 1167 ural_write(sc, RAL_MAC_CSR11, sifs); 1168 ural_write(sc, RAL_MAC_CSR12, eifs); 1169 } 1170 1171 static void 1172 ural_set_txpreamble(struct ural_softc *sc) 1173 { 1174 uint16_t tmp; 1175 1176 tmp = ural_read(sc, RAL_TXRX_CSR10); 1177 1178 tmp &= ~RAL_SHORT_PREAMBLE; 1179 if (sc->sc_ic.ic_flags & IEEE80211_F_SHPREAMBLE) 1180 tmp |= RAL_SHORT_PREAMBLE; 1181 1182 ural_write(sc, RAL_TXRX_CSR10, tmp); 1183 } 1184 1185 static void 1186 ural_set_basicrates(struct ural_softc *sc) 1187 { 1188 struct ieee80211com *ic = &sc->sc_ic; 1189 1190 /* update basic rate set */ 1191 if (ic->ic_curmode == IEEE80211_MODE_11B) { 1192 /* 11b basic rates: 1, 2Mbps */ 1193 ural_write(sc, RAL_TXRX_CSR11, 0x3); 1194 } else if (IEEE80211_IS_CHAN_5GHZ(ic->ic_bss->in_chan)) { 1195 /* 11a basic rates: 6, 12, 24Mbps */ 1196 ural_write(sc, RAL_TXRX_CSR11, 0x150); 1197 } else { 1198 /* 11g basic rates: 1, 2, 5.5, 11, 6, 12, 24Mbps */ 1199 ural_write(sc, RAL_TXRX_CSR11, 0x15f); 1200 } 1201 } 1202 1203 static void 1204 ural_set_bssid(struct ural_softc *sc, uint8_t *bssid) 1205 { 1206 uint16_t tmp; 1207 1208 tmp = bssid[0] | bssid[1] << 8; 1209 ural_write(sc, RAL_MAC_CSR5, tmp); 1210 1211 tmp = bssid[2] | bssid[3] << 8; 1212 ural_write(sc, RAL_MAC_CSR6, tmp); 1213 1214 tmp = bssid[4] | bssid[5] << 8; 1215 ural_write(sc, RAL_MAC_CSR7, tmp); 1216 1217 ral_debug(RAL_DBG_HW, "setting BSSID to " MACSTR "\n", MAC2STR(bssid)); 1218 } 1219 1220 static void 1221 ural_set_macaddr(struct ural_softc *sc, uint8_t *addr) 1222 { 1223 uint16_t tmp; 1224 1225 tmp = addr[0] | addr[1] << 8; 1226 ural_write(sc, RAL_MAC_CSR2, tmp); 1227 1228 tmp = addr[2] | addr[3] << 8; 1229 ural_write(sc, RAL_MAC_CSR3, tmp); 1230 1231 tmp = addr[4] | addr[5] << 8; 1232 ural_write(sc, RAL_MAC_CSR4, tmp); 1233 1234 ral_debug(RAL_DBG_HW, 1235 "setting MAC address to " MACSTR "\n", MAC2STR(addr)); 1236 } 1237 1238 static void 1239 ural_update_promisc(struct ural_softc *sc) 1240 { 1241 uint32_t tmp; 1242 1243 tmp = ural_read(sc, RAL_TXRX_CSR2); 1244 1245 tmp &= ~RAL_DROP_NOT_TO_ME; 1246 if (!(sc->sc_rcr & RAL_RCR_PROMISC)) 1247 tmp |= RAL_DROP_NOT_TO_ME; 1248 1249 ural_write(sc, RAL_TXRX_CSR2, tmp); 1250 1251 ral_debug(RAL_DBG_HW, "%s promiscuous mode\n", 1252 (sc->sc_rcr & RAL_RCR_PROMISC) ? "entering" : "leaving"); 1253 } 1254 1255 static const char * 1256 ural_get_rf(int rev) 1257 { 1258 switch (rev) { 1259 case RAL_RF_2522: return ("RT2522"); 1260 case RAL_RF_2523: return ("RT2523"); 1261 case RAL_RF_2524: return ("RT2524"); 1262 case RAL_RF_2525: return ("RT2525"); 1263 case RAL_RF_2525E: return ("RT2525e"); 1264 case RAL_RF_2526: return ("RT2526"); 1265 case RAL_RF_5222: return ("RT5222"); 1266 default: return ("unknown"); 1267 } 1268 } 1269 1270 static void 1271 ural_read_eeprom(struct ural_softc *sc) 1272 { 1273 struct ieee80211com *ic = &sc->sc_ic; 1274 uint16_t val; 1275 1276 ural_eeprom_read(sc, RAL_EEPROM_CONFIG0, &val, 2); 1277 val = LE_16(val); 1278 sc->rf_rev = (val >> 11) & 0x7; 1279 sc->hw_radio = (val >> 10) & 0x1; 1280 sc->led_mode = (val >> 6) & 0x7; 1281 sc->rx_ant = (val >> 4) & 0x3; 1282 sc->tx_ant = (val >> 2) & 0x3; 1283 sc->nb_ant = val & 0x3; 1284 1285 /* read MAC address */ 1286 ural_eeprom_read(sc, RAL_EEPROM_ADDRESS, ic->ic_macaddr, 6); 1287 1288 /* read default values for BBP registers */ 1289 ural_eeprom_read(sc, RAL_EEPROM_BBP_BASE, sc->bbp_prom, 2 * 16); 1290 1291 /* read Tx power for all b/g channels */ 1292 ural_eeprom_read(sc, RAL_EEPROM_TXPOWER, sc->txpow, 14); 1293 } 1294 1295 static int 1296 ural_bbp_init(struct ural_softc *sc) 1297 { 1298 int i, ntries; 1299 1300 /* wait for BBP to be ready */ 1301 for (ntries = 0; ntries < 100; ntries++) { 1302 if (ural_bbp_read(sc, RAL_BBP_VERSION) != 0) 1303 break; 1304 drv_usecwait(1000); 1305 } 1306 if (ntries == 100) { 1307 ral_debug(RAL_DBG_ERR, "timeout waiting for BBP\n"); 1308 return (EIO); 1309 } 1310 1311 /* initialize BBP registers to default values */ 1312 for (i = 0; i < URAL_N(ural_def_bbp); i++) 1313 ural_bbp_write(sc, ural_def_bbp[i].reg, ural_def_bbp[i].val); 1314 1315 return (0); 1316 } 1317 1318 static void 1319 ural_set_txantenna(struct ural_softc *sc, int antenna) 1320 { 1321 uint16_t tmp; 1322 uint8_t tx; 1323 1324 tx = ural_bbp_read(sc, RAL_BBP_TX) & ~RAL_BBP_ANTMASK; 1325 if (antenna == 1) 1326 tx |= RAL_BBP_ANTA; 1327 else if (antenna == 2) 1328 tx |= RAL_BBP_ANTB; 1329 else 1330 tx |= RAL_BBP_DIVERSITY; 1331 1332 /* need to force I/Q flip for RF 2525e, 2526 and 5222 */ 1333 if (sc->rf_rev == RAL_RF_2525E || sc->rf_rev == RAL_RF_2526 || 1334 sc->rf_rev == RAL_RF_5222) 1335 tx |= RAL_BBP_FLIPIQ; 1336 1337 ural_bbp_write(sc, RAL_BBP_TX, tx); 1338 1339 /* update values in PHY_CSR5 and PHY_CSR6 */ 1340 tmp = ural_read(sc, RAL_PHY_CSR5) & ~0x7; 1341 ural_write(sc, RAL_PHY_CSR5, tmp | (tx & 0x7)); 1342 1343 tmp = ural_read(sc, RAL_PHY_CSR6) & ~0x7; 1344 ural_write(sc, RAL_PHY_CSR6, tmp | (tx & 0x7)); 1345 } 1346 1347 static void 1348 ural_set_rxantenna(struct ural_softc *sc, int antenna) 1349 { 1350 uint8_t rx; 1351 1352 rx = ural_bbp_read(sc, RAL_BBP_RX) & ~RAL_BBP_ANTMASK; 1353 if (antenna == 1) 1354 rx |= RAL_BBP_ANTA; 1355 else if (antenna == 2) 1356 rx |= RAL_BBP_ANTB; 1357 else 1358 rx |= RAL_BBP_DIVERSITY; 1359 1360 /* need to force no I/Q flip for RF 2525e and 2526 */ 1361 if (sc->rf_rev == RAL_RF_2525E || sc->rf_rev == RAL_RF_2526) 1362 rx &= ~RAL_BBP_FLIPIQ; 1363 1364 ural_bbp_write(sc, RAL_BBP_RX, rx); 1365 } 1366 1367 /* 1368 * This function is called periodically (every 200ms) during scanning to 1369 * switch from one channel to another. 1370 */ 1371 static void 1372 ural_next_scan(void *arg) 1373 { 1374 struct ural_softc *sc = arg; 1375 struct ieee80211com *ic = &sc->sc_ic; 1376 1377 if (ic->ic_state == IEEE80211_S_SCAN) 1378 ieee80211_next_scan(ic); 1379 } 1380 1381 static int 1382 ural_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg) 1383 { 1384 struct ural_softc *sc = (struct ural_softc *)ic; 1385 enum ieee80211_state ostate; 1386 struct ieee80211_node *ni; 1387 int err; 1388 1389 RAL_LOCK(sc); 1390 1391 ostate = ic->ic_state; 1392 1393 if (sc->sc_scan_id != 0) { 1394 (void) untimeout(sc->sc_scan_id); 1395 sc->sc_scan_id = 0; 1396 } 1397 1398 if (sc->sc_amrr_id != 0) { 1399 (void) untimeout(sc->sc_amrr_id); 1400 sc->sc_amrr_id = 0; 1401 } 1402 1403 switch (nstate) { 1404 case IEEE80211_S_INIT: 1405 if (ostate == IEEE80211_S_RUN) { 1406 /* abort TSF synchronization */ 1407 ural_write(sc, RAL_TXRX_CSR19, 0); 1408 /* force tx led to stop blinking */ 1409 ural_write(sc, RAL_MAC_CSR20, 0); 1410 } 1411 break; 1412 1413 case IEEE80211_S_SCAN: 1414 ural_set_chan(sc, ic->ic_curchan); 1415 sc->sc_scan_id = timeout(ural_next_scan, (void *)sc, 1416 drv_usectohz(sc->dwelltime * 1000)); 1417 break; 1418 1419 case IEEE80211_S_AUTH: 1420 ural_set_chan(sc, ic->ic_curchan); 1421 break; 1422 1423 case IEEE80211_S_ASSOC: 1424 ural_set_chan(sc, ic->ic_curchan); 1425 break; 1426 1427 case IEEE80211_S_RUN: 1428 ural_set_chan(sc, ic->ic_curchan); 1429 1430 ni = ic->ic_bss; 1431 1432 if (ic->ic_opmode != IEEE80211_M_MONITOR) { 1433 ural_update_slot(ic, 1); 1434 ural_set_txpreamble(sc); 1435 ural_set_basicrates(sc); 1436 ural_set_bssid(sc, ni->in_bssid); 1437 } 1438 1439 1440 /* make tx led blink on tx (controlled by ASIC) */ 1441 ural_write(sc, RAL_MAC_CSR20, 1); 1442 1443 if (ic->ic_opmode != IEEE80211_M_MONITOR) 1444 ural_enable_tsf_sync(sc); 1445 1446 /* enable automatic rate adaptation in STA mode */ 1447 if (ic->ic_opmode == IEEE80211_M_STA && 1448 ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) 1449 ural_amrr_start(sc, ni); 1450 1451 break; 1452 } 1453 1454 RAL_UNLOCK(sc); 1455 1456 err = sc->sc_newstate(ic, nstate, arg); 1457 /* 1458 * Finally, start any timers. 1459 */ 1460 if (nstate == IEEE80211_S_RUN) 1461 ieee80211_start_watchdog(ic, 1); 1462 1463 return (err); 1464 } 1465 1466 1467 1468 static void 1469 ural_close_pipes(struct ural_softc *sc) 1470 { 1471 usb_flags_t flags = USB_FLAGS_SLEEP; 1472 1473 if (sc->sc_rx_pipeh != NULL) { 1474 usb_pipe_reset(sc->sc_dev, sc->sc_rx_pipeh, flags, NULL, 0); 1475 usb_pipe_close(sc->sc_dev, sc->sc_rx_pipeh, flags, NULL, 0); 1476 sc->sc_rx_pipeh = NULL; 1477 } 1478 1479 if (sc->sc_tx_pipeh != NULL) { 1480 usb_pipe_reset(sc->sc_dev, sc->sc_tx_pipeh, flags, NULL, 0); 1481 usb_pipe_close(sc->sc_dev, sc->sc_tx_pipeh, flags, NULL, 0); 1482 sc->sc_tx_pipeh = NULL; 1483 } 1484 } 1485 1486 static int 1487 ural_open_pipes(struct ural_softc *sc) 1488 { 1489 usb_ep_data_t *ep_node; 1490 usb_pipe_policy_t policy; 1491 int err; 1492 1493 ep_node = usb_lookup_ep_data(sc->sc_dev, sc->sc_udev, 0, 0, 0, 1494 USB_EP_ATTR_BULK, USB_EP_DIR_OUT); 1495 1496 bzero(&policy, sizeof (usb_pipe_policy_t)); 1497 policy.pp_max_async_reqs = RAL_TX_LIST_COUNT; 1498 1499 if ((err = usb_pipe_open(sc->sc_dev, 1500 &ep_node->ep_descr, &policy, USB_FLAGS_SLEEP, 1501 &sc->sc_tx_pipeh)) != USB_SUCCESS) { 1502 ral_debug(RAL_DBG_ERR, 1503 "ural_open_pipes(): %x failed to open tx pipe\n", err); 1504 goto fail; 1505 } 1506 1507 ep_node = usb_lookup_ep_data(sc->sc_dev, sc->sc_udev, 0, 0, 0, 1508 USB_EP_ATTR_BULK, USB_EP_DIR_IN); 1509 1510 bzero(&policy, sizeof (usb_pipe_policy_t)); 1511 policy.pp_max_async_reqs = RAL_RX_LIST_COUNT + 32; 1512 1513 if ((err = usb_pipe_open(sc->sc_dev, 1514 &ep_node->ep_descr, &policy, USB_FLAGS_SLEEP, 1515 &sc->sc_rx_pipeh)) != USB_SUCCESS) { 1516 ral_debug(RAL_DBG_ERR, 1517 "ural_open_pipes(): %x failed to open rx pipe\n", err); 1518 goto fail; 1519 } 1520 1521 return (USB_SUCCESS); 1522 1523 fail: 1524 if (sc->sc_rx_pipeh != NULL) { 1525 usb_pipe_close(sc->sc_dev, sc->sc_rx_pipeh, 1526 USB_FLAGS_SLEEP, NULL, 0); 1527 sc->sc_rx_pipeh = NULL; 1528 } 1529 1530 if (sc->sc_tx_pipeh != NULL) { 1531 usb_pipe_close(sc->sc_dev, sc->sc_tx_pipeh, 1532 USB_FLAGS_SLEEP, NULL, 0); 1533 sc->sc_tx_pipeh = NULL; 1534 } 1535 1536 return (USB_FAILURE); 1537 } 1538 1539 static int 1540 ural_tx_trigger(struct ural_softc *sc, mblk_t *mp) 1541 { 1542 usb_bulk_req_t *req; 1543 int err; 1544 1545 sc->sc_tx_timer = RAL_TX_TIMEOUT; 1546 1547 req = usb_alloc_bulk_req(sc->sc_dev, 0, USB_FLAGS_SLEEP); 1548 if (req == NULL) { 1549 ral_debug(RAL_DBG_ERR, 1550 "ural_tx_trigger(): failed to allocate req"); 1551 freemsg(mp); 1552 return (-1); 1553 } 1554 1555 req->bulk_len = (uintptr_t)mp->b_wptr - (uintptr_t)mp->b_rptr; 1556 req->bulk_data = mp; 1557 req->bulk_client_private = (usb_opaque_t)sc; 1558 req->bulk_timeout = RAL_TX_TIMEOUT; 1559 req->bulk_attributes = USB_ATTRS_AUTOCLEARING; 1560 req->bulk_cb = ural_txeof; 1561 req->bulk_exc_cb = ural_txeof; 1562 req->bulk_completion_reason = 0; 1563 req->bulk_cb_flags = 0; 1564 1565 if ((err = usb_pipe_bulk_xfer(sc->sc_tx_pipeh, req, 0)) 1566 != USB_SUCCESS) { 1567 1568 ral_debug(RAL_DBG_ERR, "ural_tx_trigger(): " 1569 "failed to do tx xfer, %d", err); 1570 usb_free_bulk_req(req); 1571 return (-1); 1572 } 1573 1574 sc->tx_queued++; 1575 1576 return (0); 1577 } 1578 1579 static int 1580 ural_rx_trigger(struct ural_softc *sc) 1581 { 1582 usb_bulk_req_t *req; 1583 int err; 1584 1585 req = usb_alloc_bulk_req(sc->sc_dev, RAL_RXBUF_SIZE, USB_FLAGS_SLEEP); 1586 if (req == NULL) { 1587 ral_debug(RAL_DBG_ERR, 1588 "ural_rx_trigger(): failed to allocate req"); 1589 return (-1); 1590 } 1591 1592 req->bulk_len = RAL_RXBUF_SIZE; 1593 req->bulk_client_private = (usb_opaque_t)sc; 1594 req->bulk_timeout = 0; 1595 req->bulk_attributes = USB_ATTRS_SHORT_XFER_OK 1596 | USB_ATTRS_AUTOCLEARING; 1597 req->bulk_cb = ural_rxeof; 1598 req->bulk_exc_cb = ural_rxeof; 1599 req->bulk_completion_reason = 0; 1600 req->bulk_cb_flags = 0; 1601 1602 err = usb_pipe_bulk_xfer(sc->sc_rx_pipeh, req, 0); 1603 1604 if (err != USB_SUCCESS) { 1605 ral_debug(RAL_DBG_ERR, "ural_rx_trigger(): " 1606 "failed to do rx xfer, %d", err); 1607 usb_free_bulk_req(req); 1608 1609 return (-1); 1610 } 1611 1612 mutex_enter(&sc->rx_lock); 1613 sc->rx_queued++; 1614 mutex_exit(&sc->rx_lock); 1615 1616 return (0); 1617 } 1618 1619 static void 1620 ural_init_tx_queue(struct ural_softc *sc) 1621 { 1622 sc->tx_queued = 0; 1623 } 1624 1625 static int 1626 ural_init_rx_queue(struct ural_softc *sc) 1627 { 1628 int i; 1629 1630 sc->rx_queued = 0; 1631 1632 for (i = 0; i < RAL_RX_LIST_COUNT; i++) { 1633 if (ural_rx_trigger(sc) != 0) { 1634 return (USB_FAILURE); 1635 } 1636 } 1637 1638 return (USB_SUCCESS); 1639 } 1640 1641 static void 1642 ural_stop(struct ural_softc *sc) 1643 { 1644 struct ieee80211com *ic = &sc->sc_ic; 1645 1646 ieee80211_new_state(ic, IEEE80211_S_INIT, -1); 1647 ieee80211_stop_watchdog(ic); /* stop the watchdog */ 1648 1649 RAL_LOCK(sc); 1650 1651 sc->sc_tx_timer = 0; 1652 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ 1653 1654 /* disable Rx */ 1655 ural_write(sc, RAL_TXRX_CSR2, RAL_DISABLE_RX); 1656 1657 /* reset ASIC and BBP (but won't reset MAC registers!) */ 1658 ural_write(sc, RAL_MAC_CSR1, RAL_RESET_ASIC | RAL_RESET_BBP); 1659 ural_write(sc, RAL_MAC_CSR1, 0); 1660 1661 ural_close_pipes(sc); 1662 1663 RAL_UNLOCK(sc); 1664 } 1665 1666 static int 1667 ural_init(struct ural_softc *sc) 1668 { 1669 struct ieee80211com *ic = &sc->sc_ic; 1670 uint16_t tmp; 1671 int i, ntries; 1672 1673 ural_set_testmode(sc); 1674 ural_write(sc, 0x308, 0x00f0); /* magic */ 1675 1676 ural_stop(sc); 1677 1678 /* initialize MAC registers to default values */ 1679 for (i = 0; i < URAL_N(ural_def_mac); i++) 1680 ural_write(sc, ural_def_mac[i].reg, ural_def_mac[i].val); 1681 1682 /* wait for BBP and RF to wake up (this can take a long time!) */ 1683 for (ntries = 0; ntries < 100; ntries++) { 1684 tmp = ural_read(sc, RAL_MAC_CSR17); 1685 if ((tmp & (RAL_BBP_AWAKE | RAL_RF_AWAKE)) == 1686 (RAL_BBP_AWAKE | RAL_RF_AWAKE)) 1687 break; 1688 drv_usecwait(1000); 1689 } 1690 if (ntries == 100) { 1691 ral_debug(RAL_DBG_ERR, 1692 "ural_init(): timeout waiting for BBP/RF to wakeup\n"); 1693 goto fail; 1694 } 1695 1696 /* we're ready! */ 1697 ural_write(sc, RAL_MAC_CSR1, RAL_HOST_READY); 1698 1699 /* set basic rate set (will be updated later) */ 1700 ural_write(sc, RAL_TXRX_CSR11, 0x15f); 1701 1702 if (ural_bbp_init(sc) != 0) 1703 goto fail; 1704 1705 /* set default BSS channel */ 1706 ural_set_chan(sc, ic->ic_curchan); 1707 1708 /* clear statistic registers (STA_CSR0 to STA_CSR10) */ 1709 ural_read_multi(sc, RAL_STA_CSR0, sc->sta, sizeof (sc->sta)); 1710 1711 ural_set_txantenna(sc, sc->tx_ant); 1712 ural_set_rxantenna(sc, sc->rx_ant); 1713 1714 ural_set_macaddr(sc, ic->ic_macaddr); 1715 1716 if (ural_open_pipes(sc) != USB_SUCCESS) { 1717 ral_debug(RAL_DBG_ERR, "ural_init(): " 1718 "could not open pipes.\n"); 1719 goto fail; 1720 } 1721 1722 ural_init_tx_queue(sc); 1723 1724 if (ural_init_rx_queue(sc) != USB_SUCCESS) 1725 goto fail; 1726 1727 /* kick Rx */ 1728 tmp = RAL_DROP_PHY | RAL_DROP_CRC; 1729 if (ic->ic_opmode != IEEE80211_M_MONITOR) { 1730 tmp |= RAL_DROP_CTL | RAL_DROP_BAD_VERSION; 1731 if (ic->ic_opmode != IEEE80211_M_HOSTAP) 1732 tmp |= RAL_DROP_TODS; 1733 if (!(sc->sc_rcr & RAL_RCR_PROMISC)) 1734 tmp |= RAL_DROP_NOT_TO_ME; 1735 } 1736 ural_write(sc, RAL_TXRX_CSR2, tmp); 1737 sc->sc_flags |= RAL_FLAG_RUNNING; /* RUNNING */ 1738 1739 return (DDI_SUCCESS); 1740 fail: 1741 ural_stop(sc); 1742 return (EIO); 1743 } 1744 1745 static int 1746 ural_disconnect(dev_info_t *devinfo) 1747 { 1748 struct ural_softc *sc; 1749 struct ieee80211com *ic; 1750 1751 /* 1752 * We can't call ural_stop() here, since the hardware is removed, 1753 * we can't access the register anymore. 1754 */ 1755 sc = ddi_get_soft_state(ural_soft_state_p, ddi_get_instance(devinfo)); 1756 ASSERT(sc != NULL); 1757 1758 if (!RAL_IS_RUNNING(sc)) /* different device or not inited */ 1759 return (DDI_SUCCESS); 1760 1761 ic = &sc->sc_ic; 1762 ieee80211_new_state(ic, IEEE80211_S_INIT, -1); 1763 ieee80211_stop_watchdog(ic); /* stop the watchdog */ 1764 1765 RAL_LOCK(sc); 1766 1767 sc->sc_tx_timer = 0; 1768 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ 1769 1770 ural_close_pipes(sc); 1771 1772 RAL_UNLOCK(sc); 1773 1774 return (DDI_SUCCESS); 1775 } 1776 1777 static int 1778 ural_reconnect(dev_info_t *devinfo) 1779 { 1780 struct ural_softc *sc; 1781 int err; 1782 1783 sc = ddi_get_soft_state(ural_soft_state_p, ddi_get_instance(devinfo)); 1784 ASSERT(sc != NULL); 1785 1786 /* check device changes after disconnect */ 1787 if (usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1, 1788 USB_CHK_BASIC | USB_CHK_CFG, NULL) != USB_SUCCESS) { 1789 ral_debug(RAL_DBG_ERR, "different device connected\n"); 1790 return (DDI_FAILURE); 1791 } 1792 1793 err = ural_init(sc); 1794 1795 return (err); 1796 } 1797 1798 static void 1799 ural_resume(struct ural_softc *sc) 1800 { 1801 /* check device changes after suspend */ 1802 if (usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1, 1803 USB_CHK_BASIC | USB_CHK_CFG, NULL) != USB_SUCCESS) { 1804 ral_debug(RAL_DBG_ERR, "no or different device connected\n"); 1805 return; 1806 } 1807 1808 (void) ural_init(sc); 1809 } 1810 1811 #define URAL_AMRR_MIN_SUCCESS_THRESHOLD 1 1812 #define URAL_AMRR_MAX_SUCCESS_THRESHOLD 10 1813 1814 /* 1815 * Naive implementation of the Adaptive Multi Rate Retry algorithm: 1816 * "IEEE 802.11 Rate Adaptation: A Practical Approach" 1817 * Mathieu Lacage, Hossein Manshaei, Thierry Turletti 1818 * INRIA Sophia - Projet Planete 1819 * http://www-sop.inria.fr/rapports/sophia/RR-5208.html 1820 * 1821 * This algorithm is particularly well suited for ural since it does not 1822 * require per-frame retry statistics. Note however that since h/w does 1823 * not provide per-frame stats, we can't do per-node rate adaptation and 1824 * thus automatic rate adaptation is only enabled in STA operating mode. 1825 */ 1826 #define is_success(amrr) \ 1827 ((amrr)->retrycnt < (amrr)->txcnt / 10) 1828 #define is_failure(amrr) \ 1829 ((amrr)->retrycnt > (amrr)->txcnt / 3) 1830 #define is_enough(amrr) \ 1831 ((amrr)->txcnt > 10) 1832 #define is_min_rate(ni) \ 1833 ((ni)->in_txrate == 0) 1834 #define is_max_rate(ni) \ 1835 ((ni)->in_txrate == (ni)->in_rates.ir_nrates - 1) 1836 #define increase_rate(ni) \ 1837 ((ni)->in_txrate++) 1838 #define decrease_rate(ni) \ 1839 ((ni)->in_txrate--) 1840 #define reset_cnt(amrr) do { \ 1841 (amrr)->txcnt = (amrr)->retrycnt = 0; \ 1842 _NOTE(CONSTCOND) \ 1843 } while (/* CONSTCOND */0) 1844 1845 static void 1846 ural_ratectl(struct ural_amrr *amrr, struct ieee80211_node *ni) 1847 { 1848 int need_change = 0; 1849 1850 if (is_success(amrr) && is_enough(amrr)) { 1851 amrr->success++; 1852 if (amrr->success >= amrr->success_threshold && 1853 !is_max_rate(ni)) { 1854 amrr->recovery = 1; 1855 amrr->success = 0; 1856 increase_rate(ni); 1857 need_change = 1; 1858 } else { 1859 amrr->recovery = 0; 1860 } 1861 } else if (is_failure(amrr)) { 1862 amrr->success = 0; 1863 if (!is_min_rate(ni)) { 1864 if (amrr->recovery) { 1865 amrr->success_threshold *= 2; 1866 if (amrr->success_threshold > 1867 URAL_AMRR_MAX_SUCCESS_THRESHOLD) 1868 amrr->success_threshold = 1869 URAL_AMRR_MAX_SUCCESS_THRESHOLD; 1870 } else { 1871 amrr->success_threshold = 1872 URAL_AMRR_MIN_SUCCESS_THRESHOLD; 1873 } 1874 decrease_rate(ni); 1875 need_change = 1; 1876 } 1877 amrr->recovery = 0; /* original paper was incorrect */ 1878 } 1879 1880 if (is_enough(amrr) || need_change) 1881 reset_cnt(amrr); 1882 } 1883 1884 static void 1885 ural_amrr_timeout(void *arg) 1886 { 1887 struct ural_softc *sc = (struct ural_softc *)arg; 1888 struct ural_amrr *amrr = &sc->amrr; 1889 1890 ural_read_multi(sc, RAL_STA_CSR0, sc->sta, sizeof (sc->sta)); 1891 1892 /* count TX retry-fail as Tx errors */ 1893 sc->sc_tx_err += sc->sta[9]; 1894 sc->sc_tx_retries += (sc->sta[7] + sc->sta[8]); 1895 1896 amrr->retrycnt = 1897 sc->sta[7] + /* TX one-retry ok count */ 1898 sc->sta[8] + /* TX more-retry ok count */ 1899 sc->sta[9]; /* TX retry-fail count */ 1900 1901 amrr->txcnt = 1902 amrr->retrycnt + 1903 sc->sta[6]; /* TX no-retry ok count */ 1904 1905 ural_ratectl(amrr, sc->sc_ic.ic_bss); 1906 1907 sc->sc_amrr_id = timeout(ural_amrr_timeout, (void *)sc, 1908 drv_usectohz(1000 * 1000)); /* 1 second */ 1909 } 1910 1911 1912 static void 1913 ural_amrr_start(struct ural_softc *sc, struct ieee80211_node *ni) 1914 { 1915 struct ural_amrr *amrr = &sc->amrr; 1916 int i; 1917 1918 /* clear statistic registers (STA_CSR0 to STA_CSR10) */ 1919 ural_read_multi(sc, RAL_STA_CSR0, sc->sta, sizeof (sc->sta)); 1920 1921 amrr->success = 0; 1922 amrr->recovery = 0; 1923 amrr->txcnt = amrr->retrycnt = 0; 1924 amrr->success_threshold = URAL_AMRR_MIN_SUCCESS_THRESHOLD; 1925 1926 /* set rate to some reasonable initial value */ 1927 for (i = ni->in_rates.ir_nrates - 1; 1928 i > 0 && (ni->in_rates.ir_rates[i] & IEEE80211_RATE_VAL) > 72; 1929 i--) { 1930 } 1931 1932 ni->in_txrate = i; 1933 1934 sc->sc_amrr_id = timeout(ural_amrr_timeout, (void *)sc, 1935 drv_usectohz(1000 * 1000)); /* 1 second */ 1936 } 1937 1938 void 1939 ural_watchdog(void *arg) 1940 { 1941 struct ural_softc *sc = arg; 1942 struct ieee80211com *ic = &sc->sc_ic; 1943 int ntimer = 0; 1944 1945 RAL_LOCK(sc); 1946 ic->ic_watchdog_timer = 0; 1947 1948 if (!RAL_IS_RUNNING(sc)) { 1949 RAL_UNLOCK(sc); 1950 return; 1951 } 1952 1953 if (sc->sc_tx_timer > 0) { 1954 if (--sc->sc_tx_timer == 0) { 1955 ral_debug(RAL_DBG_ERR, "tx timer timeout\n"); 1956 RAL_UNLOCK(sc); 1957 (void) ural_init(sc); 1958 (void) ieee80211_new_state(ic, IEEE80211_S_SCAN, -1); 1959 return; 1960 } 1961 } 1962 1963 if (ic->ic_state == IEEE80211_S_RUN) 1964 ntimer = 1; 1965 1966 RAL_UNLOCK(sc); 1967 1968 ieee80211_watchdog(ic); 1969 1970 if (ntimer) 1971 ieee80211_start_watchdog(ic, ntimer); 1972 } 1973 1974 static int 1975 ural_m_start(void *arg) 1976 { 1977 struct ural_softc *sc = (struct ural_softc *)arg; 1978 int err; 1979 1980 /* 1981 * initialize RT2500USB hardware 1982 */ 1983 err = ural_init(sc); 1984 if (err != DDI_SUCCESS) { 1985 ral_debug(RAL_DBG_ERR, "device configuration failed\n"); 1986 goto fail; 1987 } 1988 sc->sc_flags |= RAL_FLAG_RUNNING; /* RUNNING */ 1989 return (err); 1990 1991 fail: 1992 ural_stop(sc); 1993 return (err); 1994 } 1995 1996 static void 1997 ural_m_stop(void *arg) 1998 { 1999 struct ural_softc *sc = (struct ural_softc *)arg; 2000 2001 (void) ural_stop(sc); 2002 sc->sc_flags &= ~RAL_FLAG_RUNNING; /* STOP */ 2003 } 2004 2005 static int 2006 ural_m_unicst(void *arg, const uint8_t *macaddr) 2007 { 2008 struct ural_softc *sc = (struct ural_softc *)arg; 2009 struct ieee80211com *ic = &sc->sc_ic; 2010 2011 ral_debug(RAL_DBG_MSG, "ural_m_unicst(): " MACSTR "\n", 2012 MAC2STR(macaddr)); 2013 2014 IEEE80211_ADDR_COPY(ic->ic_macaddr, macaddr); 2015 (void) ural_set_macaddr(sc, (uint8_t *)macaddr); 2016 (void) ural_init(sc); 2017 2018 return (0); 2019 } 2020 2021 /*ARGSUSED*/ 2022 static int 2023 ural_m_multicst(void *arg, boolean_t add, const uint8_t *mca) 2024 { 2025 return (0); 2026 } 2027 2028 static int 2029 ural_m_promisc(void *arg, boolean_t on) 2030 { 2031 struct ural_softc *sc = (struct ural_softc *)arg; 2032 2033 if (on) { 2034 sc->sc_rcr |= RAL_RCR_PROMISC; 2035 sc->sc_rcr |= RAL_RCR_MULTI; 2036 } else { 2037 sc->sc_rcr &= ~RAL_RCR_PROMISC; 2038 sc->sc_rcr &= ~RAL_RCR_PROMISC; 2039 } 2040 2041 ural_update_promisc(sc); 2042 return (0); 2043 } 2044 2045 /* 2046 * callback functions for /get/set properties 2047 */ 2048 static int 2049 ural_m_setprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num, 2050 uint_t wldp_length, const void *wldp_buf) 2051 { 2052 struct ural_softc *sc = (struct ural_softc *)arg; 2053 struct ieee80211com *ic = &sc->sc_ic; 2054 int err; 2055 2056 err = ieee80211_setprop(ic, pr_name, wldp_pr_num, 2057 wldp_length, wldp_buf); 2058 RAL_LOCK(sc); 2059 if (err == ENETRESET) { 2060 if (RAL_IS_RUNNING(sc)) { 2061 RAL_UNLOCK(sc); 2062 (void) ural_init(sc); 2063 (void) ieee80211_new_state(ic, IEEE80211_S_SCAN, -1); 2064 RAL_LOCK(sc); 2065 } 2066 err = 0; 2067 } 2068 RAL_UNLOCK(sc); 2069 2070 return (err); 2071 } 2072 2073 static int 2074 ural_m_getprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num, 2075 uint_t wldp_length, void *wldp_buf) 2076 { 2077 struct ural_softc *sc = (struct ural_softc *)arg; 2078 int err; 2079 2080 err = ieee80211_getprop(&sc->sc_ic, pr_name, wldp_pr_num, 2081 wldp_length, wldp_buf); 2082 2083 return (err); 2084 } 2085 2086 static void 2087 ural_m_propinfo(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num, 2088 mac_prop_info_handle_t mph) 2089 { 2090 struct ural_softc *sc = (struct ural_softc *)arg; 2091 2092 ieee80211_propinfo(&sc->sc_ic, pr_name, wldp_pr_num, mph); 2093 } 2094 2095 static void 2096 ural_m_ioctl(void* arg, queue_t *wq, mblk_t *mp) 2097 { 2098 struct ural_softc *sc = (struct ural_softc *)arg; 2099 struct ieee80211com *ic = &sc->sc_ic; 2100 int err; 2101 2102 err = ieee80211_ioctl(ic, wq, mp); 2103 RAL_LOCK(sc); 2104 if (err == ENETRESET) { 2105 if (RAL_IS_RUNNING(sc)) { 2106 RAL_UNLOCK(sc); 2107 (void) ural_init(sc); 2108 (void) ieee80211_new_state(ic, IEEE80211_S_SCAN, -1); 2109 RAL_LOCK(sc); 2110 } 2111 } 2112 RAL_UNLOCK(sc); 2113 } 2114 2115 static int 2116 ural_m_stat(void *arg, uint_t stat, uint64_t *val) 2117 { 2118 struct ural_softc *sc = (struct ural_softc *)arg; 2119 ieee80211com_t *ic = &sc->sc_ic; 2120 ieee80211_node_t *ni = ic->ic_bss; 2121 struct ieee80211_rateset *rs = &ni->in_rates; 2122 2123 RAL_LOCK(sc); 2124 switch (stat) { 2125 case MAC_STAT_IFSPEED: 2126 *val = ((ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) ? 2127 (rs->ir_rates[ni->in_txrate] & IEEE80211_RATE_VAL) 2128 : ic->ic_fixed_rate) / 2 * 1000000; 2129 break; 2130 case MAC_STAT_NOXMTBUF: 2131 *val = sc->sc_tx_nobuf; 2132 break; 2133 case MAC_STAT_NORCVBUF: 2134 *val = sc->sc_rx_nobuf; 2135 break; 2136 case MAC_STAT_IERRORS: 2137 *val = sc->sc_rx_err; 2138 break; 2139 case MAC_STAT_RBYTES: 2140 *val = ic->ic_stats.is_rx_bytes; 2141 break; 2142 case MAC_STAT_IPACKETS: 2143 *val = ic->ic_stats.is_rx_frags; 2144 break; 2145 case MAC_STAT_OBYTES: 2146 *val = ic->ic_stats.is_tx_bytes; 2147 break; 2148 case MAC_STAT_OPACKETS: 2149 *val = ic->ic_stats.is_tx_frags; 2150 break; 2151 case MAC_STAT_OERRORS: 2152 case WIFI_STAT_TX_FAILED: 2153 *val = sc->sc_tx_err; 2154 break; 2155 case WIFI_STAT_TX_RETRANS: 2156 *val = sc->sc_tx_retries; 2157 break; 2158 case WIFI_STAT_FCS_ERRORS: 2159 case WIFI_STAT_WEP_ERRORS: 2160 case WIFI_STAT_TX_FRAGS: 2161 case WIFI_STAT_MCAST_TX: 2162 case WIFI_STAT_RTS_SUCCESS: 2163 case WIFI_STAT_RTS_FAILURE: 2164 case WIFI_STAT_ACK_FAILURE: 2165 case WIFI_STAT_RX_FRAGS: 2166 case WIFI_STAT_MCAST_RX: 2167 case WIFI_STAT_RX_DUPS: 2168 RAL_UNLOCK(sc); 2169 return (ieee80211_stat(ic, stat, val)); 2170 default: 2171 RAL_UNLOCK(sc); 2172 return (ENOTSUP); 2173 } 2174 RAL_UNLOCK(sc); 2175 2176 return (0); 2177 } 2178 2179 2180 static int 2181 ural_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd) 2182 { 2183 struct ural_softc *sc; 2184 struct ieee80211com *ic; 2185 int err, i; 2186 int instance; 2187 2188 char strbuf[32]; 2189 2190 wifi_data_t wd = { 0 }; 2191 mac_register_t *macp; 2192 2193 switch (cmd) { 2194 case DDI_ATTACH: 2195 break; 2196 case DDI_RESUME: 2197 sc = ddi_get_soft_state(ural_soft_state_p, 2198 ddi_get_instance(devinfo)); 2199 ASSERT(sc != NULL); 2200 ural_resume(sc); 2201 return (DDI_SUCCESS); 2202 default: 2203 return (DDI_FAILURE); 2204 } 2205 2206 instance = ddi_get_instance(devinfo); 2207 2208 if (ddi_soft_state_zalloc(ural_soft_state_p, instance) != DDI_SUCCESS) { 2209 ral_debug(RAL_DBG_MSG, "ural_attach(): " 2210 "unable to alloc soft_state_p\n"); 2211 return (DDI_FAILURE); 2212 } 2213 2214 sc = ddi_get_soft_state(ural_soft_state_p, instance); 2215 ic = (ieee80211com_t *)&sc->sc_ic; 2216 sc->sc_dev = devinfo; 2217 2218 if (usb_client_attach(devinfo, USBDRV_VERSION, 0) != USB_SUCCESS) { 2219 ral_debug(RAL_DBG_ERR, 2220 "ural_attach(): usb_client_attach failed\n"); 2221 goto fail1; 2222 } 2223 2224 if (usb_get_dev_data(devinfo, &sc->sc_udev, 2225 USB_PARSE_LVL_ALL, 0) != USB_SUCCESS) { 2226 sc->sc_udev = NULL; 2227 goto fail2; 2228 } 2229 2230 mutex_init(&sc->sc_genlock, NULL, MUTEX_DRIVER, NULL); 2231 mutex_init(&sc->tx_lock, NULL, MUTEX_DRIVER, NULL); 2232 mutex_init(&sc->rx_lock, NULL, MUTEX_DRIVER, NULL); 2233 2234 /* retrieve RT2570 rev. no */ 2235 sc->asic_rev = ural_read(sc, RAL_MAC_CSR0); 2236 2237 /* retrieve MAC address and various other things from EEPROM */ 2238 ural_read_eeprom(sc); 2239 2240 ral_debug(RAL_DBG_MSG, "ural: MAC/BBP RT2570 (rev 0x%02x), RF %s\n", 2241 sc->asic_rev, ural_get_rf(sc->rf_rev)); 2242 2243 ic->ic_phytype = IEEE80211_T_OFDM; /* not only, but not used */ 2244 ic->ic_opmode = IEEE80211_M_STA; /* default to BSS mode */ 2245 ic->ic_state = IEEE80211_S_INIT; 2246 2247 ic->ic_maxrssi = 63; 2248 ic->ic_set_shortslot = ural_update_slot; 2249 ic->ic_xmit = ural_send; 2250 2251 /* set device capabilities */ 2252 ic->ic_caps = 2253 IEEE80211_C_TXPMGT | /* tx power management */ 2254 IEEE80211_C_SHPREAMBLE | /* short preamble supported */ 2255 IEEE80211_C_SHSLOT; /* short slot time supported */ 2256 2257 ic->ic_caps |= IEEE80211_C_WPA; /* Support WPA/WPA2 */ 2258 2259 #define IEEE80211_CHAN_A \ 2260 (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM) 2261 2262 if (sc->rf_rev == RAL_RF_5222) { 2263 /* set supported .11a rates */ 2264 ic->ic_sup_rates[IEEE80211_MODE_11A] = ural_rateset_11a; 2265 2266 /* set supported .11a channels */ 2267 for (i = 36; i <= 64; i += 4) { 2268 ic->ic_sup_channels[i].ich_freq = 2269 ieee80211_ieee2mhz(i, IEEE80211_CHAN_5GHZ); 2270 ic->ic_sup_channels[i].ich_flags = IEEE80211_CHAN_A; 2271 } 2272 for (i = 100; i <= 140; i += 4) { 2273 ic->ic_sup_channels[i].ich_freq = 2274 ieee80211_ieee2mhz(i, IEEE80211_CHAN_5GHZ); 2275 ic->ic_sup_channels[i].ich_flags = IEEE80211_CHAN_A; 2276 } 2277 for (i = 149; i <= 161; i += 4) { 2278 ic->ic_sup_channels[i].ich_freq = 2279 ieee80211_ieee2mhz(i, IEEE80211_CHAN_5GHZ); 2280 ic->ic_sup_channels[i].ich_flags = IEEE80211_CHAN_A; 2281 } 2282 } 2283 2284 /* set supported .11b and .11g rates */ 2285 ic->ic_sup_rates[IEEE80211_MODE_11B] = ural_rateset_11b; 2286 ic->ic_sup_rates[IEEE80211_MODE_11G] = ural_rateset_11g; 2287 2288 /* set supported .11b and .11g channels (1 through 14) */ 2289 for (i = 1; i <= 14; i++) { 2290 ic->ic_sup_channels[i].ich_freq = 2291 ieee80211_ieee2mhz(i, IEEE80211_CHAN_2GHZ); 2292 ic->ic_sup_channels[i].ich_flags = 2293 IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | 2294 IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ; 2295 } 2296 2297 ieee80211_attach(ic); 2298 2299 /* register WPA door */ 2300 ieee80211_register_door(ic, ddi_driver_name(devinfo), 2301 ddi_get_instance(devinfo)); 2302 2303 /* override state transition machine */ 2304 sc->sc_newstate = ic->ic_newstate; 2305 ic->ic_newstate = ural_newstate; 2306 ic->ic_watchdog = ural_watchdog; 2307 ieee80211_media_init(ic); 2308 ic->ic_def_txkey = 0; 2309 2310 sc->sc_rcr = 0; 2311 sc->dwelltime = 300; 2312 sc->sc_flags &= 0; 2313 2314 /* 2315 * Provide initial settings for the WiFi plugin; whenever this 2316 * information changes, we need to call mac_plugindata_update() 2317 */ 2318 wd.wd_opmode = ic->ic_opmode; 2319 wd.wd_secalloc = WIFI_SEC_NONE; 2320 IEEE80211_ADDR_COPY(wd.wd_bssid, ic->ic_bss->in_bssid); 2321 2322 if ((macp = mac_alloc(MAC_VERSION)) == NULL) { 2323 ral_debug(RAL_DBG_ERR, "ural_attach(): " 2324 "MAC version mismatch\n"); 2325 goto fail3; 2326 } 2327 2328 macp->m_type_ident = MAC_PLUGIN_IDENT_WIFI; 2329 macp->m_driver = sc; 2330 macp->m_dip = devinfo; 2331 macp->m_src_addr = ic->ic_macaddr; 2332 macp->m_callbacks = &ural_m_callbacks; 2333 macp->m_min_sdu = 0; 2334 macp->m_max_sdu = IEEE80211_MTU; 2335 macp->m_pdata = &wd; 2336 macp->m_pdata_size = sizeof (wd); 2337 2338 err = mac_register(macp, &ic->ic_mach); 2339 mac_free(macp); 2340 if (err != 0) { 2341 ral_debug(RAL_DBG_ERR, "ural_attach(): " 2342 "mac_register() err %x\n", err); 2343 goto fail3; 2344 } 2345 2346 if (usb_register_hotplug_cbs(devinfo, ural_disconnect, 2347 ural_reconnect) != USB_SUCCESS) { 2348 ral_debug(RAL_DBG_ERR, 2349 "ural: ural_attach() failed to register events"); 2350 goto fail4; 2351 } 2352 2353 /* 2354 * Create minor node of type DDI_NT_NET_WIFI 2355 */ 2356 (void) snprintf(strbuf, sizeof (strbuf), "%s%d", 2357 "ural", instance); 2358 err = ddi_create_minor_node(devinfo, strbuf, S_IFCHR, 2359 instance + 1, DDI_NT_NET_WIFI, 0); 2360 2361 if (err != DDI_SUCCESS) 2362 ral_debug(RAL_DBG_ERR, "ddi_create_minor_node() failed\n"); 2363 2364 /* 2365 * Notify link is down now 2366 */ 2367 mac_link_update(ic->ic_mach, LINK_STATE_DOWN); 2368 2369 return (DDI_SUCCESS); 2370 fail4: 2371 (void) mac_unregister(ic->ic_mach); 2372 fail3: 2373 mutex_destroy(&sc->sc_genlock); 2374 mutex_destroy(&sc->tx_lock); 2375 mutex_destroy(&sc->rx_lock); 2376 fail2: 2377 usb_client_detach(sc->sc_dev, sc->sc_udev); 2378 fail1: 2379 ddi_soft_state_free(ural_soft_state_p, ddi_get_instance(devinfo)); 2380 2381 return (DDI_FAILURE); 2382 } 2383 2384 static int 2385 ural_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd) 2386 { 2387 struct ural_softc *sc; 2388 2389 sc = ddi_get_soft_state(ural_soft_state_p, ddi_get_instance(devinfo)); 2390 ASSERT(sc != NULL); 2391 2392 switch (cmd) { 2393 case DDI_DETACH: 2394 break; 2395 case DDI_SUSPEND: 2396 if (RAL_IS_RUNNING(sc)) 2397 (void) ural_stop(sc); 2398 return (DDI_SUCCESS); 2399 default: 2400 return (DDI_FAILURE); 2401 } 2402 2403 if (mac_disable(sc->sc_ic.ic_mach) != 0) 2404 return (DDI_FAILURE); 2405 2406 ural_stop(sc); 2407 usb_unregister_hotplug_cbs(devinfo); 2408 2409 /* 2410 * Unregister from the MAC layer subsystem 2411 */ 2412 (void) mac_unregister(sc->sc_ic.ic_mach); 2413 2414 /* 2415 * detach ieee80211 layer 2416 */ 2417 ieee80211_detach(&sc->sc_ic); 2418 2419 mutex_destroy(&sc->sc_genlock); 2420 mutex_destroy(&sc->tx_lock); 2421 mutex_destroy(&sc->rx_lock); 2422 2423 /* pipes will be close in ural_stop() */ 2424 usb_client_detach(devinfo, sc->sc_udev); 2425 sc->sc_udev = NULL; 2426 2427 ddi_remove_minor_node(devinfo, NULL); 2428 ddi_soft_state_free(ural_soft_state_p, ddi_get_instance(devinfo)); 2429 2430 return (DDI_SUCCESS); 2431 } 2432 2433 int 2434 _info(struct modinfo *modinfop) 2435 { 2436 return (mod_info(&modlinkage, modinfop)); 2437 } 2438 2439 int 2440 _init(void) 2441 { 2442 int status; 2443 2444 status = ddi_soft_state_init(&ural_soft_state_p, 2445 sizeof (struct ural_softc), 1); 2446 if (status != 0) 2447 return (status); 2448 2449 mac_init_ops(&ural_dev_ops, "ural"); 2450 status = mod_install(&modlinkage); 2451 if (status != 0) { 2452 mac_fini_ops(&ural_dev_ops); 2453 ddi_soft_state_fini(&ural_soft_state_p); 2454 } 2455 return (status); 2456 } 2457 2458 int 2459 _fini(void) 2460 { 2461 int status; 2462 2463 status = mod_remove(&modlinkage); 2464 if (status == 0) { 2465 mac_fini_ops(&ural_dev_ops); 2466 ddi_soft_state_fini(&ural_soft_state_p); 2467 } 2468 return (status); 2469 }