[openfirmware] [commit] r3591 - in dev: . mmc/sdhci/mv8686 usb2/device/wlan
repository service
svn at openfirmware.info
Wed Mar 6 19:42:04 CET 2013
Author: wmb
Date: Wed Mar 6 19:42:03 2013
New Revision: 3591
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3591
Log:
OLPC - WLAN driver - fixed build problem on XO-1 introduced by recent
changes to support Bluetooth.
Added:
dev/mmc/sdhci/mv8686/libertas-interface.fth
Modified:
dev/libertas.fth
dev/mmc/sdhci/mv8686/loadpkg.fth
dev/usb2/device/wlan/fw8388.fth
dev/usb2/device/wlan/usb8388.bth
dev/usb2/device/wlan/usb8388.fth
Modified: dev/libertas.fth
==============================================================================
--- dev/libertas.fth Wed Mar 6 19:09:26 2013 (r3590)
+++ dev/libertas.fth Wed Mar 6 19:42:03 2013 (r3591)
@@ -47,10 +47,10 @@
\ Override as necessary
: init-buf ( -- )
- outbuf 0= if /outbuf " alloc-buffer" $call-parent to outbuf then
+ outbuf 0= if /outbuf alloc-buffer to outbuf then
;
: free-buf ( -- )
- outbuf if outbuf /outbuf " free-buffer" $call-parent 0 to outbuf then
+ outbuf if outbuf /outbuf free-buffer 0 to outbuf then
;
\ =======================================================================
@@ -175,7 +175,7 @@
drop
: outbuf-out ( -- error? )
- outbuf dup >fw-len le-w@ " cmd-out" $call-parent
+ outbuf dup >fw-len le-w@ cmd-out
;
@@ -608,9 +608,9 @@
;
: check-for-rx ( -- )
- " got-packet?" $call-parent if ( error | buf len type 0 )
+ got-packet? if ( error | buf len type 0 )
0= if process-rx then ( )
- " recycle-packet" $call-parent ( )
+ recycle-packet ( )
then ( )
;
@@ -697,8 +697,10 @@
\ =========================================================================
: reset-wlan ( -- )
+\ XXX wlan-reset evaluate
+
driver-is-not-ready
- " reset-host-bus" $call-parent
+ reset-host-bus
;
: sleep ( -- ) reset-wlan ;
: wake ( -- ) ;
@@ -712,8 +714,15 @@
respbuf >fw-data false
;
+\ Sometimes get-hw-spec fails the first time after
+\ the driver is reopened with the firmware still active.
+\ This has been seen with the 8388 USB version.
+: retry-get-hw-spec ( -- true | adr false )
+ get-hw-spec dup if drop get-hw-spec then
+;
+
: set-fw-params ( -- )
- get-hw-spec 0= if ( adr )
+ retry-get-hw-spec 0= if ( adr )
\ is 802.11n capable?
dup d# 34 + le-l@ h# 800 and if
@@ -1231,7 +1240,7 @@
drop d# 1000 ms \ retry while busy
repeat ( adr len scan-adr scan-len err? r: chan )
r> drop ( adr len scan-adr scan-len err? )
- if 4drop false exit then ( adr len scan-adr scan-len )
+ if 2drop 2drop false exit then ( adr len scan-adr scan-len )
rot min >r ( adr scan-adr r: actual )
swap r@ move ( r: actual )
r> ( actual )
@@ -1799,7 +1808,7 @@
mac-adr$ mac-adr$ broadcast-mac$ 0 h# c0 set-802.11-header
h# 0002 0 +pkt-data le-w! \ Reason code: auth no longer valid
packet-buf /802.11-header 2 + wrap-802.11 ( adr len )
- " data-out" $call-parent
+ data-out
r> set-tx-ctrl
;
@@ -2127,17 +2136,15 @@
repeat drop
;
-\ Maybe handle this in parent's close method
-: release-bus-resources ( -- ) " release-bus-resources" $call-parent ;
-
: open ( -- ok? )
my-args parse-args
+ set-parent-channel
" " set-ssid \ Instance buffers aren't necessarily initially 0
- my-space " set-address" $call-parent \ Set SDIO function number if necessary
opencount @ 0= if
init-buf
+ setup-transport if free-buf false exit then
ds-ready to driver-state
- " multifunction?" $call-parent if init-function then
+ multifunction? if init-function then
?make-mac-address-property if release-bus-resources free-buf false exit then
set-fw-params
my-args " supplicant" $open-package to supplicant-ih
@@ -2169,7 +2176,7 @@
['] 2drop to ?process-eapol
mac-off
supplicant-ih ?dup if close-package 0 to supplicant-ih then
- " multifunction?" $call-parent if shutdown-function then
+ multifunction? if shutdown-function then
release-bus-resources
driver-is-not-ready
then
@@ -2180,16 +2187,16 @@
: write-force ( adr len -- actual )
tuck ( actual adr len )
wrap-ethernet ( actual adr' len' )
- " data-out" $call-parent ( actual )
+ data-out ( actual )
;
: read-force ( adr len -- actual )
- " got-packet?" $call-parent 0= if ( adr len )
+ got-packet? 0= if ( adr len )
2drop -2 exit
then ( adr len [ error | buf actual type 0 ] )
if \ receive error ( adr len )
- " recycle-packet" $call-parent ( adr len )
+ recycle-packet ( adr len )
2drop -1 exit
then ( adr len buf actual type )
@@ -2202,7 +2209,7 @@
2drop -2 \ No data
then ( actual )
- " recycle-packet" $call-parent ( actual )
+ recycle-packet ( actual )
;
0 instance value /packet
@@ -2235,7 +2242,7 @@
" "(01 08 02 04 0b 16 0c 12 18 24 32 04 30 48 e0 ec)" ( tags-adr tags-len )
tuck 6 +pkt-data swap move ( tags-size )
packet-buf swap /802.11-header + 6 + wrap-802.11 ( adr len )
- " data-out" $call-parent
+ data-out
;
: authenticate-reply ( -- )
@@ -2245,7 +2252,7 @@
0 4 +pkt-data le-w! \ Status - okay
packet-buf /802.11-header 6 + wrap-802.11 ( adr len )
- " data-out" $call-parent
+ data-out
;
defer handle-data ' noop is handle-data
@@ -2292,7 +2299,7 @@
packet-buf swap /802.11-header + 6 + wrap-802.11 ( len padr plen )
begin backlog 8 >= while process-mgmt-frame repeat
backlog 1+ to backlog
- " data-out" " $call-parent ( len )
+ data-out ( len )
throttle
;
Added: dev/mmc/sdhci/mv8686/libertas-interface.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dev/mmc/sdhci/mv8686/libertas-interface.fth Wed Mar 6 19:42:03 2013 (r3591)
@@ -0,0 +1,14 @@
+: alloc-buffer ( len -- adr ) " alloc-buffer" $call-parent ;
+: free-buffer ( adr len -- ) " free-buffer" $call-parent ;
+: cmd-out ( adr len -- ) " cmd-out" $call-parent ;
+: data-out ( adr len -- ) " data-out" $call-parent ;
+: got-packet? ( -- false | error true | buf len type 0 true ) " got-packet?" $call-parent ;
+: recycle-packet ( -- ) " recycle-packet" $call-parent ;
+: reset-host-bus ( -- ) " reset-host-bus" $call-parent ;
+: data-out ( adr len -- ) " data-out" $call-parent ;
+: release-bus-resources ( -- ) " release-bus-resources" $call-parent ;
+: multifunction? ( -- flag ) " multifunction?" $call-parent ;
+: set-parent-channel ( -- ) my-space " set-address" $call-parent ;
+: setup-transport ( -- error? ) false ; \ Done by parent
+
+\ : x-cmd-out ( adr len -- ) /fw-transport + cmd-out ;
Modified: dev/mmc/sdhci/mv8686/loadpkg.fth
==============================================================================
--- dev/mmc/sdhci/mv8686/loadpkg.fth Wed Mar 6 19:09:26 2013 (r3590)
+++ dev/mmc/sdhci/mv8686/loadpkg.fth Wed Mar 6 19:42:03 2013 (r3591)
@@ -13,6 +13,7 @@
new-device
1 to my-space
my-space 1 reg
+fload ${BP}/dev/mmc/sdhci/mv8686/libertas-interface.fth \ Marvell "Libertas" common code
fload ${BP}/dev/libertas.fth \ Marvell "Libertas" common code
finish-device
Modified: dev/usb2/device/wlan/fw8388.fth
==============================================================================
--- dev/usb2/device/wlan/fw8388.fth Wed Mar 6 19:09:26 2013 (r3590)
+++ dev/usb2/device/wlan/fw8388.fth Wed Mar 6 19:42:03 2013 (r3591)
@@ -84,11 +84,11 @@
: wait-cmd-fw-dl-ack ( -- acked? )
d# 100 0 do ( )
- got-packet? if ( error | buf len type 0 )
+ bulk-in-ready? if ( error | buf len type 0 )
if ( )
false ( acked? )
- else ( buf len type )
- drop cmd-fw-dl-ok? ( acked? )
+ else ( buf len )
+ cmd-fw-dl-ok? ( acked? )
then ( acked? )
recycle-packet ( acked? )
unloop exit
@@ -99,12 +99,12 @@
;
: download-fw-init ( -- )
- fw-buf /boot-cmd erase
- boot-magic fw-buf >boot-magic le-l!
- cmd-fw-dl fw-buf >boot-cmd c!
+ outbuf /boot-cmd erase
+ boot-magic outbuf >boot-magic le-l!
+ cmd-fw-dl outbuf >boot-cmd c!
5 0 do
- fw-buf /boot-cmd packet-out drop
+ outbuf /boot-cmd packet-out drop
wait-cmd-fw-dl-ack if leave then
loop
;
@@ -118,8 +118,8 @@
: wait-fw-dl-ack ( -- )
d# 500 0 do ( )
- got-packet? if ( error | buf len tupe 0 )
- 0= if drop process-dl-resp then ( )
+ bulk-in-ready? if ( error | buf len 0 )
+ 0= if process-dl-resp then ( )
recycle-packet ( )
leave
then ( )
@@ -130,11 +130,11 @@
: (download-fw) ( adr len -- )
bounds begin ( end start )
dl-seq++ \ Increment sequence number
- dup fw-buf /dl-header move \ Move header to outbuf
- dl-seq fw-buf >dl-seq le-l! \ Add sequence number to outbuf
- dup /dl-header + fw-buf >dl-data 2 pick >dl-len le-l@ dup >r move
- \ Move payload to fw-buf
- fw-buf r@ /dl-header + 4 + packet-out drop
+ dup outbuf /dl-header move \ Move header to outbuf
+ dl-seq outbuf >dl-seq le-l! \ Add sequence number to outbuf
+ dup /dl-header + outbuf >dl-data 2 pick >dl-len le-l@ dup >r move
+ \ Move payload to outbuf
+ outbuf r@ /dl-header + 4 + packet-out drop
\ Send command
wait-fw-dl-ack \ Wait for ACK
r> + /dl-header + \ Advance pointer
@@ -180,11 +180,16 @@
;
: load-all-fw ( -- error? )
- d# 2048 dma-alloc to fw-buf
+ fw-loaded? if false exit then
wlan-fw find-fw ( adr len )
- dup if download-fw else 2drop true then
- fw-buf d# 2048 dma-free
+ dup if download-fw else 2drop true then ( error? )
+ dup 0= to fw-loaded? ( error? )
;
+: (setup-transport) ( -- error? )
+ setup-bus-io ?dup if exit then
+ load-all-fw dup if release-bus-resources then ( error? )
+;
+' (setup-transport) to setup-transport
\ LICENSE_BEGIN
\ Copyright (c) 2007 FirmWorks
Modified: dev/usb2/device/wlan/usb8388.bth
==============================================================================
--- dev/usb2/device/wlan/usb8388.bth Wed Mar 6 19:09:26 2013 (r3590)
+++ dev/usb2/device/wlan/usb8388.bth Wed Mar 6 19:42:03 2013 (r3591)
@@ -13,8 +13,8 @@
fload ${BP}/dev/usb2/device/common.fth \ USB device driver common routines
fload ${BP}/dev/usb2/device/wlan/common.fth \ Ethernet common variables and routines
fload ${BP}/dev/usb2/device/wlan/usb8388.fth \ USB I/O interface for Marvell 8388
-fload ${BP}/dev/usb2/device/wlan/fw8388.fth \ Marvell firmware download for USB
fload ${BP}/dev/libertas.fth \ Marvell "Libertas" common code
+fload ${BP}/dev/usb2/device/wlan/fw8388.fth \ Marvell firmware download for USB
\ fload ${BP}/dev/usb2/device/wlan/wlan.fth \ External interface methods
end0
Modified: dev/usb2/device/wlan/usb8388.fth
==============================================================================
--- dev/usb2/device/wlan/usb8388.fth Wed Mar 6 19:09:26 2013 (r3590)
+++ dev/usb2/device/wlan/usb8388.fth Wed Mar 6 19:42:03 2013 (r3591)
@@ -70,6 +70,7 @@
?dup 0= if ( dadr dlen )
decode-header 0 ( dadr dlen type 0 )
then ( error | buf len 0 )
+ true
else ( )
false ( false )
then ( false | error true | buf len 0 true )
@@ -95,7 +96,8 @@
: release-bus-resources ( -- ) end-bulk-in end-out-ring ;
-: reset-host-bus ( -- ) " wlan-reset" evaluate ;
+false value fw-loaded?
+: reset-host-bus ( -- ) " wlan-reset" evaluate false to fw-loaded? ;
0 value vid
0 value pid
@@ -108,8 +110,13 @@
;
init
-XXX need open and close methods and open needs to call setup-bus-io
-XXX need alloc-buffer and free-buffer method
+
+: open ( -- okay? ) setup-bus-io 0= ;
+: close ( -- ) ;
+: alloc-buffer ( len -- adr ) /fw-transport + dma-alloc /fw-transport + ;
+: free-buffer ( adr len -- ) /fw-transport negate /string dma-free ;
+
+defer setup-transport ( -- error? ) ' true to setup-transport
\ LICENSE_BEGIN
\ Copyright (c) 2009 FirmWorks
More information about the openfirmware
mailing list