Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F131712628
D4959.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D4959.diff
View Options
Index: head/sys/dev/usb/wlan/if_urtwn.c
===================================================================
--- head/sys/dev/usb/wlan/if_urtwn.c
+++ head/sys/dev/usb/wlan/if_urtwn.c
@@ -75,18 +75,35 @@
#include <dev/usb/usb_device.h>
#include "usbdevs.h"
-#define USB_DEBUG_VAR urtwn_debug
#include <dev/usb/usb_debug.h>
#include <dev/usb/wlan/if_urtwnreg.h>
#include <dev/usb/wlan/if_urtwnvar.h>
#ifdef USB_DEBUG
-static int urtwn_debug = 0;
+enum {
+ URTWN_DEBUG_XMIT = 0x00000001, /* basic xmit operation */
+ URTWN_DEBUG_RECV = 0x00000002, /* basic recv operation */
+ URTWN_DEBUG_STATE = 0x00000004, /* 802.11 state transitions */
+ URTWN_DEBUG_RA = 0x00000008, /* f/w rate adaptation setup */
+ URTWN_DEBUG_USB = 0x00000010, /* usb requests */
+ URTWN_DEBUG_FIRMWARE = 0x00000020, /* firmware(9) loading debug */
+ URTWN_DEBUG_BEACON = 0x00000040, /* beacon handling */
+ URTWN_DEBUG_INTR = 0x00000080, /* ISR */
+ URTWN_DEBUG_TEMP = 0x00000100, /* temperature calibration */
+ URTWN_DEBUG_ROM = 0x00000200, /* various ROM info */
+ URTWN_DEBUG_KEY = 0x00000400, /* crypto keys management */
+ URTWN_DEBUG_TXPWR = 0x00000800, /* dump Tx power values */
+ URTWN_DEBUG_ANY = 0xffffffff
+};
+
+#define URTWN_DPRINTF(_sc, _m, ...) do { \
+ if ((_sc)->sc_debug & (_m)) \
+ device_printf((_sc)->sc_dev, __VA_ARGS__); \
+} while(0)
-SYSCTL_NODE(_hw_usb, OID_AUTO, urtwn, CTLFLAG_RW, 0, "USB urtwn");
-SYSCTL_INT(_hw_usb_urtwn, OID_AUTO, debug, CTLFLAG_RWTUN, &urtwn_debug, 0,
- "Debug level");
+#else
+#define URTWN_DPRINTF(_sc, _m, ...) do { (void) sc; } while (0)
#endif
#define IEEE80211_HAS_ADDR4(wh) IEEE80211_IS_DSTODS(wh)
@@ -174,7 +191,8 @@
static usb_callback_t urtwn_bulk_tx_callback;
static usb_callback_t urtwn_bulk_rx_callback;
-static void urtwn_drain_mbufq(struct urtwn_softc *sc);
+static void urtwn_sysctlattach(struct urtwn_softc *);
+static void urtwn_drain_mbufq(struct urtwn_softc *);
static usb_error_t urtwn_do_request(struct urtwn_softc *,
struct usb_device_request *, void *);
static struct ieee80211vap *urtwn_vap_create(struct ieee80211com *,
@@ -228,7 +246,7 @@
static int urtwn_efuse_read_next(struct urtwn_softc *, uint8_t *);
static int urtwn_efuse_read_data(struct urtwn_softc *, uint8_t *,
uint8_t, uint8_t);
-#ifdef URTWN_DEBUG
+#ifdef USB_DEBUG
static void urtwn_dump_rom_contents(struct urtwn_softc *,
uint8_t *, uint16_t);
#endif
@@ -452,6 +470,13 @@
if (USB_GET_DRIVER_INFO(uaa) == URTWN_RTL8188E)
sc->chip |= URTWN_CHIP_88E;
+#ifdef USB_DEBUG
+ int debug;
+ if (resource_int_value(device_get_name(sc->sc_dev),
+ device_get_unit(sc->sc_dev), "debug", &debug) == 0)
+ sc->sc_debug = debug;
+#endif
+
mtx_init(&sc->sc_mtx, device_get_nameunit(self),
MTX_NETWORK_LOCK, MTX_DEF);
URTWN_CMDQ_LOCK_INIT(sc);
@@ -561,6 +586,8 @@
TASK_INIT(&sc->cmdq_task, 0, urtwn_cmdq_cb, sc);
+ urtwn_sysctlattach(sc);
+
if (bootverbose)
ieee80211_announce(ic);
@@ -571,6 +598,19 @@
return (ENXIO); /* failure */
}
+static void
+urtwn_sysctlattach(struct urtwn_softc *sc)
+{
+#ifdef USB_DEBUG
+ struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev);
+ struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev);
+
+ SYSCTL_ADD_U32(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+ "debug", CTLFLAG_RW, &sc->sc_debug, sc->sc_debug,
+ "control debugging printfs");
+#endif
+}
+
static int
urtwn_detach(device_t self)
{
@@ -651,8 +691,9 @@
if (err == 0)
break;
- DPRINTFN(1, "Control request failed, %s (retrying)\n",
- usbd_errstr(err));
+ URTWN_DPRINTF(sc, URTWN_DEBUG_USB,
+ "%s: control request failed, %s (retries left: %d)\n",
+ __func__, usbd_errstr(err), ntries);
usb_pause_mtx(&sc->sc_mtx, hz / 100);
}
return (err);
@@ -746,14 +787,16 @@
* This should not happen since we setup our Rx filter
* to not receive these frames.
*/
- DPRINTFN(6, "RX flags error (%s)\n",
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RECV,
+ "%s: RX flags error (%s)\n", __func__,
rxdw0 & R92C_RXDW0_CRCERR ? "CRC" : "ICV");
goto fail;
}
pktlen = MS(rxdw0, R92C_RXDW0_PKTLEN);
if (pktlen < sizeof(struct ieee80211_frame_ack)) {
- DPRINTFN(6, "frame too short: %d\n", pktlen);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RECV,
+ "%s: frame is too short: %d\n", __func__, pktlen);
goto fail;
}
@@ -810,7 +853,9 @@
urtwn_r88e_ratectl_tx_complete(sc, &stat[1]);
break;
default:
- DPRINTFN(7, "case %d was not handled\n", report_sel);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_INTR,
+ "%s: case %d was not handled\n", __func__,
+ report_sel);
break;
}
} else
@@ -830,7 +875,8 @@
/* Get the number of encapsulated frames. */
stat = (struct r92c_rx_stat *)buf;
npkts = MS(le32toh(stat->rxdw2), R92C_RXDW2_PKTCNT);
- DPRINTFN(6, "Rx %d frames in one chunk\n", npkts);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RECV,
+ "%s: Rx %d frames in one chunk\n", __func__, npkts);
/* Process all of them. */
while (npkts-- > 0) {
@@ -885,6 +931,10 @@
ni = sc->node_list[macid];
if (ni != NULL) {
vap = ni->ni_vap;
+ URTWN_DPRINTF(sc, URTWN_DEBUG_INTR, "%s: frame for macid %d was"
+ "%s sent (%d retries)\n", __func__, macid,
+ (rpt->rptb1 & R88E_RPTB1_PKT_OK) ? "" : " not",
+ ntries);
if (rpt->rptb1 & R88E_RPTB1_PKT_OK) {
ieee80211_ratectl_tx_complete(vap, ni,
@@ -893,8 +943,10 @@
ieee80211_ratectl_tx_complete(vap, ni,
IEEE80211_RATECTL_TX_FAILURE, &ntries, NULL);
}
- } else
- DPRINTFN(8, "macid %d, ni is NULL\n", macid);
+ } else {
+ URTWN_DPRINTF(sc, URTWN_DEBUG_INTR, "%s: macid %d, ni is NULL\n",
+ __func__, macid);
+ }
URTWN_NT_UNLOCK(sc);
}
@@ -1177,7 +1229,8 @@
tr_setup:
data = STAILQ_FIRST(&sc->sc_tx_pending);
if (data == NULL) {
- DPRINTF("%s: empty pending queue\n", __func__);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT,
+ "%s: empty pending queue\n", __func__);
goto finish;
}
STAILQ_REMOVE_HEAD(&sc->sc_tx_pending, next);
@@ -1210,8 +1263,10 @@
bf = STAILQ_FIRST(&sc->sc_tx_inactive);
if (bf != NULL)
STAILQ_REMOVE_HEAD(&sc->sc_tx_inactive, next);
- else
- DPRINTF("%s: %s\n", __func__, "out of xmit buffers");
+ else {
+ URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT,
+ "%s: out of xmit buffers\n", __func__);
+ }
return (bf);
}
@@ -1223,8 +1278,10 @@
URTWN_ASSERT_LOCKED(sc);
bf = _urtwn_getbuf(sc);
- if (bf == NULL)
- DPRINTF("%s: stop queue\n", __func__);
+ if (bf == NULL) {
+ URTWN_DPRINTF(sc, URTWN_DEBUG_XMIT, "%s: stop queue\n",
+ __func__);
+ }
return (bf);
}
@@ -1529,20 +1586,22 @@
error = urtwn_efuse_read_next(sc, ®);
if (error != 0)
return (error);
- DPRINTF("rom[0x%03X] == 0x%02X\n", off * 8 + i * 2, reg);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ROM, "rom[0x%03X] == 0x%02X\n",
+ off * 8 + i * 2, reg);
rom[off * 8 + i * 2 + 0] = reg;
error = urtwn_efuse_read_next(sc, ®);
if (error != 0)
return (error);
- DPRINTF("rom[0x%03X] == 0x%02X\n", off * 8 + i * 2 + 1, reg);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ROM, "rom[0x%03X] == 0x%02X\n",
+ off * 8 + i * 2 + 1, reg);
rom[off * 8 + i * 2 + 1] = reg;
}
return (0);
}
-#ifdef URTWN_DEBUG
+#ifdef USB_DEBUG
static void
urtwn_dump_rom_contents(struct urtwn_softc *sc, uint8_t *rom, uint16_t size)
{
@@ -1599,8 +1658,8 @@
end:
-#ifdef URTWN_DEBUG
- if (urtwn_debug >= 2)
+#ifdef USB_DEBUG
+ if (sc->sc_debug & URTWN_DEBUG_ROM)
urtwn_dump_rom_contents(sc, rom, size);
#endif
@@ -1695,12 +1754,14 @@
error = urtwn_efuse_read_next(sc, &sc->pa_setting);
if (error != 0)
return (error);
- DPRINTF("PA setting=0x%x\n", sc->pa_setting);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ROM, "%s: PA setting=0x%x\n", __func__,
+ sc->pa_setting);
sc->board_type = MS(rom->rf_opt1, R92C_ROM_RF1_BOARD_TYPE);
sc->regulatory = MS(rom->rf_opt1, R92C_ROM_RF1_REGULATORY);
- DPRINTF("regulatory type=%d\n", sc->regulatory);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ROM, "%s: regulatory type=%d\n",
+ __func__, sc->regulatory);
IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
sc->sc_rf_write = urtwn_r92c_rf_write;
@@ -1726,7 +1787,8 @@
if (sc->ofdm_tx_pwr_diff & 0x08)
sc->ofdm_tx_pwr_diff |= 0xf0;
sc->regulatory = MS(rom->rf_board_opt, R92C_ROM_RF1_REGULATORY);
- DPRINTF("regulatory type=%d\n", sc->regulatory);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ROM, "%s: regulatory type %d\n",
+ __func__,sc->regulatory);
IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
sc->sc_rf_write = urtwn_r88e_rf_write;
@@ -1777,7 +1839,8 @@
mode = R92C_RAID_11B;
else
mode = R92C_RAID_11BG;
- DPRINTF("mode=0x%x rates=0x%08x, basicrates=0x%08x\n",
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RA,
+ "%s: mode 0x%x, rates 0x%08x, basicrates 0x%08x\n", __func__,
mode, rates, basicrates);
/* Set rates mask for group addressed frames. */
@@ -1791,7 +1854,8 @@
return (error);
}
/* Set initial MRR rate. */
- DPRINTF("maxbasicrate=%d\n", maxbasicrate);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RA, "%s: maxbasicrate %d\n", __func__,
+ maxbasicrate);
urtwn_write_1(sc, R92C_INIDATA_RATE_SEL(URTWN_MACID_BC),
maxbasicrate);
@@ -1805,7 +1869,8 @@
return (error);
}
/* Set initial MRR rate. */
- DPRINTF("maxrate=%d\n", maxrate);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RA, "%s: maxrate %d\n", __func__,
+ maxrate);
urtwn_write_1(sc, R92C_INIDATA_RATE_SEL(URTWN_MACID_BSS),
maxrate);
@@ -1872,6 +1937,10 @@
if ((error = urtwn_tx_beacon(sc, uvp)) != 0)
return (error);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_BEACON, "%s: beacon was %srecognized\n",
+ __func__, urtwn_read_1(sc, R92C_TDECTRL + 2) &
+ (R92C_TDECTRL_BCN_VALID >> 16) ? "" : "not ");
+
return (0);
}
@@ -2004,9 +2073,11 @@
return;
}
- DPRINTFN(9, "keyix %d, keyid %d, algo %d/%d, flags %04X, len %d, "
- "macaddr %s\n", k->wk_keyix, keyid, k->wk_cipher->ic_cipher, algo,
- k->wk_flags, k->wk_keylen, ether_sprintf(k->wk_macaddr));
+ URTWN_DPRINTF(sc, URTWN_DEBUG_KEY,
+ "%s: keyix %d, keyid %d, algo %d/%d, flags %04X, len %d, "
+ "macaddr %s\n", __func__, k->wk_keyix, keyid,
+ k->wk_cipher->ic_cipher, algo, k->wk_flags, k->wk_keylen,
+ ether_sprintf(k->wk_macaddr));
/* Write key. */
for (i = 0; i < 4; i++) {
@@ -2041,7 +2112,8 @@
struct ieee80211_key *k = &data->key;
int i;
- DPRINTFN(9, "keyix %d, flags %04X, macaddr %s\n",
+ URTWN_DPRINTF(sc, URTWN_DEBUG_KEY,
+ "%s: keyix %d, flags %04X, macaddr %s\n", __func__,
k->wk_keyix, k->wk_flags, ether_sprintf(k->wk_macaddr));
urtwn_cam_write(sc, R92C_CAM_CTL0(k->wk_keyix), 0);
@@ -2233,8 +2305,8 @@
int error = 0;
ostate = vap->iv_state;
- DPRINTF("%s -> %s\n", ieee80211_state_name[ostate],
- ieee80211_state_name[nstate]);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_STATE, "%s -> %s\n",
+ ieee80211_state_name[ostate], ieee80211_state_name[nstate]);
IEEE80211_UNLOCK(ic);
URTWN_LOCK(sc);
@@ -2442,7 +2514,8 @@
sc->avg_pwdb = ((sc->avg_pwdb * 19 + pwdb) / 20) + 1;
else
sc->avg_pwdb = ((sc->avg_pwdb * 19 + pwdb) / 20);
- DPRINTFN(4, "PWDB=%d EMA=%d\n", pwdb, sc->avg_pwdb);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_RA, "%s: PWDB %d, EMA %d\n", __func__,
+ pwdb, sc->avg_pwdb);
}
static int8_t
@@ -3275,7 +3348,8 @@
if ((le16toh(hdr->signature) >> 4) == 0x88c ||
(le16toh(hdr->signature) >> 4) == 0x88e ||
(le16toh(hdr->signature) >> 4) == 0x92c) {
- DPRINTF("FW V%d.%d %02d-%02d %02d:%02d\n",
+ URTWN_DPRINTF(sc, URTWN_DEBUG_FIRMWARE,
+ "FW V%d.%d %02d-%02d %02d:%02d\n",
le16toh(hdr->version), le16toh(hdr->subversion),
hdr->month, hdr->date, hdr->hour, hdr->minute);
ptr += sizeof(*hdr);
@@ -3986,8 +4060,8 @@
if (power[ridx] > R92C_MAX_TX_PWR)
power[ridx] = R92C_MAX_TX_PWR;
}
-#ifdef URTWN_DEBUG
- if (urtwn_debug >= 4) {
+#ifdef USB_DEBUG
+ if (sc->sc_debug & URTWN_DEBUG_TXPWR) {
/* Dump per-rate Tx power values. */
printf("Tx power for chain %d:\n", chain);
for (ridx = URTWN_RIDX_CCK1; ridx < URTWN_RIDX_COUNT; ridx++)
@@ -4213,7 +4287,8 @@
slottime = IEEE80211_GET_SLOTTIME(ic);
- DPRINTFN(10, "setting slot time to %uus\n", slottime);
+ URTWN_DPRINTF(sc, URTWN_DEBUG_ANY, "%s: setting slot time to %uus\n",
+ __func__, slottime);
urtwn_write_1(sc, R92C_SLOT, slottime);
urtwn_update_aifs(sc, slottime);
Index: head/sys/dev/usb/wlan/if_urtwnreg.h
===================================================================
--- head/sys/dev/usb/wlan/if_urtwnreg.h
+++ head/sys/dev/usb/wlan/if_urtwnreg.h
@@ -458,6 +458,7 @@
/* Bits for R92C_TDECTRL. */
#define R92C_TDECTRL_BLK_DESC_NUM_M 0x000000f0
#define R92C_TDECTRL_BLK_DESC_NUM_S 4
+#define R92C_TDECTRL_BCN_VALID 0x00010000
/* Bits for R92C_FWHW_TXQ_CTRL. */
#define R92C_FWHW_TXQ_CTRL_AMPDU_RTY_NEW 0x80
Index: head/sys/dev/usb/wlan/if_urtwnvar.h
===================================================================
--- head/sys/dev/usb/wlan/if_urtwnvar.h
+++ head/sys/dev/usb/wlan/if_urtwnvar.h
@@ -150,8 +150,9 @@
device_t sc_dev;
struct usb_device *sc_udev;
+ uint32_t sc_debug;
uint8_t sc_iface_index;
- u_int sc_flags;
+ uint8_t sc_flags;
#define URTWN_FLAG_CCK_HIPWR 0x01
#define URTWN_DETACHED 0x02
#define URTWN_RUNNING 0x04
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Oct 11, 1:46 PM (2 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23579181
Default Alt Text
D4959.diff (12 KB)
Attached To
Mode
D4959: urtwn: rework debug handling
Attached
Detach File
Event Timeline
Log In to Comment