Module Name: src
Committed By: christos
Date: Tue Mar 12 14:19:34 UTC 2013
Modified Files:
src/sys/dev/usb: if_urtwn.c if_urtwn_data.h if_urtwnvar.h
Log Message:
more locking and int -> size_t from Anon Ymous
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/usb/if_urtwn.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/usb/if_urtwn_data.h
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/usb/if_urtwnvar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/if_urtwn.c
diff -u src/sys/dev/usb/if_urtwn.c:1.21 src/sys/dev/usb/if_urtwn.c:1.22
--- src/sys/dev/usb/if_urtwn.c:1.21 Tue Feb 5 13:17:05 2013
+++ src/sys/dev/usb/if_urtwn.c Tue Mar 12 10:19:34 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_urtwn.c,v 1.21 2013/02/05 18:17:05 christos Exp $ */
+/* $NetBSD: if_urtwn.c,v 1.22 2013/03/12 14:19:34 christos Exp $ */
/* $OpenBSD: if_urtwn.c,v 1.20 2011/11/26 06:39:33 ckuethe Exp $ */
/*-
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.21 2013/02/05 18:17:05 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_urtwn.c,v 1.22 2013/03/12 14:19:34 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -233,7 +233,7 @@ static void urtwn_pa_bias_init(struct ur
static void urtwn_rxfilter_init(struct urtwn_softc *);
static void urtwn_edca_init(struct urtwn_softc *);
static void urtwn_write_txpower(struct urtwn_softc *, int, uint16_t[]);
-static void urtwn_get_txpower(struct urtwn_softc *, int, u_int, u_int,
+static void urtwn_get_txpower(struct urtwn_softc *, size_t, u_int, u_int,
uint16_t[]);
static void urtwn_set_txpower(struct urtwn_softc *, u_int, u_int);
static void urtwn_set_chan(struct urtwn_softc *, struct ieee80211_channel *,
@@ -267,7 +267,8 @@ urtwn_attach(device_t parent, device_t s
struct ifnet *ifp = &sc->sc_if;
struct usb_attach_arg *uaa = aux;
char *devinfop;
- int i, error;
+ size_t i;
+ int error;
sc->sc_dev = self;
sc->sc_udev = uaa->device;
@@ -323,7 +324,7 @@ urtwn_attach(device_t parent, device_t s
}
urtwn_read_rom(sc);
- aprint_normal_dev(self, "MAC/BB RTL%s, RF 6052 %dT%dR, address %s\n",
+ aprint_normal_dev(self, "MAC/BB RTL%s, RF 6052 %zdT%zdR, address %s\n",
(sc->chip & URTWN_CHIP_92C) ? "8192CU" :
(sc->board_type == R92C_BOARD_TYPE_HIGHPA) ? "8188RU" :
(sc->board_type == R92C_BOARD_TYPE_MINICARD) ? "8188CE-VAU" :
@@ -480,7 +481,8 @@ urtwn_open_pipes(struct urtwn_softc *sc)
static const uint8_t epaddr[] = { 0x02, 0x03, 0x05 };
usb_interface_descriptor_t *id;
usb_endpoint_descriptor_t *ed;
- int i, ntx = 0, error;
+ size_t i, ntx = 0;
+ int error;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -493,11 +495,11 @@ urtwn_open_pipes(struct urtwn_softc *sc)
UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_OUT)
ntx++;
}
- DPRINTFN(DBG_INIT, ("%s: %s: found %d bulk-out pipes\n",
+ DPRINTFN(DBG_INIT, ("%s: %s: found %zd bulk-out pipes\n",
device_xname(sc->sc_dev), __func__, ntx));
if (ntx == 0 || ntx > R92C_MAX_EPOUT) {
aprint_error_dev(sc->sc_dev,
- "%d: invalid number of Tx bulk pipes\n", ntx);
+ "%zd: invalid number of Tx bulk pipes\n", ntx);
return (EIO);
}
sc->rx_npipe = 1;
@@ -539,23 +541,25 @@ urtwn_open_pipes(struct urtwn_softc *sc)
static void
urtwn_close_pipes(struct urtwn_softc *sc)
{
- int i;
+ usbd_pipe_handle pipe;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
/* Close Rx pipe. */
- if (sc->rx_pipe != NULL) {
- usbd_abort_pipe(sc->rx_pipe);
- usbd_close_pipe(sc->rx_pipe);
- sc->rx_pipe = NULL;
+ CTASSERT(sizeof(pipe) == sizeof(void *));
+ pipe = atomic_swap_ptr(&sc->rx_pipe, NULL);
+ if (pipe != NULL) {
+ usbd_abort_pipe(pipe);
+ usbd_close_pipe(pipe);
}
/* Close Tx pipes. */
for (i = 0; i < R92C_MAX_EPOUT; i++) {
- if (sc->tx_pipe[i] == NULL)
- continue;
- usbd_abort_pipe(sc->tx_pipe[i]);
- usbd_close_pipe(sc->tx_pipe[i]);
- sc->tx_pipe[i] = NULL;
+ pipe = atomic_swap_ptr(&sc->tx_pipe[i], NULL);
+ if (pipe != NULL) {
+ usbd_abort_pipe(pipe);
+ usbd_close_pipe(pipe);
+ }
}
}
@@ -563,7 +567,8 @@ static int
urtwn_alloc_rx_list(struct urtwn_softc *sc)
{
struct urtwn_rx_data *data;
- int i, error = 0;
+ size_t i;
+ int error = 0;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -596,16 +601,17 @@ urtwn_alloc_rx_list(struct urtwn_softc *
static void
urtwn_free_rx_list(struct urtwn_softc *sc)
{
- int i;
+ usbd_xfer_handle xfer;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
/* NB: Caller must abort pipe first. */
for (i = 0; i < URTWN_RX_LIST_COUNT; i++) {
- if (sc->rx_data[i].xfer != NULL) {
- usbd_free_xfer(sc->rx_data[i].xfer);
- sc->rx_data[i].xfer = NULL;
- }
+ CTASSERT(sizeof(xfer) == sizeof(void *));
+ xfer = atomic_swap_ptr(&sc->tx_data[i].xfer, NULL);
+ if (xfer != NULL)
+ usbd_free_xfer(xfer);
}
}
@@ -613,7 +619,8 @@ static int
urtwn_alloc_tx_list(struct urtwn_softc *sc)
{
struct urtwn_tx_data *data;
- int i, error = 0;
+ size_t i;
+ int error = 0;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -655,19 +662,17 @@ urtwn_alloc_tx_list(struct urtwn_softc *
static void
urtwn_free_tx_list(struct urtwn_softc *sc)
{
- struct urtwn_tx_data *data;
- int i;
+ usbd_xfer_handle xfer;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
/* NB: Caller must abort pipe first. */
for (i = 0; i < URTWN_TX_LIST_COUNT; i++) {
- data = &sc->tx_data[i];
-
- if (data->xfer != NULL) {
- usbd_free_xfer(data->xfer);
- data->xfer = NULL;
- }
+ CTASSERT(sizeof(xfer) == sizeof(void *));
+ xfer = atomic_swap_ptr(&sc->tx_data[i].xfer, NULL);
+ if (xfer != NULL)
+ usbd_free_xfer(xfer);
}
}
@@ -1017,7 +1022,7 @@ urtwn_efuse_read(struct urtwn_softc *sc)
uint32_t reg;
uint16_t addr = 0;
uint8_t off, msk;
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -1251,7 +1256,8 @@ urtwn_ra_init(struct urtwn_softc *sc)
uint32_t rates, basicrates;
uint32_t mask;
uint8_t mode;
- int maxrate, maxbasicrate, error, i, j;
+ size_t maxrate, maxbasicrate, i, j;
+ int error;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -1262,7 +1268,7 @@ urtwn_ra_init(struct urtwn_softc *sc)
maxrate = maxbasicrate = 0;
for (i = 0; i < rs->rs_nrates; i++) {
/* Convert 802.11 rate to HW rate index. */
- for (j = 0; j < (int)__arraycount(map); j++) {
+ for (j = 0; j < __arraycount(map); j++) {
if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) == map[j]) {
break;
}
@@ -1290,7 +1296,7 @@ urtwn_ra_init(struct urtwn_softc *sc)
mode = R92C_RAID_11BG;
}
DPRINTFN(DBG_INIT, ("%s: %s: mode=0x%x rates=0x%x, basicrates=0x%x, "
- "maxrate=%x, maxbasicrate=%x\n",
+ "maxrate=%zx, maxbasicrate=%zx\n",
device_xname(sc->sc_dev), __func__, mode, rates, basicrates,
maxrate, maxbasicrate));
if (basicrates == 0) {
@@ -1311,7 +1317,7 @@ urtwn_ra_init(struct urtwn_softc *sc)
return (error);
}
/* Set initial MRR rate. */
- DPRINTFN(DBG_INIT, ("%s: %s: maxbasicrate=%d\n",
+ DPRINTFN(DBG_INIT, ("%s: %s: maxbasicrate=%zd\n",
device_xname(sc->sc_dev), __func__, maxbasicrate));
urtwn_write_1(sc, R92C_INIDATA_RATE_SEL(URTWN_MACID_BC), maxbasicrate);
@@ -1328,7 +1334,7 @@ urtwn_ra_init(struct urtwn_softc *sc)
return (error);
}
/* Set initial MRR rate. */
- DPRINTFN(DBG_INIT, ("%s: %s: maxrate=%d\n", device_xname(sc->sc_dev),
+ DPRINTFN(DBG_INIT, ("%s: %s: maxrate=%zd\n", device_xname(sc->sc_dev),
__func__, maxrate));
urtwn_write_1(sc, R92C_INIDATA_RATE_SEL(URTWN_MACID_BSS), maxrate);
@@ -1935,7 +1941,8 @@ urtwn_rx_frame(struct urtwn_softc *sc, u
* XXX: This will drop most control packets. Do we really
* want this in IEEE80211_M_MONITOR mode?
*/
- if (__predict_false(pktlen < (int)sizeof(*wh))) {
+// if (__predict_false(pktlen < (int)sizeof(*wh))) {
+ if (__predict_false(pktlen < (int)sizeof(struct ieee80211_frame_ack))) {
DPRINTFN(DBG_RX, ("%s: %s: packet too short %d\n",
device_xname(sc->sc_dev), __func__, pktlen));
ic->ic_stats.is_rx_tooshort++;
@@ -2157,9 +2164,10 @@ urtwn_tx(struct urtwn_softc *sc, struct
struct ieee80211_key *k = NULL;
struct r92c_tx_desc *txd;
usbd_pipe_handle pipe;
+ size_t i, padsize, xferlen;
uint16_t seq, sum;
uint8_t raid, type, tid, qid;
- int i, s, hasqos, xferlen, padsize, error;
+ int s, hasqos, error;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -2226,7 +2234,7 @@ urtwn_tx(struct urtwn_softc *sc, struct
/* fix pad field */
if (padsize > 0) {
- DPRINTFN(DBG_TX, ("%s: %s: padding: size=%d\n",
+ DPRINTFN(DBG_TX, ("%s: %s: padding: size=%zd\n",
device_xname(sc->sc_dev), __func__, padsize));
txd->txdw1 |= htole32(SM(R92C_TXDW1_PKTOFF, (padsize / 8)));
}
@@ -2304,7 +2312,7 @@ urtwn_tx(struct urtwn_softc *sc, struct
/* Compute Tx descriptor checksum. */
sum = 0;
- for (i = 0; i < (int)sizeof(*txd) / 2; i++)
+ for (i = 0; i < sizeof(*txd) / 2; i++)
sum ^= ((uint16_t *)txd)[i];
txd->txdsum = sum; /* NB: already little endian. */
@@ -2588,7 +2596,8 @@ urtwn_power_on(struct urtwn_softc *sc)
static int
urtwn_llt_init(struct urtwn_softc *sc)
{
- int i, error;
+ size_t i;
+ int error;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -2882,14 +2891,14 @@ urtwn_dma_init(struct urtwn_softc *sc)
static void
urtwn_mac_init(struct urtwn_softc *sc)
{
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
KASSERT(mutex_owned(&sc->sc_write_mtx));
/* Write MAC initialization values. */
- for (i = 0; i < (int)__arraycount(rtl8192cu_mac); i++)
+ for (i = 0; i < __arraycount(rtl8192cu_mac); i++)
urtwn_write_1(sc, rtl8192cu_mac[i].reg, rtl8192cu_mac[i].val);
}
@@ -2898,7 +2907,7 @@ urtwn_bb_init(struct urtwn_softc *sc)
{
const struct urtwn_bb_prog *prog;
uint32_t reg;
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3022,7 +3031,7 @@ urtwn_rf_init(struct urtwn_softc *sc)
{
const struct urtwn_rf_prog *prog;
uint32_t reg, mask, saved;
- int i, j, idx;
+ size_t i, j, idx;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3104,7 +3113,7 @@ urtwn_cam_init(struct urtwn_softc *sc)
{
uint32_t content, command;
uint8_t idx;
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3136,7 +3145,7 @@ urtwn_cam_init(struct urtwn_softc *sc)
command = R92C_CAMCMD_POLLING
| R92C_CAMCMD_WRITE
| R92C_CAM_CTL0(idx)
- | (u_int)i;
+ | i;
urtwn_write_4(sc, R92C_CAMWRITE, content);
urtwn_write_4(sc, R92C_CAMCMD, command);
@@ -3151,7 +3160,7 @@ static void
urtwn_pa_bias_init(struct urtwn_softc *sc)
{
uint8_t reg;
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3287,7 +3296,7 @@ urtwn_write_txpower(struct urtwn_softc *
}
static void
-urtwn_get_txpower(struct urtwn_softc *sc, int chain, u_int chan, u_int ht40m,
+urtwn_get_txpower(struct urtwn_softc *sc, size_t chain, u_int chan, u_int ht40m,
uint16_t power[URTWN_RIDX_COUNT])
{
struct r92c_rom *rom = &sc->rom;
@@ -3295,7 +3304,7 @@ urtwn_get_txpower(struct urtwn_softc *sc
const struct urtwn_txpwr *base;
int ridx, group;
- DPRINTFN(DBG_FN, ("%s: %s: chain=%d, chan=%d\n",
+ DPRINTFN(DBG_FN, ("%s: %s: chain=%zd, chan=%d\n",
device_xname(sc->sc_dev), __func__, chain, chan));
/* Determine channel group. */
@@ -3389,7 +3398,7 @@ urtwn_get_txpower(struct urtwn_softc *sc
#ifdef URTWN_DEBUG
if (urtwn_debug & DBG_RF) {
/* Dump per-rate Tx power values. */
- printf("%s: %s: Tx power for chain %d:\n",
+ printf("%s: %s: Tx power for chain %zd:\n",
device_xname(sc->sc_dev), __func__, chain);
for (ridx = 0; ridx < URTWN_RIDX_COUNT; ridx++) {
printf("%s: %s: Rate %d = %u\n",
@@ -3404,7 +3413,7 @@ static void
urtwn_set_txpower(struct urtwn_softc *sc, u_int chan, u_int ht40m)
{
uint16_t power[URTWN_RIDX_COUNT];
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3421,7 +3430,7 @@ urtwn_set_chan(struct urtwn_softc *sc, s
{
struct ieee80211com *ic = &sc->sc_ic;
u_int chan;
- int i;
+ size_t i;
chan = ieee80211_chan2ieee(ic, c); /* XXX center freq! */
@@ -3515,7 +3524,7 @@ urtwn_lc_calib(struct urtwn_softc *sc)
{
uint32_t rf_ac[2];
uint8_t txmode;
- int i;
+ size_t i;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3609,7 +3618,8 @@ urtwn_init(struct ifnet *ifp)
struct ieee80211com *ic = &sc->sc_ic;
struct urtwn_rx_data *data;
uint32_t reg;
- int i, error;
+ size_t i;
+ int error;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
@@ -3833,7 +3843,8 @@ urtwn_stop(struct ifnet *ifp, int disabl
{
struct urtwn_softc *sc = ifp->if_softc;
struct ieee80211com *ic = &sc->sc_ic;
- int i, s;
+ size_t i;
+ int s;
DPRINTFN(DBG_FN, ("%s: %s\n", device_xname(sc->sc_dev), __func__));
Index: src/sys/dev/usb/if_urtwn_data.h
diff -u src/sys/dev/usb/if_urtwn_data.h:1.1 src/sys/dev/usb/if_urtwn_data.h:1.2
--- src/sys/dev/usb/if_urtwn_data.h:1.1 Sat Mar 24 20:11:16 2012
+++ src/sys/dev/usb/if_urtwn_data.h Tue Mar 12 10:19:34 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_urtwn_data.h,v 1.1 2012/03/25 00:11:16 nonaka Exp $ */
+/* $NetBSD: if_urtwn_data.h,v 1.2 2013/03/12 14:19:34 christos Exp $ */
/* $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $ */
/*-
@@ -52,10 +52,10 @@ static const struct {
* Baseband initialization values.
*/
struct urtwn_bb_prog {
- int count;
+ size_t count;
const uint16_t *regs;
const uint32_t *vals;
- int agccount;
+ size_t agccount;
const uint32_t *agcvals;
};
@@ -473,7 +473,7 @@ static const struct urtwn_bb_prog rtl818
* RF initialization values.
*/
struct urtwn_rf_prog {
- int count;
+ size_t count;
const uint8_t *regs;
const uint32_t *vals;
};
Index: src/sys/dev/usb/if_urtwnvar.h
diff -u src/sys/dev/usb/if_urtwnvar.h:1.4 src/sys/dev/usb/if_urtwnvar.h:1.5
--- src/sys/dev/usb/if_urtwnvar.h:1.4 Sun Jan 20 15:21:57 2013
+++ src/sys/dev/usb/if_urtwnvar.h Tue Mar 12 10:19:34 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: if_urtwnvar.h,v 1.4 2013/01/20 20:21:57 christos Exp $ */
+/* $NetBSD: if_urtwnvar.h,v 1.5 2013/03/12 14:19:34 christos Exp $ */
/* $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $ */
/*-
@@ -148,8 +148,8 @@ struct urtwn_softc {
int avg_pwdb;
int thcal_state;
int thcal_lctemp;
- int ntxchains;
- int nrxchains;
+ size_t ntxchains;
+ size_t nrxchains;
int ledlink;
bool iqk_inited;
@@ -181,4 +181,3 @@ struct urtwn_softc {
};
#endif /* _IF_URTWNVAR_H_ */
-