]> xenbits.xensource.com Git - people/liuw/freebsd.git/commitdiff
- Split one 4-byte R92C_CR register into 2-byte R92C_CR and 1-byte R92C_MSR
authoravos <avos@FreeBSD.org>
Fri, 23 Oct 2015 08:26:26 +0000 (08:26 +0000)
committeravos <avos@FreeBSD.org>
Fri, 23 Oct 2015 08:26:26 +0000 (08:26 +0000)
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

sys/dev/usb/wlan/if_urtwn.c
sys/dev/usb/wlan/if_urtwnreg.h

index 2b17b9f55606aefe0c8a57a11bf3897554a2ff6d..c5039a61085e115b4ead1fd4433c63d61bc5b518 100644 (file)
@@ -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);
 
index cf45d6a8c961746ef62a60e51275c43ba6afcb85..af39e095334215d664eb42af19de7786bc5c2cd4 100644 (file)
@@ -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
 #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