diff options
Diffstat (limited to 'slof/fs/usb/usb-static.fs')
-rw-r--r-- | slof/fs/usb/usb-static.fs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/slof/fs/usb/usb-static.fs b/slof/fs/usb/usb-static.fs new file mode 100644 index 0000000..0067549 --- /dev/null +++ b/slof/fs/usb/usb-static.fs @@ -0,0 +1,85 @@ +\ ***************************************************************************** +\ * Copyright (c) 2004, 2007 IBM Corporation +\ * All rights reserved. +\ * This program and the accompanying materials +\ * are made available under the terms of the BSD License +\ * which accompanies this distribution, and is available at +\ * http://www.opensource.org/licenses/bsd-license.php +\ * +\ * Contributors: +\ * IBM Corporation - initial implementation +\ ****************************************************************************/ + +\ Set usb-debug flag to TRUE for debugging output: +0 VALUE usb-debug-flag +0 VALUE usb-test-flag + +\ Print a debug message when usb-debug-flag is set +: usb-debug-print ( str len -- ) + usb-debug-flag IF type cr ELSE 2drop THEN +; + +\ Print a debug message with corresponding value when usb-debug-flag is set +: usb-debug-print-val ( str len val -- ) + usb-debug-flag IF -ROT type . cr ELSE drop 2drop THEN +; + + +0 VALUE ohci-alias-num + +\ create a new ohci device alias for the current node: +: set-ohci-alias ( -- ) + ohci-alias-num dup 1+ TO ohci-alias-num ( num ) + s" ohci" rot $cathex strdup \ create alias name + get-node node>path \ get path string + set-alias \ and set the alias +; + +0 VALUE cdrom-alias-num + +\ create a new ohci device alias for the current node: +: set-cdrom-alias ( -- ) + cdrom-alias-num dup 1+ TO cdrom-alias-num ( num ) + s" cdrom" rot $cathex strdup \ create alias name + get-node node>path \ get path string + set-alias \ and set the alias +; + +: usb-create-alias-name ( num -- str len ) + >r s" ohciX" 2dup + 1- ( str len last-char-ptr R: num ) + r> [char] 0 + swap c! ( str len R: ) +; + +\ Scan all USB host controllers for attached devices: +: usb-scan + \ Scan all OHCI chips: + ." Scan USB... " cr + 0 >r \ Counter for alias + BEGIN + r@ usb-create-alias-name + find-alias ?dup ( false | str len len R: num ) + WHILE + usb-debug-flag IF + ." * Scanning hub " 2dup type ." ..." cr + THEN + open-dev ?dup IF ( ihandle R: num ) + dup to my-self + dup ihandle>phandle dup set-node + child ?dup IF + delete-node s" Deleting node" usb-debug-print + THEN + >r s" enumerate" r@ $call-method \ Scan host controller + r> close-dev 0 set-node 0 to my-self + THEN ( R: num ) + r> 1+ >r ( R: num+1 ) + REPEAT r> drop + 0 TO ohci-alias-num + 0 TO cdrom-alias-num + s" cdrom0" find-alias ( false | dev-path len ) + dup IF + s" cdrom" 2swap ( alias-name len' dev-path len ) + set-alias ( -- ) + ELSE + drop ( -- ) + THEN +; |