if_rsu.c (298818) | if_rsu.c (300754) |
---|---|
1/* $OpenBSD: if_rsu.c,v 1.17 2013/04/15 09:23:01 mglocker Exp $ */ 2 3/*- 4 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18#include <sys/cdefs.h> | 1/* $OpenBSD: if_rsu.c,v 1.17 2013/04/15 09:23:01 mglocker Exp $ */ 2 3/*- 4 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18#include <sys/cdefs.h> |
19__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_rsu.c 298818 2016-04-29 22:14:11Z avos $"); | 19__FBSDID("$FreeBSD: head/sys/dev/usb/wlan/if_rsu.c 300754 2016-05-26 16:39:11Z avos $"); |
20 21/* 22 * Driver for Realtek RTL8188SU/RTL8191SU/RTL8192SU. 23 * 24 * TODO: 25 * o h/w crypto 26 * o hostap / ibss / mesh 27 * o sensible RSSI levels --- 137 unchanged lines hidden (view full) --- 165 struct usb_device_request *, void *); 166static struct ieee80211vap * 167 rsu_vap_create(struct ieee80211com *, const char name[], 168 int, enum ieee80211_opmode, int, const uint8_t bssid[], 169 const uint8_t mac[]); 170static void rsu_vap_delete(struct ieee80211vap *); 171static void rsu_scan_start(struct ieee80211com *); 172static void rsu_scan_end(struct ieee80211com *); | 20 21/* 22 * Driver for Realtek RTL8188SU/RTL8191SU/RTL8192SU. 23 * 24 * TODO: 25 * o h/w crypto 26 * o hostap / ibss / mesh 27 * o sensible RSSI levels --- 137 unchanged lines hidden (view full) --- 165 struct usb_device_request *, void *); 166static struct ieee80211vap * 167 rsu_vap_create(struct ieee80211com *, const char name[], 168 int, enum ieee80211_opmode, int, const uint8_t bssid[], 169 const uint8_t mac[]); 170static void rsu_vap_delete(struct ieee80211vap *); 171static void rsu_scan_start(struct ieee80211com *); 172static void rsu_scan_end(struct ieee80211com *); |
173static void rsu_getradiocaps(struct ieee80211com *, int, int *, 174 struct ieee80211_channel[]); |
|
173static void rsu_set_channel(struct ieee80211com *); 174static void rsu_update_mcast(struct ieee80211com *); 175static int rsu_alloc_rx_list(struct rsu_softc *); 176static void rsu_free_rx_list(struct rsu_softc *); 177static int rsu_alloc_tx_list(struct rsu_softc *); 178static void rsu_free_tx_list(struct rsu_softc *); 179static void rsu_free_list(struct rsu_softc *, struct rsu_data [], int); 180static struct rsu_data *_rsu_getbuf(struct rsu_softc *); --- 66 unchanged lines hidden (view full) --- 247 248DRIVER_MODULE(rsu, uhub, rsu_driver, rsu_devclass, NULL, 0); 249MODULE_DEPEND(rsu, wlan, 1, 1, 1); 250MODULE_DEPEND(rsu, usb, 1, 1, 1); 251MODULE_DEPEND(rsu, firmware, 1, 1, 1); 252MODULE_VERSION(rsu, 1); 253USB_PNP_HOST_INFO(rsu_devs); 254 | 175static void rsu_set_channel(struct ieee80211com *); 176static void rsu_update_mcast(struct ieee80211com *); 177static int rsu_alloc_rx_list(struct rsu_softc *); 178static void rsu_free_rx_list(struct rsu_softc *); 179static int rsu_alloc_tx_list(struct rsu_softc *); 180static void rsu_free_tx_list(struct rsu_softc *); 181static void rsu_free_list(struct rsu_softc *, struct rsu_data [], int); 182static struct rsu_data *_rsu_getbuf(struct rsu_softc *); --- 66 unchanged lines hidden (view full) --- 249 250DRIVER_MODULE(rsu, uhub, rsu_driver, rsu_devclass, NULL, 0); 251MODULE_DEPEND(rsu, wlan, 1, 1, 1); 252MODULE_DEPEND(rsu, usb, 1, 1, 1); 253MODULE_DEPEND(rsu, firmware, 1, 1, 1); 254MODULE_VERSION(rsu, 1); 255USB_PNP_HOST_INFO(rsu_devs); 256 |
257static const uint8_t rsu_chan_2ghz[] = 258 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; 259 |
|
255static uint8_t rsu_wme_ac_xfer_map[4] = { 256 [WME_AC_BE] = RSU_BULK_TX_BE_BK, 257 [WME_AC_BK] = RSU_BULK_TX_BE_BK, 258 [WME_AC_VI] = RSU_BULK_TX_VI_VO, 259 [WME_AC_VO] = RSU_BULK_TX_VI_VO, 260}; 261 262/* XXX hard-coded */ --- 136 unchanged lines hidden (view full) --- 399 400static int 401rsu_attach(device_t self) 402{ 403 struct usb_attach_arg *uaa = device_get_ivars(self); 404 struct rsu_softc *sc = device_get_softc(self); 405 struct ieee80211com *ic = &sc->sc_ic; 406 int error; | 260static uint8_t rsu_wme_ac_xfer_map[4] = { 261 [WME_AC_BE] = RSU_BULK_TX_BE_BK, 262 [WME_AC_BK] = RSU_BULK_TX_BE_BK, 263 [WME_AC_VI] = RSU_BULK_TX_VI_VO, 264 [WME_AC_VO] = RSU_BULK_TX_VI_VO, 265}; 266 267/* XXX hard-coded */ --- 136 unchanged lines hidden (view full) --- 404 405static int 406rsu_attach(device_t self) 407{ 408 struct usb_attach_arg *uaa = device_get_ivars(self); 409 struct rsu_softc *sc = device_get_softc(self); 410 struct ieee80211com *ic = &sc->sc_ic; 411 int error; |
407 uint8_t bands[IEEE80211_MODE_BYTES]; | |
408 uint8_t iface_index; 409 struct usb_interface *iface; 410 const char *rft; 411 412 device_set_usb_desc(self); 413 sc->sc_udev = uaa->device; 414 sc->sc_dev = self; 415 if (rsu_enable_11n) --- 113 unchanged lines hidden (view full) --- 529 IEEE80211_HTCAP_SMPS_OFF; 530 ic->ic_htcaps |= IEEE80211_HTCAP_CHWIDTH40; 531 532 /* set number of spatial streams */ 533 ic->ic_txstream = sc->sc_ntxstream; 534 ic->ic_rxstream = sc->sc_nrxstream; 535 } 536 | 412 uint8_t iface_index; 413 struct usb_interface *iface; 414 const char *rft; 415 416 device_set_usb_desc(self); 417 sc->sc_udev = uaa->device; 418 sc->sc_dev = self; 419 if (rsu_enable_11n) --- 113 unchanged lines hidden (view full) --- 533 IEEE80211_HTCAP_SMPS_OFF; 534 ic->ic_htcaps |= IEEE80211_HTCAP_CHWIDTH40; 535 536 /* set number of spatial streams */ 537 ic->ic_txstream = sc->sc_ntxstream; 538 ic->ic_rxstream = sc->sc_nrxstream; 539 } 540 |
537 /* Set supported .11b and .11g rates. */ 538 memset(bands, 0, sizeof(bands)); 539 setbit(bands, IEEE80211_MODE_11B); 540 setbit(bands, IEEE80211_MODE_11G); 541 if (sc->sc_ht) 542 setbit(bands, IEEE80211_MODE_11NG); 543 ieee80211_init_channels(ic, NULL, bands); | 541 rsu_getradiocaps(ic, IEEE80211_CHAN_MAX, &ic->ic_nchans, 542 ic->ic_channels); |
544 545 ieee80211_ifattach(ic); 546 ic->ic_raw_xmit = rsu_raw_xmit; 547 ic->ic_scan_start = rsu_scan_start; 548 ic->ic_scan_end = rsu_scan_end; | 543 544 ieee80211_ifattach(ic); 545 ic->ic_raw_xmit = rsu_raw_xmit; 546 ic->ic_scan_start = rsu_scan_start; 547 ic->ic_scan_end = rsu_scan_end; |
548 ic->ic_getradiocaps = rsu_getradiocaps; |
|
549 ic->ic_set_channel = rsu_set_channel; 550 ic->ic_vap_create = rsu_vap_create; 551 ic->ic_vap_delete = rsu_vap_delete; 552 ic->ic_update_mcast = rsu_update_mcast; 553 ic->ic_parent = rsu_parent; 554 ic->ic_transmit = rsu_transmit; 555 ic->ic_send_mgmt = rsu_send_mgmt; 556 ic->ic_update_chw = rsu_update_chw; --- 137 unchanged lines hidden (view full) --- 694 695static void 696rsu_scan_end(struct ieee80211com *ic) 697{ 698 /* Nothing to do here. */ 699} 700 701static void | 549 ic->ic_set_channel = rsu_set_channel; 550 ic->ic_vap_create = rsu_vap_create; 551 ic->ic_vap_delete = rsu_vap_delete; 552 ic->ic_update_mcast = rsu_update_mcast; 553 ic->ic_parent = rsu_parent; 554 ic->ic_transmit = rsu_transmit; 555 ic->ic_send_mgmt = rsu_send_mgmt; 556 ic->ic_update_chw = rsu_update_chw; --- 137 unchanged lines hidden (view full) --- 694 695static void 696rsu_scan_end(struct ieee80211com *ic) 697{ 698 /* Nothing to do here. */ 699} 700 701static void |
702rsu_getradiocaps(struct ieee80211com *ic, 703 int maxchans, int *nchans, struct ieee80211_channel chans[]) 704{ 705 struct rsu_softc *sc = ic->ic_softc; 706 uint8_t bands[IEEE80211_MODE_BYTES]; 707 708 /* Set supported .11b and .11g rates. */ 709 memset(bands, 0, sizeof(bands)); 710 setbit(bands, IEEE80211_MODE_11B); 711 setbit(bands, IEEE80211_MODE_11G); 712 if (sc->sc_ht) 713 setbit(bands, IEEE80211_MODE_11NG); 714 ieee80211_add_channel_list_2ghz(chans, maxchans, nchans, 715 rsu_chan_2ghz, nitems(rsu_chan_2ghz), bands, 0); 716} 717 718static void |
|
702rsu_set_channel(struct ieee80211com *ic __unused) 703{ 704 /* We are unable to switch channels, yet. */ 705} 706 707static void 708rsu_update_mcast(struct ieee80211com *ic) 709{ --- 2237 unchanged lines hidden --- | 719rsu_set_channel(struct ieee80211com *ic __unused) 720{ 721 /* We are unable to switch channels, yet. */ 722} 723 724static void 725rsu_update_mcast(struct ieee80211com *ic) 726{ --- 2237 unchanged lines hidden --- |