madwifi: add sysctl for turning the radio silent
SVN-Revision: 19376
This commit is contained in:
parent
a254a9ff08
commit
b935b1abe2
1 changed files with 85 additions and 0 deletions
85
package/madwifi/patches/456-rfsilent.patch
Normal file
85
package/madwifi/patches/456-rfsilent.patch
Normal file
|
@ -0,0 +1,85 @@
|
|||
--- a/ath/if_ath.c
|
||||
+++ b/ath/if_ath.c
|
||||
@@ -2996,6 +2996,19 @@ ath_fetch_idle_time(struct ath_softc *sc
|
||||
#undef AR5K_RXCLEAR
|
||||
#undef AR5K_CYCLES
|
||||
|
||||
+static void
|
||||
+ath_set_silent(struct ath_softc *sc)
|
||||
+{
|
||||
+ struct ath_hal *ah = sc->sc_ah;
|
||||
+
|
||||
+ if (!sc->sc_silent)
|
||||
+ return;
|
||||
+
|
||||
+ del_timer_sync(&sc->sc_bcntimer);
|
||||
+ ath_hal_intrset(ah, 0);
|
||||
+ OS_REG_WRITE(ah, 0x8048, 0x60); /* set tx loopback and rx disable */
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Reset the hardware w/o losing operational state. This is
|
||||
* basically a more efficient way of doing ath_stop, ath_init,
|
||||
@@ -3073,6 +3086,7 @@ ath_reset(struct net_device *dev)
|
||||
ath_grppoll_start(vap, sc->sc_xrpollcount);
|
||||
}
|
||||
#endif
|
||||
+ ath_set_silent(sc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -10972,6 +10986,7 @@ enum {
|
||||
* mirrored in /proc/sys.
|
||||
*/
|
||||
enum {
|
||||
+ ATH_SILENT,
|
||||
ATH_SLOTTIME,
|
||||
ATH_ACKTIMEOUT,
|
||||
ATH_CTSTIMEOUT,
|
||||
@@ -11294,6 +11309,13 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
|
||||
sc->sc_ctstimeconf = 0;
|
||||
ath_set_timing(sc);
|
||||
break;
|
||||
+ case ATH_SILENT:
|
||||
+ sc->sc_silent = !!val;
|
||||
+ if (val)
|
||||
+ ath_set_silent(sc);
|
||||
+ else
|
||||
+ ath_reset(sc->sc_dev);
|
||||
+ break;
|
||||
case ATH_DISTANCE:
|
||||
if (val > 0) {
|
||||
sc->sc_coverage = ((val - 1) / 300) + 1;
|
||||
@@ -11477,6 +11499,9 @@ ATH_SYSCTL_DECL(ath_sysctl_halparam, ctl
|
||||
case ATH_CTSTIMEOUT:
|
||||
val = ath_hal_getctstimeout(ah);
|
||||
break;
|
||||
+ case ATH_SILENT:
|
||||
+ val = sc->sc_silent;
|
||||
+ break;
|
||||
case ATH_SOFTLED:
|
||||
val = sc->sc_softled;
|
||||
break;
|
||||
@@ -11598,6 +11623,12 @@ static const ctl_table ath_sysctl_templa
|
||||
.extra2 = (void *)ATH_DISTANCE,
|
||||
},
|
||||
{ .ctl_name = CTL_AUTO,
|
||||
+ .procname = "silent",
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = ath_sysctl_halparam,
|
||||
+ .extra2 = (void *)ATH_SILENT,
|
||||
+ },
|
||||
+ { .ctl_name = CTL_AUTO,
|
||||
.procname = "softled",
|
||||
.mode = 0644,
|
||||
.proc_handler = ath_sysctl_halparam,
|
||||
--- a/ath/if_athvar.h
|
||||
+++ b/ath/if_athvar.h
|
||||
@@ -737,6 +737,7 @@ struct ath_softc {
|
||||
* 'channel availability check' indefinately,
|
||||
* reporting radar and interference detections.
|
||||
*/
|
||||
+ unsigned int sc_silent:1; /* Turn RF silent */
|
||||
unsigned int sc_txcont_power; /* Continuous transmit power in 0.5dBm units */
|
||||
unsigned int sc_txcont_rate; /* Continuous transmit rate in Mbps */
|
||||
|
Loading…
Reference in a new issue