Author: wmb Date: 2010-01-14 07:27:28 +0100 (Thu, 14 Jan 2010) New Revision: 1674
Modified: dev/usb2/device/common.fth dev/usb2/device/keyboard/kbd.fth dev/usb2/device/net/ethernet.fth dev/usb2/device/serial/uart.fth dev/usb2/device/storage/scsi.fth dev/usb2/device/userial/userial.fth dev/usb2/device/wlan/usb8388.fth dev/usb2/hcd/dev-info.fth dev/usb2/hcd/device.fth Log: OLPC trac 9969 - comment:5 - fixed regression that happens when you remove and reinstert a USB device.
Modified: dev/usb2/device/common.fth =================================================================== --- dev/usb2/device/common.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/common.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -36,8 +36,11 @@ get-my-property if 0 else decode-int nip nip then ;
+\ This needs to be called every time that the device could have changed +: set-device ( -- ) " assigned-address" get-int-property to device ; + : init ( -- ) - " assigned-address" get-int-property to device + set-device " configuration#" get-int-property to configuration " bulk-in-pipe" get-int-property to bulk-in-pipe " bulk-out-pipe" get-int-property to bulk-out-pipe
Modified: dev/usb2/device/keyboard/kbd.fth =================================================================== --- dev/usb2/device/keyboard/kbd.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/keyboard/kbd.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -327,6 +327,7 @@
\ kbd-buf and led-buf must have been allocated : setup-hardware? ( -- error? ) + set-device device set-target " reset?" $call-parent if configuration set-config if
Modified: dev/usb2/device/net/ethernet.fth =================================================================== --- dev/usb2/device/net/ethernet.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/net/ethernet.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -223,6 +223,7 @@
: open ( -- ok? ) parse-args + set-device device set-target
opencount @ 0= if @@ -248,12 +249,6 @@
headers
-: init ( -- ) - init - device set-target - configuration set-config if ." Failed to set ethernet configuration" cr then -; - init
\ LICENSE_BEGIN
Modified: dev/usb2/device/serial/uart.fth =================================================================== --- dev/usb2/device/serial/uart.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/serial/uart.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -52,6 +52,7 @@ : write ( adr len -- actual ) dup if write-bytes else nip then ;
: open ( -- flag ) + set-device device set-target refcount @ 0= if
@@ -88,8 +89,6 @@ : init ( -- ) init init-buf - device set-target - configuration set-config if ." Failed set serial port configuration" cr then init-hook free-buf ;
Modified: dev/usb2/device/storage/scsi.fth =================================================================== --- dev/usb2/device/storage/scsi.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/storage/scsi.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -79,7 +79,6 @@ init-execute-command alloc-bulk device set-target - configuration set-config if ." Failed to set storage configuration" cr then get-max-lun free-bulk ; @@ -182,6 +181,7 @@
: set-address ( lun -- ) 0 max max-lun min to lun + set-device \ The device number may have changed if we recycled the node device set-target " reset?" $call-parent if configuration set-config if
Modified: dev/usb2/device/userial/userial.fth =================================================================== --- dev/usb2/device/userial/userial.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/userial/userial.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -17,6 +17,7 @@ ;
: open ( -- flag ) + set-device device set-target " reset?" $call-parent if configuration set-config if
Modified: dev/usb2/device/wlan/usb8388.fth =================================================================== --- dev/usb2/device/wlan/usb8388.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/device/wlan/usb8388.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -58,7 +58,7 @@
: end-out-ring ( -- ) " end-out-ring" $call-parent ;
-: set-parent-channel ( -- ) device set-target ; +: set-parent-channel ( -- ) set-device device set-target ;
: setup-bus-io ( /inbuf /outbuf -- error? ) 4 bulk-out-pipe " begin-out-ring" $call-parent ( /inbuf ) @@ -77,9 +77,6 @@ " vendor-id" property-or-abort to vid " device-id" property-or-abort to pid set-parent-channel - configuration set-config if - ." Failed to set USB configuration for wireless" cr - then ;
init
Modified: dev/usb2/hcd/dev-info.fth =================================================================== --- dev/usb2/hcd/dev-info.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/hcd/dev-info.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -41,6 +41,10 @@ : di-hub@ ( idx -- hub ) 'di >di-hub c@ ; : di-port! ( port idx -- ) 'di >di-port c! ; : di-port@ ( idx -- port ) 'di >di-port c@ ; +: di-is-reset ( idx -- ) + 'di >di-reset ( adr ) + 0 swap c! +; : di-reset? ( idx -- flag ) 'di >di-reset ( adr ) dup c@ 0= ( adr reset? )
Modified: dev/usb2/hcd/device.fth =================================================================== --- dev/usb2/hcd/device.fth 2010-01-14 04:55:17 UTC (rev 1673) +++ dev/usb2/hcd/device.fth 2010-01-14 06:27:28 UTC (rev 1674) @@ -244,6 +244,7 @@ dup c@ over + swap 4 + c@ ( dev adr' #endpoints ) swap ENDPOINT find-desc ( dev #endpoints adr' ) swap 0 ?do ( dev adr' ) + over di-is-reset ( dev adr ) dup 4 + le-w@ ( dev adr size ) over 2 + c@ h# f and ( dev adr size pipe ) 3 pick di-maxpayload! ( dev adr )