|
|
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.