aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorAndriy Voskoboinyk <avos@FreeBSD.org>2015-10-23 08:26:26 +0000
committerAndriy Voskoboinyk <avos@FreeBSD.org>2015-10-23 08:26:26 +0000
commite97705d4b7c9503cd63b81a3dacfffd742af617a (patch)
tree513535a70a603d8ee31e2a050e8224a07fcaff9c /sys
parent1b65f30ffa29ed145a555a8b887a639f09fb54b2 (diff)
downloadsrc-e97705d4b7c9503cd63b81a3dacfffd742af617a.tar.gz
src-e97705d4b7c9503cd63b81a3dacfffd742af617a.zip
- Split one 4-byte R92C_CR register into 2-byte R92C_CR and 1-byte R92C_MSR
registers (they are used for different purposes). - Wrap R92C_MSR modifications into urtwn_set_mode(). Reviewed by: kevlo Approved by: adrian (mentor) Differential Revision: https://reviews.freebsd.org/D3838
Notes
Notes: svn path=/head/; revision=289811
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/usb/wlan/if_urtwn.c24
-rw-r--r--sys/dev/usb/wlan/if_urtwnreg.h34
2 files changed, 32 insertions, 26 deletions
diff --git a/sys/dev/usb/wlan/if_urtwn.c b/sys/dev/usb/wlan/if_urtwn.c
index 2b17b9f55606..c5039a61085e 100644
--- a/sys/dev/usb/wlan/if_urtwn.c
+++ b/sys/dev/usb/wlan/if_urtwn.c
@@ -222,6 +222,7 @@ static void urtwn_r88e_read_rom(struct urtwn_softc *);
static int urtwn_ra_init(struct urtwn_softc *);
static void urtwn_tsf_sync_enable(struct urtwn_softc *);
static void urtwn_set_led(struct urtwn_softc *, int, int);
+static void urtwn_set_mode(struct urtwn_softc *, uint8_t);
static int urtwn_newstate(struct ieee80211vap *,
enum ieee80211_state, int);
static void urtwn_watchdog(void *);
@@ -1522,6 +1523,16 @@ urtwn_set_led(struct urtwn_softc *sc, int led, int on)
}
}
+static void
+urtwn_set_mode(struct urtwn_softc *sc, uint8_t mode)
+{
+ uint8_t reg;
+
+ reg = urtwn_read_1(sc, R92C_MSR);
+ reg = (reg & ~R92C_MSR_MASK) | mode;
+ urtwn_write_1(sc, R92C_MSR, reg);
+}
+
static int
urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
{
@@ -1530,7 +1541,6 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
struct urtwn_softc *sc = ic->ic_softc;
struct ieee80211_node *ni;
enum ieee80211_state ostate;
- uint32_t reg;
ostate = vap->iv_state;
DPRINTF("%s -> %s\n", ieee80211_state_name[ostate],
@@ -1545,9 +1555,7 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
urtwn_set_led(sc, URTWN_LED_LINK, 0);
/* Set media status to 'No Link'. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_NOLINK);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_NOLINK);
/* Stop Rx of data frames. */
urtwn_write_2(sc, R92C_RXFLTMAP2, 0);
@@ -1632,9 +1640,7 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
ni = ieee80211_ref_node(vap->iv_bss);
/* Set media status to 'Associated'. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_INFRA);
/* Set BSSID. */
urtwn_write_4(sc, R92C_BSSID + 0, LE_READ_4(&ni->ni_bssid[0]));
@@ -3294,9 +3300,7 @@ urtwn_init(struct urtwn_softc *sc)
urtwn_write_region_1(sc, R92C_MACID, macaddr, IEEE80211_ADDR_LEN);
/* Set initial network type. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_INFRA);
urtwn_rxfilter_init(sc);
diff --git a/sys/dev/usb/wlan/if_urtwnreg.h b/sys/dev/usb/wlan/if_urtwnreg.h
index cf45d6a8c961..af39e0953342 100644
--- a/sys/dev/usb/wlan/if_urtwnreg.h
+++ b/sys/dev/usb/wlan/if_urtwnreg.h
@@ -96,6 +96,7 @@
#define R92C_SYS_CFG 0x0f0
/* MAC General Configuration. */
#define R92C_CR 0x100
+#define R92C_MSR 0x102
#define R92C_PBP 0x104
#define R92C_TRXDMA_CTRL 0x10c
#define R92C_TRXFF_BNDY 0x114
@@ -377,22 +378,23 @@
#define R92C_SYS_CFG_TYPE_92C 0x08000000
/* Bits for R92C_CR. */
-#define R92C_CR_HCI_TXDMA_EN 0x00000001
-#define R92C_CR_HCI_RXDMA_EN 0x00000002
-#define R92C_CR_TXDMA_EN 0x00000004
-#define R92C_CR_RXDMA_EN 0x00000008
-#define R92C_CR_PROTOCOL_EN 0x00000010
-#define R92C_CR_SCHEDULE_EN 0x00000020
-#define R92C_CR_MACTXEN 0x00000040
-#define R92C_CR_MACRXEN 0x00000080
-#define R92C_CR_ENSEC 0x00000200
-#define R92C_CR_CALTMR_EN 0x00000400
-#define R92C_CR_NETTYPE_S 16
-#define R92C_CR_NETTYPE_M 0x00030000
-#define R92C_CR_NETTYPE_NOLINK 0
-#define R92C_CR_NETTYPE_ADHOC 1
-#define R92C_CR_NETTYPE_INFRA 2
-#define R92C_CR_NETTYPE_AP 3
+#define R92C_CR_HCI_TXDMA_EN 0x0001
+#define R92C_CR_HCI_RXDMA_EN 0x0002
+#define R92C_CR_TXDMA_EN 0x0004
+#define R92C_CR_RXDMA_EN 0x0008
+#define R92C_CR_PROTOCOL_EN 0x0010
+#define R92C_CR_SCHEDULE_EN 0x0020
+#define R92C_CR_MACTXEN 0x0040
+#define R92C_CR_MACRXEN 0x0080
+#define R92C_CR_ENSEC 0x0200
+#define R92C_CR_CALTMR_EN 0x0400
+
+/* Bits for R92C_MSR. */
+#define R92C_MSR_NOLINK 0x00
+#define R92C_MSR_ADHOC 0x01
+#define R92C_MSR_INFRA 0x02
+#define R92C_MSR_AP 0x03
+#define R92C_MSR_MASK (R92C_MSR_AP)
/* Bits for R92C_PBP. */
#define R92C_PBP_PSRX_M 0x0f