Page MenuHomeFreeBSD

D48066.diff
No OneTemporary

D48066.diff

diff --git a/sys/dev/rtwn/if_rtwn.c b/sys/dev/rtwn/if_rtwn.c
--- a/sys/dev/rtwn/if_rtwn.c
+++ b/sys/dev/rtwn/if_rtwn.c
@@ -968,6 +968,8 @@
/* Enable TSF synchronization. */
rtwn_setbits_1(sc, R92C_BCN_CTRL(uvp->id),
R92C_BCN_CTRL_DIS_TSF_UDT0, 0);
+ /* Enable TSF beacon handling, needed for RA */
+ rtwn_sta_beacon_enable(sc, uvp->id, true);
break;
case IEEE80211_M_IBSS:
ieee80211_runtask(ic, &uvp->tsf_sync_adhoc_task);
@@ -1109,6 +1111,7 @@
/* Disable TSF synchronization / beaconing. */
rtwn_beacon_enable(sc, uvp->id, 0);
+ rtwn_sta_beacon_enable(sc, uvp->id, false);
rtwn_setbits_1(sc, R92C_BCN_CTRL(uvp->id),
0, R92C_BCN_CTRL_DIS_TSF_UDT0);
diff --git a/sys/dev/rtwn/if_rtwnvar.h b/sys/dev/rtwn/if_rtwnvar.h
--- a/sys/dev/rtwn/if_rtwnvar.h
+++ b/sys/dev/rtwn/if_rtwnvar.h
@@ -329,6 +329,8 @@
uint8_t (*sc_rx_radiotap_flags)(const void *);
void (*sc_beacon_init)(struct rtwn_softc *, void *, int);
void (*sc_beacon_enable)(struct rtwn_softc *, int, int);
+ void (*sc_sta_beacon_enable)(struct rtwn_softc *, int,
+ bool);
void (*sc_beacon_set_rate)(void *, int);
void (*sc_beacon_select)(struct rtwn_softc *, int);
void (*sc_set_chan)(struct rtwn_softc *,
@@ -564,6 +566,8 @@
(((_sc)->sc_beacon_init)((_sc), (_buf), (_id)))
#define rtwn_beacon_enable(_sc, _id, _enable) \
(((_sc)->sc_beacon_enable)((_sc), (_id), (_enable)))
+#define rtwn_sta_beacon_enable(_sc, _id, _enable) \
+ (((_sc)->sc_sta_beacon_enable)((_sc), (_id), (_enable)))
#define rtwn_beacon_set_rate(_sc, _buf, _is5ghz) \
(((_sc)->sc_beacon_set_rate)((_buf), (_is5ghz)))
#define rtwn_beacon_select(_sc, _id) \
diff --git a/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c b/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
--- a/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
+++ b/sys/dev/rtwn/rtl8188e/pci/r88ee_attach.c
@@ -177,6 +177,7 @@
#endif
sc->sc_beacon_init = r92c_beacon_init;
sc->sc_beacon_enable = r88e_beacon_enable;
+ sc->sc_sta_beacon_enable = r88e_sta_beacon_enable;
sc->sc_beacon_set_rate = rtwn_nop_void_int;
sc->sc_beacon_select = rtwn_nop_softc_int;
sc->sc_temp_measure = r88e_temp_measure;
diff --git a/sys/dev/rtwn/rtl8188e/r88e.h b/sys/dev/rtwn/rtl8188e/r88e.h
--- a/sys/dev/rtwn/rtl8188e/r88e.h
+++ b/sys/dev/rtwn/rtl8188e/r88e.h
@@ -39,6 +39,7 @@
*/
/* r88e_beacon.c */
void r88e_beacon_enable(struct rtwn_softc *, int, int);
+void r88e_sta_beacon_enable(struct rtwn_softc *, int, bool);
/* r88e_calib.c */
void r88e_iq_calib(struct rtwn_softc *);
diff --git a/sys/dev/rtwn/rtl8188e/r88e_beacon.c b/sys/dev/rtwn/rtl8188e/r88e_beacon.c
--- a/sys/dev/rtwn/rtl8188e/r88e_beacon.c
+++ b/sys/dev/rtwn/rtl8188e/r88e_beacon.c
@@ -43,6 +43,9 @@
#include <dev/rtwn/rtl8188e/r88e.h>
#include <dev/rtwn/rtl8188e/r88e_reg.h>
+/*
+ * Enable/disable beaconing in AP/IBSS/Mesh modes.
+ */
void
r88e_beacon_enable(struct rtwn_softc *sc, int id, int enable)
{
@@ -57,3 +60,12 @@
R92C_BCN_CTRL_EN_BCN, 0);
}
}
+
+/*
+ * There's no firmware rate control, beacon processing isn't
+ * needed in STA mode.
+ */
+void
+r88e_sta_beacon_enable(struct rtwn_softc *sc, int id, bool enable)
+{
+}
diff --git a/sys/dev/rtwn/rtl8188e/usb/r88eu_attach.c b/sys/dev/rtwn/rtl8188e/usb/r88eu_attach.c
--- a/sys/dev/rtwn/rtl8188e/usb/r88eu_attach.c
+++ b/sys/dev/rtwn/rtl8188e/usb/r88eu_attach.c
@@ -170,6 +170,7 @@
#endif
sc->sc_beacon_init = r92c_beacon_init;
sc->sc_beacon_enable = r88e_beacon_enable;
+ sc->sc_sta_beacon_enable = r88e_sta_beacon_enable;
sc->sc_beacon_set_rate = rtwn_nop_void_int;
sc->sc_beacon_select = rtwn_nop_softc_int;
sc->sc_temp_measure = r88e_temp_measure;
diff --git a/sys/dev/rtwn/rtl8192c/pci/r92ce_attach.c b/sys/dev/rtwn/rtl8192c/pci/r92ce_attach.c
--- a/sys/dev/rtwn/rtl8192c/pci/r92ce_attach.c
+++ b/sys/dev/rtwn/rtl8192c/pci/r92ce_attach.c
@@ -207,6 +207,7 @@
#endif
sc->sc_beacon_init = r92c_beacon_init;
sc->sc_beacon_enable = r92c_beacon_enable;
+ sc->sc_sta_beacon_enable = r92c_sta_beacon_enable;
sc->sc_beacon_set_rate = rtwn_nop_void_int;
sc->sc_beacon_select = rtwn_nop_softc_int;
sc->sc_temp_measure = r92c_temp_measure;
diff --git a/sys/dev/rtwn/rtl8192c/r92c.h b/sys/dev/rtwn/rtl8192c/r92c.h
--- a/sys/dev/rtwn/rtl8192c/r92c.h
+++ b/sys/dev/rtwn/rtl8192c/r92c.h
@@ -46,6 +46,7 @@
/* r92c_beacon.c */
void r92c_beacon_init(struct rtwn_softc *, void *, int);
void r92c_beacon_enable(struct rtwn_softc *, int, int);
+void r92c_sta_beacon_enable(struct rtwn_softc *, int, bool);
/* r92c_calib.c */
void r92c_iq_calib(struct rtwn_softc *);
diff --git a/sys/dev/rtwn/rtl8192c/r92c_beacon.c b/sys/dev/rtwn/rtl8192c/r92c_beacon.c
--- a/sys/dev/rtwn/rtl8192c/r92c_beacon.c
+++ b/sys/dev/rtwn/rtl8192c/r92c_beacon.c
@@ -69,6 +69,9 @@
txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, RTWN_RIDX_CCK1));
}
+/*
+ * Enable/disable beacon generation in AP/IBSS/mesh modes.
+ */
void
r92c_beacon_enable(struct rtwn_softc *sc, int id, int enable)
{
@@ -81,3 +84,20 @@
R92C_BCN_CTRL_EN_BCN, 0);
}
}
+
+/*
+ * Enable/disable beacon processing in STA mode.
+ *
+ * This is required for firmware rate control.
+ */
+void
+r92c_sta_beacon_enable(struct rtwn_softc *sc, int id, bool enable)
+{
+ if (enable) {
+ rtwn_setbits_1(sc, R92C_BCN_CTRL(id),
+ 0, R92C_BCN_CTRL_EN_BCN);
+ } else {
+ rtwn_setbits_1(sc, R92C_BCN_CTRL(id),
+ R92C_BCN_CTRL_EN_BCN, 0);
+ }
+}
diff --git a/sys/dev/rtwn/rtl8192c/usb/r92cu_attach.c b/sys/dev/rtwn/rtl8192c/usb/r92cu_attach.c
--- a/sys/dev/rtwn/rtl8192c/usb/r92cu_attach.c
+++ b/sys/dev/rtwn/rtl8192c/usb/r92cu_attach.c
@@ -199,6 +199,7 @@
#endif
sc->sc_beacon_init = r92c_beacon_init;
sc->sc_beacon_enable = r92c_beacon_enable;
+ sc->sc_sta_beacon_enable = r92c_sta_beacon_enable;
sc->sc_beacon_set_rate = rtwn_nop_void_int;
sc->sc_beacon_select = rtwn_nop_softc_int;
sc->sc_temp_measure = r92c_temp_measure;
diff --git a/sys/dev/rtwn/rtl8192e/usb/r92eu_attach.c b/sys/dev/rtwn/rtl8192e/usb/r92eu_attach.c
--- a/sys/dev/rtwn/rtl8192e/usb/r92eu_attach.c
+++ b/sys/dev/rtwn/rtl8192e/usb/r92eu_attach.c
@@ -150,6 +150,7 @@
#endif
sc->sc_beacon_init = r12a_beacon_init;
sc->sc_beacon_enable = r92c_beacon_enable;
+ sc->sc_sta_beacon_enable = r92c_sta_beacon_enable;
sc->sc_beacon_set_rate = rtwn_nop_void_int;
sc->sc_beacon_select = r21a_beacon_select;
sc->sc_temp_measure = r88e_temp_measure;
diff --git a/sys/dev/rtwn/rtl8812a/r12a.h b/sys/dev/rtwn/rtl8812a/r12a.h
--- a/sys/dev/rtwn/rtl8812a/r12a.h
+++ b/sys/dev/rtwn/rtl8812a/r12a.h
@@ -60,6 +60,7 @@
/* r12a_beacon.c */
void r12a_beacon_init(struct rtwn_softc *, void *, int);
void r12a_beacon_set_rate(void *, int);
+void r12a_sta_beacon_enable(struct rtwn_softc *, int, bool);
/* r12a_calib.c */
void r12a_save_bb_afe_vals(struct rtwn_softc *, uint32_t[],
diff --git a/sys/dev/rtwn/rtl8812a/r12a_beacon.c b/sys/dev/rtwn/rtl8812a/r12a_beacon.c
--- a/sys/dev/rtwn/rtl8812a/r12a_beacon.c
+++ b/sys/dev/rtwn/rtl8812a/r12a_beacon.c
@@ -91,3 +91,12 @@
} else
txd->txdw4 = htole32(SM(R12A_TXDW4_DATARATE, RTWN_RIDX_CCK1));
}
+
+/*
+ * For now (no rate control) don't change the beacon configuration
+ * in STA mode.
+ */
+void
+r12a_sta_beacon_enable(struct rtwn_softc *sc, int id, bool enable)
+{
+}
diff --git a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
--- a/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
+++ b/sys/dev/rtwn/rtl8812a/usb/r12au_attach.c
@@ -237,6 +237,7 @@
#endif
sc->sc_beacon_init = r12a_beacon_init;
sc->sc_beacon_enable = r92c_beacon_enable;
+ sc->sc_sta_beacon_enable = r12a_sta_beacon_enable;
sc->sc_beacon_set_rate = r12a_beacon_set_rate;
sc->sc_beacon_select = rtwn_nop_softc_int;
sc->sc_temp_measure = r88e_temp_measure;
diff --git a/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c b/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
--- a/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
+++ b/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
@@ -223,6 +223,7 @@
#endif
sc->sc_beacon_init = r21a_beacon_init;
sc->sc_beacon_enable = r92c_beacon_enable;
+ sc->sc_sta_beacon_enable = r12a_sta_beacon_enable;
sc->sc_beacon_set_rate = r12a_beacon_set_rate;
sc->sc_beacon_select = r21a_beacon_select;
sc->sc_temp_measure = r88e_temp_measure;

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 2, 3:26 PM (7 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30727692
Default Alt Text
D48066.diff (8 KB)

Event Timeline