\ ========== Copyright Header Begin ==========================================
\ Hypervisor Software File: compatible.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: @(#)compatible.fth 1.3 99/01/29
copyright: Copyright 1998 Sun Microsystems, Inc. All Rights Reserved
\ XXX can use dma-alloc, since this is only for probe time.
h# 1000 buffer: string1 \ XXX prototype size
: dev-class ( -- dev-class ) d-addr d-descript-class c@ ;
: multi-config? ( -- multi-config? ) d-addr d-descript-#configs c@ 1 <> ;
\ : #>$ ( n -- str len ) base @ >r hex (u.) r> base ! ;
\ XXX hack for bad tokenizer that thinks (u.) is <# #s #>
: #>$ ( n -- str len ) base @ >r hex <# u#s u#> r> base ! ;
: $save ( str len addr -- addr len ) \ move string to addr
: append ( addr1 len1 addr2 len2 -- addr1 len1+len2) \ append to string1
2over 2over 2swap + swap move
: ,append ( addr len1 -- addr len2 ) \ append ,
: #append ( n addr len1 -- addr len2 ) \ append a number str.
: .#append ( n addr len1 -- addr len2 ) \ append . and number
: string+ ( prop-adr,len string-adr,len -- prop-adr,len' )
: $usb ( -- addr len ) " usb" ;
: $.config ( -- addr len ) " .config" ;
: $,class ( -- addr len ) " ,class" ;
d-addr d-descript-product le-w@
d-addr d-descript-vendor le-w@
: #s>dev-compat4 ( pid vid -- addr len ) \ text string
: dev2-#s ( -- rev pid vid )
d-addr d-descript-device le-w@
: #s>dev-compat2 ( rev pid vid -- addr len )
: dev1-#s ( -- config-id rev pid vid )
c-addr c-descript-config-id c@
: #s>dev-compat1 ( config-id rev pid vid -- addr len )
: dev3-#s ( -- config-id pid vid )
c-addr c-descript-config-id c@
: #s>dev-compat3 ( config-id pid vid -- addr len )
: dev7-#s ( -- dev-class vid )
d-addr d-descript-vendor le-w@
: #s>dev-compat7 ( dev-class vid -- addr len )
: dev6-#s ( -- dev-sub dev-class vid )
: #s>dev-compat6 ( dev-sub dev-class vid -- addr len )
: dev5-#s ( -- dev-prot dev-sub dev-class vid )
d-addr d-descript-protocol c@
: #s>dev-compat5 ( dev-prot dev-sub dev-class vid -- addr len )
: dev10-#s ( -- dev-class )
: #s>dev-compat10 ( dev-class -- addr len )
: dev9-#s ( -- dev-sub dev-class )
: #s>dev-compat9 ( dev-sub dev-class -- addr len )
: dev8-#s ( -- dev-prot dev-sub dev-class )
d-addr d-descript-protocol c@
: #s>dev-compat8 ( dev-prot dev-sub dev-class -- addr len )
: dev-compat11 ( -- addr len )
: encode-dev-class ( prop-addr1 prop-len1 -- prop-addr2 prop-len2 )
dev5-#s #s>dev-compat5 string+
dev6-#s #s>dev-compat6 string+
dev7-#s #s>dev-compat7 string+
dev8-#s #s>dev-compat8 string+
dev9-#s #s>dev-compat9 string+
dev10-#s #s>dev-compat10 string+
: create-device-compat ( config-descrip-addr dev-descrip-addr -- )
dev1-#s #s>dev-compat1 encode-string
dev2-#s #s>dev-compat2 string+
dev2-#s #s>dev-compat2 encode-string
dev3-#s #s>dev-compat3 string+
dev4-#s #s>dev-compat4 string+
dev-class if encode-dev-class then