|
|
1.1 root 1: # Shell version of something similar to the System V 'idcheck' command
2:
3: ##################### FUNCTION DEFINITIONS #######################
4:
5: # Call with the $0 of the script as a parameter; this commands writes the
6: # name of the directory containing the script to standard output.
7: # Example:
8: # conf_path $0
9:
10: conf_path () {
11: set `which $1 2>/dev/null` X
12: if [ $# -ne 2 ]; then
13: echo . # Assume the current directory.
14: return 1
15: fi
16: set `expr $1 : '\(.*\)/.*'` X
17: if [ $# -ne 2 ]; then
18: echo . # Must be in the current directory.
19: else
20: echo $1
21: fi
22: return 0
23: }
24:
25: # Report a usage message to standard output, with the name of the script
26: # passed as the argument to this function.
27:
28: usage () {
29: echo $1 ": Check conditions related to installable devices"
30: echo "usage :\t-p device_name [-i dir] [-r]"
31: echo "\t-v vector [-i dir] [-r]"
32: echo "\t-d dma_channel [-i dir] [-r]"
33: echo "\t-a -l lower_address -u upper_address [-i dir] [-r]"
34: echo "\t-c -l lower_address -u upper_address [-i dir] [-r]"
35: }
36:
37: # Check whether the indicated package is installed already
38:
39: check_name () {
40: grep "^$1" $CONF_DIR/mdevice 2>/dev/null 1>&2
41: set $?
42: if [ $1 -gt 1 ]; then
43: echo Unable to check $CONF_DIR/mdevice 1>&2
44: fi
45: return $1
46: }
47:
48: # Check to see whether the indicated interrupt vector is in use. We do this
49: # by telling 'devadm' about a bogus new device that requires that vector for
50: # exclusive use, and asking it to list conflicting devices to stdout.
51:
52: check_vector () {
53: set X `$HOME_DIR/devadm -M"foo - H foo 0 0 0 0 -1 -1" \
54: -S"foo Y 0 7 1 $1 0x0 0x0 0x0 0x0" \
55: -r -I $CONF_DIR`
56: if [ $# -gt 1 ]; then
57: if [ -n "$REPORT_CONFLICTS" ]; then
58: shift; echo $*
59: fi
60: return 1
61: fi
62: return 0
63: }
64:
65: # Check to see whether the indicated IOA range is in use. We use this by
66: # telling 'devadm' about a bogus new device that requires that IOA range for
67: # its own use, and asking it to list conflicting devices to stdout.
68:
69: check_ioa () {
70: set X `$HOME_DIR/devadm -M"foo - H foo 0 0 0 0 -1 -1" \
71: -S"foo Y 0 0 0 0 $LOWER $UPPER 0x0 0x0" \
72: -r -I $CONF_DIR`
73: if [ $# -gt 1 ]; then
74: if [ -n "$REPORT_CONFLICTS" ]; then
75: shift; echo $*
76: fi
77: return 1
78: fi
79: return 0
80: }
81:
82: # Check to see whether the indicated CMA range is in use. We use this by
83: # telling 'devadm' about a bogus new device that requires that CMA range for
84: # its own use, and asking it to list conflicting devices to stdout.
85:
86: check_cma () {
87: set X `$HOME_DIR/devadm -M"foo - H foo 0 0 0 0 -1 -1" \
88: -S"foo Y 0 0 0 0 0x0 0x0 $LOWER $UPPER" \
89: -r -I $CONF_DIR`
90: if [ $# -gt 1 ]; then
91: if [ -n "$REPORT_CONFLICTS" ]; then
92: shift; echo $*
93: fi
94: return 1
95: fi
96: return 0
97: }
98:
99: # Check to see whether the indicated DMA channel is in use.
100:
101: check_dma () {
102: echo DMA channel configuration is not yet supported 1>&2
103: return 1
104: }
105:
106:
107: # internal function used by check_block (), and check_char () to invoke
108: # 'devadm' with a similar bogus device but different flags
109:
110: check_dev () {
111: set X `$HOME_DIR/devadm -M"foo - $1 foo $LOWER $UPPER 0 0 -1 -1" \
112: -S"foo Y 0 0 0 0 0x0 0x0 0x0 0x0" \
113: -r -I $CONF_DIR`
114: if [ $# -gt 1 ]; then
115: if [ -n "$REPORT_CONFLICTS" ]; then
116: shift; echo $*
117: fi
118: return 1
119: fi
120: return 0
121: }
122:
123: # Check to see whether the indicated block major range is in use. We use this
124: # by telling 'devadm' about a bogus new device that requires that range for
125: # its own use, and asking it to list conflicting devices to stdout.
126:
127: check_block () {
128: if [ $LOWER -lt 32 ]; then
129: check_dev CGo
130: else
131: check_dev bD
132: fi
133: return $?
134: }
135:
136: # Check to see whether the indicated character major range is in use. We use
137: # this by telling 'devadm' about a bogus new device that requires that range
138: # for its own use, and asking it to list conflicting devices to stdout.
139:
140: check_char () {
141: if [ $LOWER -lt 32 ]; then
142: check_dev CGo
143: else
144: check_dev cD
145: fi
146: return $?
147: }
148:
149: HOME_DIR=`conf_path $0`
150: CONF_DIR=$HOME_DIR/..
151:
152: if [ $# -lt 1 ]; then
153: usage $0 1>&2
154: exit 100
155: fi
156:
157: while [ $# -gt 0 ]; do
158: ARG=$1; shift
159: case $ARG in
160: -p) NEW_COMMAND="check_name $1" ; shift
161: ;;
162:
163: -i) CONF_DIR=$1; shift
164: ;;
165:
166: -v) NEW_COMMAND="check_vector $1" ; shift
167: ;;
168:
169: -l) LOWER="$1"; : ${UPPER:=$1}; shift
170: ;;
171:
172: -u) UPPER="$1"; : ${LOWER:=$1}; shift
173: ;;
174:
175: -a) NEW_COMMAND="check_ioa"
176: ;;
177:
178: -c) NEW_COMMAND="check_cma"
179: ;;
180:
181: -d) NEW_COMMAND="check_dma $1"; shift
182: ;;
183:
184: -B) NEW_COMMAND="check_block"
185: ;;
186:
187: -C) NEW_COMMAND="check_char"
188: ;;
189:
190: -r) REPORT_CONFLICTS=1
191: ;;
192:
193: *) echo Bad argument ": $ARG" 1>&2
194: usage $0 1>&2
195: exit 100
196: ;;
197: esac
198:
199: if [ -n "$NEW_COMMAND" ]; then
200: if [ -n "$COMMAND" ]; then
201: echo Bad argument ": $ARG" 1>&2
202: usage $0 1>&2
203: exit 100
204: fi
205: COMMAND="$NEW_COMMAND"
206: NEW_COMMAND=
207: fi
208: done
209:
210: $COMMAND
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.