1199767f8SToomas Soome\ Copyright (c) 2000 Daniel C. Sobral <dcs@FreeBSD.org> 2199767f8SToomas Soome\ All rights reserved. 3199767f8SToomas Soome\ 4199767f8SToomas Soome\ Redistribution and use in source and binary forms, with or without 5199767f8SToomas Soome\ modification, are permitted provided that the following conditions 6199767f8SToomas Soome\ are met: 7199767f8SToomas Soome\ 1. Redistributions of source code must retain the above copyright 8199767f8SToomas Soome\ notice, this list of conditions and the following disclaimer. 9199767f8SToomas Soome\ 2. Redistributions in binary form must reproduce the above copyright 10199767f8SToomas Soome\ notice, this list of conditions and the following disclaimer in the 11199767f8SToomas Soome\ documentation and/or other materials provided with the distribution. 12199767f8SToomas Soome\ 13199767f8SToomas Soome\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14199767f8SToomas Soome\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15199767f8SToomas Soome\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16199767f8SToomas Soome\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17199767f8SToomas Soome\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18199767f8SToomas Soome\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19199767f8SToomas Soome\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20199767f8SToomas Soome\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21199767f8SToomas Soome\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22199767f8SToomas Soome\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23199767f8SToomas Soome\ SUCH DAMAGE. 24199767f8SToomas Soome\ 25199767f8SToomas Soome\ $FreeBSD$ 26199767f8SToomas Soome 27199767f8SToomas Soome 28199767f8SToomas Soome\ The following pnp code is used in pnp.4th and pnp.c 29199767f8SToomas Soomestructure: STAILQ_HEAD 30199767f8SToomas Soome ptr stqh_first \ type* 31199767f8SToomas Soome ptr stqh_last \ type** 32199767f8SToomas Soome;structure 33199767f8SToomas Soome 34199767f8SToomas Soomestructure: STAILQ_ENTRY 35199767f8SToomas Soome ptr stqe_next \ type* 36199767f8SToomas Soome;structure 37199767f8SToomas Soome 38199767f8SToomas Soomestructure: pnphandler 39199767f8SToomas Soome ptr pnph.name 40199767f8SToomas Soome ptr pnph.enumerate 41199767f8SToomas Soome;structure 42199767f8SToomas Soome 43199767f8SToomas Soomestructure: pnpident 44199767f8SToomas Soome ptr pnpid.ident \ char* 45199767f8SToomas Soome sizeof STAILQ_ENTRY cells member: pnpid.link \ pnpident 46199767f8SToomas Soome;structure 47199767f8SToomas Soome 48199767f8SToomas Soomestructure: pnpinfo \ sync with sys/boot/config/bootstrap.h 49199767f8SToomas Soome ptr pnpi.desc 50199767f8SToomas Soome int pnpi.revision 51199767f8SToomas Soome ptr pnpi.module \ (char*) module args 52199767f8SToomas Soome int pnpi.argc 53199767f8SToomas Soome ptr pnpi.argv 54199767f8SToomas Soome ptr pnpi.handler \ pnphandler 55199767f8SToomas Soome sizeof STAILQ_HEAD member: pnpi.ident \ pnpident 56199767f8SToomas Soome sizeof STAILQ_ENTRY member: pnpi.link \ pnpinfo 57199767f8SToomas Soome;structure 58199767f8SToomas Soome\ end of pnp support 59199767f8SToomas Soome 60199767f8SToomas Soomepnpdevices drop 61199767f8SToomas Soome 62199767f8SToomas Soome: enumerate 63199767f8SToomas Soome pnphandlers begin 64199767f8SToomas Soome dup @ 65199767f8SToomas Soome while 66199767f8SToomas Soome ." Probing " dup @ pnph.name @ dup strlen type ." ..." cr 67199767f8SToomas Soome 0 over @ pnph.enumerate @ ccall drop 68199767f8SToomas Soome cell+ 69199767f8SToomas Soome repeat 70199767f8SToomas Soome; 71199767f8SToomas Soome 72199767f8SToomas Soome: summary 73199767f8SToomas Soome ." PNP scan summary:" cr 74199767f8SToomas Soome pnpdevices stqh_first @ 75199767f8SToomas Soome begin 76199767f8SToomas Soome dup 77199767f8SToomas Soome while 78199767f8SToomas Soome dup pnpi.ident stqh_first @ pnpid.ident @ dup strlen type 79199767f8SToomas Soome dup pnpi.desc @ ?dup if 80199767f8SToomas Soome ." : " 81199767f8SToomas Soome dup strlen type 82199767f8SToomas Soome then 83199767f8SToomas Soome cr 84199767f8SToomas Soome pnpi.link stqe_next @ 85199767f8SToomas Soome repeat 86199767f8SToomas Soome drop 87199767f8SToomas Soome; 88199767f8SToomas Soome 89199767f8SToomas Soome: compare-pnpid ( addr addr' -- flag ) 90199767f8SToomas Soome begin 91199767f8SToomas Soome over c@ over c@ <> if drop drop false exit then 92199767f8SToomas Soome over c@ over c@ and 93199767f8SToomas Soome while 94199767f8SToomas Soome char+ swap char+ swap 95199767f8SToomas Soome repeat 96199767f8SToomas Soome c@ swap c@ or 0= 97199767f8SToomas Soome; 98199767f8SToomas Soome 99199767f8SToomas Soome: search-pnpid ( id -- flag ) 100199767f8SToomas Soome >r 101199767f8SToomas Soome pnpdevices stqh_first @ 102199767f8SToomas Soome begin ( pnpinfo ) 103199767f8SToomas Soome dup 104199767f8SToomas Soome while 105199767f8SToomas Soome dup pnpi.ident stqh_first @ 106199767f8SToomas Soome begin ( pnpinfo pnpident ) 107199767f8SToomas Soome dup pnpid.ident @ r@ compare-pnpid 108199767f8SToomas Soome if 109199767f8SToomas Soome r> drop 110199767f8SToomas Soome \ XXX Temporary debugging message 111199767f8SToomas Soome ." Found " pnpid.ident @ dup strlen type 112199767f8SToomas Soome pnpi.desc @ ?dup if 113199767f8SToomas Soome ." : " dup strlen type 114199767f8SToomas Soome then cr 115199767f8SToomas Soome \ drop drop 116199767f8SToomas Soome true 117199767f8SToomas Soome exit 118199767f8SToomas Soome then 119199767f8SToomas Soome pnpid.link stqe_next @ 120199767f8SToomas Soome ?dup 0= 121199767f8SToomas Soome until 122199767f8SToomas Soome pnpi.link stqe_next @ 123199767f8SToomas Soome repeat 124199767f8SToomas Soome r> drop 125199767f8SToomas Soome drop 126199767f8SToomas Soome false 127199767f8SToomas Soome; 128199767f8SToomas Soome 129199767f8SToomas Soome: skip-space ( addr -- addr' ) 130199767f8SToomas Soome begin 131199767f8SToomas Soome dup c@ bl = 132199767f8SToomas Soome over c@ 9 = or 133199767f8SToomas Soome while 134199767f8SToomas Soome char+ 135199767f8SToomas Soome repeat 136199767f8SToomas Soome; 137199767f8SToomas Soome 138199767f8SToomas Soome: skip-to-space ( addr -- addr' ) 139199767f8SToomas Soome begin 140199767f8SToomas Soome dup c@ bl <> 141199767f8SToomas Soome over c@ 9 <> and 142199767f8SToomas Soome over c@ and 143199767f8SToomas Soome while 144199767f8SToomas Soome char+ 145199767f8SToomas Soome repeat 146199767f8SToomas Soome; 147199767f8SToomas Soome 148199767f8SToomas Soome: premature-end? ( addr -- addr flag ) 149199767f8SToomas Soome postpone dup postpone c@ postpone 0= 150199767f8SToomas Soome postpone if postpone exit postpone then 151199767f8SToomas Soome; immediate 152199767f8SToomas Soome 153199767f8SToomas Soome0 value filename 154199767f8SToomas Soome0 value timestamp 155199767f8SToomas Soome0 value id 156199767f8SToomas Soome 157199767f8SToomas Soomeonly forth also support-functions 158199767f8SToomas Soome 159199767f8SToomas Soome: (load) load ; 160199767f8SToomas Soome 161199767f8SToomas Soome: check-pnpid ( -- ) 162199767f8SToomas Soome line_buffer .addr @ 163199767f8SToomas Soome \ Search for filename 164199767f8SToomas Soome skip-space premature-end? 165199767f8SToomas Soome dup to filename 166199767f8SToomas Soome \ Search for end of filename 167199767f8SToomas Soome skip-to-space premature-end? 168199767f8SToomas Soome 0 over c! char+ 169199767f8SToomas Soome \ Search for timestamp 170199767f8SToomas Soome skip-space premature-end? 171199767f8SToomas Soome dup to timestamp 172199767f8SToomas Soome skip-to-space premature-end? 173199767f8SToomas Soome 0 over c! char+ 174199767f8SToomas Soome \ Search for ids 175199767f8SToomas Soome begin 176199767f8SToomas Soome skip-space premature-end? 177199767f8SToomas Soome dup to id 178199767f8SToomas Soome skip-to-space dup c@ >r 179199767f8SToomas Soome 0 over c! char+ 180199767f8SToomas Soome id search-pnpid if 181199767f8SToomas Soome filename dup strlen 1 ['] (load) catch if 182199767f8SToomas Soome drop drop drop 183199767f8SToomas Soome ." Error loading " filename dup strlen type cr 184199767f8SToomas Soome then 185199767f8SToomas Soome r> drop exit 186199767f8SToomas Soome then 187199767f8SToomas Soome r> 0= 188199767f8SToomas Soome until 189199767f8SToomas Soome; 190199767f8SToomas Soome 191199767f8SToomas Soome: load-pnp 192199767f8SToomas Soome 0 to end_of_file? 193199767f8SToomas Soome reset_line_reading 194199767f8SToomas Soome s" /boot/pnpid.conf" O_RDONLY fopen fd ! 195199767f8SToomas Soome fd @ -1 <> if 196199767f8SToomas Soome begin 197199767f8SToomas Soome end_of_file? 0= 198199767f8SToomas Soome while 199199767f8SToomas Soome read_line 200199767f8SToomas Soome check-pnpid 201199767f8SToomas Soome repeat 202199767f8SToomas Soome fd @ fclose 203199767f8SToomas Soome then 204199767f8SToomas Soome; 205199767f8SToomas Soome 206