\ ========== Copyright Header Begin ==========================================
\ Hypervisor Software File: nodes.fth
\ Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
\ - Do no alter or remove copyright notices
\ - Redistribution and use of this software in source and binary forms, with
\ or without modification, are permitted provided that the following
\ - Redistribution of source code must retain the above copyright notice,
\ this list of conditions and the following disclaimer.
\ - Redistribution in binary form must reproduce the above copyright notice,
\ this list of conditions and the following disclaimer in the
\ documentation and/or other materials provided with the distribution.
\ Neither the name of Sun Microsystems, Inc. or the names of contributors
\ may be used to endorse or promote products derived from this software
\ without specific prior written permission.
\ This software is provided "AS IS," without a warranty of any kind.
\ ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
\ INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
\ PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
\ MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
\ ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
\ DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
\ OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
\ FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
\ DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
\ ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
\ SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\ You acknowledge that this software is not designed, licensed or
\ intended for use in the design, construction, operation or maintenance of
\ ========== Copyright Header End ============================================
id: @(#)nodes.fth 1.15 03/05/12
copyright: Copyright 1998-2003 Sun Microsystems, Inc. All Rights Reserved
copyright: Use is subject to license terms.
: find-fcode ( adr1 len1 -- adr2 len2 true | false )
" sunw,find-fcode" get-inherited-property drop
: find-interface-fcode ( -- addr len ) " interface" find-fcode drop ;
: disabled-prop ( -- ) " disabled" encode-string " status" property ;
: create-reg ( -- ) my-space encode-int " reg" property ;
: ?create-speed ( lo-speed? -- ) if 0 0 " low-speed" property then ;
: create-config ( config -- ) encode-int " configuration#" property ;
: create-interface# ( i# -- ) encode-int " interface#" property ;
: my-speed ( -- lo-speed? )
" low-speed" get-my-property if
: my-usb-adr ( -- usb-address ) \ must be there
" assigned-address" get-my-property drop
: my-0max-packet ( -- ) \ must be there
" 0max-packet" get-my-property drop
\ i# is from the interface descriptor. This is to be more tolerant of
\ (non-USB compliant) devices that don't start the descriptors at 0.
: create-interface ( speed i# -- )
" device interface " diag-crtype
diagnostic-mode? if dup . then \ XXX debug
100 dma-alloc >r \ to hold unit address string
1 swap encode-unit \ always config 1
r@ swap dup >r move ( i# speed ) ( R: uadr ucnt )
>r >r find-interface-fcode over r> r>
?create-speed \ publish low-speed for child interface node
" " r> r@ swap set-args \ XXX can we use the u#s area?
r> 100 dma-free \ dump unit address
" device interface done" diag-crtype \ XXX debug
\ publish low-speed in child interface nodes. otherwise get-inherited-property
\ could pick up some low-speed ancestor. not a problem for usb-adr.
" device get-ints" diag-crtype \ XXX debug
?dup if \ XXX data-over benign here?
disabled-prop \ XXX not quite. For the device; no interfaces
disabled-prop \ XXX not quite. For the device; no interfaces
over i-descript-interface-id c@
my-speed swap create-interface
: finish-node ( config-desc dev-desc -- )
over c-descript-config-id c@
create-config \ use bconfigvalue
: create-usb-device ( -- )
my-speed my-usb-adr get-dev-descrip ( d-adr dcnt hw-err? | stat 0 )
data-overrun-error <> if \ data-over benign here
disabled-prop \ XXX not really
disabled-prop \ XXX not really
over d-descript-maxpkt c@ to 0max-packet
\ 0max-packet needed for interfaces to inherit:
0max-packet encode-int " 0max-packet" property
( spd uadr cnfg1-adr ccnt hw-err? | stat 0 )
?dup if \ hw-err; already printed
disabled-prop \ XXX not quite; hub still enables
disabled-prop \ XXX not quite; hub still enables
( cnfg-adr ccnt dev-adr dcnt hw-err? | stat 0 )
?dup if \ hw-err; already printed
disabled-prop \ XXX not quite; hub still enables
disabled-prop \ XXX not quite; hub still enables
then ( cnfg-adr ccnt dev-adr dcnt )
r> r> r> r> dma-free dma-free