[openfirmware] [commit] r3374 - dev dev/ath9k ofw/wifi

repository service svn at openfirmware.info
Sat Oct 20 02:20:13 CEST 2012


Author: quozl
Date: Sat Oct 20 02:20:13 2012
New Revision: 3374
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3374

Log:
WLAN - scan buffer display overran actual length, only seen with 8787, see http://dev.laptop.org/ticket/12144

Modified:
   dev/ath9k/rx.fth
   dev/libertas.fth
   ofw/wifi/eapol.fth

Modified: dev/ath9k/rx.fth
==============================================================================
--- dev/ath9k/rx.fth	Sat Oct 20 01:47:51 2012	(r3373)
+++ dev/ath9k/rx.fth	Sat Oct 20 02:20:13 2012	(r3374)
@@ -338,7 +338,7 @@
    restart-scan-response
    ." Scanning channel: " dup idx>ch .d ." ..." cr
    re-set-channel (scan-ch)
-   scanbuf .ssids
+   scanbuf /tsbuf .ssids
 ;
 : scan-ch-2GHz  ( -- )  d# 11 0  do  i scan-ch  loop  ;
 : scan-ch-5GHz-1  ( -- )  d# 18 d# 14  do  i scan-ch  loop  ;

Modified: dev/libertas.fth
==============================================================================
--- dev/libertas.fth	Sat Oct 20 01:47:51 2012	(r3373)
+++ dev/libertas.fth	Sat Oct 20 02:20:13 2012	(r3374)
@@ -19,7 +19,7 @@
 : supplicant-associate   ( -- flag )  " do-associate" $call-supplicant  ;
 : supplicant-process-eapol  ( adr len -- )  " process-eapol" $call-supplicant  ;
 : .scan  ( adr -- )  " .scan" $call-supplicant  ;
-: .ssids  ( adr -- )  " .ssids" $call-supplicant  ;
+: .ssids  ( adr len -- )  " .ssids" $call-supplicant  ;
 
 defer load-all-fw  ( -- error? )   ' false to load-all-fw
 defer ?process-eapol		['] 2drop to ?process-eapol
@@ -485,6 +485,7 @@
       0075  of  ." CMD_802_11_SUBSCRIBE_EVENT"		endof
       0076  of  ." CMD_802_11_RATE_ADAPT_RATESET"	endof
       007f  of  ." CMD_TX_RATE_QUERY"			endof
+      00a4  of  ." CMD_802_11_RSSI_INFO"		endof
       00a5  of  ." CMD_SET_BOOT2_VER"			endof  \ Thin firmware only
       00a9  of  ." CMD_FUNC_INIT"                       endof  \ Multifunction versions
       00aa  of  ." CMD_FUNC_SHUTDOWN"                   endof
@@ -1811,6 +1812,31 @@
    respbuf .log
 ;
 
+0 [if]
+: set-rssi-v14  ( nbcn ndata -- )
+   swap >r >r                                           ( r: antenna action )
+   6 h# a4 ( CMD_802_11_RSSI_INFO ) prepare-cmd
+   1 +xw \ ACT_SET
+   r> +xw \ Ndata
+   r> +xw \ Nbcn
+   outbuf-wait  drop
+;
+
+: get-rssi-v14  ( -- avg_nf avg_snr nf snr )
+   6 h# a4 ( CMD_802_11_RSSI_INFO ) prepare-cmd
+   0 +xw \ ACT_GET
+   0 +xw \ Ndata
+   0 +xw \ Nbcn
+   outbuf-wait  drop
+   respbuf >fw-data >r
+   r@ h# 14 + le-w@ w->n ( avg_nf )                     \ dBm
+   r@ h# 12 + le-w@ w->n ( avg_nf avg_rssi )            \ dBm
+   r@ h# 10 + le-w@ w->n ( avg_nf avg_rssi nf )         \ dBm
+   r@ h# 0e + le-w@ w->n ( avg_nf avg_rssi nf rssi )    \ dBm
+   r> drop
+;
+[then]
+
 : get-rssi  ( -- avg_nf avg_snr nf snr )
    2 h# 1f ( CMD_802_11_RSSI ) prepare-cmd
    d# 32 +xw \ number of beacons (N) to average the SNR and NF over
@@ -2326,7 +2352,7 @@
          quiet?  if           ( adr len )
             2drop false       ( error? )
          else
-            over .ssids       ( adr len )
+            2dup .ssids       ( adr len )
             test-association  ( error? )
          then                 ( error? )
       then
@@ -2414,7 +2440,7 @@
 : ta-scan  ( -- )
    ." scan"  cr
    (scan)                               ( adr len error? )
-   0=  if  drop .ssids cr  then         ( )
+   0=  if  .ssids cr  then              ( )
 ;
 
 : ta-n  ( n -- )

Modified: ofw/wifi/eapol.fth
==============================================================================
--- ofw/wifi/eapol.fth	Sat Oct 20 01:47:51 2012	(r3373)
+++ ofw/wifi/eapol.fth	Sat Oct 20 02:20:13 2012	(r3374)
@@ -641,7 +641,11 @@
    endcase
 ;
 
+0 value scanbuf-end
+
 : .ap-ssid  ( adr -- )
+   dup le-w@ over + 2 + scanbuf-end >=  if  drop exit  then
+
    ." RSSI: " dup 8 + c@ .d 
    dup le-w@ swap 2 + swap d# 19 /string	( adr' len' )
    begin  dup 0>  while			( adr len )
@@ -650,14 +654,22 @@
    repeat  2drop			( )
 ;
 
-: .ssids  ( adr -- )
-   dup 3 +				( 'ap )
+: .ssids  ( adr len -- )
+   over + to scanbuf-end		( adr )
+
+   dup le-w@				( adr size )
+   over + scanbuf-end >=  if
+      ." scan truncated" cr
+   then					( adr )
+
+   dup 3 +				( adr 'ap )
    swap 2 + c@				( 'ap #ap )
    0  ?do				( 'ap )
       dup .ap-ssid  cr			( 'ap )
       dup le-w@ + 2 +			( 'ap' )
+      dup scanbuf-end >=  if  drop unloop exit  then
    loop  drop				( )
-;   
+;
 
 : #ssids  ( adr -- n )  2 + c@	;
 



More information about the openfirmware mailing list