xref: /illumos-gate/usr/src/boot/forth/pnp.4th (revision 22028508)
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