45C0"44K!~dC0dC0dC0A6C0C0C0g(789:;<=>?@fC0fC0fC0APAC0sC0sC0A0BC0rC0rC0A@CC0rC0rC0A0DC0rC0rC0A0EC0rC0rC0A0FC0rC0rC0GrC0rC0rC0A0HC0rC0rC0A0IC0rC0rC0A0JC0rC0rC0APKC0uC0uC0A LC0}C0}C07MNOPQRSrC0rC0rC0> TUVWrC0rC0rC0XYrC0rC0rC0Z[rC0rC0rC04\]rC0rC0rC0^_rC0rC0rC0`arC0rC0rC0bcrC0rC0rC0desC0sC0sC0fgsC0sC0sC0hisC0sC0sC0jksC0sC0sC0[lmsC0sC0sC0A0nC0sC0sC0A0oC0sC0sC0A0pC0sC0sC0A0qC0sC0sC0A0rC0sC0sC0ssC0sC0sC0AptC0C0C0uvwxyz{sC0sC0C0 |}~sC0sC0C0isC0sC0C0A C0uC0uC0A0C0tC0tC0A@C0tC0tC0APC0C0C0tC0tC0C0tC0tC0C0A0C0tC0tC0GtC0tC0tC0A0C0tC0tC0A0C0tC0tC0A0C0tC0tC0EtC0tC0tC0A0C0tC0tC0A0C0tC0tC0A0C0tC0tC0:tC0tC0tC0A0C0tC0tC0A0C0tC0tC0A0C0uC0uC05uC0uC0uC0A0C0uC0uC0A0C0uC0uC0A0C0uC0uC05uC0uC0uC0A0C0uC0uC0A0C0uC0uC0A0C0uC0uC05uC0uC0uC0A0C0uC0uC0A0C0uC0uC0A0C0uC0uC04uC0uC0uC0A0C0uC0uC0A0C0uC0uC0A0C0uC0uC0uC0uC0uC0A0C0uC0uC0A0C0uC0uC0A0C0uC0uC0uC0uC0uC0A C0{C0{C0APC0|C0|C0A0C0uC0uC0APC0vC0vC0APC0}C0}C0uC0vC0C0A@C0~C0~C0A0C0vC0vC0AC0C0C0̠vC0vC0C0A0C0vC0vC0AC0}C0}C0E !"#$%&'vC0vC0C0A@@C0C0C0A0AC0vC0vC0ABC0C0C0zCDEFGHIJKLMvC0vC0C0A0cC0vC0vC0AdC0C0C0gefghijklmnovC0wC0C0A@C0C0C0A0C0wC0wC0AC0C0C0dwC0wC0C0sdwC0wC0C0A@C0|C0|C0A0C0wC0wC0APC0|C0|C0A0C0wC0wC0A@C0zC0zC0cwC0wC0C08`wC0xC0C0ApC0}C0}C0AC0C0C0'ZxC0xC0C0A@ C0C0C0A0 C0xC0xC0AC0C0C0LXxC0xC0C0A'C0C0C0U()*+,-./012xC0xC0C0AP?C0C0C0A0@C0xC0xC0AAC0C0C0^UBCDEFGHIJKLxC0xC0C0A@YC0C0C0A0ZC0yC0yC0A[C0C0C0S\]^_`abcdefyC0yC0C0jPrstuvwxyz{|yC0yC0C0AC0C0C0TMyC0yC0C0HyC0yC0C0@yC0yC0C0A@C0C0C0A0C0yC0yC0AC0C0C0|=zC0zC0C0y=zC0zC0C0)<zC0zC0C0q;zC0zC0C0t:    zC0zC0C0i8 !"#$zC0zC0C06*+,-./01234zC0zC0C0,9:;<=>?@ABCzC0zC0C0,FGHIJKLMNOP{C0{C0C0$STUVWXYZ[\{C0{C0C0A0]C0{C0{C0A0^C0{C0{C0?#_`abcdefg{C0{C0C0hijklmno{C0{C0C0A@pC0C0C0A0qC0{C0{C0ArC0C0C0[stuvwxyz{C0{C0C0A{C0C0C0@|}~{C0{C0C0'{C0{C0C0A0C0|C0|C0\|C0|C0C0|C0|C0C0|C0|C0C0|C0|C0C0ApC0C0C0|C0|C0C0A0C0|C0|C0AC0C0C0 |C0|C0C0 }C0}C0C0 }C0}C0C0 }C0}C0C0A0C0}C0}C0AC0C0C0 }C0}C0}C0 }C0}C0C0+}C0}C0C0}C0}C0}C0*}C0}C0C0AC0C0C0|~C0~C0C0B~C0~C0C0~C0~C0C0~C0~C0C0~C0~C0C0~C0~C0C0~C0~C0C0~C0~C0C0~C0~C0~C0 ~C0~C0C0ApC0C0C0~C0C0C0ApC0C0C0C0C0C0ApC0C0C0C0C0C0ApC0C0C0C0C0C0AC0C0C0C0C0C0ApC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0aC0C0C0aC0C0C0aC0C0C0aC0C0C0aC0C0C0?C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0A0C0C0C0oC0C0C0JC0C0C0>C0C0C0!C0C0C0ApC0C0C0C0C0C0C0C0C0C0C0C0ApC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0tC0C0C0A0C0C0C0A0C0C0C0A0C0C0C0iC0C0C0YC0C0C0@C0C0C0<C0C0C0<C0C0C0;C0C0C0:C0C0C0- C0C0C0- C0C0C0- C0C0C0* C0C0C0( C0C0C0'C0C0C0%C0C0C0$C0C0C0$C0C0C0#C0C0C0#C0C0C0!C0C0C0 C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0!C0C0C0"C0C0C0#C0C0C0$C0C0C0%C0C0C0&C0C0C0'C0C0C0(C0C0C0)C0C0C0*C0C0C0+C0C0C0,C0C0C0-C0C0C0.C0C0C0/C0C0C00C0C0C01C0C0C02C0C0C03C0C0C04C0C0C05C0C0C06C0C0C07C0C0C08C0C0C09C0C0C0:C0C0C0;C0C0C0<C0C0C0=C0C0C0>C0C0C0C0C0C0C0C0C0A@?C0C0C0A0@C0C0C0APAC0C0C0A0BC0C0C0A@CC0C0C0A0DC0C0C0A0EC0C0C0A0FC0C0C0A0GC0C0C0AHC0C0C0A@IC0C0C0A0JC0C0C0AKC0C0C0ApLC0C0C0A@MC0C0C0A0NC0C0C0AOC0C0C0APC0C0C0A@QC0C0C0A0RC0C0C0ASC0C0C0ApTC0C0C0A@UC0C0C0A0VC0C0C0AWC0C0C0ApXC0C0C0APYC0C0C0A0ZC0C0C0A[C0C0C0Ap\C0C0C0A0]C0C0C0A0^C0C0C0A0_C0C0C0A@`C0C0C0A0aC0C0C0AbC0C0C0ApcC0C0C0APdC0C0C0A0eC0C0C0APfC0C0C0APgC0C0C0A0hC0C0C0AiC0C0C0A0jC0C0C0AkC0C0C0A0lC0C0C0ApmC0C0C0AnC0C0C0AoC0C0C0ApC0C0C0AqC0C0C0ArC0C0C0ApsC0C0C0A@tC0C0C0A0uC0C0C0AvC0C0C0ApwC0C0C0A@xC0C0C0A0yC0C0C0AzC0C0C0Ap{C0C0C0A0|C0C0C0}C0C0C04....ilog0000opt+Sjk5alad9ams=aradAbhbaEdptrLesdiPiiop`smaddwdhinstall'P$` p P$ ` tp#@#!P!$`$!v` p` @P`P`^P`eP`zP`W P `~ P `p ` pp`@P)`P%`%&p&P`P ` P`"P"#`#'@'(P(*` 0@< 0@- o@ 0% 0' 00 00 ik k000@0kk0l l@ll@m mc0y=0F F4GG0H H0HH0I I0II0J JKK0L L0LL0M M0MM0N N...Distribution KP...SCO...AHS_BTLD_FLOPPY...5.1.0h... SSO_1_LABEL ... 000DBASEINFO: type=DISTRIBUTION version=1.0 VOL:0: mediaType=FLOPPY format=FILESYS paperLabel=Floppy Volume 1 mediaLabel=./opt/Distribution/SCO/AHS_BTLD_FLOPPY/5.1.0h/SSO_1_LABEL/000 ARCH:0:0: format=FILESYS path=/ contents=DATABASES ARCH:0:1: format=FILESYS path=/ contents=CONTROL ARCH:0:2: format=FILESYS path=opt/K/SCO/OS_drivers/5.1.0h components=SCO:OS_drivers::5.1.0h ... SCO . .. OS_drivers . ..5.1.0h. ...softmgmt#cntlOdrivers...iiop.flSharedControl.flshared.dbdptr.flams.flSjk.flesdi.flwd.flsmad.flarad.flalad.flbhba.flClientControl.flvarPKG SCO:OS_drivers:iiop DIR 0755 root sys - ./.softmgmt/var/drivers/iiop DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver/iiop DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver/piiop DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver/Dsk DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver/ims DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/driver/tpic DIR 0755 root sys - ./.softmgmt/var/drivers/iiop/install DIR 0755 root sys - ./drivers/iiop DIR 0755 root sys - ./drivers/iiop/driver DIR 0755 root sys - ./drivers/iiop/driver/iiop FILE 0644 root sys 1 23787 3983153309 - - c 0 2 ./drivers/iiop/driver/iiop/Driver.o FILE 0644 root sys 1 32 1316585410 - - - 0 2 ./drivers/iiop/driver/iiop/Master FILE 0644 root sys 1 21989 3198110398 - - - 0 2 ./drivers/iiop/driver/iiop/Space.c FILE 0644 root sys 1 158 3863378417 - - - 0 2 ./drivers/iiop/driver/iiop/System FILE 0644 root sys 1 59 1079122468 - - - 0 2 ./drivers/iiop/driver/iiop/Node FILE 0444 root sys 1 15401 1469300537 - - - 0 2 ./drivers/iiop/new/usr/include/sys/triccs.h EXPORT r ./drivers/iiop/new/usr/include/sys/triccs.h /usr/include/sys/triccs.h FILE 0444 root sys 1 15217 4130601970 - - - 0 2 ./drivers/iiop/new/usr/include/sys/triebs.h EXPORT r ./drivers/iiop/new/usr/include/sys/triebs.h /usr/include/sys/triebs.h FILE 0444 root sys 1 18683 1570943198 - - - 0 2 ./drivers/iiop/new/usr/include/sys/trimpic.h EXPORT r ./drivers/iiop/new/usr/include/sys/trimpic.h /usr/include/sys/trimpic.h FILE 0444 root sys 1 34629 4047136254 - - - 0 2 ./drivers/iiop/new/usr/include/sys/iiop.h EXPORT r ./drivers/iiop/new/usr/include/sys/iiop.h /usr/include/sys/iiop.h FILE 0444 root sys 1 1578 3201856548 - - - 0 2 ./drivers/iiop/new/usr/include/sys/imsd.h EXPORT r ./drivers/iiop/new/usr/include/sys/imsd.h /usr/include/sys/imsd.h FILE 0444 root sys 1 9426 1846052494 - - - 0 2 ./drivers/iiop/new/usr/include/sys/ims_mrp.h EXPORT r ./drivers/iiop/new/usr/include/sys/ims_mrp.h /usr/include/sys/ims_mrp.h FILE 0444 root sys 1 20586 2873104927 - - - 0 2 ./drivers/iiop/new/usr/include/sys/ims.h EXPORT r ./drivers/iiop/new/usr/include/sys/ims.h /usr/include/sys/ims.h FILE 0555 root sys 1 2816 3619079265 - - - 0 2 ./drivers/iiop/new/usr/bin/read_boot_pdm EXPORT r ./drivers/iiop/new/usr/bin/read_boot_pdm /usr/bin/read_boot_pdm FILE 0555 root sys 1 13996 3136969324 - - - 0 2 ./drivers/iiop/new/usr/bin/imsd EXPORT r ./drivers/iiop/new/usr/bin/imsd /usr/bin/imsd FILE 0555 root sys 1 63964 1533137741 - - - 0 2 ./drivers/iiop/new/usr/bin/rview EXPORT r ./drivers/iiop/new/usr/bin/rview /usr/bin/rview FILE 0700 root sys 1 16634 3256517004 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/cdrom_iiop EXPORT r ./drivers/iiop/new/usr/lib/mkdev/cdrom_iiop /usr/lib/mkdev/cdrom_iiop FILE 0700 root sys 1 24632 1295358704 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/hd_iiop EXPORT r ./drivers/iiop/new/usr/lib/mkdev/hd_iiop /usr/lib/mkdev/hd_iiop FILE 0700 root sys 1 14441 1978768050 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/tape_iiop EXPORT r ./drivers/iiop/new/usr/lib/mkdev/tape_iiop /usr/lib/mkdev/tape_iiop FILE 0700 root sys 1 25715 3384369229 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/.scsi_iiop EXPORT r ./drivers/iiop/new/usr/lib/mkdev/.scsi_iiop /usr/lib/mkdev/.scsi_iiop FILE 0700 root sys 1 778 2407240948 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/getns0 EXPORT r ./drivers/iiop/new/usr/lib/mkdev/getns0 /usr/lib/mkdev/getns0 FILE 0700 root sys 1 26608 944591342 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/.scsitape_iiop EXPORT r ./drivers/iiop/new/usr/lib/mkdev/.scsitape_iiop /usr/lib/mkdev/.scsitape_iiop FILE 0644 root sys 1 367 1104372707 - - - 0 2 ./drivers/iiop/new/usr/lib/mkdev/perms/NS0LIST EXPORT r ./drivers/iiop/new/usr/lib/mkdev/perms/NS0LIST /usr/lib/mkdev/perms/NS0LIST DIR 0755 root sys - ./drivers/iiop/driver/piiop FILE 0644 root sys 1 23813 3595740969 - - c 0 2 ./drivers/iiop/driver/piiop/Driver.o FILE 0644 root sys 1 32 2368763055 - - - 0 2 ./drivers/iiop/driver/piiop/Master FILE 0644 root sys 1 23079 3311266686 - - - 0 2 ./drivers/iiop/driver/piiop/Space.c FILE 0644 root sys 1 19632 977267173 - - c 0 2 ./drivers/iiop/driver/piiop/Space.o FILE 0644 root sys 1 116 3755752609 - - - 0 2 ./drivers/iiop/driver/piiop/System DIR 0755 root sys - ./drivers/iiop/driver/Dsk FILE 0644 root sys 1 14677 3162782225 - - c 0 2 ./drivers/iiop/driver/Dsk/Driver.o FILE 0644 root sys 1 36 735350717 - - - 0 2 ./drivers/iiop/driver/Dsk/Master FILE 0644 root sys 1 4604 4060952227 - - - 0 2 ./drivers/iiop/driver/Dsk/Space.c FILE 0644 root sys 1 25 4183597 - - - 0 2 ./drivers/iiop/driver/Dsk/System FILE 0644 root sys 1 4075 449244730 - - - 0 2 ./drivers/iiop/driver/Dsk/Tdsk.h DIR 0755 root sys - ./drivers/iiop/driver/ims FILE 0644 root sys 1 35995 3298443517 - - c 0 2 ./drivers/iiop/driver/ims/Driver.o FILE 0644 root sys 1 28 1553671955 - - - 0 2 ./drivers/iiop/driver/ims/Master FILE 0644 root sys 1 19796 10180236 - - - 0 2 ./drivers/iiop/driver/ims/Space.c FILE 0644 root sys 1 36 2200830189 - - - 0 2 ./drivers/iiop/driver/ims/System FILE 0644 root sys 1 27 215839228 - - - 0 2 ./drivers/iiop/driver/ims/Node FILE 0644 root sys 1 318 2841365078 - - - 0 2 ./drivers/iiop/driver/ims/Rc DIR 0755 root sys - ./drivers/iiop/driver/tpic FILE 0644 root sys 1 2805 1378356608 - - c 0 2 ./drivers/iiop/driver/tpic/Driver.o FILE 0644 root sys 1 25 1208746035 - - - 0 2 ./drivers/iiop/driver/tpic/Master FILE 0644 root sys 1 1198 1141010105 - - - 0 2 ./drivers/iiop/driver/tpic/Stubs.c FILE 0644 root sys 1 1404 1178730363 - - - 0 2 ./drivers/iiop/driver/tpic/Space.c FILE 0644 root sys 1 64 97122355 - - - 0 2 ./drivers/iiop/driver/tpic/picdummy.c FILE 0644 root sys 1 23 48660525 - - - 0 2 ./drivers/iiop/driver/tpic/System DIR 0755 root sys - ./drivers/iiop/install FILE 0644 root sys 1 60 583470119 - - - 0 2 ./drivers/iiop/install/iiop.name FILE 0644 root sys 1 19 1669283959 - - - 0 2 ./drivers/iiop/install/btld FILE 0644 root sys 1 89 1058954871 - - - 0 2 ./drivers/iiop/install/drivers FILE 0644 root sys 1 3615 3661801220 - - - 0 2 ./drivers/iiop/install/postinstall FILE 0644 root sys 1 470 1571946488 - - - 0 2 ./drivers/iiop/install/preinstall PKG SCO:OS_drivers:SharedControl DIR 0755 bin bin - ./cntl FILE 0755 bin bin 1 5953 158997004 o - c 0 1 ./cntl/ccs FILE 0755 bin bin 1 3269 4251275840 o - c 0 1 ./cntl/pkg.ccs FILE 0755 bin bin 1 29854 1772608568 o - c 0 1 ./cntl/driver.ccs DIR 0755 bin bin - ./cntl/packages DIR 0755 bin bin - ./cntl/packages/alad DIR 0755 bin bin - ./cntl/packages/alad/driver DIR 0755 bin bin - ./cntl/packages/alad/driver/alad FILE 0755 bin bin 1 53 2280893736 o - - 0 1 ./cntl/packages/alad/driver/alad/replace.in DIR 0755 bin bin - ./cntl/packages/ams DIR 0755 bin bin - ./cntl/packages/ams/driver DIR 0755 bin bin - ./cntl/packages/ams/driver/ams FILE 0755 bin bin 1 28 970518483 o - - 0 1 ./cntl/packages/ams/driver/ams/replace.in DIR 0755 bin bin - ./cntl/packages/arad DIR 0755 bin bin - ./cntl/packages/arad/driver DIR 0755 bin bin - ./cntl/packages/arad/driver/arad FILE 0755 bin bin 1 53 2481171752 o - - 0 1 ./cntl/packages/arad/driver/arad/replace.in DIR 0755 bin bin - ./cntl/packages/bhba DIR 0755 bin bin - ./cntl/packages/bhba/driver DIR 0755 bin bin - ./cntl/packages/bhba/driver/bhba FILE 0755 bin bin 1 69 278657905 o - - 0 1 ./cntl/packages/bhba/driver/bhba/replace.in DIR 0755 bin bin - ./cntl/packages/dptr DIR 0755 bin bin - ./cntl/packages/dptr/driver DIR 0755 bin bin - ./cntl/packages/dptr/driver/dptr FILE 0755 bin bin 1 58 1576726979 o - - 0 1 ./cntl/packages/dptr/driver/dptr/replace.in DIR 0755 bin bin - ./cntl/packages/esdi DIR 0755 bin bin - ./cntl/packages/esdi/driver DIR 0755 bin bin - ./cntl/packages/esdi/driver/esdi FILE 0755 bin bin 1 17 3513516143 o - - 0 1 ./cntl/packages/esdi/driver/esdi/replace.in DIR 0755 bin bin - ./cntl/packages/iiop DIR 0755 bin bin - ./cntl/packages/iiop/driver DIR 0755 bin bin - ./cntl/packages/iiop/driver/pic FILE 0755 bin bin 1 71 2237892851 o - - 0 1 ./cntl/packages/iiop/driver/iiop/replace.in FILE 0755 bin bin 1 316 647263058 o - c 0 1 ./cntl/packages/iiop/driver/tpic/ccs.pre FILE 0755 bin bin 1 1314 1953755209 o - c 0 1 ./cntl/packages/iiop/driver/tpic/ccs.post DIR 0755 bin bin - ./cntl/packages/wd DIR 0755 bin bin - ./cntl/packages/wd/driver DIR 0755 bin bin - ./cntl/packages/wd/driver/wd FILE 0755 bin bin 1 52 1691329095 o - - 0 1 ./cntl/packages/wd/driver/wd/replace.in DIR 0755 bin bin - ./cntl/packages/smad DIR 0755 bin bin - ./cntl/packages/smad/driver DIR 0755 bin bin - ./cntl/packages/smad/driver/smad FILE 0755 bin bin 1 53 2781588776 o - - 0 1 ./cntl/packages/smad/driver/smad/replace.in DIR 0755 bin bin - ./cntl/packages/Sjk DIR 0755 bin bin - ./cntl/packages/Sjk/driver DIR 0755 bin bin - ./cntl/packages/Sjk/driver/Sjk DIR 0755 bin bin - ./.softmgmt/var DIR 0755 bin bin - ./.softmgmt FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/shared.db FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/SharedControl.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/alad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/ams.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/arad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/bhba.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/dptr.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/iiop.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/smad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/wd.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/esdi.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/Sjk.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/ClientControl.fl DBASEINFO: type=SHARED-COMPONENT version=1.0 COMP:SCO:OS_drivers: version=5.1.0h installStd=SSO-1 description=Mass Storage Drivers state=FULL-LOADED size=1086333 numFiles=329 subpackages=SCO:OS_drivers:SharedControl, SCO:OS_drivers:ClientControl, SCO:OS_drivers:alad, SCO:OS_drivers:ams, SCO:OS_drivers:arad, SCO:OS_drivers:bhba, SCO:OS_drivers:dptr, SCO:OS_drivers:iiop, SCO:OS_drivers:smad, SCO:OS_drivers:wd, SCO:OS_drivers:esdi, SCO:OS_drivers:Sjk required=SCO:OS_drivers:SharedControl, SCO:OS_drivers:ClientControl dependencies=SCO:ProdUpgrade::.* PKG:SCO:OS_drivers:SharedControl: description=Component Shared Control state=FULL-LOADED size=41160 numFiles=61 fileList=SharedControl.fl PKG:SCO:OS_drivers:ClientControl: description=Component Client Control state=FULL-LOADED size=10709 numFiles=14 fileList=ClientControl.fl PKG:SCO:OS_drivers:alad: description=alad Driver state=FULL-LOADED size=63529 numFiles=18 fileList=alad.fl PKG:SCO:OS_drivers:ams: description=ams Driver state=FULL-LOADED size=49350 numFiles=20 fileList=ams.fl PKG:SCO:OS_drivers:arad: description=arad Driver state=FULL-LOADED size=80359 numFiles=18 fileList=arad.fl PKG:SCO:OS_drivers:bhba: description=bhba Driver state=FULL-LOADED size=103809 numFiles=18 fileList=bhba.fl PKG:SCO:OS_drivers:dptr: description=dptr Driver state=FULL-LOADED size=49369 numFiles=23 fileList=dptr.fl PKG:SCO:OS_drivers:iiop: description=iiop Driver state=FULL-LOADED size=507557 numFiles=82 fileList=iiop.fl PKG:SCO:OS_drivers:smad: description=smad Driver state=FULL-LOADED size=41797 numFiles=18 fileList=smad.fl PKG:SCO:OS_drivers:wd: description=wd Driver state=FULL-LOADED size=55904 numFiles=19 fileList=wd.fl PKG:SCO:OS_drivers:esdi: description=esdi Driver state=FULL-LOADED size=18900 numFiles=19 fileList=esdi.fl PKG:SCO:OS_drivers:Sjk: description=Sjk Driver state=FULL-LOADED size=63890 numFiles=19 fileList=Sjk.fl PKG SCO:OS_drivers:dptr DIR 0755 root sys - ./.softmgmt/var/drivers/dptr DIR 0755 root sys - ./.softmgmt/var/drivers/dptr/driver DIR 0755 root sys - ./.softmgmt/var/drivers/dptr/driver/dptr DIR 0755 root sys - ./.softmgmt/var/drivers/dptr/install DIR 0755 root sys - ./drivers/dptr DIR 0755 root sys - ./drivers/dptr/driver DIR 0755 root sys - ./drivers/dptr/driver/dptr FILE 0644 root sys 1 45882 1819350645 - - c 0 2 ./drivers/dptr/driver/dptr/Driver.o FILE 0644 root sys 1 27 1833485619 - - - 0 2 ./drivers/dptr/driver/dptr/Master FILE 0644 root sys 1 1346 1313328609 - - - 0 2 ./drivers/dptr/driver/dptr/Space.c FILE 0644 root sys 1 960 452036365 - - c 0 2 ./drivers/dptr/driver/dptr/Space.o FILE 0644 root sys 1 24 124266541 - - - 0 2 ./drivers/dptr/driver/dptr/System DIR 0755 root sys - ./drivers/dptr/new DIR 0755 root sys - ./drivers/dptr/new/etc DIR 0755 root sys - ./drivers/dptr/new/etc/copyrights FILE 0644 bin bin 1 105 1407983866 - - - 0 2 ./drivers/dptr/new/etc/copyrights/ahs5 EXPORT r ./drivers/dptr/new/etc/copyrights/ahs5 /etc/copyrights/ahs5 DIR 0755 root sys - ./drivers/dptr/install FILE 0644 root sys 1 35 2774953981 - - - 0 2 ./drivers/dptr/install/dptr.name FILE 0644 root sys 1 18 657162361 - - - 0 2 ./drivers/dptr/install/btld FILE 0644 root sys 1 18 657162361 - - - 0 2 ./drivers/dptr/install/drivers FILE 0644 root sys 1 733 3694036739 - - - 0 2 ./drivers/dptr/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/dptr/install/preinstall PKG SCO:OS_drivers:ams DIR 0755 root sys - ./.softmgmt/var/drivers/ams DIR 0755 root sys - ./.softmgmt/var/drivers/ams/driver DIR 0755 root sys - ./.softmgmt/var/drivers/ams/driver:/ams DIR 0755 root sys - ./.softmgmt/var/drivers/ams/install DIR 0755 root sys - ./drivers/ams DIR 0755 root sys - ./drivers/ams/driver DIR 0755 root sys - ./drivers/ams/driver/ams FILE 0644 root sys 1 23 2789605477 - - - 0 2 ./drivers/ams/driver/ams/Bootload FILE 0644 root sys 1 44561 2111885726 - - c 0 2 ./drivers/ams/driver/ams/Driver.o FILE 0644 root sys 1 26 1820139443 - - - 0 2 ./drivers/ams/driver/ams/Master FILE 0644 root sys 1 3004 4196010391 - - - 0 2 ./drivers/ams/driver/ams/Space.c FILE 0644 root sys 1 661 3787938906 - - c 0 2 ./drivers/ams/driver/ams/Space.o FILE 0644 root sys 1 22 5109805 - - - 0 2 ./drivers/ams/driver/ams/System DIR 0755 root sys - ./drivers/ams/install FILE 0644 root sys 1 18 969244722 - - - 0 2 ./drivers/ams/install/ams.name FILE 0644 root sys 1 16 2908356724 - - - 0 2 ./drivers/ams/install/btld FILE 0644 root sys 1 60 892710207 - - - 0 2 ./drivers/ams/install/copyright FILE 0644 root sys 1 16 2908356724 - - - 0 2 ./drivers/ams/install/drivers FILE 0644 root sys 1 722 2838384750 - - - 0 2 ./drivers/ams/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/ams/install/preinstall PKG SCO:OS_drivers:Sjk DIR 0755 root sys - ./.softmgmt/var/drivers/Sjk DIR 0755 root sys - ./.softmgmt/var/drivers/Sjk/driver DIR 0755 root sys - ./.softmgmt/var/drivers/Sjk/driver/Sjk DIR 0755 root sys - ./drivers/Sjk DIR 0755 root sys - ./drivers/Sjk/driver DIR 0755 root sys - ./drivers/Sjk/driver/Sjk FILE 0644 root sys 1 6600 1687076973 - - c 0 2 ./drivers/Sjk/driver/Sjk/Driver.o FILE 0644 root sys 1 29 1539808483 - - - 0 2 ./drivers/Sjk/driver/Sjk/Master FILE 0644 root sys 1 982 955599156 - - - 0 2 ./drivers/Sjk/driver/Sjk/Space.c FILE 0644 root sys 1 22 2021421 - - - 0 2 ./drivers/Sjk/driver/Sjk/System FILE 0644 root sys 1 27 3065172736 - - - 0 2 ./drivers/Sjk/driver/Sjk/Node FILE 0444 root sys 1 9023 1948044990 - - - 0 2 ./drivers/Sjk/new/usr/include/sys/Sjk.h EXPORT r ./drivers/Sjk/new/usr/include/sys/Sjk.h /usr/include/sys/Sjk.h FILE 0555 root sys 1 5980 495846249 - - - 0 2 ./drivers/Sjk/new/usr/bin/juke EXPORT r ./drivers/Sjk/new/usr/bin/juke /usr/bin/juke FILE 0555 root sys 1 15737 788561102 - - - 0 2 ./drivers/Sjk/new/usr/lib/mkdev/juke EXPORT r ./drivers/Sjk/new/usr/lib/mkdev/juke /usr/lib/mkdev/juke FILE 0555 root sys 1 25490 3978478102 - - - 0 2 ./drivers/Sjk/new/usr/lib/mkdev/.scsi-ahs EXPORT r ./drivers/Sjk/new/usr/lib/mkdev/.scsi-ahs /usr/lib/mkdev/.scsi-ahs PKG SCO:OS_drivers:esdi DIR 0755 root sys - ./.softmgmt/var/drivers/esdi DIR 0755 root sys - ./.softmgmt/var/drivers/esdi/driver DIR 0755 root sys - ./.softmgmt/var/drivers/esdi/driver/esdi DIR 0755 root sys - ./.softmgmt/var/drivers/esdi/install DIR 0755 root sys - ./drivers/esdi DIR 0755 root sys - ./drivers/esdi/driver DIR 0755 root sys - ./drivers/esdi/driver/esdi FILE 0644 root sys 1 967 1032601301 - - - 0 2 ./drivers/esdi/driver/esdi/Device.dat FILE 0644 root sys 1 16228 4191607340 - - c 0 2 ./drivers/esdi/driver/esdi/Driver.o FILE 0644 root sys 1 40 2755809909 - - - 0 2 ./drivers/esdi/driver/esdi/Master FILE 0644 root sys 1 904 1559809717 - - - 0 2 ./drivers/esdi/driver/esdi/Space.c FILE 0644 root sys 1 444 3648075688 - - c 0 2 ./drivers/esdi/driver/esdi/Space.o FILE 0644 root sys 1 23 5262381 - - - 0 2 ./drivers/esdi/driver/esdi/System DIR 0755 root sys - ./drivers/esdi/install FILE 0644 root sys 1 37 254862058 - - - 0 2 ./drivers/esdi/install/esdi.name FILE 0644 root sys 1 18 380272753 - - - 0 2 ./drivers/esdi/install/btld FILE 0644 root sys 1 18 380272753 - - - 0 2 ./drivers/esdi/install/drivers FILE 0644 root sys 1 0 0 - - - 0 2 ./drivers/esdi/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/esdi/install/preinstall PKG SCO:OS_drivers:wd DIR 0755 root sys - ./.softmgmt/var/drivers/wd DIR 0755 root sys - ./.softmgmt/var/drivers/wd/driver DIR 0755 root sys - ./.softmgmt/var/drivers/wd/driver/wd DIR 0755 root sys - ./.softmgmt/var/drivers/wd/install DIR 0755 root sys - ./drivers/wd DIR 0755 root sys - ./drivers/wd/driver DIR 0755 root sys - ./drivers/wd/driver/wd FILE 0644 root sys 1 983 2387604777 - - - 0 2 ./drivers/wd/driver/wd/Device.dat FILE 0644 root sys 1 49569 3877091568 - - c 0 2 ./drivers/wd/driver/wd/Driver.o FILE 0644 root sys 1 35 983117710 - - - 0 2 ./drivers/wd/driver/wd/Master FILE 0644 root sys 1 3312 91776272 - - - 0 2 ./drivers/wd/driver/wd/Space.c FILE 0644 root sys 1 1675 37486674 - - c 0 2 ./drivers/wd/driver/wd/Space.o FILE 0644 root sys 1 42 228792366 - - - 0 2 ./drivers/wd/driver/wd/System DIR 0755 root sys - ./drivers/wd/install FILE 0644 root sys 1 39 3131032122 - - - 0 2 ./drivers/wd/install/wd.name FILE 0644 root sys 1 14 1462239341 - - - 0 2 ./drivers/wd/install/btld FILE 0644 root sys 1 14 1462239341 - - - 0 2 ./drivers/wd/install/drivers FILE 0644 root sys 1 0 0 - - - 0 2 ./drivers/wd/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/wd/install/preinstall PKG SCO:OS_drivers:smad DIR 0755 root sys - ./.softmgmt/var/drivers/smad DIR 0755 root sys - ./.softmgmt/var/drivers/smad/driver DIR 0755 root sys - ./.softmgmt/var/drivers/smad/driver/smad DIR 0755 root sys - ./.softmgmt/var/drivers/smad/install DIR 0755 root sys - ./drivers/smad DIR 0755 root sys - ./drivers/smad/driver DIR 0755 root sys - ./drivers/smad/driver/smad FILE 0644 root sys 1 34409 3949900161 - - c 0 2 ./drivers/smad/driver/smad/Driver.o FILE 0644 root sys 1 27 1810012275 - - - 0 2 ./drivers/smad/driver/smad/Master FILE 0644 root sys 1 5080 1126609692 - - - 0 2 ./drivers/smad/driver/smad/Space.c FILE 0644 root sys 1 1209 1916476401 - - c 0 2 ./drivers/smad/driver/smad/Space.o FILE 0644 root sys 1 28 1700162639 - - - 0 2 ./drivers/smad/driver/smad/System DIR 0755 root sys - ./drivers/smad/install FILE 0644 root sys 1 45 3852413709 - - - 0 2 ./drivers/smad/install/smad.name FILE 0644 root sys 1 18 4135092333 - - - 0 2 ./drivers/smad/install/btld FILE 0644 root sys 1 18 4135092333 - - - 0 2 ./drivers/smad/install/drivers FILE 0644 root sys 1 742 1684434039 - - - 0 2 ./drivers/smad/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/smad/install/preinstall PKG SCO:OS_drivers:arad DIR 0755 root sys - ./.softmgmt/var/drivers/arad DIR 0755 root sys - ./.softmgmt/var/drivers/arad/driver DIR 0755 root sys - ./.softmgmt/var/drivers/arad/driver/arad DIR 0755 root sys - ./.softmgmt/var/drivers/arad/install DIR 0755 root sys - ./drivers/arad DIR 0755 root sys - ./drivers/arad/driver DIR 0755 root sys - ./drivers/arad/driver/arad FILE 0644 root sys 1 70373 2690667137 - - c 0 2 ./drivers/arad/driver/arad/Driver.o FILE 0644 root sys 1 27 1808963187 - - - 0 2 ./drivers/arad/driver/arad/Master FILE 0644 root sys 1 7576 3711280581 - - - 0 2 ./drivers/arad/driver/arad/Space.c FILE 0644 root sys 1 1355 2751088530 - - c 0 2 ./drivers/arad/driver/arad/Space.o FILE 0644 root sys 1 23 5071917 - - - 0 2 ./drivers/arad/driver/arad/System DIR 0755 root sys - ./drivers/arad/install FILE 0644 root sys 1 45 3852413584 - - - 0 2 ./drivers/arad/install/arad.name FILE 0644 root sys 1 18 1987084397 - - - 0 2 ./drivers/arad/install/btld FILE 0644 root sys 1 18 1987084397 - - - 0 2 ./drivers/arad/install/drivers FILE 0644 root sys 1 703 3947682033 - - - 0 2 ./drivers/arad/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/arad/install/preinstall PKG SCO:OS_drivers:alad DIR 0755 root sys - ./.softmgmt/var/drivers/alad DIR 0755 root sys - ./.softmgmt/var/drivers/alad/driver DIR 0755 root sys - ./.softmgmt/var/drivers/alad/driver/alad DIR 0755 root sys - ./.softmgmt/var/drivers/alad/install DIR 0755 root sys - ./drivers/alad DIR 0755 root sys - ./drivers/alad/driver DIR 0755 root sys - ./drivers/alad/driver/alad FILE 0644 root sys 1 54096 2331486893 - - c 0 2 ./drivers/alad/driver/alad/Driver.o FILE 0644 root sys 1 27 1806865267 - - - 0 2 ./drivers/alad/driver/alad/Master FILE 0644 root sys 1 6951 921694855 - - - 0 2 ./drivers/alad/driver/alad/Space.c FILE 0644 root sys 1 1388 2220468169 - - c 0 2 ./drivers/alad/driver/alad/Space.o FILE 0644 root sys 1 23 5059629 - - - 0 2 ./drivers/alad/driver/alad/System DIR 0755 root sys - ./drivers/alad/install FILE 0644 root sys 1 45 3852413586 - - - 0 2 ./drivers/alad/install/alad.name FILE 0644 root sys 1 18 3060039788 - - - 0 2 ./drivers/alad/install/btld FILE 0644 root sys 1 18 3060039788 - - - 0 2 ./drivers/alad/install/drivers FILE 0644 root sys 1 742 2036425254 - - - 0 2 ./drivers/alad/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/alad/install/preinstall PKG SCO:OS_drivers:bhba DIR 0755 root sys - ./.softmgmt/var/drivers/bhba DIR 0755 root sys - ./.softmgmt/var/drivers/bhba/driver DIR 0755 root sys - ./.softmgmt/var/drivers/bhba/driver/bhba DIR 0755 root sys - ./.softmgmt/var/drivers/bhba/install DIR 0755 root sys - ./drivers/bhba DIR 0755 root sys - ./drivers/bhba/driver DIR 0755 root sys - ./drivers/bhba/driver/bhba FILE 0644 root sys 1 99413 159990772 - - c 0 2 ./drivers/bhba/driver/bhba/Driver.o FILE 0644 root sys 1 27 1803848883 - - - 0 2 ./drivers/bhba/driver/bhba/Master FILE 0644 root sys 1 2503 2336931202 - - - 0 2 ./drivers/bhba/driver/bhba/Space.c FILE 0644 root sys 1 754 3026987588 - - c 0 2 ./drivers/bhba/driver/bhba/Space.o FILE 0644 root sys 1 23 5031981 - - - 0 2 ./drivers/bhba/driver/bhba/System DIR 0755 root sys - ./drivers/bhba/install FILE 0644 root sys 1 58 2167922790 - - - 0 2 ./drivers/bhba/install/bhba.name FILE 0644 root sys 1 18 105480299 - - - 0 2 ./drivers/bhba/install/btld FILE 0644 root sys 1 18 105480299 - - - 0 2 ./drivers/bhba/install/drivers FILE 0644 root sys 1 774 1667154427 - - - 0 2 ./drivers/bhba/install/postinstall FILE 0644 root sys 1 221 2930721780 - - - 0 2 ./drivers/bhba/install/preinstall PKG SCO:OS_drivers:ClientControl DIR 0755 bin bin - ./.softmgmt/var/.softmgmt FILE 0644 bin bin 1 1794 1768830073 - - - 0 2 ./.softmgmt/var/.softmgmt/client.db FILE 0644 bin bin 1 782 30072095 - - - 0 2 ./.softmgmt/var/.softmgmt/ClientControl.fl FILE 0644 bin bin 1 609 3607647399 - - - 0 2 ./.softmgmt/var/.softmgmt/alad.fl FILE 0644 bin bin 1 666 4065375973 - - - 0 2 ./.softmgmt/var/.softmgmt/ams.fl FILE 0644 bin bin 1 609 954330588 - - - 0 2 ./.softmgmt/var/.softmgmt/arad.fl FILE 0644 bin bin 1 609 4208901105 - - - 0 2 ./.softmgmt/var/.softmgmt/bhba.fl FILE 0644 bin bin 1 609 2198569292 - - - 0 2 ./.softmgmt/var/.softmgmt/dptr.fl FILE 0644 bin bin 1 2516 4198362060 - - - 0 2 ./.softmgmt/var/.softmgmt/iiop.fl FILE 0644 bin bin 1 609 617108479 - - - 0 2 ./.softmgmt/var/.softmgmt/smad.fl FILE 0644 bin bin 1 639 965268444 - - - 0 2 ./.softmgmt/var/.softmgmt/wd.fl FILE 0644 bin bin 1 699 344568590 - - - 0 2 ./.softmgmt/var/.softmgmt/esdi.fl FILE 0644 bin bin 1 535 985860524 - - - 0 2 ./.softmgmt/var/.softmgmt/Sjk.fl FILE 0644 bin bin 1 33 3168932553 - - - 0 2 ./.softmgmt/var/.softmgmt/SharedControl.fl ...SCO...ahs... 5.1.0h ...!.softmgmt!. .."product.dbDBASEINFO: type=PRODUCT version=1.0 PROD:SCO:ahs: version=5.1.0h installStd=SSO-1 description=SCO Open Server Advanced Hardware Supplement packages=SCO:OS_drivers::5.1.0h #...%ccs&pkg.ccspkg.ccs.Z'packages$driver.ccsh{m?|5_sSIsjpZ;Ej'ۺb$K67$թ$}$-YŢ H,e7 ϙw]kmnkczL9m޷y}οfӆ,q盭y~[f6^BMp0p҃#Ҥ 3J3ζ$<^"4ƽ+xM kt .;J7 qBD(n\!یJW%nDJxj@w~x9$ZXr.oGUٞ*GuyU+ ̅?y-]q/AW1+P#3㜬3fA4vl\rɭ.BfGR*)HۍR511wW[CYB7Tf!(!W?P-?[!h ,h SYU棪Tb_L̕JL(QETO!RX>%, )jS8cۭ*8ŎY ̈́.<2W'?| S$k2BfsTS2AF@C'^.'Ȗj!-+3Rj#v\& i t*z*>-, +qn7c)ٍ5h;KO_,ؕFxK>eZ3ڶ"'L%W+J O4++|eTc 'U!i먤)G`28 Lͫ>|dBT]ĂZȗ ̬w0 AA ,xCgɮthPA E[⣃y=Ub;is/9pe^I_X3ك0bK;tC=}DQ*D`NJ%&H/&:Q6^_H!-2gnV憾<mv ~(JNVK.ҲL@|0X * (SHd*]W@~ G6wkl^ggֺ\92̍t,7jo:t< ^~C:byB9*r].PgDxl,My0ňݚwxCښɦhB^K7>.G9f5?~~\ =yTs\!+f\dvgracY?nP\VZt\Tل/4\Wl}ffA8s O[Ghf8eE_e)~l`[#̀G6cNl>+*DPptЋ+]0F%94 B(AۀE@5ۧ=I?iJ, SWc `)]E|(vF`/)XHklHUu)2h ! -b"Z x&||qbl A9 4T@"̕C(, ?YMD rτU1OgٱIx:؁z}C*T{#gzqy4Pv/$B'Йm)ش?AcR Җ~ќ9iE+˪*jBuD2*~C%f"LJpy$W0XCUubd5~ %ʙ@lO[_pxR`9BU'<|<|4!_C]k[;,QBww3G@T I ev^ayܼ uzyTa0n8`=TUwno u8.Eq-V"~Žۋ{ 7^Q9WB\E>-־,[|ų|LZc!%1i- qcMסΕ9# 9U$oCX6*/ņʲG Xb dƏMX,^p@儦[GY/[ޱK3,݌j4tשǤE_U#`b䩇6yӨtQ\I'iVӝfZ|#UXE2_+ }aD?U: F߈9!@"21+זI ^r @|QlX:@ǀ{̉sc<*3ʕv9sVh 3` lwn)]IYԭ]Ng֤& % C";Q gVEo V 層eJݙ;XS:k`a*Xxt4,\fff=,@vs#\ IR)Gv]5]#kC&7n{^8DTv_'-t|G%+pMnYB5c&7~OcڕϾ\l~k\-p MwH6B'hr/r]!o]f$Ay%(iVe- q)2 OJ#5.2̐l”IlS.CExLHQo9QCOIdew3}m7l<+XGdu̢(nw3HpjR`HBȷ&ĈR7- JB Y#m (Pe]^ M"A &v;\9ی T0,-- IJ'@$Y2yRZz(W"(d /ֻV3(&RL>YU$s*;3Z( !ivWY]5_k`+J 3 <Vt(~j;h&݄msOm3]anℝ`譏j}_[/J96O]` @o"Ҭ,tiKq[\ܮh<+rجƢ(5(A3kq}&ȕ9o0÷h5|Mkrjz|5p:FGqZP+OXnN'BPD,G)"LtT+I儅}Ahb c5͉VF}ЕAaSʩ&D/kJ\(w,N4ȇ6bʧ')MbMbR\3 KC*<{-V֮Uj0"Rڑg68'<8 s(M؋ Fpj#]ؽXJuNUū܋_B1mrg 9j|rצtpX۸(v"0mv_%2aD |?P?ޣ)ӼRgPV"m5cgoWb:'Ǡ4A* lIsr(s7c@>~Mn,^ E4#ӥ,),k[[fHm)B#*%:Z>Dd IoYkB 7XsyyAC,m͍<j90oe=9|x 77O*.⛙$6i)cH8B˻>"2Y7ÍX,op t+p1- {]5^Oi6,HF]h^i"FN Ƈk]+3ihem;`-zwfB $MU㉙-Ud))VzB]!/pHGW-5;)h); $7 U=hz7\8ۭ. )EP <`y@Ow#l?$<`y)ޮODd? Bh|]Ly^vws[L 0r?V w{֖|nW 3b!dEi, )MKC$h]ͭ[{;oS׻7=H `!}YMRygy"8+J+96 U|!V)@AE0V߉`WVV⨵Al!<~A a@GaQ_X\{i8 sO{sG u8Rȭ׻F͙9!wjVWUER m?UIUR(im~RnlA:6v'&Y[\o6ן.|,*x}{dSj\,c-.d5 Dc V53ǙO-,it4b"$ :PHZ A/!4 jP,Gǘ$#=Wgh.DhTl`CMZ %h"O55 rғYfBаjTC\i4֙WiD6 +r뉌 =^O5  ysL#;)66&i~4`َDbA\J45Dj'hvv;ͳnmQlDBy-/_{_KJh"$hn:f-3:.V?s4EWMjٳ7&Q:eLϸ*%(`%Uv6̺t̆(dFi)Z^TCtJ&cCđCJ&p  InTb()W鳡R!a"X[3M 7x0_r5O-\Ԩ ,rr[nzDa`;F>D.Ej&'u F(&rj:\ҙzW88~_%<<\;ywっ0G ơsIBFi?iKeJyDUQ0C/z`HCDLTTzbf:=֜;T>O+:t1bƆ7틯ECV.aC?bxu]7NOvɚf\MznAM+TIkiRʵ8.!|kȤVzMdm %+C5ϳ!(<=n7e.Tx><89pfal똻ԉE|yo  l_wWCƱEg#ԁZd_c]{QqGV=YtC~a [c(\ՙ]uD_ZeЎ8d6tC45LTu @b'-;58j4'7殺5YZ!AQFr]2r!C(N$sh9ΘO_o*"lƹuIE<%(DJjz? ߠQX%QPGBhU4IsRPHC[Y5'ۭ&!8b3_2s#ՙc 1=Eohrdh)"cTS;BMljlepula0֗rI rSdg*pŅ[&-́LFg\DuD1,-BI0;PU6Vl&V"E*2>4cl%0ϋ0R"=:v;f=Y%v螻7h(]R(bb6)f #x-/+(ġ)yqn!"jBBڄŢ<? Gb#r\Dmc;r\5 OeѕFskMcS D/R=;'1U_lUZjhwLtWl:5.-NR}WUL{'`fM=`i+ }Bmg2-{"YhR/IA۫t>f: |7n\qݻ7@k6ZTmAN4v9{G ZÂi3WKVߒF'F@T@>  B^}L_-G3uYXnāBs )]Pc" ?-K8iYP(1"fxݷ=ݚ>TG6Ft@𔋤ߠ.pf>rt20߯j Hl;D1R3K=U,V'wu@CQMB ۯNIߚr*iáBNF.eUjZ| fI0UV~ ʑ!rx* 3.xq2E6Ghos'WV~yԘh۵N&tT7 :Ql,#||*"j3|gKv=pPxKaw7[vݨk)FO3yQ%v:,tHYq_e[5xGY}\8wpOzpS<8R~NI)GjT\^|ʝ$΃rv#rBP9~MsF3ހ}JnF"XJ(rRwͼSfn  ^U+hiۿE 3vw`͂iXskËh;F6xmx<;{eM} z6plb\8NtE+(\ *: T=+ :L3)Ls1s`gAX:/>A\'MחMSg} CӤlޑ,*DR` Sz?ɤ"rVg6ǮaQg:Pk*uPX&>8HPIvGRc.ru1.=|c.L|]ǥcCdT c{P2]HQ)mI-pF5aBrE1\TD'Gj6+QOS8pq͂~~/.cKjE)H5:9K{̆PڬD3k1[)%`SxeZ8k8~p=2dXٝK2y7fvz^ D BZ+qʊ&jm-4\!{ۏ'>?6/݆fŘDEGP]RK!.#mIE[ 4(WV?@N !=LDLE[3F*:9jbbWoB\IUKMPsT5 _~fM^>Nn o~"6E'j 9ku4pL[(Sޡ+nf cԱ (u6:njye41ΥDj Cyim2K>J[kDO.|Mw+kUMkSF<K š{sQ/Ĉ@K{)lC} ZgLզ>7ZTˉ'fƼ4ȏERb%l|)'.#..(iiop/bhba3dptr7alad;arad?smadCwdGamsKesdi(.'..)driver).(..*tpic-iiop*.)..,ccs.preccs.pre.Z+ccs.postbIZ7ì|(9(x4d0wmœ{a7󬣰P"Gx]#Q?k9mqV,&2)<, ǘ{a$9t޳޳UIXp ͟ qKf u8xYC`1IH1jxy74,replace.indriver_set: arad scsi_ha: "Adaptec AIC-7770 Chipset" ?.'..@driver@.?..AsmadA.@..Breplace.indriver_set: spad scsi_ha: "Adaptec AIC-6x60 Chipset" C.'..DdriverD.C..EwdE.D..Freplace.indriver_set: wd scsi_ha: "ATAPI/IDE CD-ROM Adapter" G.'..HdriverH.G..IamsI.H..Jreplace.inscsi_ha: "AMD PCscsi 2.3.0" K.'..LdriverL.K..MesdiM.L..Nreplace.indriver_set: esdi O...PiiopUbhba\aradcaladhSjkrwdxdptr|amssmadesdiP.O..QnewodriverinstallQ.P..RusrR.Q..SbinYinclude`libS.R..Trviewimsdread_boot_pdmELF`4 4 (4444((\\p]x(/usr/lib/libc.so.1CMA0(EB1H",>9K<)5 @;FI?/7-#=C*.4LJ  !'+&%326$:8 GD40 h0d"4!'Ќ 050TH PW^q g0dp``Џ@@` !\`phpЎ@H(*,@GNP_ Lg@mrPhx h\p t*dp G` `  'P,4Ѝj<hC dK$T[2bkps y`t`p 0x P__iobopen__lstat32readmalloc_iob_cleanup_end_svid3_cfsetispeed__ctypestrcataccess_environvsprintf_svid3_tcsetattrfflushatoiatolperrorfreememset_ctypeabort_etext_svid3_cfgetispeedatexitrewind__stat32kill__thr_errnofreopen_svid3_cfsetospeed_edatasignal_runtime_env_init_features_vectorsystemisatty_svid3_tcgetattrttynamecloseexitfopenstrcmp_svid3_cfgetospeederrnofilenostrcpy__statlstat32__fstat32fcntl_lib_versionfgetsfprintfstrlen_runtime_r_select__fpstartfscanf_GLOBAL_OFFSET_TABLE_memcpyputcstrncpysprintfcallocsetvbuf__ctype2fcloseprintf_DYNAMICstrncmpioctlgetenv_on_everest_libc_select_cerror/usr/lib/libc.so.1$CȄ$̄ЄԄ:؄*܄-  '21"D @%67? H$(),+0;4G8<@,D5HELPT/X0\A`Bdhl>pItx |&= 3(L5%Ą%Ȅh%̄h%Єh%Ԅh%؄h %܄h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h% h%h%h%h%h% h%$hp%(h`%,hP%0h@%4h0%8h %<h%@h%Dh%Hh%Lh%Ph%Th%Xh %\h(%`h0%dh8p%hh@`%lhHP%phP@%thX0%xh` %|hh%hp%hx%h%h%h%h%h%h%h%hp%h`%hPjjUЌt hЌbETqRU RPR PTjÐUURD]ÐUUR4]ÐUU MRQ ]Ð;UU MRQ]Ð;UU MRQ]Ð;UUM RQEP ]Ðt&UU MRQ]Ð;UU MRQ]Ð;UU MRQ]Ð;UU MRQ]Ð;UWg'| P}!_];hjth`jh %!jRAj Q'j $:$t9MjjjN$jjjC$jjj8$hPj,3a;;UWVSE uu3Ft63P3DPRo tLQPB D GuʋRo[^_]Ít&UWVE }uu3P3DPRGo tLQPRo^_]ÃUWE V3SËRm QAotu ; t utE[^_]Ðg";u`~\Pi"Rk"EHPV Qentj PaEHPVR;nO {}kt 50u30u(E u@50u30%tV Q&a׋EGΈ  ;tPnUPW3VSRJl Qmtu[^_]Ðqu;UWVERkQmttvqtqEu8t 9t1u1|7~3tGЉE<1ufEu^PkRmttqu ^_]Ë0|53t GډE ;EE;UEu j.]Ãt&UEu jj]Ðt&UqPtREXh<}h0}EPEPhH}MQ ];UWVSjjRk 3 ;~j P^F;|G|ދ Qk[^_]UU MRQPBk tU RQPk]ÐUPWVS3q;}tjjhP}? 3 ;~eEtjjhl}U jVWT <vjjh}-jVW/F;|MGqM;[jjh} t $[^_];t&U(WVES +‹U +‹UE‰EܺxD<u(jjh}n)E E[^_]ÐUE؍<DE@$t jjh~"E 벐]Ct33}u VEKQWPCPShT~Rfjjhh~EE,VEܺDtdEܺ3pD% 3EVEPEWPQhph~Rjjh~SEE,EܺD%tup;ppE}u {UWV3S3q;3ۋ ;jSVjjh~jQƍ +‹Ӎ +ъ<v7jSVnjjh PjY~WSVx C;}fFq;};[^_]ÁU$WEVSluE;ESU MRQhj!j+] +ڋPh j!j+jjh hjj$h(Zjjh8Ljj VBu jjh@+%3`];}f<tI3ttpRhL6-3 pQhP6 hT6C;|j jh` ];}4<tDPhld6hxR6C;|h Ry`j jhCj jh5h Q_j jh4];}6<tD@tPh5h5C;|jjh ];}Dt'<t3PhĀ|5hЀj5C;|jjh܀l ];}p3E܅u <tE܅t<t ;3t"3pRh4;h4C;|h Q _jjhjjhh P=^jjhjjh@];<uh ^4;D|@$t}E, JHfJfHD|@$PEEPHU;rEPHEMQD|@$PEPEP3;;D|@(tPh83hD3hP3C;[^_];UVjOjjQjOjjAjjjjOjj+jjRb3EP3PQ_ tPRR33ҊÊU ;~‹Q_hPY [^_]ÃUWVShR+Z33҃] ÊU;>3P3EPQ5_ tPRlR33ҊÊU;~‹Qn_hP%Y [^_]ÃUEUEEE EEPjR( ȃu ];EtU@EUEE EEPjR ȃu EU];U|3WVSMMEċEjhpREucEdjjhpq~jjhqpK;jjhpqRjjhqDMPjQ EĉUqEPPR t~EEE؃EE䍅EЍEԍE܍E̍EȋEȾ8tFuE̿+%E3H~1UE +Ƅ/MQ+[^_]ÐUE +ƄE܋ϋu +M3Ɋ ĎD M3x ƈLM3 ƈLM3 ƈLM3 ƈLE؊EE苀dEM%PPQ uNtFuU+΋ +ыM3Ɋ D &;jjhpqjjhqHUBEȉUŨHHEȋEԉŰUЃHHEԋEUЋUHM؉EEHM؋M܃HM܋MH;ЉM&;jjhpqVjjhqH#MQ7EU@MāEUMXt&U@WVShth\u+jjhpqjjhqj3EPEPEPEPEPEPEPEPEPhxW,؃t-jhEP uEuEtFuWu+jjhpq,jjhqjr[^_];t&UqWVSuUhhh ,u&h EuD3[^_]Ãq,REtEEEpXSVEMPEQPh,,Rith`U QPERh\hTh@PMEQPk(LEN;UxWVShd}hh EظЦEئEEĦE̦3ɉEMȦMUERMQWPESVhP EEUjĥVp jhԂSX Et^hEERUQPERhhh؂PvEP(UȉuUEBU1EUBEUEEMEAUM,щEEUUM,,,MEUE܃]SE[^_]Ã;U3ҋ$WEEVS;G hG(t,3M ;~#O (;u_$FU ;|Gu7G +‹W +‹W<|GEEࡘ33G +ŠO +Ίx<tt3U;t3uG +É<GF +Š%;qMAM;4,UBEU;w[^_];UPWVS] fu#f#3~ ;tF;|[^_]Ã;UqWVSl fJqfH` JHfJfHhhEE,3ɸ(MMEURhP t|<#tڍ3P3;5l=:u5mFuu3EG ,;E}K= t\uEPkE[^_];3uE=FGT0;|E0 3G;d;3;5`=:uQ5aF3E,GE;}$ =:tE=FGT0;|E0J;3=<\u2EPhP tPؿG;UtUPR HMQPcU&UMBUUEMEUUqWESf fMuhjqEuhjEPE PR^ thPjhE qHQuhbjjhuh8PmjjW t;u /WhWhW$ hTh0h$ uh4jtjPjhdjh R4Kjjhh QuJqu jhqjh8q<t jW}PSV qtj[_]ÐUj 3]ÐUj2!]ÐUEP7;]Uj!]ÐUj!]ÐUjU MRQF ]ÐUr<tZffffffƀƀƀǀ,3]U$ t%=]Ð3UWVrS$%=u [^_]Ðtj9thxjR8 j@HP@PP2f@fthxjQ8 <thxj@hPz8 R,P,@,t2f@f}'@uhxP,Rj; @,t hxjQ 8   rHhxjP7 rthxjrR7 rt"hxjrQ-YPn7 rt&hxjjrP-P97 P,R3USrrƀ PСr[]Ur슀y%]ÐUE]ÐUE@]ÐUrf@f3%]ÐUW}Vu S]f|1Nj;}$f|f|Ƌ ;} Ë;|[^_]ÐסrҍRщUf92u f9ZfEf0fXr$E@*fMf@fEfM@DEf3EfEff32ۡ׋EE֋EM%~;u΋EU%t?jjP RIwEf=uf}f}R,P,fF ;yEf=t UfP: fUfPv@Ev~IEf f f=FvEDvU;~$fHvf9Dv~MDv@v@밐HvU;~*f&f f= f&f=~Hvϐ3fqf=t rPh;hj$$$Ux,$P0$ROP5&EP@PE ~ $U $rRfP £jjjW-$rf#rPyx$rP(rrfffrrfffrrfffE~ $U$rRfP£Eu&rf@f=u Er@EU$fPjjR Q1$B3$  r@r@u2rf@f}$r@ur@t r@tR P jjPR$B$@$@ $@@r@urf@fj Q<$x8EЁ}tҋU4jPHX~1GKjP_$B $@ $$R P$ttjjPR!$B$@t)rtfrQ $QrEEEE$fqE裄r3[^_]Ð3%$" rtr3%$" t^rPrRvu $rQrPGu $$ururt 3%$" r@|urt 3%$ " $@$@$UWVr@t^_]ÐTrt/@`uދ@0uՋ@HűuV@uL@uC@Pu-@tu @Xt(@Tt@`u @0t @<hf3`UTr]ÐUVrATITJtJ<JP$R0PXf@^]ÐUW}EVu S =U+ 5M+E|,E|%PURVW:u؅tS=u 3[^_]Å~iCDEVj EU Qw t8Vt1uE] ʍC؋fH Iu]uE@E;|$f@ fCxUWVE3S@EEU@EE@;։EExD@EEDEEEMQ莽t$SqUfq3ۅ|7t RQtE t P2C;~ɋEPREQtEt RMQ[^_]ÐFE;%3UUR]ÐUWV}ǀt,%=t8%=t*`u"u$P,RWg^_]Ðt$H,QV=f f=~t$π@,PW륐UE UPR Q]" ]ÐUrfrftnPhTlP腺 3]UPW=rUhxjXr tUYr+P|$H,Qrtn_3]UE Ut J(3]Ð!J(U$3ҋ U ]3ÐU$3ҋ U ]3UWU Jсutu _]Ð:񐐐U8WVSGbEuhrbEEturEEKEthrUR螸W薸D0=~frWPkP_M/xEG/GQWuFtr@t&u"[^_]ÐE]CPUÃ㐐MQW^RƃϐUWVS] }ut9=ht-$uG<EfG;X}̅tH<u u E U@E;uM;t2EUPRPPWEfEf@ !H(  P(rƀ ffP: f@<ffffP$P,Rˇ[^_]hxhj $  r @r@t%hxPr@>E;r@t$@$t7$uxhxjrR$ P$t&hxjrQV$ hxjrP0 rt*hxjURrQP )3E;~ hxjrP|R FM;|$@t4$t $ hxjrP 3]U;} FC;|E;}  F;|UEډE3[^_]Ð$t%= t؋E+E;}؍EUPESPRWE~3ۋM;~U= CM;|$@@EE$t^$t3 $p<$@Z;~$M@Z;}$@ZHrt8E1rt$U@Z;} $pZu+M;r@t $te$u&hxjrP$ $@Z;~$U@Z;|3ruQ3yrt=$M@Z;}-hxjEPrRPT /3M;~#hxjrP+ FU;|݅3M;}}%J,;t.hxP,R%Pӡ P,%=~ur@t `PfFM;y}u]NE+K| NKyEUPRWmEUME 3YUWUV3;S|zU E;uvU  ;tiuK;~}ӋM +֋ ;uK;};u;E] 0؋E+;}M;uG;|[^_]ÐFE;o琐UW} VSu:ׁ}tʋ|M | MX,F%V~ ÉFG;}qMׁE}tʋ|M M #u$%~ ÉG;|[^_]ÐUPWV} Suׁ}tʋxM x MX,F%~V ÉFG;}txtGׁE}tʋxMM #u$% ÉG;|[^_]ÐU WVS @DEJ;7$EU%=u:EU%=uEU t3EhxU%PE%P+UM P,EUfERD Mq;}3] Q(@DF;|[^_]Ðr@tEU%=~u` EUPUERD Mq;}3]P肨@DF;|Сr@t r@tj j ffU W} VES@;| [^_]Ð U@O;xE @ x@xE|uf9tPfEf9|fEf9}2 @D4;s= u;r;u$fE-UEEOU;}GJUWVS uU @;F;|ߍFU ;~@U;}ff9SB;|uQr@t<hxPr@t+EЋEEE;~fU;}fUCEU;|uF@E[[^_]ÐUWMy@t#Q<fAQ:fGy@u_]ÐUWVSEu x;|MQ[^_]Ð}3M;~+}E@P P EPU~vff@vffDvffFvffHv]ÐUEfG frtIrt:jrPEjrREfG fjCEwPf |܃}/jj CEwRPzf|jj jrHPQ輞 POfjjr$P蘞P+UfrP[^_]ÐU x]ÐUUu ]Ð xh|EM QR賧 x ؐUWVSujT\IPBIGDGDtdtPjHGt6PIGGuEtGt WRHODQHWHfq3[^_]ÐGUpG fGfGffwfE fGfEfGfEfG $@ ‹Uu)$@ ;|U ;и3GGGG%!W( G(!O(% G(!W(% G(!W(% G(G O(3fG$fG$fG8FfG&G0 fGjjEP>jjEP>rr r TTEEEPEPEPEPj83E[]ÐjEPrQ= =tӸѐUPjEPrR= =u 3E]Ð󐐐UPWVS$@4EDFq qq % q ‹q q ‹$t:3ۅ~4MY$q;|Y$q;E [^_]C;|UWVEuS>fFfE;t^3FFEFFF$;|F&;fF&FHffF;~V赪ffHf;EfFV薪 ;t5EFFt V F ۈF ^tV袯[^_]3UWVuSNjV< U RVR؃LjF[^_]ÐU8W}EVStEEfG$f9|fG&f9G&@GEE }*M+;~U E7M ދE++ÉE1E+‹ЋE ;}U EuE N+J+‰EfG8fG@3EGE؋G EGEE?GDEȋEEȋUȋ EȋEȋ ;$@8$@8 $@8$R8$@8 $@|tR$@| $@|$R|$@| #EPEȋ EQP&: ;u1EfXfpEfXfp$@ $R E؋UfpEJfpMEIME }E+J+‰E~b3G_GE܊GGfGfEfGEE~f7W舧MEIɉMEfGEfE܈G_G G EЅtEjUR+‹MQPWGt W;tE܅tWN[^_]3UPW}VSG@t WGE$p 2@E̡@EGW‰EG Eԡ$@WPGtG t?MЍ |2E;}+GU‰E؅|EȋU;} f fPG(u !H(G(t  P(Gt @GG G G GU;։E|;} ;|]E̋U;~EċEЋM+ȋUGM‰EEȋU;~EEԋU@wM+ȋG EGDE$M@$E @PE @ PE @DE@t UfP: f@>Euf>tff} EEEuf>t EU;~E EEEEEf&f=EtLx|3ɋ׋tJ;}})}MG;׋tB;~E;}}€t}M;|׋tJ;}%=u&=u Àt3EDvUB; DE}EU;Xf&f=~jUԋEU t!UE‹UPEP Q UԋEU t!MEUPEP R f>t Ef8u Ef:EUԋM;~ UԋEfEUԋM;} UԋEfU܋E‹ R:;}UС UfP:EЋ MR<;~UС fPEfMAEM܋MEEMMEEċUMUUUU;}  R P G $G [^_3]ÐU$WVSE@tUM+E}EE+ȋE;~ȋEU;$| E;~EfE;}EfECUME;ىU|EP P E܋U@<ЋE܉UU@:ЋE܉U@@E܅[^_]ÐUWVSEO~C@;u S1OEt+P1EtQp1EP谁[^_]ÐUE UtB^]ÐBU W}VSwEE W%EE %_EKW ڊ@ ueG u^GuW@uK @ u?$R D;(H;$@4t*$@4H<uG G WV[^_]GUfP>G fP;u @;t%SV@PP[f0SfP$@ E = t8@ p;~ @ fp@p;} @fp M @DRD U@,;t"hxH,QRgU P,$t&hxjrRc$ MQXr$@,P.0x u($/Ð4x@xLxXxdxpx|xiiopDskSromStpxxxxxxxxxxy yy$y0y.v-^h#i#0#4   liorkpCKEYPAD/dev/iiop/dev/iiop1/dev/iiop2/dev/iiop3/dev/iiop4/dev/iiop5/dev/iiop6PHYSICALLOGICAL RAID 0 RAID 1 RAID 0/1RAID 5 RAID 4 DISK TAPE PRINTER CPU WORM CD-ROM SCANNER OPTICAL CHANGER COMM SPARE NO DEV ONLINE FAILED ONLINE FAILED FAILED FAILED RESYNC UNINIT This utility will allow you to view the disk system configuration. Disk drive location, status, capacityinformation, and other useful information is displayed.The ESC or KILL keys will exit the utility.Press any key to see the configuration maps.ENDA scsi map will be displayed showing the scsi drivespresent in your system. To configure a drive intoUNIX requires linking the drive information into the UNIX kernel.The ESC or KILL keys will abort the configuration.Press any key to continue.ENDCould not obtain PDM information from first IIOP.Did not read all PDM entries for an IIOP.Ioctl failure with IIOP driver.Could not obtain LDM information from the IIOP.Invalid mdevice information - no 'hd' device.ENDPress any key to exit.Press any key to continue.Press any key to return to the main menu.ENDrm -f %sview.tailclearPress any key to continue.Press any key to continue.Press any key to continue.Press 'q' to exit or any other key to continue.No device is PRESENT at scsi target id; press any key to continue.Device already has a filesystem; press any key to continue.%s %s %d %d %d %dDevice selected; press any key to continue.%s %s %d %d %d %dDevice selected; press any key to continue.Enter the 'SCSI target id' to select a device; any other key to continue. Enter the 'SCSI target id' to select a device; any other key to continue. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15Controller %d BUS %d Firmware Rev %dSCSISCSI target id INFO Type %s %s Mb cap %4ld LOGICALINFO MB cap %4ld Id %4ld Status %s UNIX INFO File System %2ds0 NONE /etc/conf/cf.d/mdevicer%s %s %s %s %ld %ld %ld %ld %ldhdrm -f /tmp/view.ns0 ; grep -v '#' /usr/lib/mkdev/perms/NS0LIST > /tmp/view.ns0/tmp/view.ns0rread_ns0list: could not open /tmp/view.ns0:%s %s %ld %ld %ld%s %s %d %d %d%s"iiopDsk"rm -f view.tail ; grep -v '*' /etc/conf/cf.d/mscsi > view.tailview.tailr%s %s %ld %ld %ld %ldiiopDsk%s %s %d %d %d %d%s"iiopDsk"/etc/default/filesysrTo view the system configuration enter: view To view the system configuration enter: view wCould not open the output file. /dev/imsOpen of /dev/ims failed, terminating! IMS_IOCTL_IS_K2 status = %d IMS_IOCTL_IS_K2 errno = %d /dev/nullwRedirection of stderr to /dev/null failed. Sorry, minimum screen requires %ld lines and %ld collumns SCSI Configuration Utilityƌ֌&6FVfvƍ֍&6FVfvƎ֎&6FVfvƏ֏&6FV P  ܊Ԋ SCO.interp.hash.dynsym.dynstr.rel.bss.rel.plt.init.plt.text.data.data1.got.dynamic.bss.note.symtab.strtab.shstrtab.comment@(#)SCO Open Server AHS 5.1.0/OS_drivers 5.1.0 08/25/95 H PP   Ԋ ( ܊ 1 7 <``B\p\H4x4 OTx]((Gb(xD9U.O..VdriverinstallV.U..WbhbaW.V..Space.oSpace.cSpace.o.Z MasterSystemXDriver.o%xpi9Kd[%[hJE E-<JD2`Ơ <݇*sde;jv e]rִ%]www{ϝ}m{uGoFzg3UY.A Df~4A 4 9CV?zb|?5l᠅l|?lGhܗ>X2<5~mm4ۂhBWȄsՃ@BmڷH!i^ocQxw M7O7,h-z,..WǼe\*WzWoיJhͮlr֔٨4=>rJ jhh|~*hްꂲh)GeM5¨kʩd`gZ}dG#kC* ENDkʎtDo||pDw:_pOaaJXX.Ô Xڠ|+]fyٙ4ٻ/|.M6r]#ѵBfDcR,xe௵k8~^VԲ 80pS+.k]hsFFJ:N/!2 pگlE4؜)wJΠ&h"Kg?4$ -uP&G D-Hɢ0LjmDe*z&9?cZ]wSIAJiM'jDtDb:Q)Mse"XӦk'm!&pKdQTLcFpDgsAց KN#!=*uSiY6uiGG~J JYڹ]d vb(Rg~=ș%G ڱ.GU–_⺥oY|l}ZKt0`o2B[z&4Z95 _zA6Rt\9A yOѴD}`B׉=vt8ag W,W^* !hDqgr2-*czdm{-l oGax1vV6VK2 ݙ999mK;9d-/AqQ=9g#I $*3 ' @M:;mv +Kn5@8㇃=<>K9G m b4H^8X0%pV{)Rf">. FH"p5IsXi6-+ԯ,2FqαUy?F  ^9Ky8),>lrրb]\Wwfsb |=߻WU6n(!eԆJyfhyU=Ne׊`Bjg|1$_ɝ5e): )%ߜ_po1a7`92Y_pHߖ;|uU+=諍WG]ݐkN){w|m#% OTBZAwI>Mŗ:j 6H:O:>G3z8eetA1"+Lv|Mqbh~#v,:k&8NLku?.֖BD@GIt3TOf, l^3].N,f"M$ӆڶ ,.q6AbNJqGSffͬm ]$&%P|BTS"n:M*g~ThgG),Q*TTLZĐ0$\unΜ!NAV`ġYaI>ԶQe2`qゐ$#$#9/^-Azg2ۆb dIh":)rHt>:iryp|]%hjV2ܧ_'|k{_ew:^l3?Wh<}1r_N HO{ 5]!zнF/\ "d^z/\Zbƥ/\ l9d!H#@iPAP:8j_\|gsj2=%豎c^Qf*Z zhW2yl)3^\(9L~U-R~g4YRUɭWMP.61T@w3V`_xaَO+43@uiw)ǂiչ* 7yJ՜rLisP˴qL.՜pL]Պ *1UD9jQp$mΔl Oi| qjvg(Am,xʞz&RGaJK:HHBi^Q .҅ԍCG-!l6vFm,Ev A{ˡGHf'%̐%ZxSFJX= |* w0Js X/[q9Z8ζ玸, 侗hVlIKjhl<x oga orK,m4I< WYv@69 YeM8%{gP-4Q;#h,-D t|V7LގO&i4%MTvn=[u#E^qEIPO΀/?e6]^csoHgrPm!,iC2Sd:o*_ .ܨYDޝ?,/f ߭,X:sS_:洖>~W _ aypSw3T2'h g;0C9eMI貃u%+rM~()_YiU(Uw9rN O閷lz AU ~Ys'CfÕ 0 'CO K^5%6셻H[9d"ǀ#Zi|D~P3 \D;`@Is{a.u*:^2 oiO{r||_dXs@7Uc0In"2c6Ǧ4ѨZzcܞ'!tr"ŷ/`d}-3V>Ww<ȌcBMukY_@Jɀ X:ܬP.5%\i/w8+S=nye=l!/<rĜBgGFE@y\~gZ9-܉1ynn6ɺgZXWH5+v0}@Avc:4t\87)&XOI\~3~xm,ߚ\m57 q$s^k㵵KG-a"OԢ7}J qS֛-HkvɎ0ZC<@ȋ >g:~a6 /^_?UEٛI. gOFٕj`o\>+N֘OC8(68yf821 {ǂ9:b8#Ckɻ|Y˰Y˜Lp`<[FY֫)17f8TTQ?4A㡝b ' ЗeAv}ڱl!_YX_@6޽d7[טWEaЉzP؛||c62;Dy7-`z]yM 8KT?Pc?5^L ki 6~ǹc~蘘Ju |J2di> Ηt&- r$ )?D~#FƄP{PĎ-S 2:!6x4ijF`;aB;< +rQಀ,cy՝\*AԊ%+Rwsq3r|G`FGW y{5m X'@lp80qŞ?i}| :^TK|yʯSPl< p_/\]AIDOol<+v\+'DI\ _ɕZtfVdC\K|xx R x-H)g80t2&rt٩ &rg~^W~U-3ixnO;i)Fvg@WY4Hs] EX 6B\1^.w%ǫp7"¨ G$yQȪ1w.;q5E>`HK-B 2Pyw͢~fQj:#A;}N5)kjRVH͔^Yv-iȮ X-v}б}(Bh:cN00x7c$VDXgl&I樨W HDJ”.+vGW-/&N#e(xH$D0Y*F}l.Y'^S҃$,x#t!ߦ F;s+& SVF/;G؎7v>;Z!h?_~lu&s5;ο::_f_ zY]coY46-z)esso1b\}ZlMT@M|.d-/+ XsGJk ⣥XlAS}288x6 1𦣥>y-7`5-ClXJX%5>3'(ih[=lL*ǚvCN3i(U)l&! %4cxdT8.K,"3jg!d .(|{Жc[^@f j^wd >Ki _So>2MSR/-e~wڞHVbHAx>)&dܰC P`0()MPᅋzDϺ]L"$6O7zM-R;gv4Aru8SYIgWؚYV!7$gO>lλҧQt !d}'23Ew+jgS^0 3\[d[U]8\uqd7!(~"Yu4=(Nrh}:GSKDK nnsaO=p E>!c:IعB ؁QN RemJ"h%6>.L>AԔERfm$ ?_}`Ҿ:S h&$BE Mtq0D&00he„9h4I64FSQMM=mAM`"c_|}) WkdrY)nSJh'wRlZr62hS \L(ڎФTQޢluKlq?7=o^+6Vh v0'JJ\*r!ZU4;8pϋGGg&g}N` Y †P͚A@_YѠ1'dBtŊBlxk]$D棩hXnE)*dpԵ P j9 :Nwcv !=ANCh؊f\IhE[|ߛGΐ qRk̫XQ(W̒q OOC bZֈ떶$ "Z%/btdiM X\G3LU35X3=B[^VrP)?0}@diaUj{+qWTɺ'n>'іr;_F`G9Ԛ{~1'k,)}DJ[zSk'F _sgZE,5RHn/)?|!Z)CkąTtiG* S{1H_צkZ`6sE x!7,p_ӑvXI)y/V؟(̃U'^SDHGʰ$#du-Z @ʎJ#VEk}V5P8Vي4GPD9nt}Jή.WlfO9.MhD"/ /€mtEVMYAq˛͒fr3[GMq0V᭯h08ҿſ:WtcOeє;в>:2:FjEUS1s}'>N#zp[oC.$Iy:K'f˱M?vkzS f2jO|eB鋔x- $`u^q+&iodtہ_/,q1>GGys0t>Cy+Z &xUWL۝ /H ) 1p\ W+/NfwtKSLbtY0q\FSEF,;(ؔ^S@˷.*Sm=)+cwU`, xUa9SB h$ת8̎"ϼLL<&x>Kˏ^3z}Iz崚Y0@*/o_۝fm2SǬ[~VqWhY͛':&ޫ-_Q*Hڅdu^ӈ4PO鈪FTDꞨ ™ʖN@m|Q~]L+B;xыhȀ gn!^iG#OUT%gp5(0Y2OS(L jxgIz;wx<raɬۉwGPAFȥ2%1Yrx8wM#E|[c54텧[ c.FzQރ}al6H\,*-^՗/.K|E椼;{ۙjȐ|Z?Q$u`#ձg^_\hn\"Kkk%ak`4ǍB8B֍,]N6(Ӓi`xV-b =ce2ro28L|aF7p5g??,ϖ1?cf{y1  . l5\_uW SJR*,jUbjUbKB>pA_> 7EimfpCc+{?/?*ʴY_|V]rQ5e9 Oi9aF%lL`ya~:=V,-^Ӄ8}?llKNƉ}jLG/VI)H2rk?,xl荭v"4I_A,kFtu(9颽v0aʅLgFm]ZdZYJO8z[YNt3F/a7&ZMt}'PL o0WlGEF*"(DʝTx'~)|8`!^4!+DҲ^_+2Bhm>\HGLv4}e? j.0E}E*x%+"4ebF1-s+JeXIn__;1%үSU_Þ~UɆ@4淃|!JxvfxO>h |4\~xLcf`i|sEhx s Dxv-`K>|)EF& 8|n jK2c3ʗ :6\71,YBxD*GKZ;r0y25{հ@qaDpy-)/Do)ILfgI0zt38&oಳ orh2"h.v+; 6Gq ?lM ! J2Kc0Zgx ȥy襴ȑOg(V=cފB&x؂s~"JP<D=\o kقkcyBhb`\:m] ӹ_Z6Aޒ灌3D M m?l"jXH_cy ?<:OjQQ9Vb;U>q i=_ b>փյ ;kh|v ܴ~./gԀE^8/C͖x@g.4mQF萬d>)V\m>,)싼t͡O;SrD> 1Ol}`c.=ĞyD~Q܏ŧu;  (_ _PG(_+Ǣdo\_B|[yPa}1AZ&ce #qAG,{q{`c{(5Yzڬ )i+kjؗ|HKEʘMaIw`X|Rc4, Wbdp̡NBIuI%Qs\Ǯ tՒfO 氮geefp3V'z[hT[ێaL#tXIE9!Ez.Q.-zG˵DXƁݛdv%ltrw Qe D(l&JH8fRfr8r#bpsZ irɓ4]ձ 0GH$GՌ$/% 2dĚ(>H +PU*]f`%ENg?F@]7&SΒ%}UE lj8i~'P;&ԯt÷2 8^H` -/7?5#GVB1!z魬Q3VUᮙOZlD)i.>rĹC:R /Dҥ:2LTs&3m#7u=-*zZhW2-Ag.քVw<2TɥN^u t\щ]C]|~)kk&1 4%5s' J82aޫ)fֱսVF[tқDtsth쮂r&H{k$YLvS{k@83x0 52\+"qS%@[N^,F,a ([n-rԛ|-+iW.>^V얌΍ĹACcd xOi4ȻfBMu) [h)X rET-w_oBɊY1~B@eM)d>N2bnY>ٍ)8⋂Ze}԰59 wFG- L 9΁ȶkKzf`U!ӌF/!?])j$v7W)-$Ѿ`#?ɐ@J<wN(ѸX0ȓD eĐV\~aI#E8Cܷ<nV2G·PE*A]3GyRǻL3`LuY.o`t\$ ,ZhE@.B5O2ʖ )l. bVQ"^Q"eX(TWH\rIzk [jlD3imv퉵XH2v t,x5W0d( CGhpA"&Q{;^(hzQhbLI.\Ow1|kM3N.'+7etOgucZ̗B:`) &7T10]Xgv#C䟆eAdQK7$Z-M S0{92䋙rE̹"\蝿?36x@驷~(ƥP\0mj)J|{! FPo:>f;iJgX{dTڗ&OOdFr=x|76:l=4r-092_"@6NLA"[N&^Z>BԲ:RiSm̱>! sjNzd=|}5̑G4b]y3}09ɕ^W$;p%[V_vSx_=GG JP"<2١(qwSsSf;<GŒdDwEKDMJ!%>(EJaRy2·Q}$wKlsua@u$+ޗ'Bs6VXu.XAhm˛Ǖgl=Bm1\ SAA<ƈZ6Lk9&8&WOT8XN/g2:h-Sڟ'jNxW&C^Sܑ;z'@>T&Ƒ77&N5LUmejp3^RD=Q[JlUP꘧Y9ũh[^1ϧu>*J=?t^ot@{"ZuS }Ÿ?uu~ީ`j!Lחp$YAea?zgXS7~ uZwa(\ k,!xfz.?z4v^@FM,!]X,EGbf ̸Ǩ5( \ L& PԑxfS7[_B`-. Ty!|)a%Ɵtlʸӹ/SvY\M}ÜmK;rd7ūg{f t/ a%*ck͏Hx K*^Y<7 bw`\_Du> 8uJ":΢#.8dnˢB1aGL,N4Eqq +; A.8iw׫}qZBMy?Xnra0 g 0IYQFH\2*߂n̲NY/^Qx ixu< P7T jG~yk)q]4 a#{hƇ}tc 0YZ7,K";u~\s#*5&ޮ WѪSx'-}z<0caA>,WYɇ@=C鶼av!b^V+p=I`כa]2-V%8!]+m~8=xk8IX 7t}Z4s4fwNs zlsc>o׍dW$ݎj 6Q8|ZG'$  UmKJǓv$āܾOGOGa5G`#޻8e#J_lE!J1>ڮQ[/Xj ÉԴ _2_X1cփɗv^ڞfӶPho)fx޳K2t[MW/1ZQ'zezmCycUĂr~8,HWtsM]vGTrerI@22. n. !)=1I1Orr1 :FNXG7F)&II5\\&)&$@)&R%|)&PEC GaF}ԂR9kœ^F٠Oi*R{I%PbB|1]/J+fj}S4Գ7C IpyN;~@Gx|uț֤M]tbyjɫXZ{˒xG &}N4t@!c{,4#_vb7y#ۛlF݌{ݑu@c<6߮|a,XgF#˾\Zɿ/U#vjqH1j>>,2+ eO}Y c({Oj)Eo.^F6-E9W?3.H"$ +qp@ ԫи+iȢUyfSgTZG˱k؄דKǺ LJxaf@LN^b'x&TpS`fi۪j̭{W8tt0:8f\`;w!%ZۻN[:$AeB6j6rhwѢIr ts+ ZGҰ>:P,8!uq|EgS.܃l)B!ńW )PƼ0-L;EnQ-Λ+\kZk.cL^|uP]O8QyǏ*̪!ST]h6&:۾4=G] HqΏ]E?Ie-`ڨA7 }+? BP.W L(Rs0Ys |=0#_GSձmy; w r+^`4-6ygoCpT(:mc_C5ϟp;7ȻXZ`i2z$mjagInWÁ7BXWggYd7>NR-J#ddrɑ= Z!滄?O/6V^tEs T:ӄZy.98!(`Eڝ7 c7xXԑ7jgfV0%+^ Ի.݃z;C3зwmժo6~wc׈=)]9 L~u.t J*d< 39-U"k7"s8,K,I❉dCt&.i3>M w@3xAJ Jm%uD4 nl&^ܔ\/3HlI{twḯ;Og"ͤAIʆ@身oE`z8+`s?Χ\NgZ?3 v37?X(~~:4\3hrץOVA`+A,,aQ$KR]=NEb r j⇫dD09U F>o[ML>bWIL.Hi uX_SHuydL~̤ixMl^k 9^T#qp}rݸ򛀒cXUQT[H[5\2koD9JKUjzuAA\kI7Y)7h[{040_^w+pt2} R? LNd,!}M. pIz?PuFׄSQZlfbȬрpHy[}Э)o5(`Tԏ|62: K\ BT'>Ǻ+^Jl0#53R32%/%"/A|D !nTl)LP'1wC[c5ߖgqH^FQ.o !.pj { :)oa3 |Z#o0~i/޾@B'~ N,iiAY?'GCIGjgGoN @HLCr f2Y;DٶejSO@{AeN%A&˕v^91. fH'h0@ uB!Z ?`UbN`VʸJ_0xhWFv -3i"{!7qlqB4ж[{ I^Mn([_A➙vC1;BVF!@h ǖևWHn&YX M80!*9DxRW$WȄ爎{t (z|z_rßnb+|-*ꜲV9ꎴy@-cNwGc(NBp ұLtvT28񎠞;~o ؊7`µN/s'(' DHaH+_R9vH!Smlob8rc\]n* l?W3ۭ*a;,4ͮ+TꕹAʫқXt)rqNOZXIBUsa?`vȇFg}η :vvXw SDA"G/FI]hU,# MK$ YaZ`魝*\3j"j`'ʞ#2_ DmfwG1cWjjυ/`=$#rqA`ߥ^ub"` !~F[GCgsˈr֮]VTU2 <8Z2o|YP CjCbw:%24}LdE't3PAhj=J,x$fwYsi6&lU7O9׊\j~QƸj ~OJy0'qOm)W$Ί,]s0}r)^))v i{z!KKQQK7,˂m)ueE9x |A6wdA5-"tq,cZD)d n x+l\؝P{|k/HWxIɚ/}'=@]xHz=ڙ_n{S\{I⏿:9&ĞIl[}VDT;m*" y yӖ^z,X@!#̼͡y./;/>1yxvSgJS R.  +Fuj*}rW#}?P~py% i/ WD=l` d¯܉5'Qn0ݿ@v bܳ ,A:nج[ʵeRՑE(UtO> }f- 'َf:"NXIi_VXM4 1םmHDP.W 4{@b񻇦?z'n,J G%w . 'G%v?8"ϱHSYP.R+EnJl̮̮Ӥ߾dću`wsH_/mwC/*% [M8O ~mhI B{`ē ҽl׉?%x7Y*dt,]+| =RY/:z[|Xqկa7 hJ*eptS eBujA^ac/ğY<K;qr*ůvvIGfC63bz8a;ȫ!Ʃ.'ƅW66&:[.=ٙ\3̐6 #MG?()ER 7o<♩L."4 yZH)4@"@8.Уbخ6#S@yj˴=Y T<@o{vBT6r3%kEr ﯍ج#S ꗜ((Al;Q)N@ ֪ iUNxSEI?͢ݡϝSgRt#m'M㍟haSJ\g,걜~7,.;wڮ{L!ӴIUMшU 5S}ufՄj+t֡h-ҮS!\Ǣj U8*!|ΌtEܾzK椾jc׆ T9H$]'jt/$Rk *ZtI0#uyիOմ܄河MEsL:iQ1e:Iu 9bCn'7SRv۰dxDxqtvZF`ѣ/+m=SןUC42x ]q+o@\="'W;'zgn &W6>TO fGwYl}m3M5}j[N=C͏Qmc;aU-!7e3T=Uk3)D jtCW^2!f *(aǩm]z9}-{Q!!6˜ܓxSd,,[cϖ@Ydt+AΚƁ{)"oIWLn=˼|g8\Jl7 pI;9ש1s9XJ&#S$Q>@{<0fkVA 4]u]yX {7&U<2Icy>V{{R4KEyg˝S7}(믽0k2߼ s+t ܮs#\/ e?4%5vu})W+\/\`)FBw$3}o`!v%l~@DXe* "(M r{UXUwTҲJMʚKUT5 r)5rIZX*D:l:=e-Z =7)߮U2-9e|h)t^9Np Dc:Qx$§u3GDJ Z{کiUi(81yRg)*#~R;$T5RxwN4{T:0ʕvvI~<D&Yő3#o9ЛY^BC!hT>n 2\׷s.,ϗ79-ػ[BµiS6@lܡUrҦ+"J8JNQT(VF⺲7D?xV3.S3w:[]8H?LP*L/M\/0z] vj[='w+sK;(l+HQq(EEqVi=fA9ƪz)U=Vrr*´ƺw,8iwqMJ%#ʥ"qa*,W[}3~Z'v]T+jOTڻKq5mvr밭&GbR㸃{K&ns%t ɞ.cbH십FƷ49Gk굟|gV7h++^qqɽAB(ZoGoCjgtE$3FXT=`&]ΈDhZDzZG5hmV!1T0a+L@ϨgS*ܣ]h:p |݃ХJ_Vw,"ELA;Dp w=EÔX\(Q1g~&xwhVqc6uGnw_^nnU݃xdv;Ʌ e %fE+ؕ- XDnB*Pc]ÈxzRtk/LM1 -2`($#k?&%xLKkƢeh%;S'H:xuEst֜]GS(SYY _Wh|YRO>YǾ-}Yw m5gǛ4dϛu{$B,+K0\|a|B1m CVΧ9.!kvN?v+mIeSIN(VZ u;sSYw=;wenMsU=9"U|lF託zӃg?qA\M1y?'Fef|3GF|hIG6|_G{k¹]߉wE{UcGtap,9J EʌWIrߝdqE ^QU'~G*lHK^W# i|_)u#?YЩVXy.hi>j{|uDu_XÔ,C~Y:s(/;^Ei't $_Z;^5- rDw 2u ڎ]F>WS-Nccx% vG* >jua,xٓmyW𽪞^'S+nUF46r>}'k;[͖)NODމȡe(w8eL3 3Qz:{yN?|D<|Ur??U *-y4y<1N+r'mWŷ๼ھ s+_ʔcJr"5r;AGoswɑ8FС;vA:N3U?X0**_>KPz/Eϓ "ã} jԶ+Btrxq2QIXV g.*_5Y$E~_Tr*7'^r/Bn'{KpUXKԿ8dܤ,zw gA8$F%9za칐xa9ya~s,[(a@ |;}E%rܘ͢;it>r;Ek5PUu{*ɖ8\-c~y՜iih:9$\:hPXp,ٷeGe~Y_ţjs|cnt "נ˳h:FT/7lzYY>^*y9䵯AKCt!bFmזqHݝ;ZjMS5^z^Fll2KS4fݝ3Hزhْc,e~s {".^S4^z2B:~8h_ȍcWbSIoec V-vHGj⁻/uc?Xc?Xc?Xc?Xc?Xcc/ٗ?:dev+0 ѯ+5!G-)隷eBQVl5SܗWDrҥfzaL/ȳ8]xZ>zy r5MK"zETr4l]*eڧ]8| B?!Kowcq *&m 6MZ,h$tVmC z9fږyڶUP ,2 vDbɹbA: )6MdctM鋽/Z]t$QdUZ=}S; Zfͬ)5ƌ 6YS2nBpvoswE,ly *tsiMi_~xW+8BePPŬQBx%o-8%/p_^ N7f}i)<><&fc&՜3ee@4n1*`TS@ݞQ .ɕ tܺ]Yl13Km3pF^s\tOuu+"5EJ]'Zp^BB=B 2l|1a6$+rх]a/%<Α QLbNt]C?7]I=9QjMͫ,Gp/^:\Ҳf"j%ivׂ1'Ӗ o2,5(DK^5:l7^-3\itYFt 5Nӝc?Dc"ɺ/?z]d[2~cRӧgjv&0('-iʲ$Wjɒ#sǸlC)fu"Jv]  ʶoE/i#PoMNc757:*-= <3Zwv#/«U{CK7rMX0 ?MZhuyyRĀRTE L3Eƅh+M.+Q?ok}gCPZQ*>yKߵ/~ 꼛ݳٳI]&>{:~M5'250:r??TtUZOU'v)?αG\̕O9܋Vw~Vw^ag6]~~Or{Sg,  y||䕗$עw#!SQRRN^ 6! ˤ8 ,:#" Ζg{ʀU *dĆsL ܃&EUL*ۇ{цaV`34a#w > KڂIZ6H{i8Gd9ߔEl"0 G #Y}h=RjAnρ ݒ@8Î$wHrⴋ­؄u"Ԁ73P8o Z H7}7 s GoIqB9ӈپsQw<ӹL1iWؠ{9P %@~)sFH7(-B|AHyd\lϗ9PtŘsc?&so۳3rlPφ85:E8opFX#{8pZǺ v@;x!u Jh7x}K6@e` P=ZB#͐p* ր|w`>1݈85\vgl,ڀ;!н{ 1 CFqBB>L!y[o ǐp[6m ҄y@yV:p؀? >u? [~.J2d yQ6{#r8@5,ЎԀ{ۀ;>x<R zU_8S^#:ߕNs )N#0iڠZ!OB>K $>g>8G^-F0 j8j8-G>d9QZpŨ܄z|`Z">+ڎ 58Y͹зGk8 v3(( _a{;ʙ z1:+:+:ar!o {p~ [9{l߆9ao6ۻl=WM<\,vTЏV\k?voX-<V]WNT[^H5)<]ѹ?(#;oThG஦u4m=pGcG?v4zB!!a. 0T|x`u $=ZC?\ln`7{|G.AJy>vTR%o|Wdqݯ.c>H ,9wbÜ3C C?0` 9 y`/*@n{rX e3QjFA+pIqN -H[مXzfl'"Mlh q8g.{^akcU9 6{ P xg:}?#qxǫ;f0:=qp=fp'c`[vD ~&>  ~QpqG;㢎xqh݀ֈ> a``1P3ͅp::I4vGq7P^,鞐#ŝ)烎~z*pkn:3g׬ 4oy!}[ u8CvAoxC?`[a q9UC;x<aKu3!@?0 p kd0bF#z|)>g9jpo>m"0Tc{05qi<\iȺӁi@{Ϡ9-v< Dq@f#G=G_:6xx\ڲ5 {o[|pd0@z0 9IdT!o.@zN9`"4U Y>([ xh  08?DžalҭanAͼڈ?v/,  }$&kzy3qɜo| ef>2Lm@ZP҇f-{0 ޕUewFAUlZAޫhG^۰3hsu;@0p`,GX}bL'p)Ol`b$x ,|h#eZЀ;&2d {Jٟ0 oj`8w[d 7)Vd8G0ニ g8-B`[ⅾ[׀E=NFSp+Ad߆}|зz!oM ?4wD3 iB֡nl#І~#ل~`˱;lE؋fA+m ٭7l0-zyX[ 8a6xg#nXt;(h aac1g':`PLK)'x 0 ce?AƦH[8RitHWƞwg>;$hEB=X͎/[ qÄ8g@܀>{zЏ4w@ל-J޸@x;,ynjl0 ʟNOro P? pO 'ŵn>l [ύo>4h @H  ȴ6ChD\D} *_L>> "إb'4r39@hȞ7gEYbHћߔanʛ3@ [x-{- >8|^G*m#Gzh >XrNrRSEiMǂkB&o 4 9V voN3$ćq6Հ~sqηY3?7ݶLrr|pyjn8vSSq 8=p-Z)WQ ūw c+ӷۓuiA#e[||4(so9|n|pSe< AB=QH{^)*}#cSۋiC ΪEr y!?X .'x3.}mH-Vr}03{8l׆wɣfM#i@| yވ ,84n0YgsFՇq paƜ8BΈflf-l@g g>`G 7sD#p#4In؃O`6w{@~>Yʃr&:x <`:r.2 n8P00A|{Hg3o]f#wЎ7No}f99}xgm><uAǴ=[ {.~0Nv0GАd{s;d q (|A<Ra00 n1`8p`{Lo|p|n@1 2,@h[@{@8v5`>wzʷ mчcݘ|HrAPugw'6$ʻg?LY5pa#s9 u@>9ć൧ u 5BZӃiZt/kNMiп ޴^@:}qs:[<@@ ޼^AЫ?^tמfv;Pk^uo|`9v`r/T`> c.Aգ'br-tkW9?vF٢}[Go/9{wxq -w!^ghճ;X[33gkf0ٝv3>6`;?zoy(A+ 0#frpQ{.hamE[Cx8@C_whtkFHga;NF TR جV1 @a!!&3OMIH4[UEj^+J{xY`0Q ^:wj9<^ȬL*e}'ӋݗpӒ9aPJñ-0ݽ+{0ץ?MQæF lVW[aL<ܑ6Ǝܜ}G)h85=~!𙳾Ӛ4ޙ05Ə4xQ~GKI՚<7y?P4iMGTha L?4t8mVhoaf4v4pg7{ pLy~lٳpQ;;-g;]8'rT7qܕ%bgBGBT{_TR6ô0^a}Gh 7{ yKrfL͹4~ `hcG: {~-Bnʅʅݓ~fohweG VgwG-Qva07oq=X;zO{MѠ(C*phh=s&~#!4y[9`0L3~L; ޳ P#pa%B;SG~gb}{o~T.|SFMߕG4}GS[f=ѥ4k s94x"i{dW(0CG4xFe'V9.#馍Y?t.k>_l` ,4_;G4]@h!4l6B!G<G>4xhoJ2chrHQfՕLyDŽ,|ޤ<ȱjIGsλ(QfYGF#5#>+{7rL``HDNNc`A,:2!qS~ٌ} 1@:fF4cՇiXH:‰1IJwAUiAODX?0`ٴL:LpjlLJn"c٬pP. ^DḱsOi<230?*ubS/.\;.iBC,Ӯ7m lxW¦π=/);+X)Vk#~Ў~uͥ.41h8*xe,93;PuhT}`hU<SWTuX@Uv\H uN{L~bK8ZLz*e8յ cǀ܉PuS3iX(A{P [|JݍܫP| t_,mv@ْ}_, 6ʱW֭ X;)@u* 7@c:@շTi(;6n_Qg}|^EtE7:/~;%j: X=,P9`4memnJij/Z%z_uOy|ۋd>Yjy)N촣ཉv m7vVN݃NxX?:gooAU3덏5;慒o=y/n;lV4W0CSc,A^`땠7l}66ΰ.O[&2he Ƒ{=򭞀l@[;@EI uX>8X?X`x*h<%xC-INaOO\y,y1*`160gO*AMa,`zc8l!?R?1c9k俢K8~I:ctOs7&Hi֘64I!"rtd NT>V"q4 Wiu2?PXAqx|O5[^m7.UeJ(mbyJ7D^`i8lݯߦGpXOK C5]>n40]OTya_9@ހ32KgSXGYKc@c0P8 ~@·`OM@ppyk=bcqZ{?O jfzDͳLN4:@|;%(X>^E7FLsއ69^5x:!Ϣn^:Ǚ@+7~E4y56t46,߬0Y-4 @ 7-KxNxg 귢U(~"K 85/ܭli*!soc1cS 5l;W"kskfLhk8.mU.JCU0BǞ$G5rՊt.cC:.`p9ƾ[5)tKf3w_~{n%C yE\_G$r`jEOMFK? .4 ɷqdqM%3d,l%(@ 6 \->Ad[ qiT tcكJb# Z.c I:lcaS T`~pSqX.ʏǞxtg>B.+r:,]$lѯI9> ۡ'ui6ퟕ6yNX'70ۗ%Mcz}sO38?7?4~DC i6gff &@y` :`A$ ycIʹ0 AJ7Iת :m֑bˮ5%nE uhjY=V QaևDxnFi 4܆j!7`n3"ɩ 5,akpU幊rcwDbf҂%ERaҙs4ƎpΚ9WlYSb>6bB  Y1g 5bOfjcpNA&8̗mp9O[ue*ۂpے֮3`KqtUb[$Jv,W5/qICEKH8Mµ1sh><5 x0ǝECl a:yz0g#/Qqz3rPL^JO+jt!b;H?R'cD]ᒬ4Pa,yiÖ߭hLZ<-rmfym$AQ-`dL 'E ӵw[`E2BB;tx-Af4phM3OjF+#ծ֍y6Nrjp#ˁƯc9Er$f!,3m< 9<}U>WbʸγmT}AL X18XωoFY9FyiX9 `9OwX׆cu.,\e]"CȸL ]81ٸu㹎0b<:ݹ^9òC8Jbˬ|$ ,>@wt'z$&@duv}ͱAފPS)>Y274䖣q 66HpJWXA)4Ň`p` c}Y\| gj$Ś &kio%= zD2TY>EQyQu@?7˻:o^f&Ɠ( mY}:  ky!6:^`IIw}S vbV4lH&Ү; 6>L`4n'6=2&4nN'.... */ #define IIOP_SCSI_BUSY 0x8 /* SCSI device was busy. */ #define IIOP_SCSI_CONFLICT 0x18/* Reservation conflict. */ #define IIOP_SCSI_VOID 0xff/* Ignore this status. */ /* ** IORP.ioscsimsg values. */ #define IIOP_MSG_COMPLETE 0x0 /* Command message was completed. */ #define IIOP_MSG_REJECT 0x7 /* Command message was rejected. */ #define IIOP_MSG_PARITY 0x9 /* Command message parity error. */ #define IIOP_MSG_VOID 0xff/* Ignore this status. */ /* ** IIOPHDR.issstat values. */ #define IIOP_UNINITIALIZED 0 /* IIOP is not ready to use. */ #define IIOP_READY 1 /* IIOP is ready for use. */ #define IIOP_CRASHED 2 /* IIOP has crashed. */ /* ** IIOPHDR.issgopt values. */ #define IIOP_READ_REQ_PREF 0x1 /* Read request preference. */ /* ** LISSHDR.status bit values. */ #define LISS_LOGICAL 1 /* Logical devices are present. */ #define LISS_CKSUM 2 /* Checksum error in NVRAM. */ #define LISS_CONFIG 4 /* Configuration error. */ #define LISS_CORRUPT 8 /* Logical device(s) corrupt. */ #define LISS_R1_SYNC 16 /* RAID 1 sync map corruption. */ /* ** LIOPDM.device_status values. */ #define PDM_SPARE 1 /* Device is available for HOT SPARING. */ #define PDM_NO_DEVICE 2 /* Device is not present, vacant id. */ #define PDM_GOOD_LOGICAL 3 /* Logical device. */ #define PDM_BAD_LOGICAL 4 /* Inoperative logical device. */ #define PDM_GOOD_PHYSICAL 5 /* Operable physical device. */ #define PDM_BAD_PHYSICAL 6 /* Inoperable physical device. */ #define PDM_CORRUPT_LOGICAL 7 /* Corrupted logical device. */ #define PDM_UNKNOWN_LOGICAL 8 /* Logical device not in current map. */ #define PDM_SYNC_R1 9 /* Logical device is being resynced. */ #define PDM_ULOG 10 /* Uninitialized Raid 4 or 5 device. */ /* ** LIOPDM.device_type values. */ #define PDM_DISK 0 /* Direct access device, hard disk drive. */ #define PDM_TAPE 1 /* Sequential access device. */ #define PDM_PRINTER 2 /* Printer device. */ #define PDM_PROCESSOR 3 /* Processor device. */ #define PDM_WORM 4 /* Write-Once-Read-Many device. */ #define PDM_CDROM 5 /* CD-ROM device. */ #define PDM_SCANNER 6 /* Scanner device. */ #define PDM_OPTICAL 7 /* Rewritable optical device. */ #define PDM_CHANGER 8 /* Medium changer device. */ #define PDM_COMM 9 /* Communication device. */ /* ** LIOPDM.device_usage values. */ #define PDM_PHYSICAL 0 /* Physical device; vs logical device. */ #define PDM_STANDARD 1 /* NonRaided device. */ #define PDM_RAID0 2 /* RAID 0, striped device. */ #define PDM_RAID1 3 /* RAID 1, mirrored device. */ #define PDM_RAID01 4 /* RAID 0/1, striped and mirrored device. */ #define PDM_RAID5 5 /* RAID 5 device. */ #define PDM_RAID4 6 /* RAID 4 device. */ /* ** LIOLDM.device_status values. */ #define LDM_UNASSIGNED 0 /* Unassigned. */ #define LDM_ONLINE 1 /* ONLINE. */ #define LDM_OFFLINE 2 /* OFFLINE. */ /* ** LIOLDM.device_usage values. */ #define LDM_STANDARD 0 /* Logical nonRaided device. */ #define LDM_RAID0 1 /* RAID 0, striped device. */ #define LDM_RAID1 2 /* RAID 1, mirrored device. */ #define LDM_RAID01 3 /* RAID 0/1, striped and mirrored device. */ #define LDM_RAID5 4 /* RAID 5 device. */ /* ** EISA IIOP definitions. */ #define IIOP_MFG_PROD 0x00304952 /* Tricord EISA manufacturer code. */ #define IIOP_MFG_MASK 0x00f0ffff /* Tricord manufacturer mask. */ #define ISS_MFG_PROD 0x00003800 /* (K2_ADDED) ISS ID Reg value */ #define ISS_MFG_MASK 0xffff00f()*+,-./0123456789:;<=>?f /* (K2_ADDED) ISS ID Reg mask */ #define ISS_BRD_MASK 0x70 /* (K2_ADDED) ISS board mask */ /* ** IIOP_DEVICE table entry values. */ #define IIOP_EISA_SLOT_SHIFT 12 /* Number of bits to shift right. */ #define IIOP_EISA_SLOT_9 0x9000 /* First EISA slot number. */ #define IIOP_EISA_SLOT_13 0xf000 /* (K2_CHANGED)Last EISA slot number. */ #define IIOP_EISA_SLOT_INCR 0x1000 /* EISA slot number increment. */ #define IIOP_EISA_VECT_9 23 /* Vector associated with the first EISA slot number. */ #define IIOP_SINGLE_BD_VECTOR 5 /* Pre-SCO released 3rd PIC changes. */ #define IIOP_MAX_INTR 24 /* Maximum number of interrupts. */ #define IIOP_INTR_PRI 5 /* Interrupt priority. */ #define IIOP_X_ID_REG 0x0c80 /* ID register address. */ #define IIOP_X_CNTRL_REG 0x0c84 /* Control register address. */ #define IIOP_X_STATUS_REG 0x0c88 /* Status register address. */ #define IIOP_X_DP_RAM 0xfe010000 /* Dual Port RAM physical address. */ #define IIOP_DP_RAM_INCR 0x8000 /* Incremental Dual Port RAM addr. */ /* ** IIOP IOCTL command parameter values. */ #define IIOP_IOCTL_READ_STAT 0x1 /* Retrieve IIOP driver statistics. */ #define IIOP_IOCTL_READ_HDR 0x2 /* Retrieve IIOP driver header d.s. */ #define IIOP_MRP_REQUEST 0x10 /* Setup a MRP request to change EIOP logical device mapping. */ #define IIOP_IOCTL_RD_PDM 0x11 /* Read PDM entry(ies). */ #define IIOP_IOCTL_RD_LDM 0x12 /* Read LDM entry(ies). */ /* ** Special Mode Sense, Sense Code Error */ #define SCSI_DRIVE_FAILURE 0x80 /* Ciprico hot drive removal request. */ /* *************************************************************************** ** Macros *************************************************************************** */ #define IIOP_HA_NUM(ha, is_K2) ((is_K2>0)?(ha&0x7):(ha&0x1)) /* (Everest changed) */ #define IIOP_RETRYABLE(rtype) (rtype & (IIOP_RETRY_NONMEDIA|IIOP_RETRY_MEDIA)) /* ** RAID requires access to iiop queue for mirrored write requests. ** ** WARNING: ** AT NO TIME MAY QCB->qcbin be used as the 2nd parameter!!!! */ #define IIOP_QCB_NEXT_IORP(qcb, new) \ { \ new = (qcb)->qcbin + 1; \ if ((new) >= (qcb)->qcblba) \ new = (qcb)->qcbfba; \ } /* ** Convert a physical address within the IIOP dual-port RAM to a virtual ** kernel address. ** ** vbase - virtual base to use ** base - physical dual-port RAM base address ** addr - physical address to convert */ #define PHYSTOVIRT(vbase,base,addr) ((u_int) ((u_int) addr - (u_int) base) \ + (u_int) vbase) #define IIOP_QCB_FULL(qcb, new) ((qcb)->qcbout == new) /* ** Remove physical requests from the head of the queue. */ #define IIOP_DEQUEUE_REQ(iiop, req) \ { \ req = (iiop)->queued_reqs; \ (iiop)->queued_reqs = (req)->req_forw; \ (req)->req_forw = (REQ_IO *) NULL; \ \ if ((iiop)->queued_reqs == (REQ_IO *) NULL) \ (iiop)->queued_reqs_tail = (REQ_IO *) NULL; \ (iiop)->physical_stats.queued_reqs--; \ } /* ** Remove logical requests from the head of the queue. */ #define IIOP_DEQUEUE_LREQ(iiop, req) \ { \ req = (iiop)->queued_lreqs; \ (iiop)->queued_lreqs = (req)->req_forw; \ (req)->req_forw = (REQ_IO *) NULL; \ \ if ((iiop)->queued_lreqs == (REQ_IO *) NULL) \ (iiop)->queued_lreqs_tail = (REQ_IO *) NULL;\ (iiop)->logical_stats.queued_reqs--; \ } /* ** Queue a physical request waiting for an IORP d.s. */ #define IIOP_QUEUE_REQ(tiiop, req) \ { \ if ((req)->req_forw != (REQ_IO *) NULL) \ cmn_err(CE_PANIC, "iiop: req_forw NOT NULL.");\ if ((tiiop)->queued_reqs == (REQ_IO *) NULL) \ (tiiop)->queued_reqs = req; \ else \ (tiiop)->queued_reqs_tail->req_forw = req; \ \ (tiiop)->queued_reqs_tail = req; \ (tiiop)->physical_stats.queued_reqs++; \ } /* ** Queue a logical request waiting for a LIORP d.s. */ #define IIOP_QUEUE_LREQ(tiiop, req) \ { \ if ((req)->req_forw != (REQ_IO *) NULL) \ cmn_err(CE_PANIC, "iiop: req_forw NOT NULL.");\ if ((tiiop)->queued_lreqs == (REQ_IO *) NULL) \ (tiiop)->queued_lreqs = req; \ else \ (tiiop)->queued_lreqs_tail->req_forw = req; \ \ (tiiop)->queued_lreqs_tail = req; \ (tiiop)->logical_stats.queued_reqs++; \ } /* *************************************************************************** ** Typedefs *************************************************************************** */ typedef int (*FNCT_PTR)(); /* Generic function ptr. */ /* ** The scatter/gather definition. This structure is filled by ** the driver making the I/O request. */ typedef struct { unchar *sgaddr; /* Physical buffer address. */ ulong sgbytes; /* Byte count. */ } SGDESC; /* ** Structure used for memory to memory move operations. ** Repeated for each block of addresses moved. ** Supported on non-EIIOP at ISS firmware rev. 109 or greater. */ typedef struct { ulong psglen; /* 0C0000000 + byte count 24-bits */ unchar *psgsrc; /* Source address */ unchar *psgdes; /* Destination address */ } MMDESC; /* ** Structure inserted at the tail end of MMDESC. */ typedef struct { ulong psgterm[2]; } MMEND; /* ** IIOP request packet. The fields are either writable by the ** IIOP or the driver. The fields designated by (IIOP) are written ** by the IIOP firmware. */ typedef struct iorp { ulong iothread; /* (IIOP) thread ptr. */ struct iorp *next_free; /* (DRV) Next free IORP. */ unchar ioscsibus; /* (DRV) SCSI-1 or SCSI-2 bus. */ unchar ioid; /* (DRV) SCSI target number, 0-7. */ unchar iortype; /* (DRV) I/O operation. */ unchar iocmdlen; /* (DRV) Bytes in command. */ ulong iotimeout; /* (DRV) Millisecond timeout. */ unchar iocmd[IIOP_SCSI_CMD_LEN]; /* (DRV) A drive's SCSI command. */ ulong ioxferbcreq; /* (DRV) Data transfer byte count. */ SGDESC *iosgdesc; /* (DRV) Scatter/gather descriptors. */ ushort iosgcount; /* (DRV) Number of scatter/gather descriptors. */ unchar iosensbuf[IIOP_SCSI_SENSE_LEN]; /* (DRV) A drive's SCSI status. */ unchar iopri; /* (DRV) Request priority. */ unchar ioisstat; /* (IIOP) IIOP iorp status. */ unchar ioscsistat; /* (IIOP) SCSI return status byte. */ unchar ioscsimsg; /* (IIOP) SCSI message byte. */ ulong iobcxferred; /* (IIOP) Number of bytes transfered. */ REQ_IO *ioreq; /* (DRV) Driver I/O request address. */ struct iorp *prior_active; /* (DRV) Back link in active list. */ struct iorp *next_active; /* (DRV) Next active IORP. */ paddr_t sg_phys_addr; /* (DRV) sgdescriptor physical address. */ paddr_t virtual_addr; /* (DRV) Virtual address of IORP. */ paddr_t phys_addr; /* (DRV) Physical address of IORP. */ ulong ioissx[3]; /* (IIOP) IIOP FIRMWARE specific values. */ /* ** Driver unique structure. */ ulong in_dual_port; /* (DRV) Boolean (False=0,True= not 0). */ SGDESC sgdescriptor; /* (DRV) Default doesn't require scatter/gather. */ } IORP; /* ** IIOP request packet. The fields are either writable by the ** IIOP or the driver. The fields designated by (IIOP) are written ** by the IIOP firmware. */ typedef struct liorp { ulong liothread; /* (IIOP) thread ptr. */ struct liorp *next_free; /* (DRV) Free list ptr. */ unchar liounused; /* (DRV) Unused. */ unchar lioid; /* (DRV) Logical device id. */ unchar liortype; /* (DRV) Logical operation designation. */ unchar liortyp2; /* (DRV) Logical operation. */ ulong liosda; /* (DRV) Starting disk address. */ ulong liolen; /* (DRV) Nbr blocks to transfer. */ SGDESC *liosgdsc; /* (DRV) Address scatter/gather list. */ ushort liosgcnt; /* (DRV) Scatter/gather descriptor count. */ unchar liopri; /* (DRV) Request priority. */ unchar lioisst; /* (IIOP) Request status. */ unchar liophyst; /* (IIOP) IOISSTAT from iorp. */ unchar lioscsis; /* (IIOP) IOSCSISTAT from iorp. */ unchar liosensk; /* (IIOP) IOSENSKEY from iorp. */ unchar lioasc; /* (IIOP) IOASC from iorp. */ unchar lioascq; /* (IIOP) IOASCQ from iorp. */ unchar liobus; /* (IIOP) SCSI bus. */ unchar liosid; /* (IIOP) SCSI id. */ unchar liounused2; /* (IIOP) Unused. */ /* ** Driver unique structure. */ SGDESC sgdescriptor; /* (DRV) SCO UNIX doesn't use scatter/gather. */ struct liorp *next; /* (DRV) Free/active list pointer. */ struct liorp *prior; /* (DRV) Free/active list pointer. */ REQ_IO *ioreq; /* (DRV) Driver I/O request address. */ paddr_t sg_phys_addr; /* (DRV) sgdescriptor physical address. */ paddr_t phys_addr; /* (DRV) Physical address of LIORP. */ paddr_t virtual_addr; /* (DRV) Virtual address of LIORP. */ ulong in_dual_port; /* (DRV) Boolean (False=0,True= not 0). */ } LIORP; typedef struct { IORP **qcbfba; /* IIOP queue's lower address. */ IORP **qcblba; /* IIOP queue's upper address. */ IORP **qcbin; /* IIOP next iorp to use. */ IORP **qcbout; /* IIOP iorp to be executed. */ } QCB; /* ** The IIOP header data structure. This structure is read by the ** unix IIOP driver to interact with the IIOP firmware. The structure is ** built by the IIOP firmware and resides in IIOP dual port memory. ** ** NOTE: All the address values are physical addresses. */ typedef struct { ulong issdplen; /* Dual-port RAM size in bytes. */ ulong issrev; /* IIOP firmware revision. */ ulong isscbdep; /* Max. IORP queue depth. */ ulong issscsin; /* Number of SCSI buses. */ ulong isssgn; /* Max. scatter/gather descriptors allowed per iorp. */ ulong issstat; /* IIOP status. */ QCB *isssqcb; /* IIOP submission queue control block. */ QCB *isscqcb; /* IIOP completion queue control block. */ unchar *issscb; /* IIOP statistics. */ unchar *issccb; /* IIOP crash data. */ unchar *isssint; /* IIOP submission IRQ address. */ unchar *isscint; /* IIOP completion IRQ address. */ unchar issinitid; /* IIOP initiator ID. */ unchar issunused; /* Fill byte to a word boundary. */ ushort issfreel; /* Length of driver free area. */ paddr_t issfree; /* IIOP pointer to IIOP driver free area. */ ulong issbios; /* IIOP pointer to BIOS comm. area. */ ulong issmaxrj; /* Maximum requests to join. */ ulong issmaxsj; /* Maximum sectors to join. */ ulong issgopt; /* Global option flags. */ } IIOPHDR; /* ** The logical Physical Device Map d.s. as defined in the ISS EXTERNAL ** FIRMWARE design specification. */ typedef struct pdm { unchar device_status; /* Physical device status. */ unchar device_type; /* Physical device type. */ unchar device_usage; /* Physical device usage. */ unchar scsi_type; /* SCSI bus width. */ ulong block_size; /* Block in bytes. */ ulong capacity; /* Device capacity. */ ulong wr_hi_mark; /* High water mark for writes. */ ulong r1_hi_mark; /* Remirror high water mark. */ unchar bus; /* SCSI channel. */ unchar id; /* SCSI id. */ unchar logical_id; /* Logical id. */ unchar unused1; /* unused. */ unchar vendor[8]; /* Vendor id. */ unchar product[16]; /* Product id. */ unchar revision[4]; /* Product revision. */ unchar serial_nbr[12]; /* Product serial number. */ ulong r0_pdm_offset; /* RAID 0 offset from PDM table of next PDM entry in stripe. */ ulong r1_pdm_offset; /* RAID 1 offset from PDM table of next PDM entry in mirror. */ } LIOPDM; /* ** Logical Device Map d.s. as defined in the ISS EXTERNAL ** FIRMWARE design specification. */ typedef struct { unchar device_status; /* Logical device status. */ unchar device_usage; /* Logical device usage. */ unchar logical_id; /* Logical device id. */ unchar r0_drives; /* Nbr RAID 0 devices. */ ulong block_size; /* Block in bytes. */ ulong capacity; /* Logical device capacity. */ ulong stripe_factor; /* Nbr blocks in a stripe on a single drive. */ ulong pdm_offset; /* First drive in RAID 0/RAID 1/RAID 0/1 offset from PDM table. */ } LIOLDM; /* ** The Logical ISS header data structure. This structure is read by the ** unix IIOP driver to interact with the IIOP firmware. The structure is ** built by the IIOP firmware and resides in IIOP dual port memory. ** ** NOTE: All the address values are physical addresses. */ typedef struct { paddr_t cache; /* (DRV) Start of cache in system memory. */ ulong cache_length; /* (DRV) Length of cache memory. */ ulong sector_size; /* (DRV) Logical device blocking factor. */ LIOPDM *pdm; /* Physical Device Map pointer. */ unchar pdm_size; /* Size of a PDM entry. */ unchar pdm_entries; /* Nbr of PDM entries. */ unchar busses; /* Nbr of SCSI busses. */ unchar bus_devices; /* Nbr of SCSI devices per SCSI bus. */ ulong status; /* Logical subsystem status. */ LIOLDM *ldm; /* Logical Device Map pointer. */ unchar ldm_size; /* Size of a LDM entry. */ unchar ldm_entries; /* Nbr of LDM entries. */ ushort x86_id; /* Microprocessor chip id. */ unchar ctest3_status[8]; /* CTEST3 for bus 0-3. */ ulong clock; /* Millisecond clock. */ QCB *submision_mrp; /* Submission QCB for Maintenance Req. Pckts. */ QCB *completion_mrp; /* Completion QCB for MRP. */ unchar *interrupt_mrp; /* Submission interrupt for MRP requests. */ QCB *error_log; /* Error log queue control block. */ unchar *free_memory; /* Dual-ported memory available for IMS. */ ulong free_mem_length; /* Amount of dual-port memory free. */ } LISSHDR; /* ** New Extended IIOP hardware header. */ typedef struct { IIOPHDR physical; /* IIOP, physical, specific information. */ LISSHDR logical; /* Logical interface information. */ } ISSHDR; /* ** IIOP control and status register definitions. */ typedef union { struct { unchar reset:1; /* 0=Reset IOP. */ unchar intr:1; /* 1=Force IOP interrupt. */ unchar diag:1; /* 1=Force diagnostic parity test. */ unchar parity:1; /* 1=System parity checking. */ unchar unused:2; /* Unused bits. */ unchar iiop_bd:1; /* 0=IIOP1, 1=IIOP2. */ unchar reserved:1; /* Unused bits. */ } bits; char all; /* All data bits. */ } IIOP_CONTROL_REG; typedef union { struct { unchar reserved:3; /* Unused bits. */ unchar irq:1; /* 0=Interrupt Request Present. */ unchar unused:1; /* Unused bits. */ unchar busy:1; /* 0=Busy LED on. */ unchar error_led:1; /* 0=Error LED on. */ unchar parity:1; /* 0=Parity error. */ } bits; char all; /* All data bits. */ } IIOP_STATUS_REG; /* ** IIOP driver statistics per device. */ typedef struct { ulong interrupts; /* Completion interrupt count. */ ulong finished_reqs; /* Completed I/O requests. */ ulong start_reqs; /* Initiated I/O requests. */ ulong queued_reqs; /* Waiting I/O requests. */ ulong queue_depth; /* Outstanding I/O requests. */ ulong max_queue_depth; /* Greatest amount of I/O requests. */ } IIOP_DEVICE_STATS; /* ** Physical/Logical device mapping information from controller ** dual-port memory. */ typedef struct { unchar status; /* Device status from boot. */ unchar type; /* Device type within SCSI domain. */ unchar usage; /* Physical or RAID type. */ unchar logical_id; /* usage is: RAID 0, 1, 0/1, logical. */ ulong phys_blk_size; /* Physical device block size in bytes. */ ulong phys_cap; /* Nbr blocks in physical device. */ } IIOP_DRIVE_INFO; /* ** Logical device information. */ typedef struct { unchar pseudo_bus; /* First device's bus in logical device. */ unchar pseudo_id; /* First device's id in logical device. */ unchar device_status; /* Logical device status. */ unchar device_usage; /* Logical device usage. */ ulong block_size; /* Block in bytes. */ ulong stripe_factor; /* Nbr blocks in a stripe on a single drive. */ ulong capacity; /* Logical device capacity. */ ulong nbr_drives; /* Number of logical drives found. */ } IIOP_LOGICAL_INFO; /* ** IIOP device table entry. */ typedef struct { int flag; /* Current state of device. */ int ivector; /* Interrupt vector. */ int pages; /* The number of memory mapped pages. */ int eiop; /* EIOP hardware/firmware. */ /*kec replace SHAREG *sco_registration; */ /* Register the adapter card with SCO. */ SHAREG_EX *sco_registration;/* Register the adapter card with SCO. */ /*end kec replace*/ IIOP_CONTROL_REG *control; /* Address of the control register. */ paddr_t dp_ram; /* Physical address of dual port ram. */ struct lockb *iorp_lock; /* IORP lock */ struct lockb *liorp_lock; /* LIORP lock */ struct lockb *submitq_lock; /* Submission queue lock */ struct lockb *cmpltq_lock; /* Completion queue lock */ struct lockb *rq_lock; /* Generic request queue lock */ struct lockb *errorq_lock; /* Error queue lock */ ISSHDR *hdr; /* Virtual address of dual port ram. */ QCB *v_isssqcb; /* Virtual address of dual port ram. */ QCB *v_isscqcb; /* Virtual address of dual port ram. */ int *v_isscint; /* Virtual address of dual port ram. */ int *v_isssint; /* Virtual address of dual port ram. */ int retry_rev; IORP *free_iorps; /* Current pool of available IORPs. */ IORP *free_iorps_tail; /* Tail ptr of available IORPs. */ LIORP *free_liorps; /* Current pool of available LIORPs. */ LIORP *free_liorps_tail; /* Tail ptr of available LIORPs. */ REQ_IO *queued_reqs; /* Physical request waiting for IORP. */ REQ_IO *queued_reqs_tail; /* Tail of queue waiting for IORP. */ REQ_IO *queued_lreqs; /* Logical request waiting for LIORP. */ REQ_IO *queued_lreqs_tail; /* Tail of queue waiting for LIORP. */ IORP *active_phys_hd; /* Head of active IORPs. */ IORP *active_phys_tail; /* Tail of active IORPs. */ LIORP *active_liorp_hd; /* Head of active LIORPs. */ LIORP *active_liorp_tail; /* Tail of active LIORPs. */ IIOP_DEVICE_STATS physical_stats; /* Device specific diagnostic statistics. */ IIOP_DEVICE_STATS logical_stats; /* Device specific diagnostic statistics. */ ushort bus_activity[IIOP_K2_MAX_BUSSES]; /* Current activity in this IIOP ctlr. */ IIOP_DRIVE_INFO drive_info[IIOP_K2_MAX_BUSSES][IIOP_MAX_TARGETS]; /* Drive info. from dual-port memory. */ IIOP_LOGICAL_INFO logical_info[IIOP_K2_MAX_BUSSES*IIOP_MAX_TARGETS]; /* Logical device info. from dual-port memory. */ } IIOP_DEVICE; /* ** IIOP command table entry. */ typedef struct { ulong timeout_clicks; /* Timeout in milliseconds. */ ulong xfer_bytes; /* # bytes to transfer. */ short xfer_dir; /* Direction of the data transfer. */ } IIOP_CMD; /* ** SCSI disk Mode Select command table. The table is used ** to issue an appropriate Mode Select command to a specific ** manufacturer disk drive to enable readahead/cache operations as ** well as enable the internal SCSI disk bad block algorithm. */ typedef struct { char *drive_id; /* Vendor id from Inquiry cmd. */ ulong id_len; /* strlen(vendor id). */ char *command; /* Mode Select parameters. */ ulong cmd_size; /* Command length in bytes. */ } IIOP_MS_TABLE; /* ** IOCTL special interface d.s. */ /* ** Parameters used to read LDM data from dual-ported memory. */ typedef struct { ulong logical_id; /* Logical device id. */ ulong ldm_count; /* Number of LDMs to return */ ulong actual_count; /* Number of LDMs returned */ LIOLDM *ldm; /* Pointer to user's first LDM. */ } IIOP_RD_LDM; /* ** Parameters used to read PDM data from dual-ported memory. */ typedef struct { ulong pdm_index; /* Index into PDM table. */ ulong pdm_count; /* Number of PDMs to return */ ulong actual_count; /* Number of PDMs returned */ LIOPDM *pdm; /* Pointer to user's first PDM. */ } IIOP_RD_PDM; \.O..]driverinstall].\..^arad^.]..Space.oSpace.cSpace.o.ZMasterSystem_Driver.o$([IIePP #m@IW5!npavnO68DgYMU("vRP٫EC<-$sIm;w};Y#m,\ug,:ʜf5aSy'莑ڝԽOTӏ+Si9v{E6c<[?(OQp>t-K\:/3p-8Ir9kݤمZZH4G|$p?.:d(mxPxOi:,my `@m~- _!M=f}tq`z{.ǼHб}Ǐ@ۣ1v臥esZ?ih.t="NLT_ o ~Njz /U~`ǜun(Ӊ2.pC4Vb, 3pp:֙ y/ }pYT ̾`_\\_[)-/3uI"i}1&s epw$α*էAI~:8zZ/z`c3n`@_f.#|\MN$Yzfb͎ Ҏh x@&͢Յ٤-džseZbzb4ՔN 96bSܖ&P͇ƪ GmMo~ H02uiL>?i|;a+kRʓaFq7,53!\q<& \QVf#lMmOa^GWÅI-ϣ)Mdr7,&sT)/Ƿ *Wer ;@b\90ޗvZwsUVyMw Eȏ&;'G88^EK 5x6Gx@ 0wED1l\[Rd vYQĀdGsdں; ffmH6'[ 8#y:UpwTnv ޭ* O-2Ƚ?Bu0JUI0jD%KN-XE"KN*^+AO8p,6=R=E}l& 5& 0jBӘ=9"!`1(9f I崼fRR4 $cx )]apjx4)iK7$j"Mf}' w-X(@Ӣq~84h͂jzK|Ƃ~']Nd?%FޥQ̢eM^ʠEV .P!CG3FlQ\ M;+5 nHWngtK xkʐvof;3Xۮlo~c> 8^/8E t"[`6$V*}^'">bRQƓl~%I@T2t!))DG̏%B^6(&ˏ^#rhi "檻mx뀶c8E c7|?bD3ȟB= ǹ8 a3"%۱ܹDŽaeYAiW qZR`2Bjo-f3==JFVes@0ҝ4Җ{%Tvɗzp!]L5?z;L,[ [dQKcKEN2hЧX"כy ^m+;f-&-2"߿fʻ1!6)PE҇A ?&RZ: m󙫆 m,6_ [0)2uzLzUIS\zniNo s;hv,!J9e!ά-9n4Kii*!J _R> $3ﮏ OLtLN}[Xf1(Ak;gcÂeE`?5ݖ _>q2r12CvLIi*n"];sDRxj6sGswf*M?0[J ^̧&ɱܻ]d_2R&vuU /pqJ@mmGV#!_yyA1T>I!2NZ} MRELN?𦏇M߹O"a8]$( [ RIgb@ p9EB }4_ko<-q & Z~ZmZ3 w3RJ9o{BR!`'M1N!xPij6p!0IT/'kϒLZz%j$T0??#kS ObwzP%q-(bH:1vXތNF.+ I1) GTG+L@K`Xn{vf ̸)WB7?T$$𩿧qKFJbti=ɥ =_,N:P mGP6cV UL[/ ןJ=g6.|ChyQ]y3ձS5} 3BZ ;VzK[8&i-2xֈXލ%sJěFCe#G҃H^!iXHtǏ:.s+,4 #|6+QzKk!DC̽ A{.KPAƍ]PCR*A#ө.]rcd%uѽj>`as,n}. e%eb,_RM 8#I#>^XJn}ؿ5&:d `b-bk2\ghaXI-x~8;I UL!rtj*} P)X-C)LJ! ΎNCi(vZILZYbh.TkDc][ȖkmQm۷ '֖GQR3ټZXrr ѵz)}a)y~tb2+r'2q)(82 Ȭ ] 7`Pݡ(jES߉(l<*qIBbx9iGXC^Wq_*,b!UG>_ї!QϮ珟1}r>P4nX[6#y'hqFi&z\SׁX"8ezqZrT(6 ?{>4k(:YՇʸrb`0 ev-xB8*m-py}05ҏ0x)̺ Vo&;w w^6.b/$)dyJ`Ҁ4}k<[Io riن=y3u5Ϝl\xɵ,_& R1;]Aż! yCW?""4aw|`>"SԢ+EW{Bǀ"c .q =R @9NSY]Y](N㊩4eƳO.WR3](ۄQ v[ /V- 671HL["xq%Z~=#a^t :>=^a'r8^Eka?POxi56]-rqB+(W?KvJy Nbo!q}! p-ʢ;ٖ!aCd6aR녢4.OEntNc<sqZq/Ƶz&;o~  _%+_ G#8 ѭj}L#]Qs+}Rv3}z}$ONؔܭsKO1;O`dͿݘaՒ x7\gP.e=RtUWp < R94] QCZ9t(7w)޾huP (*8ҨUTv #ח*Ȳ?*UN),dkrfF;|D ̒`,.TifF(х xƒ JG 3pI,5(' W2:|>++{S* +_D1C,YRl7kdIyJ]ԣlY͝2"jAim,T0hԡ%vaX~YmOii#顆h(Ǯkok^˂ia5!_Swpe>n|ϳRo'j0m>E["3brUQ59WFě, ,<+eɠYX;O^?ۍhյLBZ0h>"*o>4m N8 էHn0Y>'(Hxi j/d3X;~ſ/' f=F.̬zǭV?Wa`O^d@J89۹N|LKv$v]S4b.[+j}>kG5_5+sKǂwIᑪwAg{L~{1oU|%zcC{ԻQ۪A#*@Dۡ=vG_;$#@,S:CP4EwCZtVpXFj|_1p~]s _8Sso҇Vv<%ЮT24(3&xV }ڔe@v lI3+Q{8PFO#e4)gB޲'\!WPQ3ڕ"NZEEpy̜SoX-lsoVbs?y}R˳ 5z@N6KХG(`${gd&b\qjz:Ĥnfdc͜6@樭O6I򡫫 djf5q˜qT1..Qr=UbR&Xصtez I>* A¿b, Crh}AA- ~jfG vޒQpMl[j?13>dV)k+Yښ6GnzI;F5xp&LUaa { nӠ"OaȮ=70>̌Kʈ[\мiZ[_T'UXPO[BE,lS@r<[O fau)j'j+bhiaP|V㸑CᬤxV-X/ĢU sXU19(q[ˊ LJa1Aw+#2tQ4)bY#4<I/׋|>yݱT6VإC TLQ0 :7DޮS5<[)U'3[FG}k1 NNKL`d־ 0uNSdzįF•$ń5rZ{pݡc!"ɃP U`&*j_C V yImbJZ)yrp:R CLdgbo{L> %kKu@s!<ř WX> #ȫBٯ(V.2:$.a4ei{ٺOo-W[9O)L]GlF% Q4VUΞ^ܞ7]+u"} "7uQ"N5uʺvn>KuT;S(GO.~|j׷ l}Ֆ@fZya[VDf G #BH>\6?XzЎ4<4TE$Uڟ]#/ 3D/D%zb4'Dx $gS]|-e4 "xqԞj f~#'nZw +R\ Yk?A݊[Q4PNȵq0HiD|3X|1?]şRb ,7Yg.:5e^Yg_k>\ gW%O/ܚn}p$"&О`r.5b<̀L/=xMML0SbK[jMnأo>~ Q<_[1v.}C׎&N%i4>skmikK C@d}#7%d+F"Y)\hb 65C䶏0SC DSAI`6M&ɎL ۞S+ _pPz99@lhL1PJ6Em!1 @0p`꩙eUۍW5up.ޭo*P{hbHr_T ޔ> v/U%Z]D42 -vBQUdzT]sɸm{*E qyz օF` Ix7ْ .6vd9D{$0"(u b}[sPҠޛ5>V ;u CoLv.I&HEfЬ5eY#iv(suRJ(:#́NfiBT0NOPQRSTUVWXYZ[\]^_`ab+z`%tK)u͒[iJ-lKOJ03/Y-{W$M;6o*۹6>YvQ?a8Pj1ttm@U|ZRJ`=qbb1"b㨞~͉ L(ѭ@_O=*27|uB-_re~y,EfR9,: tKnYۏc2OBc씍n@clܩvvEmO8.d L/e.O6ߠTS9(u5=W[A,ȿRl J6&̏ |r0m}38Xܰ?qcc $,nhе@3s9# #pG f$ۓ%~/1]/8BH2, ;ȸ G0{\ @Zŋ 3d#1kxe_фoNwajðk.VoVlOu=ś2&dwdAKũ ufϧYIIШ p&NKvd'ZN1ɳOR VQ4 `HX6ckR~D`Hx I-R?-3ͩ$tr~Ȓvy.nQ<78 KܤzȖ_e>s훻uЙ*n8rEwg-ǑK뚽`5{klec)UQ1]+Ծ,RIL ]$|Pu)/T%'2M+xbyk|X8|er^B W%_RЩjv#}d%"wCfq}/.|14(lECݏ{U$q(D ܭ`H`>f, #R9ZhgG >(\S"IcP},`GÇ ^J"XFa.nQp,X'A{)8C(=vJ#+xlV/C gTƋ/ff&UMYYljyEZYYX{T1q4i|m.RoFb '鈀}BN$rmS{\@M4; [_R*@|,ڛԵ㲢 ?/KyWFZ87lD " n{QXx0i^^ޝ-x\7*Ta &LцN=.wfҪyq'0T\6"FݛIUK%[m,Ҕ* *9!J)mP $bҒ-ROkU]@AU pl.8 _Ime;wg~{j䍶Ė9,5[D*]d8:fj z&NCv~Ӽ {vȊ w5uȇ;(2`*JU4<*adK]Y{ָp?Vp<W%{諀2orAMnEe% ikA\#*X''};Z7GkxS%}(6°T!"ae8)[U(Ǹt!Vȁu=v>G41h}}q 1{M݀b #ȂTg<նthn&5l$ f!mۋPS^;+h;``~2/ ˽+%T8صִ$ N^o+Ě7 `\߭]aR.ߢ qRG)y J &iNmD_62`=[@'qݧߕGASawSo6-ҽe/ŗ?9(P:0}qxe;#y,k׻*ā%ްȝ+ߚc[v~^DqD&O\ qpto>{˻vӶF.Ka/X*n]-ېw+"zxe`^ÂW)yӿ.9zs /}ry聠Q.-Z|"eעY&{ ;|wEv?XQS v`̎6EM %zKZ]:Y&s{% HznUPw[ZlѴo,ѻ` aۭu^nqZ"_!+{ OT?YfE ows(GOiɧݚL~yvSvK-"≮gTJ3Ji<;O'ô73?7c]iJTEh6Rؙh"^@^FpijAL9 wL ->4z8`2&@OJS:xJܰrf΋oNKw+埀8H]MH-aLcLU5/2kvg!,}^ӖG5@"6lNIV#`gyŴI# vٛ̀jVhNCgby3hDw&g1_e2T>wh?(}?o<*'Y(xjr`"4w8l T~>eJ|_);eO'rc(Ѻ> 񣑌Nۣ./-+Y{ O3/h<r ~4-:^c #,T!2"{}Ow R[X?0Z_`ט IgnKYJ@ږ`@[Dڏ %{M-)ړyRm1(osc6٤S!+q A}[PZ5w޺;2> C\p"R<߻࿪$bezI5,cie|º_vF;+?6-qBrgJ $-q O("wEx0(t?hkѣS'mFK&'<|77*[:>T8Bv_dV3ޤO@[rZQJs}$X qTz5 հQ0X]?t/D^NExP'H$V?2{k" 7#tuw3Pt֠4`SDU}1q_DU6!Í{!&m{M}v9,P/;TƙI璴yH-P"F t)?fׅ̱׆+_YdBp;I{<ա"-0z|\]sԶ&1-VV@CF9(\RU+HJk Ļiy>| l o?!zCQh3,Yvc8ʉ)؍pRMRA(s!F0G%2, Q]x#" n(4k#٪(AaP=ǷqG6ς4 zǔ'}T:Mdu"}Ǟ!s!{S#eJ Ϛ=QdX<(8/@p€* 4< y?B.G0~9W1cg`v_]ߍjU[}υ}~g}>,RXw c]}O؞(,PaNaDCFF1%ʝ?~A4"MzKG?%2FU [)@k|qxnY!͠zntd.{.j)B7 @L&t^i[L 쎂)Z5*wvr/5rtf-/b@aUv:r¢^;,%p3k^R*30k4^V8Ar^cY0Vcn:.,CK0Gx=@.qYy8z@eZ-޲,AN@.`MZmUַn'JX{ .Cɫ[ѧ:fiS THM^>`Y('XQCx^=rjJ5`>ČAl}}h9q.J(4>)4!W /.)>zx }ԠBwwLеUT|V!>.;CSy|ksAβ|7=sVTUh0`ZXC '$.Y cUON;!$%L_Fh}V߆/O~3I Bm1@>3ۍQzk-\@Tcztq2 Mޔ8J;d;Rt`g}pAe#į3 ``rs9s0c8/;ecnױJHqҎRXPh{G?Rj&NX2a,d"LhhLovjr!P,w(מET{;V8+W#<ё1="=A0H4ɰ=`z("s~1?旆<Q'sQHMTAm\e[\W49{=Jm=1 s=R p\;h}BlAw"J}Kl2,f3*@I.3+7J>)K\u遌f1W5g?REԀ:]H32!lplK]2;V< 7aVn $"jPUo,RVX֍eVbW7Z@/74S(J8>X 1Ҥh3[Pź|?Ijc}YOW2/ENTВBݙ sX&+Pb9y0I DYa IJRd̜_s@5-,6Պط¬1|kd8 f)k/"޲-VC&AX{1\L8C&yaꤎ:EIFBTޕ%{T.0CHߤTP*GJ'+2 zBdzE%&z 3C&P|)zF-O0Xyq vFH &PXb 0@RԼ{x`pJ[F3+OQq! ڸ=^Mw{ rx0,@G耏>@S& `Z( @XCN]· id֡}`uB} $;]0'*s*6gg}o~ id~ 50 l;"ſؗφu#zu@ߟ)(\[-j,voIX#h_;r͙ - |Fsh7(Qw&m,6}iJDOVYٛW9)@p#t[.D0,#!>.wVۇ!Ջ*U!C~VX`XrKj1U;9+ƆFJt0q\_lrŌ9,a`EZ`X[ Xw H x݊`dEp]p\s`mR%wɠ6HnN% %nEfi2X1  bOf"pu wBeoh9{BYѭRNJ3F m!u'O>$|,YG>OZ1|c!C17*eQr}@EjFQ+, d"bS{U?^—]0a̧4$& z!YS=m0 4"p+Ci?Az\t=6nx&9H\Q9rn@}wfQ䅄` ǀ(+3zV8}NHOHs۾ 6 1`Nv$5EYY ˊ[-f (Z]7(t ٫ ve0 7(QdBh4:Xhb:7.9kpEfovVPhf;o}q;c8G֏8j8ڢaNb114/0#>]*9 A$PR4Oe a G o8хwҁM<"<8* W~tbo҅RDn_;EֻԅbPp±(~%ޔ>e)1@r0v٨[К' DplK\8thi̘!ȱ1 ɤc+s*סE|`Q- Ib 4!pD*s?- "~xj{9{?Zϟ5ԞIRs2|UFX[Ъ_Ufb65js1C8Uj 5zF\IJ[ y]Y VIyؘSU*94Dfk?61A2bY1|3ڝ(r*xM #'E5g2 Vs#rRf)J^9 79898˒3[:@sά`#P!qyo3p͜$=Vӹtu"8ib =pY>|QN#%)RMeև;%%]4)]tJ:S1~hBʂA~wr;" WMܓȁ`khGi %Mr'U܉>J`> 9{8p}5Ɉu!>Ս;`zc?X}n1ѐhK‡ځk߆:O6 0C|ACWU7gUֻpݞZ+WwgoQXj44njt*; 'PcTⶵS:tMѼp=.Ʋ3!djY+\8g9 EnòGԸgHPV6uvZ5Kvt4i#\\= ވ: kHc^ҎPruw UN:$Vv(*EnJ̋j:QðsQ]hpڴ;pmIc5=u@; Q9Tđ ǬH3Sf C%fYgUgnASr5o4OԇFgdPT;8jYj(.~[˗z K6u+?gP;ڜC>ޭO5:FuYP!qUGfEpn~և7u!:i8fq-'WZ o4$ Z@NՂ[m0ON6: \? %@JSn=HI΂ oiWw}=kFLi5+jjUJ`6"oXeA nxcCΠ0?n!GAƜ?{AVUḤ98ef;{6^fK7+Ԝn fogkBa.:^j9ש==)YFתs65{Вu$!fE胋t;MZຐŠIg ޸pz#8p~o4]ijCCQL+ҖRٺ%װжt~d6imV]}]F #Ǘm4Z hnckjN&\r9j\7hZ/taĽ,cHhվb:y{KWsxYit*̴A=1&Ԟ^/ǯSK904 \[s\fMa.6믗ňOu1`iBNPw2~8iE}DHfYIo&֟vgW O OI`g]muXy -y<Ʌ2o2Ӎ2ƛ_Lfn5iۍj8m*nw1n^)/_ s:߿]ih dt05Jo[;\㇘51Pw=l p~[`~o2?8yS4&hОKTg:ړ֋I~)? _-06{[DE'T&2SM?5mc#r<9Kx:tO O ?7:{JKHNdDҘ4AR^YYWnp?*c IQb*\4U%耿ǍR<>!$QS^R(8ʛQzlV;[kpqʠߖsZ-߼ɥ&p?{fy_ǯW͎={Ksu:D4yFmTM3xd|-OmsَL1M6QQ= P\#;},ࣾ4ަ38xMSw$QXT{'s$11 1_; K{ P=mqg{-0l|w8HN3^p,u-2Z&yba[w`z^RNuusGNBA K~GxOe㥛7Ǚx瓚Cfc@Qiy`i'i| w3攟SiF@fNjмL^Guk.vmIeC'{M{=x3H;xSzyl|7}I:}AoHIwۨqA;={;۴ g4_/]׸cnUfS3lA@k ܶ]\27/689 NW3 ksl 6<]q7㩙8eO ?gPt>P!ޚ\ˁix  wVWX qNS.\5j ysra~d{0g5ܲng5sZc7Sr9Ps91b9(w1#&NcqHx|P_̌lq;{k3%q[9`3?SQ;0ELh}ˤ l\Y S Y{AˆW.54o%Gz ί:>-i+s E˔9s< 𸎊T\F&.{"ވ6njpta.y}.vOמ[P92&`%fKv%ybWM_Kg,Z?,[PJ=qp^.6.iar>#ڂ׃Or%?ft}5,]`Af,`y`Q/ރ͏ٝ.\t8n N|9. 0t~MӺ_wKϙs\.p<)ř\=h|Frr9Oy2IxnSg9L ?xùO;Gl># );rPr[)k{(>l%36KH,hB1mݻ`` HYJWҗޒOIQE_}>?䛒ۀ!0?ytW6CƦF'J|҃`-TV`|E:i#Sj`A0ڠw0 mi&D?޴r @ 9؁G&3&\;9aݐX)>^qa[M˵VaX֒wEBčOC g+ie2aPp4 @`[M߉~@<`?R`<=? r=4M]Gǧ:p}HlzsWg"w8aĻ& \L$v}zV~GH֫]cӆ\O&W%]Ḿ(>3yA0:]y0_^Ko^LgH}}5N21lVkpn%\9O{=1N, Q^aJ'!`8{X6$DZ'4>BLv6$i0'(:؎* ?H$=~@FA!"xUa72 t#@9̹=O']ws PulcH~ Ɨ~ƒ4*' w wx@xy`z l){ʉHE3.&E$|)sdvE4N;!)~($SY e\&fhdKokdL&I'v $$F$s>:I0I5'MIM!WˇRmACɦߎt$UG_0A<M1OU&/e&GprC$hHDNg@otr{!?\vhbu{pn֥P2RmoC0vOQyc-KBHփJxr=Yډc-)#!iDm)YH~7hvOځ$vb״Km_@:9Dmn@f;TT;a?XO聍kjKOԒ4@} >_ ցF kIN|NQvbԑ;dvȝ w$xAAA0>l@6@6yu}-HDһqT۸Kk<| yVސq7yQ=ݽ0]b\|O O خ))cH~1dQjD!<`^(>H}@F_uIꚓ0:>v_OJy@c]GGww?0 _ͭ{9KHNrP>7D< z?\wxzKm@g}U+;AO'{@@@m~;遘R6PMSNrV9tN.tvw @ zDၥ%%}I8h_R ;0p8fGH;!'&p ( y_s`wi"wJȿo m{4$wB$O'\Dt e1 G:'^)#W"qXO$'eLc1HDvɁ@XL l L;G~@2x#-pG7#8̓H{: NOl'#P< l~'w2;[J}wv;v#p.@} "[~ŸYžf" e: >#$ܨ`@h@a@0ɂ7eÝ@އptGr@i<ڎü?!! 7ىoq 7C?;@@bR6wJCk> uw;y݇b\%?J@{\YدLN|68Cuy4(GhOt'}1 #| 8O0'݈~Hykҳvy=PM@~\Ȣv7\N _ҁ^#݆U[:q=lHPKm B}tG3Df= OtmODh.Z4vdwL;}(;b##J!>XǓ@iwĉdJ@@2Q(OʟT@rsBvn4Pb?,, q^~Ht8 eϽ.2Uj>?w~wJ.HO2'` =>48.@}2y@ЁOC46`6rjlsi7p>63Dn3[}q@ ֕:\ҥ;<(@@Ro!3(! !`k90.䛹v8GJϜ'Dgɼ*'NTO_@| f&6s/8h8t)#RF'Ф@ &thOP;?8BWV l`{HZ@.Oif4h/F}]"y`4vd?')4ț91N@}p>4箘X ( ><5Ac6DtLvd6piG~?;=|rcԝ&y(Xu:(CpTѦ'~6=Z:է7?4~>bQc6aF)a=x!A;n@>1#D>8Bv%NwozԇQ< @@༴1'k&7:?Oמ:OtBzzb4wp;|>`xr",1av+R$nT p3 pf P:@4i9Y˱@^~ 9@9p94tttiӁׁ@vwrq'| j%ZUE}SՙE-at{nH69v)XeoחEJ+كWүG9{(}<9{ZWVi/ ͭ^\26eU9Ȥj"jR;K2%ԍ5$ap+(ǩUr+蔌ս^VH\Y>bqQW&Qީ?Ƽ͛_%|gufͺ:+ߔo i3yL`+:w޲eHݯYs:b&۪aݫ2zQz|X*0f+ur qvʠ,Hb3fi+BiKKZz,gW4_Ui5VvSlHmoE(WبTVhE-MףeHXͺ)8g^V*=5]3Gݻe5ҏFԯ!ETfTDTfԌsQR<׾g,WHгwb/+bf'IZne~q:lTeEVeh#ә ^jGҤfФx:6`#3 ԎJ#-LY_e:Ar!ٕTx;}J>zۯY&EMCW+#vAk)T~U#֤vQTEF=Hb"yQFUauѼTfzxκ+uѠ룚룥|4A:j,Vc*u~^" ֖ȰWozoY޵ex;TX7 {X;^{룃uE鋆Z}Uj!x~MBʻF nk]RQ~;J"o[_CT<ө(GۋR/H;GQXWo`V 6(oVj'^KbuhJ$A㖰gbqǃK,VƫaӦ߅4YOOp> a\&]6T`P+昆 w( b@m ì=W/޸W uQgP5 XOؕbkl# \,:w> wAp[}=>VEuE}Otف+}jx.w f Zn!U"N8lUp})-[}PS6\0fr6W(ꭐ_%6_+8+8inI7 ն N =Yg0bpt({=,^O`4-nFJCS횻A_LӧS5V" ^a;Y]{PW _?*7eg5} JA[ Tu0OauQr0guL+tǃ'Y- ;o :+[`1Q(Vw:`Ҹqlm1 iRVo\i(4-_W$%Kk-OJ\'-ue%4`.R..amkdeva.`..b.scsitape_iiopg.scsi_iiopnhd_iiopcdrom_iioptape_iiopgetns0perms: # @(#) scsitape_iiop.sh 26.1 95/07/21 # # Copyright (C) 1992-1995 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # mkdev/scsitape - SCSI Tape Drive Configuration # # SCSI specific functions for mkdev tape # File is sourced by mkdev tape and run when a SCSI device is selected # rel=`grep rel /etc/perms/rts | sed "s/^#rel=//" | cut -c1-7` shared_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" client_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" ROOT=/ export ROOT . ${ROOT}/etc/conf/bin/path_map.sh init_path_mapping PATH=/etc:/bin:/usr/bin LANG=english_us.ascii export PATH LANG # Set change to NO change=NO tmp=/tmp/tp.$$ Stpdefault=/etc/default/Stp CPACKD=`get_mapped_path ID_CPACK_D` Stpspace=$CPACKD/Stp/space.h Stp_default_route=gen_Stp_route CSDEV=`get_mapped_path ID_SDEVICE_D` System=$CSDEV/Stp System_entry="Stp Y 1 0 0 0 0 0 0 0" CMDEV=`get_mapped_path ID_MDEVICE` Master=$CMDEV Stpfuncs="Stpopen Stpclose Stpinit Stpread Stpwrite Stpioctl" STPRETENSION=16 STPNOREWIND=8 STPCONTROL=128 # ---------- LOCAL FUNCTIONS ---------- These routines perform functions # specific to the Stp configuration # requirements # askSCSI_def: # ----------- # Establish the Stp unit which we are configuring # # Global variables set: # SCSIpos # askSCSI_def() { clearscr mesg="The current configuration is:\n Unit \tDescription\n `showsconfig` Enter the unit number you wish to become the new default\n " nStps=`wc -l < ${System}` nStps=`expr $nStps - 1` while : do prompt || return $FAIL case ${cmd} in [0-9]*) if [ $cmd -lt 0 -o $cmd -gt $nStps ] then echo "Invalid choice, please enter a number between 0 and $nStps" continue else SCSIpos=$cmd break fi ;; *) echo "Invalid choice" continue ;; esac done return $OK } # last_mdev: # --------- # return the number of entries in the mdevice file with the first field # matching the string passed in as argument # last_mdev() { cntd_entr=0 cntd_entr=`awk -e 'BEGIN { entries = 0 } \$1 == "'"$1"'" { entries ++ } END { print entries }' ${Master}` return } # rmvdrvr: # ----------- # remove the th mdevice entry associated with the . Used for # clearing unused majors when extended minor numbers are used. # Does not remove the first entry. This is the base major entry and is # explicitly removed by the confrm_scsi() function. # Called as: # rmvdrvr rmvdrvr() { pwd=`pwd` SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD entry=$2 driver=$1 retval=$OK if [ ${entry} -eq 1 ] then cd ${pwd} return $FAIL fi awk -e 'BEGIN { entries = 0; } "'"$driver"'" == $1 { entries ++; if ( entries == '$entry' ) { print $6 } }' ${Master} | ( read majno ${SCFD}/configure -d -c -Z -m ${majno} > $CCFD/conflog || { conferr retval=$FAIL } ) cd ${pwd} return $retval } # parse_mscsi # ----------- # parse mscsi to get the HATYPE, HA, ID and LUN of a particular unit # Returns # $OK if the entry exists # $FAIL if the entry does not exist # Globals set # HATYPE which type of host adapter driver the unit is attached to # HA the host adapter number the unit is attached to # BUS the scsi bus of the adapter the target is attached to # ID the target SCSI ID of the unit # LUN The Logical Unit Number of the unit # # Calling sequence # parse_mscsi parse_mscsi() { MSCSI=`get_mapped_path ID_MSCSI` unit=$1 driver=$2 [ "x$unit" = "x" ] && return $FAIL [ "x$driver" = "x" ] && return $FAIL args=$* set `grep -v -e '^*' $MSCSI | awk ' BEGIN { entries=0; found=0; } /'$driver'/ { if ( entries == '$unit' ) { found=1; printf("%s %d %d %d %d\n", $1, $3, $4, $5, $6); } else { entries++; } } END { if ( found == 0 ) { printf("UNKNOWN -1 -1 -1\n") } }'` HATYPE=$1 HA=$2 ID=$3 LUN=$4 BUS=$5 set $args if [ "$HATYPE" = "UNKNOWN" ] then return $FAIL else return $OK fi } # getuserchoice # ------------- # Ask the user to specify the configuration of the SCSI tape drive. # Selectable items are: # Vendor ID string (optional) # SCSI version (optional) # Response data format (optional) # Router (mandatory default gen_Stp_route) # For all the optional items if a value is not chosen, the appropriate # default value will be used. # # Global variables updated: # Stpident Vendor ID string (default 0) # Stpversion SCSI version (default -1) # Stprdf Response data format (default -1) # Stproute Router (default gen_Stp_route) # Stpvendor Router index in table (default 0) # getuserchoice() { Stproute=${Stp_default_route} Stpvendor=0 # get Vendor ID string mesg=" Enter Vendor Identification string or press to use default " prompt Default || return $FAIL Stpident=\"$cmd\" if [ "${cmd}" = "Default" ] then Stpident=0 fi # get SCSI Version mesg=" Enter SCSI version that device is conformant to or press to use default " while : do prompt Default || return $FAIL if [ "${cmd}" = "Default" ] then Stpversion=-1 break fi case $cmd in [0-9]*) Stpversion=$cmd ;; *) error "Please enter a number or for default" continue ;; esac break done #get Response Data Format mesg=" Enter Response Data Format that device uses or press to use default " while : do prompt Default || return $FAIL if [ "${cmd}" = "Default" ] then Stprdf=-1 break fi case $cmd in [0-9]*) Stprdf=$cmd ;; *) error "Please enter a number or for default" continue ;; esac break done # get route for tape drive - this needs to parse the /etc/default/Stp # file and display the contents lines=`grep -v -e '^*' ${Stpdefault} | wc -l` mesg=`grep -v -e '^*' ${Stpdefault} | awk -F , ' BEGIN { printf("The following tape drive types are supported:\n\n"); } END { printf("\n\nPlease choose one of the above, press \nfor default,"); } { printf("\t%d. %s\n", FNR, $2) } '` while : do prompt Default || return $FAIL case $cmd in [0-9]*) if [ ${cmd} -lt 1 -o ${cmd} -gt ${lines} ] then echo "Invalid choice, please enter a number between 1 and ${lines}" continue fi Stpvendor=`expr $cmd - 1` Stproute=`grep -v -e '^*' ${Stpdefault} | awk -F , '(FNR=='$cmd') { print $1 }` break ;; *) if [ "${cmd}" = "Default" ] then Stpvendor=0 Stproute=${Stp_default_route} break else echo "Invalid choice, please try again" continue fi ;; esac done return $OK } # # rationalise_Stpspace # -------------------- # creates a list of drivers used by the new configuration obtained from # the Stp_tape_cfg[] table # rationalise_Stpspace() { # Create the route table and external definitions needed routes=`awk -F , ' BEGIN { in_table = 0; } /\/\* BEGIN SCO_STP ENHANCEMENTS \*\// { in_table = 1; next; } /\/\* END SCO_STP ENHANCEMENTS \*\// { in_table = 0; } { if ( in_table ) { sub(" }", "", $5); printf("\t%s,\\\\\n", $5); } }' ${Stpspace} | sort | uniq ` if [ "x$routes" = "x" ] then routes="\\" fi externs=`awk -F , ' BEGIN { in_table = 0; } /\/\* BEGIN SCO_STP ENHANCEMENTS \*\// { in_table = 1; next; } /\/\* END SCO_STP ENHANCEMENTS \*\// { in_table = 0; } { if ( in_table ) { sub(" }", "", $5); printf("extern int %s();\\\\\n", $5); } }' ${Stpspace} | sort | uniq ` if [ "x$externs" = "x" ] then externs="\\" fi # Now we need to do the sed itself # First do the route table sed -e " \:/\* BEGIN SCO_STP ROUTERS \*/:,\:/\* END SCO_STP ROUTERS \*/:c\\ /\* BEGIN SCO_STP ROUTERS \*/\\ ${routes} /\* END SCO_STP ROUTERS \*/ " ${Stpspace} > ${Stpspace}.00 || return $FAIL sed -e " \:\* BEGIN SCO_STP EXTERNS \*/:,\:/\* END SCO_STP EXTERNS \*/:c\\ /\* BEGIN SCO_STP EXTERNS \*/\\ ${externs} /\* END SCO_STP EXTERNS \*/ " ${Stpspace}.00 > ${Stpspace}.01 || return $FAIL mv ${Stpspace}.01 ${Stpspace} rm -f ${Stpspace}.00 return $OK } # find_Stpentry # ------------- # Locates the line number of the Stp_tape_cfg[] entry for the given unit # Calling sequence # find_Stpentry # Returns # $OK if the unit has an entry # $FAIL if the unit does not exist in the table # Global variables # line set to the line number of the Stp_tape_cfg entry # find_entry() { unit=$1 entry=`expr $unit + 1` line=`awk ' BEGIN { offset=-1; stop=0; } /\/\* BEGIN SCO_STP ENHANCEMENTS \*\// { offset = FNR } /\/\* END SCO_STP ENHANCEMENTS \*\// { stop = FNR } END { if ( offset < 0 || stop == 0 ) { print -1 } else { if ( ('$entry' + offset) >= stop ) { print -1 } else { print offset + '$entry' } } }' ${Stpspace}` if [ $line -lt 0 ] then return $FAIL else return $OK fi } # delete_Stpspace # --------------- # Remove the Stp_tape_cfg[] entry for the given unit # Calling sequence # delete_Stpspace # Returns # $OK if successful # $FAIL if the modification failed # delete_Stpspace() { unit=$1 find_entry $unit || return $FAIL sed -e "${line}d" ${Stpspace} > ${Stpspace}.00 || return $FAIL mv ${Stpspace}.00 ${Stpspace} return $OK } # update_Stpspace # --------------- # Change the Stp/space.h file to either Add or Remove the unit entry # If we are adding an entry, use the preset Stpvendor, Stpident, # Stprdf, Stpversion variables to create the tape config entry. # # Calling sequence: # update_Stpspace [Add|Remove] # update_Stpspace() { unit=$1 action=$2 case $action in Add) # Add a new entry to the space.h file sed -e "/\/\* END SCO_STP ENHANCEMENTS \*\//i\\ { ${Stpident}, ${Stpvendor}, ${Stpversion}, ${Stprdf}, ${Stproute} }, " ${Stpspace} > ${Stpspace}.00 || cleanup $FAIL pqrstuvwxyz{|}~mv ${Stpspace}.00 ${Stpspace} # create list of drivers needed in new configuration rationalise_Stpspace || cleanup $FAIL ;; Remove) # Delete the entry in Stp_tape_cfg table corresponding to $unit delete_Stpspace $unit || cleanup $FAIL # update list of drivers needed in new configuration rationalise_Stpspace || cleanup $FAIL ;; *) error "update_Stpspace: Unexpected action value $action" return $FAIL esac return $OK } # showsconfig # ----------- # display the current SCSI tape configuration by obtaining the router # entry from ${Stpspace} and displaying the text entry in ${Stpdefault} # showsconfig() { routes=`awk -F , ' BEGIN { in_table = 0; } END { printf("\n"); } /\/\* BEGIN SCO_STP ENHANCEMENTS \*\// { in_table = 1; next; } /\/\* END SCO_STP ENHANCEMENTS \*\// { in_table = 0; } { if ( in_table ) { sub(" }", "", $5); printf("%s ", $5); } }' ${Stpspace}` unit=0 for i in $routes do grep -v -e '^*' ${Stpdefault} | awk -F , '{ if ( match($1, "'$i'") ) { printf("%8d\t%s\n", '$unit', $2) } }' unit=`expr $unit + 1` done } # config_Stp # ---------- # Prompt the user for configuration information used for the specified # unit. Information is: # Vendor ID, SCSI version, Response Data Format # Can be called for both remove and add. # Updates the Stp/space.h configuration file # Calling sequence: # config_Stp [Add|Remove] # config_Stp() { unit=$1 action=$2 default=0 [ -f ${Stpdefault} ] || { # couldnt find default configuration file, only allow the # generic entry default=1 echo "Warning: could not find ${Stpdefault} Only default configuration options are possible" } [ -f ${Stpspace} ] || { error "Missing ${Stpspace} installation cannot proceed" cleanup ${FAIL} } case ${action} in Add|add) Stpident=0 Stpvendor=0 Stpversion=-1 Stprdf=-1 Stproute=${Stp_default_route} [ ${default} -eq 0 ] && getuserchoice # update configuration info update_Stpspace $unit Add || return $FAIL ;; Remove|remove) update_Stpspace $unit Remove || return $FAIL ;; esac return $OK } ############### # ---------- CONFIGURE ROUTINES ------- These routines extract information # from and modify kernel configuration # files and parameters. # This routine sets cf_state and the device major number if applicable. # Possible values for cf_state are as follows. # NO: Device not present in mdevice file and therefore has # no major number. # PART: Device present in mdevice file but the device does not have a # corresponding entry in the sdevice file # N.B. there should be one entry per unit # EXTRA: Adding one more Stp entry will require a new major device number # to be used. This is for extended minor device numbers # Removing one Stp unit will require an mdevice entry to be removed # Return values: # $OK if the configuration files do not need to be updated # $FAIL if the configuration files may need to be updated confchk_scsi () { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` name=$1 cf_state= major= pwd=`pwd` cd $CCFD major=`${SCFD}/configure -j $name` || { cf_state=NO cd ${pwd} return $FAIL } oldnum=`expr $SCSIpos / 8` newadd=`expr $SCSIpos + 1` newadd=`expr $newadd / 8` newdel=`expr $SCSIpos - 1` newdel=`expr $newdel / 8` if [ ${oldnum} -eq ${newadd} -a ${oldnum} -eq ${newdel} ] then cf_state=PART if [ -r ${System} ] then : else getyn " This device has an entry in the master device file but no corresponding system device entry. Do you wish to continue and have a default entry created?" || cleanup $FAIL fi cd ${pwd} return $FAIL else if [ ${oldnum} -ne ${newadd} ] then cf_state=ADD_EXTRA Stpoffset=`expr ${newadd} \* 256` else cf_state=DEL_EXTRA fi cd ${pwd} return $FAIL fi } # # Add Stp driver according to cf_state. # # If cf_state is NO we configure in the driver # if cf_state is PART or DEL_EXTRA we just add an sdevice entry # if cf_state is ADD_EXTRA we must add a new mdevice entry for extended minors # plus an sdevice entry # Global variables used and where set: # $fns: add routines # $cf_state: confchk_scsi() # $Stpoffset: confchk_scsi() confadd_scsi() { SCFD=`get_mapped_path ID_SCF_D` pwd=`pwd` cd $SCFD case $cf_state in NO) echo "\nAdding device to system configuration files ...\c" >&2 [ -f ${System} ] || { cp /dev/null ${System} } major=`./configure -j NEXTMAJOR` flags="Iocrwi" char="iHcsZpR" entry="Stp ${flags} ${char} Stp 0 ${major} 1 1 -1" echo ${entry} | tr ' ' ' ' >> ${Master} ;; DEL_EXTRA|PART) echo "\nUpdating system configuration ...\c" >&2 ;; ADD_EXTRA) echo "\nAdding device to system configuration ...\c" >&2 Stpmajor=`./configure -j ${DRIVER}` || { conferr cd ${pwd} return $FAIL } major=`./configure -j NEXTMAJOR` flags="Iocrwi" char="iHcsZpRM" entry="Stp ${flags} ${char} Stp 0 ${major} ${Stpmajor} ${Stpoffset} -1" echo ${entry} | tr ' ' ' ' >> ${Master} ;; *) echo "Unknown state ${cf_state}" cd ${pwd} return $FAIL ;; esac # # Add an sdevice entry to the ${System} file # echo ${System_entry} | tr ' ' ' ' >> ${System} echo "\n\nSystem files have been successfully updated." change=YES cd ${pwd} return $OK } # Configure driver out of system configuration files # Removes sdevice entry and deconfigures driver when no more units are left # Removes extended minor entries from mdevice when necessary # Global variables used and where set: # $cf_state: confchk_scsi() # $major: confchk_scsi() # If cf_state is DEL_EXTRA we must remove an entry from mdevice confrm_scsi() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` pwd=`pwd` cd $SCFD nStps=`wc -l < ${System}` || { echo "Unable to read sdevice file" cd ${pwd} cleanup $FAIL } echo "\nUpdating system files to effect removal of driver ...\c" sed '1d' ${System} > ${System}.new mv ${System}.new ${System} if [ $nStps -eq 1 ] then # remove Stp driver from kernel ./configure -c -d -m $major > $CCFD/conflog 2>&1 || { conferr cd ${pwd} return $FAIL } fi if [ $cf_state = DEL_EXTRA ] then # remove last mdevice entry last_mdev Stp rmvdrvr Stp ${cntd_entr} || { cd ${pwd} return $FAIL } fi echo "\n\nSystem files have been updated." rm -f $CCFD/conflog change=YES cd ${pwd} return $OK } # mk_Stpnodes: # ------------ # create special device nodes for given unit. These are added to the # node.d/Stp entry and will be created when the kernel is relinked # # Calling sequence: # mk_Stpnodes # # The following entries are created: # Retension /dev/rmt/Sc0sr # No Rewind /dev/rmt/Sc0sn # /dev/nrStp # Raw device /dev/rmt/Sc0s # /dev/rStp # Control device /dev/rmt/Sc0sx # /dev/xStp # # mk_Stpnodes() { unit=$1 offset=`expr $unit / 8` #add appropriate minor multiples for offset=`expr $offset \* 256` #extended device numbers #retension device ret=`expr $unit + $STPRETENSION` ret=`expr $ret + $offset` #no rewind device nrw=`expr $unit + $STPNOREWIND` nrw=`expr $nrw + $offset` #raw device raw=`expr $unit + $offset` #control device ctl=`expr $unit + $STPCONTROL` ctl=`expr $ctl + $offset` mkdevice_t rmt/Sc0s${unit}r ${ret} mkdevice_t rmt/Sc0s${unit}n ${nrw} mkdevice_t rmt/Sc0s${unit} ${raw} mkdevice_t rmt/Sc0s${unit}x ${ctl} lndevice l rmt/Sc0s${unit}n nrStp${unit} lndevice l rmt/Sc0s${unit} rStp${unit} lndevice l rmt/Sc0s${unit}x xStp${unit} # add device.dat entry create_Stp_dd_entry ${unit} update_dd_minor $DRIVER$unit D_NOREWIND_NODE ${nrw} update_dd_minor $DRIVER$unit D_REWIND_NODE ${raw} update_dd_minor $DRIVER$unit D_CTL_NODE ${ctl} # update space.c file update_probe_struct ${unit} } # rm_Stpnodes: # ----------- # remove special device nodes for given unit from node.d/Stp # The /dev entries will be removed when the kernel is relinked # # Calling sequence: # rm_Stpnodes # rm_Stpnodes() { unit=$1 rmdevice rmt/Sc0s${unit}r $2 rmdevice rmt/Sc0s${unit}n $2 rmdevice rmt/Sc0s${unit} $2 rmdevice rmt/Sc0s${unit}x $2 rmdevice nrStp${unit} $2 rmdevice rStp${unit} $2 rmdevice xStp${unit} $2 make_nodes=YES # remove device.dat entry remove_dd_entry $DRIVER$unit # update space.c file update_probe_struct `expr ${unit} - 1` } # ------------- Add Drivers These routines add drivers to the # kernel configuration, update mscsi # and create device nodes # addscsi: # ------- # Check that link-kit is installed, Stp driver is configured in, # Update mscsi and link-kit # Get tape configuration information from user # # Global variables used and where set: # $DRIVER, $DESCR: menu routines; # $major: confchk_scsi() confadd_scsi() # $SCSIpos: find_SCSIpos() # Global variables set: # dev_major, change # addscsi () { # Check for the presence of the link kit. Install if it not present. permschk && linkchk # Configure the driver if necassary. find_SCSIpos nStps=`expr $SCSIpos + 1` update=0 confchk_scsi "$DRIVER" || { update=1 } # Edit /etc/conf/cf.d/mscsi /bin/sh /usr/lib/mkdev/.scsi_iiop -a -t -n || return $FAIL change=YES # Update the system configuration for the new Stp entry if [ $update -eq 1 ] then # Add scsi driver to config files. fns=${Stpfuncs} confadd_scsi || cleanup $FAIL fi # Set dev_major for use in mkdevice(). dev_major=$major SCSIpos=${nStps} # Create pure scsi devices. mk_Stpnodes ${SCSIpos} # Configure the SCSI tape to match user preference echo "\nConfiguring Stp driver ..." config_Stp ${SCSIpos} Add echo "\nStp driver successfully configured" # Check to see if we already have a default tape device def_nodeclash && { # Link driver to default devices. lnk_defaults "$DRIVER" def_driveclash && { # edit /etc/default/tape. edit_def "$DRIVER" } } return $OK } # ------- Remove Drivers -------- These routines remove tape drivers from # configuration files and delete # appropriate devices. # rmscsi # ----- # Remove a specified Stp unit from the kernel configuration. Updates mdevice, # sdevice and mscsi. node.d/Stp has the appropriate nodes removed for the unit. # Note: only the ${Stpspace} file needs to have a particular unit removed. All # other kernel configuration files can just have the last unit cleared. # To support this, we prompt the user for the unit to remove first and # then use the last mscsi entry for the actual kernel reconfiguration. # Only config_Stp needs the real unit number to work correctly # # Global variables used and where set: # $DRIVER, $DESCR: menu routines; # $SCSIpos: find_SCSIpos() rmscsi() { # prompt the user for the desired unit [ -f ${System} ] || { error "There are no SCSI tapes currently configured." return $FAIL } mesg="The current configuration is:\n Unit \tDescription\n `showsconfig` Enter the unit number you wish to remove " nStps=`wc -l < ${System}` nStps=`expr $nStps - 1` while : do prompt || return $FAIL case ${cmd} in [0-9]*) if [ $cmd -lt 0 -o $cmd -gt $nStps ] then echo "Invalid choice, please enter a number between 0 and $nStps" continue else Drivenum=$cmd break fi ;; *) echo "Invalid choice" continue ;; esac done # now get the last drive which we will remove from the # kernel configuration find_SCSIpos ; oSCSIpos=$SCSIpos confchk_scsi "$DRIVER" || { if [ "$cf_state" = "NO" ] then echo " The ${DESCR}r is not currently configured.\n" return $FAIL fi } if [ $oSCSIpos -lt 0 ] then getyn " There are currently no SCSI Tape Drives configured in the /etc/conf/cf.d/mscsi file. Do you wish to continue." || return $FAIL else # We know the entry to remove from mscsi so we get the HA, ID, # LUN and HATYPE for the entry parse_mscsi $Drivenum $DRIVER || return $FAIL /bin/sh /usr/lib/mkdev/.scsi -r -t -n $HA $ID $LUN $HATYPE $BUS || return $FAIL fi find_SCSIpos ; nSCSIpos=$SCSIpos differ=`expr $oSCSIpos - $nSCSIpos` case $differ in 0) echo " The number of SCSI Tape Drives has not been changed." return $FAIL ;; esac change=YES SCSIpos=$oSCSIpos if [ $SCSIpos -gt $nSCSIpos ] then # Remove entries from node.d/Stp rm_Stpnodes ${SCSIpos} "$DRIVER" is_default && { echo "\nRemoving default tape devices." rm_defaults "$DRIVER" edit_def "NONE" } SCSIpos=`expr $SCSIpos - 1` fi permschk && linkchk confrm_scsi || cleanup $FAIL # remove the Stp configuration information for this unit config_Stp ${Drivenum} Remove echo " The $DESCR specified and associated devices have been removed." return $OK } # ----- Change Default Tape ------ These routines implement a change # in the default tape drive. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; # $SCSIpos: find_SCSIpos() or askSCSI_def changescsi() { # This will return the number of SCSI tape drives. find_SCSIpos confchk_scsi "$DRIVER" || { if [ $cf_state = NO ] then echo "\nThe ${DESCR}r is not currently installed." return $FAIL fi } # If ct exists, we want to let it keep it's default status. confchk "ct" && { echo " The presence of the Cartridge Tape Driver has been detected. The Cartridge Tape Drive must use the default devices to function properly. Therefore, to use a SCSI Drive as the default, you must first remove the Cartridge Tape." return $FAIL } if [ $SCSIpos -gt 0 ]; then # This routine will reset SCSIpos to the one they want. askSCSI_def || return $FAIL lnk_defaults "$DRIVER" else lnk_defaults "$DRIVER" fi edit_def "$DRIVER" return $OK } # ------- MENU ROUTINES ------- These routines present a menu, # prompt the user, set global variables # and execute appropriate routines. #install menu for SCSI type tapes # installsmenu () { DESCR="SCSI Tape Drive" DRIVER=Stp addscsi || return changebootstr } # remove menu for SCSI type tapes removesmenu () { DESCR="SCSI Tape Drive" DRIVER=Stp rmscsi || return changebootstr } #change menu for SCSI type tapes changesmenu () { DESCR="SCSI Tape Drive" DRIVER=Stp changescsi || return changebootstr } # display current SCSI tape configuration showsmenu () { [ -f ${System} ] || { error "There are no SCSI tapes currently configured." return $FAIL } echo "\n\nThe current SCSI tape configuration is:\n" echo " Unit \tDescription\n" showsconfig echo "\nPress to continue \c" read X } configsmenu() { clearscr while mesg="\n\nSCSI Tape Drive Configuration Program \n 1. Install a SCSI Tape Drive 2. Remove a SCSI Tape Drive 3. Change default Tape Drive 4. View Current SCSI Tape Drive configuration Select an option " quit="return to main menu" do prompt || break # reset these flags prior to each pass through menu major= IPL= IV= select=$cmd case $select in 1) installsmenu ;; 2) removesmenu ;; 3) changesmenu ;; 4) showsmenu ;; *) echo "\n Please select either 1, 2, 3 or 4" continue ;; esac done } # create a device.dat entry for a device create_Stp_dd_entry() { devfile="/etc/conf/pack.d/Stp/device.dat" echo Stp${1}: >> ${devfile} echo '\t'INDEX=Stp${1} >> ${devfile} echo '\t'PATH=node0,node1 >> ${devfile} echo '\t'node0=D_SUBSYS,SCSI Tape,0,D_TAPE_SUBSYS,,NULL >> ${devfile} echo '\t'node1=D_UNIT,Drive $1,0,$1,D_REMOVABLE,NULL >> ${devfile} echo '\t'D_USER_MSG=SCSI Tape Drive,8,0,,NULL >> ${devfile} echo '\t'D_REWIND_NODE = >> ${devfile} echo '\t'D_NOREWIND_NODE = >> ${devfile} echo '\t'D_CTL_NODE = >> ${devfile} } # rewrite the probe information file in space.c # assumes that devices are contiguously numbered from 0 # and that we pass in the number of the last valid unit update_probe_struct() { tmp="/tmp/$1.$$" devfile="/etc/conf/pack.d/$DRIVER/space.c" awk ' BEGIN { i = 0 } { if ( $1 == "/*_PROBE_START_*/" ) { i = 1 ; n = 0 ; print n = '$1' for (dv = 0; (dv <= n ); dv++) { printf "#define Stp%d\t0\n", dv } printf "int StpProbe[] = {" for (dv = 0; (dv <= n ); dv++) { printf "Stp%d,", dv } printf "0};\n" } if ( $1 == "/*_PROBE_STOP_*/" ) { i = 0 } if ( i == 0 ) { print } }' < $devfile > $tmp mv -f $tmp $devfile } c.O..ddriverinstalld.c..ealade.d..Space.oSpace.cSpace.o.ZMasterSystemfDriver.o#Їx]ޭlP( Ga-R$Cs\^'D]--'8Ž9zrr*`ѐsJ Th#V)l~$U{=pdޅFU_ރ&\LOhm&Y-)?-//_<2e@>a>ٗqsߥ+/=?v{gv]|J[=o3Q,ɕZE\9ZAd,vgEs|ɕcod~=N|i.^Ãa3\5.2sPXTb[;7Y=_# BgGSu=nDU9e-#Uu96|7;f0JrJu<0& j)c7x32$JO; !l^r1U+V},ڰ UOTHɑ,km͑ OTJ1ӫf뙫ni1!)+$.L յ O}G[2;Ƃ `,5-9ޕF+4IaM%gqVD 2QQ73ɓ6RZ5F=)ue}ͫPގHuAu `:JeyĎ]w3paN/]XV;f鲉OS&(għDnТ#]AN֗N@)窞-J GʼiR&O xմ;ioU-W.4ɝ{ h뙭r N$8ζeU_ߟ#B5 Ժ[& Tľa{8!( +2jV<;>6Jj˒ dʰhSZd0?RZؐ,Jퟦ%7mg;);``қș ~O MswDc)oAƆPz,º)|x Ѵ}WlҾxNfUpp5{2B Cifd~nhj'].$FFt1{%bn#2&&$G$Er0\|"{r jHζʖ+\Y%!$;TKnێEժ핬2Y-qҚZYg3>"KP?a?<8.oZГX\b^OXxVD$w[}"zAO=<2N"/7U#*7LmA6lxV }o&f6xNQU*dцFWsz"FQc$)Q_ /g'Z^lwcT mf qpԫHYٌ(oȩQ2&¥mc%)}MaQ~$6& !TUMK"9$مjQjqXĝvKh KPP\ucm\}-jP%g<֘I{$_;xY 2S*ɕlZ , +[A8ڞCLP}+G+xR?k(aΟכ@[&dVOnDh&O{,WH{Hn2[XRUv9 W>VM1`,-dPJ/o yCuBI£UqS[:7pD}okdoLERu VY,(.UsjR/ԀmSMW;&<<إEe0~@K&%WEe*ĊȍR|ÿc~"c"lN:J%,!`e9#j7 oUۚsD9X{ ٫Q FZV5"JR(5jBiyZ;7XS>dKó>VnÐqQ' )r碈  Mar=Ę&2#$(3O϶pګJ .lW-OM}Emք2kS+ Y6H8Ml8$#pH\<[ \\X[0ƮjP]460ӱPj0sᚽ0@IK޼[qz@zP@P D ?uP \(0Y5k~`#XD@+{9㰂} 1Lsh`XZ} &\ZԿcΜB]<.%]΄jXŝ#KpL`߫8#\* RvGWg8' f_8U~mͶ'aθ >x8nDԴ9?DPok`#f1]Rv ƛVPN,DO'! 8ii~%]+sE1 3VȽc4_ǫN'I!"g18Hv m 6%$~ZRyT8BN- syV*2m"h1&uRQG>=GUZ ilu"G 768Bo=M/MNBP`t20JEhɭz >`<ُϖFz_xü ^2n؅#P][q[Pyn_"|4"|>/*zD:I zdz1fQaL3X %:8)~A 4S[q |tAxAZ۰-.ضž@##_}=QNWGC-=scwC?1(# d1&&9(Eš~j_1, dğ ken<-Ϗd6ӗr2K`]42jX=$;H╚ 9/u\4|I¯RgR_ˍj2Hr!TOH*D\;w8௾S' AMoK UŸTAM Ϙ"U[MEv#\|>EWyx]SZyTRt(iKRx?y:ǃ`Y^GsR3-酖;6DlZ<_x=-A ,0^'/FtkRk|1٦3քD cEXN$'!zaZ"=R7_f2B9b1]16Vvfz%{oGO`zuKpG~-qy1lQi\%:R)Ayݑ 0}Xϴ7);?>XWC'gn%<߉NE#yj6V3)#8JgBsa kQ,PCߙܗ'B_j72p'@XyhM2CU8Exاqzw_B-Az>64ֈU[9mkIR!7)UVt"#*HDtݝix- fm`%>BSP_/5c_a4TPtS4Ms0)aѤxn E2'I*-፪6Eb+ 5V+DME(<7CJ-bmp#xPXM剔z8w~ġzvN$ջ Xmh"! Ͼz/!7LR["E2O~9,vQꆪ8Ǣ 7 |V(w߼V}A-i(۵|O- "7g #b͟Så$ mT)(D%Ðy$ J2f!ޭ  ;x,д+jO15??F0$?"j1B" cϞU5 LBޛu+#6& zEnB\BJ+b5%m1xĪj]=.NiGTwuF@HX ^ ,mwc"sU]dW.T"8%)*H]|HtCLQ=fs_QFd+.-AQ/40~yЪˁsJ)&B> tT+ 3[WQtk$6FvO8s {!t.*B}(+֠BWB:ta0dgۯpG STW&3?E JV"y'peSS3 %K 0t:k0>d-EAT/qM?SOY^]ËnS^߶" >4+t4ࡿ)a> 3Pڎ8ݦș?/5;xTz6OH }5_~Vǧhr:BnpznnBox)o k8ʎHrk-1#O4^c=瞼^AV]d2pL R)/B|2J4`5KH#F-nQWq9X˯hpnӣ_LVyY\%YtܔsCy,>3h#c Dqxϖ"EO?tXag9AeDe*(\{XF"9a`zսhv,sԮwÿ"UwJ;{3rϚz20xHccmdCГ,:uG"u$xٰ[^Q-BZKbyIP=ZeŊ[ŊtŸd\;\$Ng<[sA.5g klez!Zt'lEPZ|SDtm_w12w僆?)oY2Is>!8?H`Dq/b9_o(@sgAQ|*'*xԋKa;ggCWQ|/xoUkwY~u5Ciܟr\(5Q\.azj':3ςނs&ӆDXRpq7lvyQI6]ySmg^D aF0jk`~Ur\^=% CQ s5޽^cL=$klW\ģP9FR?\kL/.CֺwDGۦθk"/ hZ>/VoVnCJ` NK%h|~3l=Ak K>1Up;Pp=&x vL%ia6{Y&K\|[+?UR\\pfYi2[0g!7 bwտ!Q^k[_;)B>_88j,#h= ߗ_] UJ\үXRRp#}HNkdZ^)oXePEi m5ǰa&X![Z%FlRDו`W;) =*.)$Z]!F]Jёf) ו]e􂟕 *;Ғ.$(. Pr?U +I 99{O8U\em,W 5OŐm$?D@O\W}闫kqƝ1Z=_7=q}t2;zr :?4e2C#g;mB<ϯv@9\9K{i)+ O":3;KeioYpEt P~Ooz Qt4~T:!BOc >47k-K5݃. 8Ar/XR3l er˔$C}B7,@ CC\($.®W!irm W0jP$[yceLTb˽[5򇖴H=i(婮,#`kVcaw%]Tf'@ן): txQ}3:,$#z,Hܛ72srދvP n:Sf- iYx,P[Έde;f'SREi vW}p/\,SdLYg!p_ePͿ˳75]WsγSyiz_uHr8c&J>#`$y(I,=]Qt,l[]o.|~-- ?3L>o& !m-B<#pOϠy޹懛ۃGqϭZyhGoVJY6 sF֔`c >.HA>2ERk]C' 7>nc葵n'؁#CjiQ Ò=w% G&~XndKe:T UJ$bFIQnf;Zj-P5b[7( gN# `ŮVLDC4F.KG1>\w Trs#j:V*=)qwޡY]J ׆_.̢c!x`઴߫(pW>볋 "o /q4E#zܨGs6<Hw>s)WȔTsħSyKmHq/MkyW>QqZm$Qz ߫n;H"ސT߯tnY  O"Q;GN0N]tu;O7D1 RDe7G2۠y܈nF6=ng2]. k&5oorAf4@i1xVtqQc (_)YMF%[-J:\2 HAMg{mЁ;79}CܢXyӬD -Q!_.h1FBY -c̞!-AI&Z$@ý(DKӾPa;Ŧj~x^GYVt65KxE\TLa@m7JIwXp5e:bm)QJZ8m(߷Q1#* ЈxznH ۢ9G$Ƣ&1 dߢw*i #G o(r7dgdz5JfV2ۑ(嗫(ɵ|Po=hk̏M&R,WM^t\8p0 k/pPb :2 'N=VHw1" EI:[ոd{nI)3ɤΔY4GgD02[:z>BWwEt>y1ޔE誼UVb7~ܤQH}1$Z4Og:I ?=?lh>wHm4V}R3kٓV8E-HxNsHB{/5z_NL_lg:+B Bֲ1BpXssJ(A.b>U ~i]7%}֤xkӕ(@'xGĔlǙta)uƷfxU[?҇+cUF/7OY"8}?_p$z]7GL1ARg^(YG"[oP+[;JUMŧ/%n>gWʴlZE&"Rz7 }{̧s;yV\ܓP=O5ȷA>[4[yۢh^~[еz|RrX69<5L6 L䞖Trx ׶kъ}/_hWDq*"^b> 1[jBd-ټ}orPboE[_?ӥtkU_#T$}D3"HP\݅E  =P"52VaaxE!r+u38f:)o_+=N!ѽl>]~T'Hh + j?vKµ P+-Ghh}DL5-{{ht)!kkJlQ}&Ǖ}$ZjZ)k96)ҁ UʝD;t.& L 5V9E'특keGRvNvOERM1wlG[!&>AjDWڮizH}>+! ERa1T<+2DnpW/~cb9C]bQ?[[\Z]~-9(o^! яX^n+YF>LJ)H)8a0Mt|ni+pt"#" R5!%uW,Yyr`խR_S]@(uj}pq TV&]u{l'tX~Rp ᜏ[B@h.ثW0 )Wb|E2k"n`g[YQ I@Jp?[㔨ɇ8JUlW 2*}v|$D[ߎ /sn2+=dXAc?xcLXdcIצxzY8k+2%wzcy>kF9PxbKvү"#I|-h9_c^7x#Sձs<ҪF6/ءVK(:0y%VL)%rFP,YUa9U {T_g,4zM9I˝7ƌIE`)S.:M7\D07b3HNlMX{0/;Lf5K4ޔlS=,H6X|?Ib>̀KB :FrXb)Am9Hs/>|aN(|AeM"TTƠ)$PnoJ":pebHǃib޼52cI^ޑ\.ʲf7zhU*fUq+4}i%Tʄ]0ʓs]5i=}@/&gӪIsqe\e/mXyMrDxؗCd+]83Rw<)"|CnjFE\g@UFbme'Ah[;SF&k(1qzy£pݥ3F1Y"X"h9F X쾔x|}X4\{5f e*(DWB{?|1i"Q\)7~GwXf-@~zzFN8EZ+)oYo$v.zLWY9y~RRM 05CV:MZdt*V=s,4WR"^_8.0\JBNcS-a+eG'+}֫OBJ0ɽ>ꐾjf(z *mi \,G, cH9bk9},q.8v߉MywR K9y짴1y/XKn<;W6b 3bUMQQu [ CžWB[5+AJMJzVgPc1u0vDDmZmZȢx"n' L]nD֒вC-4|JR(Et,/LVߠ@n[eHe: <[K+y~<4ԏ^HpnIf,BME5h0ӵĢVHX4DAfpԬa:Md숊jtPʌݢ{ /<{>mW ޑܭ{t)G}r%j%}iPV~ɥEiӸ?y BY'ލlE1]1}Q9=5tByrz("~r2pT(Ҥwt@tNGe1rħotZԓR9HV$ChULV{7X>T!Be+C>QN>qkzюpgQ-+7&|\[m_& L$6W}k2OppΟTVXKˎq4jyv{ײpLUj&{mrf۸NpEHhԫƿU˖#pV4)vn~RitV0cwIqM9|QqƈqǶ;f{cinKʧmu;${\Azj8sXi ◆(Y:?'?%}yXVm[8 [3A~(}Bj͗A8ZH{Dw,qYxRrNk+8<[pнd +jWf|_z|^>i+5Ct6g;0%uQyȧ=!:&$1Wwn+XVEwWqQɯeرK@ 93?:-aݓi ?=HJ:3C׀QC95#4`;u0־3ٝa:^EusvøaY IH) =2XJ:nNzgԷg>46:yͨT)+,=j1ŨDIύ i5ߌO2;2+JuF" bȍ+Yb?r%9hix›')Kx;m{ac o9=/T;GDTʽm71fܣLSmq0s7fJqFUKP,R)\EXn~~|ϟw<ׯ{+yjI$QTQLnSpaF;߼mׅ>`ⰾc;h(#H"dG0vހĺ=Xa#=knY&-b|u#Z.I3EL6G!H {DiSM:k TwC>d':5LڜbĿI[2  m/dPlT|bHfwt]޻'"HnbYTz@"lcL5'/+,+a˵fV`;ݒb<.Нsi7mwޚc,7%Y7+.rô,B7(P{+-. M啯12nW]dw "6( #A: E#WX#ӣ~[,ʀS:x7:1-%m =L,qhA-RBx)ۺS0a-{dÌ")F׊JK7%`R]*|*zRoj=sE2,:H"w▣2>#; M}79ȞeroFX<.ȵOE))pj'nL=44ץvELr$Tû Dú_ќPTAhm4cѹ޸3zp]Fߍct+}Ýt7<.E@; lyyC4=L\ɻUp`O2^$nigE#Kɖ/fww)gJ%lA?]aC E";N):}wv~•w|scIDe|=F?Z5zfR!WX-TO-Eoy #tdX:;ñhQr- Q >DاXs8(doEɝekbZ^wtͱW"!m׎q58F-R2w\fy̼CW7s|v 6T]!uFҟ-2"|EOdLˬjP%4٠u0>sk1TzIc2愿pC;)#|=8.Jᾲ߷rR7|k_muDfÁJXh+VH|Sv\Y/8\jZy![º y4 ի 7WOA7Nl7WO' \;tߊG坉o D Z&+1u*jyDZʺ} w:4~~bh7q/ULgb]/^ȥ\veuTDT~к5{w+Wq[7Ur,8Q޷G] U |f*%}t=)\z)SDcYk`4eךmi8^|nbr]#"'8ezxdSGb'!{Jkf䷊W \$y% o+  "Ĝ-{VmՂt3vI}sUl}- v5VtkesdB9.)\+5]OLIgfyh˪XWT#*WDn8Yas>}/El*_K?Sm&P+{.JoHʤoe1K1syڞ⸕n|5.>4rGX]ZEԢ^1`-Gq!% $u KF3␠R2:(\u޸ճO\όw5vT2Xs4A9<:C_yFd޸=s^VifTJ㔈ӂƣavHGSmM1逷ӻRL*ިJJGl}~=s ) HcLvr7ߌ57pV Hm5ow~TŦ _ҒpwM|e[؟KQ1_Q7N3T*{.&P*.y)q2 G?ͯ^u`~UYi/Kv#0fUuX~%-uxK_wx3KB]w倖sOX_;.lsTn|җQ-{.6NTK\<O%"!~5Nf!֯ Z%]\zfCAN#FƋ}օ߇6*b]OYL;; x{NyekWwe?>RAwgcxG2ZbL:K(W<*Q7syLi2||N-%*D?L(;w*-{b]X6RK_qU7U dĨea?wwwψ38er w㖀!*#):/܉K9јNb*trgnNtpIaM֪4aeڠB邃fM nU?ߚX'f*͢ÆX۠.QWcLWV Iڿ4yI-oN A>أݩ([RB7KGd-wsϟ(K{eT̾H;ϲVir7q<_Lp篞& L< 4yc!A&^ FayS€ Ή~58zg{fֳ'rۻB/=+حF3GR[=5W%;tk7u2Z+ \1oum1#~tn i˦\Dq=7rW1jf+}xbX9_>!4ߤ~|b__#ʤTR\c?x/N`p#j9:Rthu(W5{c+9.n3l2<9WH>SI%qw Vr-|9_Po) t/Jh$fy53(Ǩ=Ž3'lo։D̮DtZ^$r!^zjNKyIjV}SԮS3PO^^Uwɾd)/3bzsԊ*Cz޿YP[O8qF⾮|uӼ]#Ƥv 1k9/ $H)Nl:8,P~h9#T/)7ZͬO:0QG5)j)ʒտԃ*{8Gh;dzP:d7*.v٤QbxoXa#a깨b:5(bWtsbލ1%8jQ5\oJ:$=p䍙gHȬ-XլyC?v!YHggŢn/3`F4;|._OgCҧy%9%hJsڼ1x}[NON5[k Z䧥#|VwܕfYr?ӳmDi:9 xܻj J3<.i$: &xQQ69m')3,娛6g\"r(ڍ rf)O3[?jj5gNh[QNYk%ne+&O-9;g/9D79D䛿εQfg\aM`6̓yCSgQ𾂏*QsV٩ܛc9],T4r'fa:mwmFHUEʎDe5l豳8x陹3죂RRz4X'ӹ:;fQI-ΕcROO32OɳnUHTyFg$>#.œnNOQ(ܫclͭi< B0WUQh[IfYg$j~[dIIls9: @d3m?9+^V+NnT3G9eJtYc>qfve% H9܋ R僇8h^{O Fm@_ x -Yƙs% [3D?-K=6 BE;֓M$fN؅,zN(ۅ|~w}>8,$+1 6em ;o K.ݶlu4jmndĒ1Y_$^kX{]t?l^RڱOY޼H,9rƑ/.dC%݊ȒIXC# mACx2䰑,6M|!C SQ.䱱,+0N~DSĥ]06)܁H={HbAƸsȮ)7f.ZYJӮ||YM󧶐+E;*6}ډY6h'_fj+qZ5>=jXSE;~\dr'w%f?i*a|v- /S+]DO5'zE55;9$5:@uq.ޓ `MƝe>|C&:أs{(>9u'? !8»lqOdO|lj6->s ?%e !U@l ސUC_aɊ6;GD{c2+ 𢎐2c>@W1O}L}hU1"UۀV: YYSg H%ؿn_ߤ&gbtUW;v˝5]5+ws2w$U~W |~qa]rKfqdwKv6Cbo-|[ ۽h}lIn㚮|jm: }u#woB6k~wg/{mp;ۗv 6A~mrWqo_jm{oaj*p¢ߜiYw[飭 |^/WfU,oaSJY9?vi AnKݠhu5Gw|) P/vʖm`^\\3AO}8 vG} }|A76fhʺݵ^{.vci-̫3qg;s6щ|N& GiGhaEd{x:9vwzBϲLZmȩ=m$CvΓH+`ȩΧbױ۹_Sek<WoFMfgc`ıO*/vvCs}󽷠[5\ٲʢkw,p^ 4r ^UPry<(nڷ\{Wk7a6dՕ0w6ȭm /pncW]|iҎI{׷+y7nvSy=\CV[/FM\:GE9?vgI=+YpIC#n9O"r/4]Q2 7w{G> 6+l>-–L>)}4#- >lhGx΀ @y?h[-Ğ Kn8`pT|> zpXoAڡhA!o$8߸! 5 fR;x Pi&:ADJAB=B,F3aa- 8 QyЎ~ި?=opC:Z}0 p{LR"πT>H=)Uo~p(n#VD?C?H`IʀĐeSGRA1ia^K`H8AlvA'LFњ9$@:зHe#[8<?#ـևXg BKr!d'ghGVA@u}g?Zd*D ~*#cpSݨ৹p 8`3wL⩷ b)0gӈbk@~!>dƪ=jrAXƍU h4isS>- G!X#v?P.-߸#!w P!uS@G|H8|-?`dG+vT5vRx> ru#y9H.CDԏVLgxG݀H(6il]Xg@@P{=<6EQ#0GPn2Jgd[~H &/&1} G$'8݀{@~N8@p\3=^^Xp@v] @ |hwƊe͢8X#{T}{u?HqTpniyE-nR iB?=QЏlA'#ASG ǧShF=ldAN t߆o:eH7o)ʨ^6ki/qxpTIT_egٞ:psTPz0z 4#9qˀu`8, ۀ1 > HX%#@>h?*O8OA~_O}h> H6{ PJA >gA%f_@G*xA{"u; fh3ªT< C3*[Lo0#62U y 2ZX?xPoprHqi4,~݈q 1 [JjH>n>Aͦسj H B9W~ sSj0 ┎AӝNJagրJ Z`=  cVzA' b<0h*>N1W1Ng~x<XύPa@c17?5 :@~j7$ 9eT;qZmT x7 ?p{c?`A"t)hyAx "?mȎ0  r>EW)r*|<e{T=xG~GA䔎#tA: ! xo0#lwT Zݮʀit>cUEQ<# 8\T};o+(AƧҀ|ʆ}PdN ePvauc?uM!~`6*@= @ @=|p*ÀUMUXpH: O shSr6G:f@sn9˾?X#}PvXgcM=&YQozNsGW/YuÞySϗS=.3/˪-DŽnrqD#?}An @m4*G}{3| aL@3: q}̩^Hu@; %\K{6jEw@gN9ER#ـ`0٥Mґ m9$͡D7<3Y3=GD AS>lΪ#ـAmSLEK1-p`84 9@f~@=`[@,z֖~Z @001 ,n 17` p ,+Df6H`>`bSXcF!)ٞ=:ON5fK;3pF*̲zZsg2}-!d\_!꜡B;c0[!ڡ C$-! ;< h~f!L|h,k捶rX%e_#I^޵Y2 1^Ure+nĐŽC\[3o* *;n׆LrHy  5!c0E=CHcc^ d^f.C/UHg .^NCPl}:Cy{ E=C_x~lwǬ|cCtcd$9egcSV&e"Ll$$7$7"BI3.M!wBgj,Z[<)M˘h?lWXlFd|!C7YWI u4,yg ?ce찣+`^$=k$1ǂz3C{ <1gHO):A[5[j=zQ`0X KiP!wRv'PDg{;lth,DEX,J%D`,&{3s;-{蛍˯t? okv\W~W'@dP٪{TBȿ|@qO' אr6c\1بUw?*CT|V}0X=0`@VZ@q7x*?`ʺh~.jcˣ8Ⱦx>:%d?u`X7 `>}`]`oP \Fu-qX`?]T2kԭT")\h|cAluްگYre"՛䭎HCluj/Z?6{߬.+2t$ӶyVDi.=(ka;i>Lu!u+ղ'Zff?OQ!͞ Ucqfm!އģ!A@Qjꙛ3IX<͖!t,d$Rdmy'd13,f699e>l`dvkN $$(]uJGuZI *P6_k+|>֛&C)QN0j:`ݷTQ\؉#F%;O *yMSk@bo[r,;lyeӚJetҩ2QCm N[zs9T][꥜:APS oCpe욎<9+!)j z˲y3^ H[|YI1LC s~7ZHHiOD`~லgI2ۙl>Mwiw`Jp,貄[ u12GxVl2BXa%6ҕفj66ďv0k(qYx:)#u£HIaA7 ej\`T> 9)Hkl_PRJKӵlHt[*٦: # @(#) scsi_iiop.sh 26.1 95/07/21 # # Copyright (C) 1989-1995 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # mkdev/.scsi - SCSI Configuration # rel=`grep rel /etc/perms/rts | sed "s/^#rel=//" | cut -c1-7` shared_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" client_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" ROOT=/ export ROOT . ${ROOT}/etc/conf/bin/path_map.sh init_path_mapping # set the standard exit values : ${OK=0} ${FAIL=1} ${STOP=10} # set the environment variables LANG=english_us.ascii export LANG PATH=/etc:/bin:/usr/bin export PATH umask 022 #file specifying default SCSI host adaptor type USE_DEF=1 UPGRADE=N HALISTFILE=/etc/default/scsihas # RTS not LINK firstime= # # Standard functions # # Print an error message # # Usage: error "message" # Argument is a quoted error message # Notes: error always returns 1. # error() { echo "\nError: $*" >&2 return 1 } # Prompt with mesg, return non-zero on q prompt() { while echo "\n${mesg}or enter q to quit: \c" >&2 do read cmd case $cmd in +x|-x) set $cmd ;; Q|q) return $FAIL ;; !*) eval `expr "$cmd" : "!\(.*\)"` ;; "") # If there is an argument use it as the default # else loop until 'cmd' is set [ "$1" ] && { cmd=$1 return $OK } : continue ;; *) return $OK ;; esac done } # Prompt for yes or no answer - returns non-zero for no getyn() { while echo "\n$* (y/n) \c">&2 do read yn rest case $yn in [yY]) return $OK ;; [nN]) return $FAIL ;; *) echo "Please answer y or n" >&2 ;; esac done } # # begin mkdev scsi functions # settrap () { trap 'cleanup $FAIL' 1 2 3 15 } unsettrap () { trap '' 1 2 3 15 } cleanup () { rm -rf /tmp/scsi_* /tmp/hw /tmp/mdev.$$ /tmp/sdev.$$ #special exit function for -C (check), used by mkdev hd #output status to filedes 3: index [added] hatype #index = index to be used in the minor device number to index cfg array # -1 = not configured #'added' indicates that device was configured during this invocation [ $check = 1 ] && { [ -n "$thisentry" ] && get_index echo $index $ADDED $hatype 1>&3 } exit $1 } # perms list needed if link kit must be installed permschk () { return $OK if [ -f /etc/perms/extmd ]; then PERM=/etc/perms/extmd else error "Cannot locate /etc/perms/extmd. This file is needed to verify Link Kit installation." cleanup $FAIL fi } # test to see if link kit is installed check_link() { return $OK cd / until fixperm -i -d LINK $PERM do case $? in 4) echo "\nThe Link Kit is not installed." >&2 ;; 5) echo "\nThe Link Kit is only partially installed." >&2 ;; *) echo "\nError testing for Link Kit. Exiting." >&2; cleanup $FAIL ;; esac # Not fully installed. Do so here getyn "\nDo you wish to install it now?" || { # answered no echo " The Link Kit must be installed to run this program. Exiting ..." cleanup $OK } # answered yes, so install link kit echo "\nInvoking /etc/custom\n" /etc/custom -o -i LINK || { # custom exited unsuccessfully error "custom failed to install Link Kit successfully. Please try again." cleanup $FAIL } done } # determine a default host adaptor type: # use command line parameter HATYPE # else, pick up the last entry from mscsi # else, see what adapter shows up in the boot screen # else, default to 'ad' get_hatype () { if [ -n "$HATYPE" ] then hatype=$HATYPE return fi grep -v "*" $mscsi | \ while read ha attach number id lun bus do echo $ha >/tmp/scsi_e$$ done if [ ! -f /tmp/scsi_e$$ ] then while read device base vec dma type ha id lun do case $device in %adapter) echo $type | sed "s/type=//" >/tmp/scsi_e$$ break ;; esac done < /dev/string/cfg fi if [ -f /tmp/scsi_e$$ ] then hatype=`cat /tmp/scsi_e$$` rm /tmp/scsi_e$$ else hatype=ad fi } show_haparams () { SDEV=`get_mapped_path ID_SDEVICE_D` cmdev=`get_mapped_path ID_MDEVICE` sdev=$SDEV/$hatype sdev_line=`expr $HA + 1` set `grep -n -v "\*" $sdev | sed -n ${sdev_line}p` ha_tag=`echo $1 | sed 's/^.*://'` sdev_line=`echo $1 | sed 's/:.*//'` ha_sdev_unit=$3 ha_sdev_ipl=$4 ha_sdev_type=$5 ha_vec=$6 ha_sio=$7 ha_eio=$8 ha_scma=$9 shift ha_ecma=$9 set `grep "^$ha_tag[ ]" $cmdev` ha_dma=$9 echo "\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\n" [ "$ha_vec" -ne 0 ] && echo "\tInterrupt vector\t$ha_vec\n" [ "$ha_sio" -ne 0 ] && echo "\tI/O address\t0x$ha_sio 0x$ha_eio\n" [ "$ha_scma" -ne 0 ] && echo "\tController memory address\t0x$ha_scma 0x$ha_ecma" [ "$ha_dma" -ne -1 ] && echo "\tDMA channel\t$ha_dma\n" getyn "Change these parameters? " || return $OK while : do pmes="\\\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\\\n\\\n" [ "$ha_vec" -ne 0 ] && parms="1 $parms" [ "$ha_sio" -ne 0 ] && parms="$parms 2 3" [ "$ha_scma" -ne 0 ] && parms="$parms 4 5" [ "$ha_dma" -ne -1 ] && parms="$parms 6" #get irq, sio and eio for i in $parms do case $i in 1) thisdev="\nWhat is the interrupt vector for this adapter?" pmes="$pmes\\\tInterrupt vector\\\t\$ha_vec\\\n";; 2) thisdev="\nWhat is the start IO address (hex) for this adapter?" pmes="$pmes\\\tStart I/O address\\\t0x\$ha_sio\\\n";; 3) thisdev="\nWhat is the end IO address (hex) for this adapter?" pmes="$pmes\\\tEnd I/O address\\\t\\\t0x\$ha_eio\\\n";; 4) thisdev="\nWhat is the start controller memory address (hex) for this adapter?" pmes="$pmes\\\tStart controller memory address\\\t0x\$ha_scma\\\n";; 5) thisdev="\nWhat is the end controller memory address (hex) for this adapter?" pmes="$pmes\\\tEnd controller memory address\\\t0x\$ha_ecma\\\n";; 6) thisdev="\nWhat is the DMA channel for this adapter?" pmes="$pmes\\\tDMA channel\\\t\\\t\$ha_dma\\\n";; esac while : do echo "$thisdev\nenter number, or q to quit: \c" read x case $x in *[a-fA-F0-9]*) case $i in 1) ha_vec=$x check_vec $ha_vec || continue ;; 2) ha_sio=$x check_io $ha_sio || continue ;; 3) ha_eio=$x check_io $ha_eio || continue ;; 4) ha_scma=$x check_cma $ha_scma || continue ;; 5) ha_ecma=$x check_cma $ha_ecma || continue ;; 6) ha_dma=$x check_vec $ha_dma || continue ;; esac break ;; q|Q) return $FAIL ;; *) echo "\nInvalid choice. Please try again." ;; esac done done [ -z "$parms" ] && break eval echo "$pmes" getyn "Update the link-kit?" [ $? -eq $OK ] && break done sed -e "${sdev_line}c\\ $ha_tag Y $ha_sdev_unit $ha_sdev_ipl $ha_sdev_type $ha_vec \ $ha_sio $ha_eio $ha_scma $ha_ecma " $sdev > /tmp/sdev.$$ mv /tmp/sdev.$$ $sdev awk 'BEGIN {OFS="\t"} {if($1==HATAG)print $1,$2,$3,$4,$5,$6,$7,$8,DMATAG; \ else print $0}' \ DMATAG=$ha_dma HATAG=$ha_tag /etc/conf/cf.d/mdevice > /tmp/mdev.$$ mv /tmp/mdev.$$ $cmdev return $OK } # get ID number, and LUN get_numbers () { for i in 1 2 3 do [ -n "$BUS" -a $i = 1 ] && continue [ -n "$ID" -a $i = 2 ] && continue [ -n "$LUN" -a $i = 3 ] && continue case $i in 1) thisdev="\nWhat SCSI Bus is this device attached to? Press to use the default:0\nSelect 0-n," ;; 2) thisdev="\nWhat is the Target ID for this device?\ \nSelect 0-15," ;; 3) thisdev="\nWhat is the LUN of this device? Press to use the default: 0\nSelect 0-7,";; esac while : do echo "$thisdev or h for help, or q to quit: \c" read x case $x in [0-7]) case $i in 3) LUN=$x ;; 2) ID=$x ;; 1) BUS=$x ;; esac break ;; q|Q) cleanup $OK ;; h|H) scsi_help ;; *) if [ -z "$x" -a $i -eq 3 ] then LUN=0 break fi if [ -z "$x" -a $i -eq 1 ] then BUS=0 break fi if [ $i -eq 2 -a ! -z "$x" ] then ID=$x check_ID $x && break fi echo "\nInvalid selection. Please try again." ;; esac done done } # display current SCSI configuration scsi_display () { grep -v "*" $mscsi | sed "s/hd /Sdsk /" > /tmp/scsi_d$$ # old "hd" entries can just as well be "Sdsk", and it's simpler echo "\nThe configuration file currently has entries for the\ following devices:\n" echo "Host\nAdapter Adapter\nType Device Number ID LUN Bus\n-------------------------------------------" sed "s/Sdsk/disk/g" /tmp/scsi_d$$ | \ sed "s/Stp/tape/g" | \ sed "s/Srom/cd-rom/g" | \ sed "s/Sflp/floptical/g" echo "\nPress any key to continue: \c" read x return 0 } # is this entry already in mscsi? check_dup () { if grep "^$thisentry" /tmp/scsi_a$$ > /dev/null 2>&1 then [ "$action" = "add" ] && { case $devtype in Sdsk) devname=disk ;; Stp) devname=tape ;; Srom) devname=cd-rom ;; Sflp) devname=floptical;; esac echo "\nCannot add this $devname." echo "Another $devname is already configured at this location." } return 1 fi return 0 } # has the maximum for this device type already been reached? check_max () { devcount=`grep -c $devtype /tmp/scsi_a$$` case $devtype in Srom) [ $devcount -eq 256 ] && { echo "\nError. Cannot add another cd-rom." echo "\nThe maximum number of cd-roms -- 256 -- are \ already configured." return 1 } ;; Sflp) [ $devcount -eq 7 ] && { echo "\nError. Cannot add another floptical." echo "\nThe maximum number of flopticals -- 7 -- are \ already configured." return 1 } ;; esac return 0 } # issue warning if another device type is at that location check_other () { checkentry="$hatype .* $HA $ID $LUN $BUS" if grep "^$checkentry" /tmp/scsi_a$$ > /dev/null 2>&1 then # note: init.link now removes the hd entry if non-SCSI root if getyn "Warning! Another device is configured at\ this location.\nDo you want to overwrite this location with the new entry?" then grep -v "^$checkentry" /tmp/scsi_a$$ > /tmp/scsi_f$$ mv /tmp/scsi_f$$ /tmp/scsi_a$$ return 0 else return 1 fi fi return 0 } # make sure that adapter and Sdevice are configured in configure_in () { for dev in $hatype $devtype do sdev=`get_mapped_path ID_SDEVICE_D` if grep -s N $sdev/$dev >/dev/null then # configure in: change N to Y in sdevice.d file sed "s/N/Y/" $sdev/$dev > $sdev/$dev.new mv $sdev/$dev.new $sdev/$dev fi done # and there are no longer any 'ad' entries in mscsi, then set # sdevice.d entry to N. grep "^ad" /tmp/scsi_a$$ > /dev/null 2>&1 res=$? [ "$UPGRADE" = "Y" -a $res -ne 0 ] && { sed "s,Y,N," $sdev/ad > /tmp/scsi_ad$$ mv /tmp/scsi_ad$$ $sdev/ad } } # add entry to mscsi, after appropriate error checking add_mscsi () { check_dup || return 1 check_max || return 1 check_other || return 1 # If this is a 174X being configured to run in enhanced mode, # we must use the existing 'ad' entries in mscsi instead of # adding new ones. if [ "$UPGRADE" = "N" ] then echo "$thisentry" >> /tmp/scsi_a$$ else cat /tmp/scsi_a$$ | sed "s%^\(ad\)\([ ]*[a-zA-Z]*[ ]*$HA\)%eiad\2%"\ > /tmp/scsi_a1$$ mv /tmp/scsi_a1$$ /tmp/scsi_a$$ fi index=`expr \`grep -c $devtype /tmp/scsi_a$$\` - 1` configure_in ADDED=added return 0 } rem_mscsi () { echo thisentry = $thisentry check_dup || { sed "/^$thisentry/d" /tmp/scsi_a$$ > /tmp/scsi_b$$ mv /tmp/scsi_b$$ /tmp/scsi_a$$ return 0 } case $BUS in 0) thisentry="$hatype $devtype $HA $ID $LUN";; *) ;; esac check_dup || { sed "/^$thisentry/d" /tmp/scsi_a$$ > /tmp/scsi_b$$ mv /tmp/scsi_b$$ /tmp/scsi_a$$ return 0 } echo "\nError. Cannot remove this device." echo "This type of device is not configured at this location." return 1 } # edit mscsi to add or remove this device; return 0 if mscsi modified, 1 if not edit_mscsi () { # split mscsi into commented lines and real entries grep "*" $mscsi > /tmp/scsi_c$$ grep -v "*" $mscsi | sed "s/hd /Sdsk /" > /tmp/scsi_a$$ # old "hd" entries can just as well be "Sdsk", and it's simpler case $action in add) add_mscsi || return 1 ;; remove) rem_mscsi || return 1 ;; esac cat /tmp/scsi_a$$ >> /tmp/scsi_c$$ mv /tmp/scsi_c$$ $mscsi } #get SCSI index of device listed in $thisentry get_index () { index=-1 if [ "$devtype" = "Sdsk" ] then grep -v "*" $mscsi | sed "s/hd /Sdsk /" | grep $devtype > /tmp/scsi_a$$ else grep -v "*" $mscsi | grep "Dsk" >> /tmp/scsi_a$$ fi line=`grep -n "^$thisentry" /tmp/scsi_a$$` [ -z "$line" ] && return index=`expr \`expr "$line" : '\([0-9][0-9]*\)'\` - 1` rm -f /tmp/scsi_a$$ } scsi_help () { echo "\ \nSCSI Help Message -- \nInstallation of a SCSI device requires reconfiguration of the kernel.\ \nThe SCSI configuration file must be updated with the location of the new\ \ndevice. The kernel must be rebuilt and rebooted to access the new\ \ndevice.\ \n\ \nTo specify the location of the device to be added or removed,\ \nyou need to know four pieces of information: The host adapter number,\ \nthe SCSI bus of the adapter, the ID number of the controller, \ \nand the logical unit number (LUN) of the device.\ \n\nHost Adapter Number --\ \n\nA host adapter is a card that plugs into a slot on the motherboard.\ \nIt supports a SCSI bus. Several host adapters may be installed on\ \na system. The first host adapter is SCSI-0. The second is SCSI-1.\ \nThe nth host adapter is SCSI-n. This numbering is unique for each \ \ntype of host adapter on the system." echo "\nPress return to continue: \c" read x echo "\ \nSCSI Bus number -- \ \n\nSome host adapter cards may support more than one SCSI bus. The\ \nnumber of SCSI busses that an adapter can support is determined by\ \nthe host adapter hardware. The valid range of bus numbers is 0-m,\ \nwhere m is 1 less then the number of busses the card can support.\ \nFor host adapters which only support a single bus the only valid\ \nbus number is 0.\ \nSCSI Controller ID number -- \ \n\nUp to 7 controllers may be put on a SCSI bus. Each controller has \ \na unique ID number. This number is determined by jumper settings \ \non the controller. The valid range of ID numbers is 0-7.\ \n\nSCSI Logical Unit Number (LUN) --\n\ \nMost SCSI devices are manufactured with a controller embedded in the \ \nsame physical unit as the device. These controllers support one device \ \nonly. In this case, the LUN of the device is 0.\ \nNon-embedded controllers may support up to 8 SCSI devices.\ \nIn this case, LUN numbers are determined by jumper settings on\ \neach device. The valid range of LUN numbers is 0-7." echo "\nPress return to continue: \c" read x } check_ID () { [ `expr "$1"` -ge 0 -a `expr "$1"` -le 15 ] && return $OK echo "\nInvalid ID value. Please try again." ID= return $FAIL } check_vec () { [ `expr "$1" : '[0-9][0-9]*'` -eq `expr "$1" : '.*'` ] && return $OK echo "\nInvalid choice. Please try again." return $FAIL } check_io() { [ `expr "$1" : '[a-fA-F0-9][a-fA-F0-9]*'` -eq `expr "$1" : '.*'` ] && return $OK echo "\nInvalid choice. Please try again." return $FAIL } check_cma() { check_io $1 return $? } #To configure next host adapter in sdevice.d file add_ha_num() { sdev=$1 while : do getyn "'$hatype' SCSI host adapter $HA is not configured.\ \nWould you like to update the link-kit?" [ $? -eq $FAIL ] && { echo "\n'$hatype' SCSI host adapter $HA must be configured in order for\nthe kernel to successfully re-link" return $OK } #use parameters from last entry set -- `grep -v "\*" $sdev | tail -1` name=$1 unit=$3 ipl=$4 vectype=$5 vec=$6 sio=$7 eio=$8 scma=$9 shift 1 ecma=$9 pmes="\\\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\\\n\\\n" #[ "$vectype" -ne 0 -a "$vec" -ne 0 ] && parms="1 $parms" [ "$vec" -ne 0 ] && parms="1 $parms" [ "$sio" -ne 0 ] && parms="$parms 2 3" [ "$scma" -ne 0 ] && parms="$parms 4 5" #get irq, sio and eio for i in $parms do case $i in 1) thisdev="\nWhat is the interrupt vector for this adapter?" pmes="$pmes\\\tInterrupt vector\\\t\$vec\\\n";; 2) thisdev="\nWhat is the start IO address (hex) for this adapter?" pmes="$pmes\\\tStart I/O address\\\t0x\$sio\\\n";; 3) thisdev="\nWhat is the end IO address (hex) for this adapter?" pmes="$pmes\\\tEnd I/O address\\\t\\\t0x\$eio\\\n";; 4) thisdev="\nWhat is the start controller memory address (hex) for this adapter?" pmes="$pmes\\\tStart controller memory address\\\t0x\$scma\\\n";; 5) thisdev="\nWhat is the end controller memory address (hex) for this adapter?" pmes="$pmes\\\tEnd controller memory address\\\t0x\$ecma\\\n";; esac while : do echo "$thisdev\nenter number, or q to quit: \c" read x case $x in *[a-fA-F0-9]*) case $i in 1) vec=$x check_vec $vec || continue ;; 2) sio=$x check_io $sio || continue ;; 3) eio=$x check_io $eio || continue ;; 4) scma=$x check_cma $scma || continue ;; 5) ecma=$x check_cma $ecma || continue ;; esac break ;; q|Q) return $FAIL ;; *) echo "\nInvalid choice. Please try again." ;; esac done done [ -z "$parms" ] && break eval echo "$pmes" getyn "Update the link-kit?" [ $? -eq $OK ] && break done echo "$name\tY\t$unit\t$ipl\t$vectype\t$vec\t$sio\t$eio\t$scma\t$ecma">>$sdev return $OK } # list_haprefixes() { echo "\n\nPrefix\t\tSCSI Host Adapter Type\n" sed '/^#/d /^[ ]*$/d' $HALISTFILE | while read line do set -- $line echo "$1\t\t\c" shift echo $* done } # Get adapter type (supply a default) and number get_adapter () { get_hatype while : do mesg="\ Enter the prefix of the SCSI host adapter that supports this device or press for the default: '$hatype'\nEnter h for a list of host adapters " #skip first prompt if hatype given on command line cmd=$hatype if [ -z "$HATYPE" -o -z "$hatype" ] then # changed below to cleanup $FAIL from cleanup $OK prompt $hatype || cleanup $FAIL case "$cmd" in h|H) list_haprefixes continue;; esac fi HATYPE= sdevroot=`get_mapped_path ID_SDEVICE_D` sdev=$sdevroot/$cmd [ ! -f $sdev ] && { echo "\nMissing 'sdevice.d' file for host adapter driver '$cmd'" get_hatype continue } hatype=$cmd hamax=`grep -v "\*" $sdev | wc -l | sed 's/[ ]//g' ` [ "$hamax" -gt 0 ] && break echo "\nIncomplete 'sdevice.d' file for host adapter driver '$cmd'" get_hatype done if [ "$hatype" = "iiop" ] then return $OK fi [ -z "$HA" -o \( "$HA" -gt $hamax -o "$HA" -lt 0 \) ] && { mesg="Which '$hatype' SCSI host adapter supports this device?\ \nSelect 0-${hamax}, " while : do prompt || return $FAIL case $cmd in [0-$hamax]) HA=$cmd; break;; *) echo "\nInvalid selection. Please try again." ;; esac done } if [ $HA -eq $hamax ] then while : do add_ha_num $sdev && return $OK done elif [ ${action} = "add" ] then show_haparams fi return $OK } get_device () { while quit=" or enter q to quit:" mesg="What type of device do you want to $action? 1. Hard Disk 2. Tape 3. CD-ROM 4. Floptical 5. Other Select an option " do prompt || cleanup $OK devcmd=$cmd case $devcmd in 1) devtype=Sdsk break ;; 2) devtype=Stp break ;; 3) devtype=Srom break ;; 4) devtype=Sflp break ;; *) echo "\nPlease enter 1 2 3 4 or q to quit." ;; esac done } just_relink () { CCFD=`get_mapped_path ID_CCF_D` unset ROOT ( cd $CCFD; ./link_unix ) ROOT=/ export ROOT } upgrade_mscsi () { #make a new mscsi file with added 'bus' field from old style #split into comments and real entries grep "*" $mscsi > /tmp/scsi_c$$ grep -v "*" $mscsi | \ while read ha attach number id lun do echo "$ha\t$attach\t$number\t$id\t$lun\t0" >> /tmp/scsi_d$$ done mv $mscsi $mscsi.old cat /tmp/scsi_c$$ /tmp/scsi_d$$ > $mscsi rm /tmp/scsi_c$$ /tmp/scsi_d$$ } ask_relink () { getyn "A new kernel must be built, to reflect the changes\n\ to the SCSI configuration. Do you want to do this now?" case $? in 0) dir=`pwd` cd /etc/conf/cf.d unset ROOT ./link_unix ROOT=/ export ROOT case $? in 0) cd $dir return 0 ;; 1) cd $dir return 1 ;; esac ;; 1) return 1 ;; esac } get_action () { while quit=" or enter q to quit:" mesg="\tSCSI Device Configuration\n 1. Add a SCSI device 2. Remove a SCSI device 3. Display current SCSI configuration 4. Display SCSI help message Select an option " do prompt || cleanup $OK maincmd=$cmd case $maincmd in 1) action=add break ;; 2) action=remove break ;; 3) scsi_display ;; 4) scsi_help ;; *) echo "\nPlease select 1,2,3, or 4" ;; esac done } usage () { echo "\n\ Usage: /usr/lib/mkdev/.scsi [ -artdcfnhuCU ] [ha [bus [id [lun [hatype] ] ] ] ]\n\n\ -a add SCSI device\n\ -r remove SCSI device\n\ -t device is a tape\n\ -d device is a disk\n\ -c device is a cd-rom\n\ -f device is a floptical\n\ -n do not reconfigure & relink the kernel\n\ -h display SCSI help message\n\ -u display this usage message\n\ -C check if device is configured\n\ -U upgrade mscsi file\n\ \n All arguments are optional" exit $OK } # begin main init_path_mapping mscsi=`get_mapped_path ID_MSCSI` devtype= action= relink= check=0 index=-1 settrap # arg processing [ $# != 0 ] && { set -- `getopt artdcfnhuC $*` || usage for i in $* do case $i in -a) action=add ;; -r) action=remove ;; -t) devtype=Stp ;; -d) devtype=Sdsk ;; -c) devtype=Srom ;; -f) devtype=Sflp ;; -n) relink=no ;; -h) scsi_help exit $OK ;; -u) usage ;; -C) check=1; ;; -U) upgrade_mscsi exit $OK ;; --) shift; break ;; *) break;; esac shift done PID=$1 HA=$2 ID=$3 LUN=$4 HATYPE=$5 BUS=$6 } # verify that link kit is installed check_link # determine a default host adaptor type # get_hatype while : do [ ! "$action" -a $check != 1 ] && get_action [ ! "$devtype" ] && get_device #get_adapter || cleanup $OK #if [ "$hatype" = "iiop" ] #then hatype=$HATYPE [ ! "$HA" -o ! "$ID" -o ! "$LUN" ] && { /usr/bin/rview c /tmp/$$.view view_status=$? [ $view_status != 0 -o ! -s "/tmp/$$.view" ] && { rm -f /tmp/$$.view cleanup $FAIL } # ## Get the mscsi entry. # read hatype devtype HA ID LUN BUS < /tmp/$$.view rm -f /tmp/$$.view } #else # [ ! "$HA" -o ! "$BUS" -o ! "$ID" -o ! "$LUN" ] && get_numbers #fi thisentry="$hatype $devtype $HA $ID $LUN $BUS" if [ -z "$firstime" ] then # make this available to hd to create NS0LIST file echo "$thisentry" >> /tmp/ns0list$PID firstime=y fi # If hatype is 'eiad' and there is already an 'ad' entry with # the same HA number in mscsi, then its quite likely that the # user is configuring a 174X running in 154X emulation mode, to # run in enhanced mode. Handle this by replacing ad instances of # the given HA number, with 'eiad'. if [ "$hatype" = "eiad" ] then grep -v "\*" $mscsi > /tmp/scsi_a$$ line=`grep -n "^ad[ ]*[a-zA-Z]*[ ]*$HA" /tmp/scsi_a$$` if [ -n "$line" ] then getyn "Are you reconfiguring a 174X adapter which is currently\ running in 154X\nemulation mode, to run in enhanced mode ?" case $? in 0) UPGRADE=Y ;; 1) ;; esac fi fi #once thisentry is set, check only (no action) can exit [ $check = 1 ] && { [ -z "$action" ] && cleanup $OK get_index [ "$action" = "add" -a $index -ne -1 ] && cleanup $OK [ "$action" = "remove" -a $index -eq -1 ] && cleanup $OK } # Give user a last chance to back out, else edit mscsi file echo "\nYou are about to $action the following SCSI device:\n" echo "Host\nAdapter Adapter\nType Device Number ID LUN BUS\n----------------------------------------------" echo "$hatype\t$devtype\t$HA\t$ID\t$LUN\t$BUS" getyn "Update SCSI configuration?" && edit_mscsi case $? in 0) echo "\nThe SCSI configuration file has been updated." # if -n flag given on command line, don't prompt for relink [ "$relink" = "no" ] && cleanup $OK if [ "$_RELINK" -o "$_NOPROMPT" ] then just_relink cleanup $OK fi if ask_relink then cleanup $OK else echo "\nThe kernel will not be rebuilt now." [ "$action" = "add" ] && { echo "\nNote: Any device that \ has been added to the SCSI configuration\nwill not be usable until the \ kernel is rebuilt & rebooted." } cleanup $FAIL fi ;; 1) echo "\nSCSI configuration files not updated." getyn "Would you like to try again?" case $? in 0) HA= BUS= ID= LUN= continue ;; 1) echo "\nSCSI Configuration script exiting." cleanup $FAIL ;; esac ;; esac done h.O..inewdriveri.h..jusrj.i..klibincludebink.j..lmkdevl.k..m.scsi-ahsjuke: # @(#) scsi-ahs.sh 26.2 95/07/21 # # Copyright (C) 1989-1995 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # mkdev/.scsi-ahs - AHS SCSI Configuration # # WARNING: Do not call this from non-AHS mkdev scripts, this file # will not exist in future products! # # Based on @)#( scsi.sh 25.14 94/12/22 # shared_ssoId="__SSO_ID_ST@SCO:Unix:3.2.5N @SSO_ID_END__" client_ssoId="__SSO_ID_ST@SCO:Unix:3.2.5N @SSO_ID_END__" ROOT=/ # AHS - Disable path mapping for AHS only export ROOT # AHS - in everything we call also . ${ROOT}/etc/conf/bin/path_map.sh init_path_mapping # set the standard exit values : ${OK=0} ${FAIL=1} ${STOP=10} # set the environment variables LANG=english_us.ascii export LANG PATH=/etc:/bin:/usr/bin export PATH umask 022 #file specifying default SCSI host adaptor type USE_DEF=1 UPGRADE=N HALISTFILE=/etc/default/scsihas # RTS not LINK # # Standard functions # # Print an error message # # Usage: error "message" # Argument is a quoted error message # Notes: error always returns 1. # error() { echo "\nError: $*" >&2 return 1 } # Prompt with mesg, return non-zero on q prompt() { while echo "\n${mesg}or enter q to quit: \c" >&2 do read cmd case $cmd in +x|-x) set $cmd ;; Q|q) return $FAIL ;; !*) eval `expr "$cmd" : "!\(.*\)"` ;; "") # If there is an argument use it as the default # else loop until 'cmd' is set [ "$1" ] && { cmd=$1 return $OK } : continue ;; *) return $OK ;; esac done } # Prompt for yes or no answer - returns non-zero for no getyn() { while echo "\n$* (y/n) \c">&2 do read yn rest case $yn in [yY]) return $OK ;; [nN]) return $FAIL ;; *) echo "Please answer y or n" >&2 ;; esac done } # # begin mkdev scsi functions # settrap () { trap 'cleanup $FAIL' 1 2 3 15 } unsettrap () { trap '' 1 2 3 15 } cleanup () { rm -rf /tmp/scsi_* /tmp/hw /tmp/mdev.$$ /tmp/sdev.$$ #special exit function for -C (check), used by mkdev hd #output status to filedes 3: index [added] #index = index to be used in the minor device number to index cfg array # -1 = not configured #'added' indicates that device was configured during this invocation [ $check = 1 ] && { [ -n "$thisentry" ] && get_index echo $index $ADDED 1>&3 } exit $1 } # perms list needed if link kit must be installed permschk () { return $OK if [ -f /etc/perms/extmd ]; then PERM=/etc/perms/extmd else error "Cannot locate /etc/perms/extmd. This file is needed to verify Link Kit installation." cleanup $FAIL fi } # test to see if link kit is installed check_link() { return $OK cd / until fixperm -i -d LINK $PERM do case $? in 4) echo "\nThe Link Kit is not installed." >&2 ;; 5) echo "\nThe Link Kit is only partially installed." >&2 ;; *) echo "\nError testing for Link Kit. Exiting." >&2; cleanup $FAIL ;; esac # Not fully installed. Do so here getyn "\nDo you wish to install it now?" || { # answered no echo " The Link Kit must be installed to run this program. Exiting ..." cleanup $OK } # answered yes, so install link kit echo "\nInvoking /etc/custom\n" /etc/custom -o -i LINK || { # custom exited unsuccessfully error "custom failed to install Link Kit successfully. Please try again." cleanup $FAIL } done } # determine a default host adaptor type: # use command line parameter HATYPE # else, pick up the last entry from mscsi # else, see what adapter shows up in the boot screen # else, default to 'ad' get_hatype () { if [ -n "$HATYPE" ] then hatype=$HATYPE return fi grep -v "*" $mscsi | \ while read ha attach number id lun bus do echo $ha >/tmp/scsi_e$$ done if [ ! -f /tmp/scsi_e$$ ] then while read device base vec dma type ha id lun do case $device in %adapter) echo $type | sed "s/type=//" >/tmp/scsi_e$$ break ;; esac done < /dev/string/cfg fi if [ -f /tmp/scsi_e$$ ] then hatype=`cat /tmp/scsi_e$$` rm /tmp/scsi_e$$ else hatype=ad fi } show_haparams () { SDEV=`get_mapped_path ID_SDEVICE_D` cmdev=`get_mapped_path ID_MDEVICE` sdev=$SDEV/$hatype sdev_line=`expr $HA + 1` set `grep -n -v "\*" $sdev | sed -n ${sdev_line}p` ha_tag=`echo $1 | sed 's/^.*://'` sdev_line=`echo $1 | sed 's/:.*//'` ha_sdev_unit=$3 ha_sdev_ipl=$4 ha_sdev_type=$5 ha_vec=$6 ha_sio=$7 ha_eio=$8 ha_scma=$9 shift ha_ecma=$9 set `grep "^$ha_tag[ ]" $cmdev` ha_dma=$9 [ "$ha_vec" -ne 0 -o "$ha_sio" -ne 0 -o "$ha_scma" -ne 0 -o "$ha_dma" -ne -1 ] || { echo "\nThe Host Adapter parameters will be automatically configured" return $OK } echo "\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\n" [ "$ha_vec" -ne 0 ] && echo "\tInterrupt vector\t$ha_vec\n" [ "$ha_sio" -ne 0 ] && echo "\tI/O address\t0x$ha_sio 0x$ha_eio\n" [ "$ha_scma" -ne 0 ] && echo "\tController memory address\t0x$ha_scma 0x$ha_ecma" [ "$ha_dma" -ne -1 ] && echo "\tDMA channel\t$ha_dma\n" getyn "Change these parameters? " || return $OK while : do pmes="\\\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\\\n\\\n" [ "$ha_vec" -ne 0 ] && parms="1 $parms" [ "$ha_sio" -ne 0 ] && parms="$parms 2 3" [ "$ha_scma" -ne 0 ] && parms="$parms 4 5" [ "$ha_dma" -ne -1 ] && parms="$parms 6" #get irq, sio and eio for i in $parms do case $i in 1) thisdev="\nWhat is the interrupt vector for this adapter?" pmes="$pmes\\\tInterrupt vector\\\t\$ha_vec\\\n";; 2) thisdev="\nWhat is the start IO address (hex) for this adapter?" pmes="$pmes\\\tStart I/O address\\\t0x\$ha_sio\\\n";; 3) thisdev="\nWhat is the end IO address (hex) for this adapter?" pmes="$pmes\\\tEnd I/O address\\\t\\\t0x\$ha_eio\\\n";; 4) thisdev="\nWhat is the start controller memory address (hex) for this adapter?" pmes="$pmes\\\tStart controller memory address\\\t0x\$ha_scma\\\n";; 5) thisdev="\nWhat is the end controller memory address (hex) for this adapter?" pmes="$pmes\\\tEnd controller memory address\\\t0x\$ha_ecma\\\n";; 6) thisdev="\nWhat is the DMA channel for this adapter?" pmes="$pmes\\\tDMA channel\\\t\\\t\$ha_dma\\\n";; esac while : do echo "$thisdev\nenter number, or q to quit: \c" read x case $x in *[a-fA-F0-9]*) case $i in 1) ha_vec=$x check_vec $ha_vec || continue ;; 2) ha_sio=$x check_io $ha_sio || continue ;; 3) ha_eio=$x check_io $ha_eio || continue ;; 4) ha_scma=$x check_cma $ha_scma || continue ;; 5) ha_ecma=$x check_cma $ha_ecma || continue ;; 6) ha_dma=$x check_vec $ha_dma || continue ;; esac break ;; q|Q) return $FAIL ;; *) echo "\nInvalid choice. Please try again." ;; esac done done [ -z "$parms" ] && break eval echo "$pmes" getyn "Update the link-kit?" [ $? -eq $OK ] && break done sed -e "${sdev_line}c\\ $ha_tag Y $ha_sdev_unit $ha_sdev_ipl $ha_sdev_type $ha_vec \ $ha_sio $ha_eio $ha_scma $ha_ecma " $sdev > /tmp/sdev.$$ mv /tmp/sdev.$$ $sdev awk 'BEGIN {OFS="\t"} {if($1==HATAG)print $1,$2,$3,$4,$5,$6,$7,$8,DMATAG; \ else print $0}' \ DMATAG=$ha_dma HATAG=$ha_tag /etc/conf/cf.d/mdevice > /tmp/mdev.$$ mv /tmp/mdev.$$ $cmdev return $OK } # get ID number, and LUN get_numbers () { for i in 1 2 3 do [ -n "$BUS" -a $i = 1 ] && continue [ -n "$ID" -a $i = 2 ] && continue [ -n "$LUN" -a $i = 3 ] && continue case $i in 1) thisdev="\nWhat SCSI Bus is this device attached to? Press to use the default:0\nSelect 0-n," ;; 2) thisdev="\nWhat is the Target ID for this device?\ \nSelect 0-15," ;; 3) thisdev="\nWhat is the LUN of this device? Press to use the default: 0\nSelect 0-7,";; esac while : do echo "$thisdev or h for help, or q to quit: \c" read x case $x in [0-7]) case $i in 3) LUN=$x ;; 2) ID=$x ;; 1) BUS=$x ;; esac break ;; q|Q) cleanup $OK ;; h|H) scsi_help ;; *) if [ -z "$x" -a $i -eq 3 ] then LUN=0 break fi if [ -z "$x" -a $i -eq 1 ] then BUS=0 break fi if [ $i -eq 2 -a ! -z "$x" ] then ID=$x check_ID $x && break fi echo "\nInvalid selection. Please try again." ;; esac done done } # display current SCSI configuration scsi_display () { grep -v "*" $mscsi | sed "s/hd /Sdsk /" > /tmp/scsi_d$$ # old "hd" entries can just as well be "Sdsk", and it's simpler echo "\nThe configuration file currently has entries for the\ following devices:\n" echo "Host\nAdapter Adapter\nType Device Number ID LUN Bus\n-------------------------------------------" sed -e "s/Sdsk/disk/g" \ -e "s/Stp/tape/g" \ -e "s/Srom/cd-rom/g" \ -e "s/Sflp/floptical/g" \ -e "s/Sjk/juke-box/g" /tmp/scsi_d$$ echo "\nPress any key to continue: \c" read x return 0 } # is this entry already in mscsi? check_dup () { if grep "^$thisentry" /tmp/scsi_a$$ > /dev/null 2>&1 then [ "$action" = "add" ] && { case $devtype in Sdsk) devname=disk ;; Stp) devname=tape ;; Srom) devname=cd-rom ;; Sflp) devname=floptical;; Sjk) devname=juke-box ;; esac echo "\nCannot add this $devname." echo "Another $devname is already configured at this location." } return 1 fi return 0 } # has the maximum for this device type already been reached? check_max () { devcount=`grep -c $devtype /tmp/scsi_a$$` case $devtype in Srom) [ $devcount -eq 256 ] && { echo "\nError. Cannot add another cd-rom." echo "\nThe maximum number of cd-roms -- 256 -- are \ already configured." return 1 } ;; Sflp) [ $devcount -eq 7 ] && { echo "\nError. Cannot add another floptical." echo "\nThe maximum number of flopticals -- 7 -- are \ already configured." return 1 } ;; Sjk) [ $devcount -eq 256 ] && { echo "\nError. Cannot add another juke-box." echo "\nThe maximum number of juke-boxes -- 256 -- are \ already configured." return 1 } ;; esac return 0 } # issue warning if another device type is at that location check_other () { checkentry="$hatype .* $HA $ID $LUN $BUS" if grep "^$checkentry" /tmp/scsi_a$$ > /dev/null 2>&1 then # note: init.link now removes the hd entry if non-SCSI root if getyn "Warning! Another device is configured at\ this location.\nDo you want to overwrite this location with the new entry?" then grep -v "^$checkentry" /tmp/scsi_a$$ > /tmp/scsi_f$$ mv /tmp/scsi_f$$ /tmp/scsi_a$$ return 0 else return 1 fi fi return 0 } # make sure that adapter and Sdevice are configured in configure_in () { for dev in $hatype $devtype do sdev=`get_mapped_path ID_SDEVICE_D` if grep -s N $sdev/$dev >/dev/null then # configure in: change N to Y in sdevice.d file sed "s/N/Y/" $sdev/$dev > $sdev/$dev.new mv $sdev/$dev.new $sdev/$dev fi done # and there are no longer any 'ad' entries in mscsi, then set # sdevice.d entry to N. grep "^ad" /tmp/scsi_a$$ > /dev/null 2>&1 res=$? [ "$UPGRADE" = "Y" -a $res -ne 0 ] && { sed "s,Y,N," $sdev/ad > /tmp/scsi_ad$$ mv /tmp/scsi_ad$$ $sdev/ad } } # add entry to mscsi, after appropriate error checking add_mscsi () { check_dup || return 1 check_max || return 1 check_other || return 1 # If this is a 174X being configured to run in enhanced mode, # we must use the existing 'ad' entries in mscsi instead of # adding new ones. if [ "$UPGRADE" = "N" ] then echo "$thisentry" >> /tmp/scsi_a$$ else cat /tmp/scsi_a$$ | sed "s%^\(ad\)\([ ]*[a-zA-Z]*[ ]*$HA\)%eiad\2%"\ > /tmp/scsi_a1$$ mv /tmp/scsi_a1$$ /tmp/scsi_a$$ fi index=`expr \`grep -c $devtype /tmp/scsi_a$$\` - 1` configure_in ADDED=added return 0 } rem_mscsi () { check_dup || { sed "/^$thisentry/d" /tmp/scsi_a$$ > /tmp/scsi_b$$ mv /tmp/scsi_b$$ /tmp/scsi_a$$ return 0 } case $BUS in 0) thisentry="$hatype $devtype $HA $ID $LUN";; *) ;; esac check_dup || { sed "/^$thisentry/d" /tmp/scsi_a$$ > /tmp/scsi_b$$ mv /tmp/scsi_b$$ /tmp/scsi_a$$ return 0 } echo "\nError. Cannot remove this device." echo "This type of device is not configured at this location." return 1 } # edit mscsi to add or remove this device; return 0 if mscsi modified, 1 if not edit_mscsi () { # split mscsi into commented lines and real entries grep "*" $mscsi > /tmp/scsi_c$$ grep -v "*" $mscsi | sed "s/hd /Sdsk /" > /tmp/scsi_a$$ # old "hd" entries can just as well be "Sdsk", and it's simpler case $action in add) add_mscsi || return 1 ;; remove) rem_mscsi || return 1 ;; esac cat /tmp/scsi_a$$ >> /tmp/scsi_c$$ mv /tmp/scsi_c$$ $mscsi } #get SCSI index of device listed in $thisentry get_index () { index=-1 grep -v "*" $mscsi | sed "s/hd /Sdsk /" | grep $devtype > /tmp/scsi_a$$ line=`grep -n "^$thisentry" /tmp/scsi_a$$` [ -z "$line" ] && return index=`expr \`expr "$line" : '\([0-9][0-9]*\)'\` - 1` rm -f /tmp/scsi_a$$ } scsi_help () { echo "\ \nSCSI Help Message -- \nInstallation of a SCSI device requires reconfiguration of the kernel.\ \nThe SCSI configuration file must be updated with the location of the new\ \ndevice. The kernel must be rebuilt and rebooted to access the new\ \ndevice.\ \n\ \nTo specify the location of the device to be added or removed,\ \nyou need to know four pieces of information: The host adapter number,\ \nthe SCSI bus of the adapter, the ID number of the controller, \ \nand the logical unit number (LUN) of the device.\ \n\nHost Adapter Number --\ \n\nA host adapter is a card that plugs into a slot on the motherboard.\ \nIt supports a SCSI bus. Several host adapters may be installed on\ \na system. The first host adapter is SCSI-0. The second is SCSI-1.\ \nThe nth host adapter is SCSI-n. This numbering is unique for each \ \ntype of host adapter on the system." echo "\nPress return to continue: \c" read x echo "\ \nSCSI Bus number -- \ \n\nSome host adapter cards may support more than one SCSI bus. The\ \nnumber of SCSI busses that an adapter can support is determined by\ \nthe host adapter hardware. The valid range of bus numbers is 0-m,\ \nwhere m is 1 less then the number of busses the card can support.\ \nFor host adapters which only support a single bus the only valid\ \nbus number is 0.\ \nSCSI Controller ID number -- \ \n\nUp to 7 controllers may be put on a SCSI bus. Each controller has \ \na unique ID number. This number is determined by jumper settings \ \non the controller. The valid range of ID numbers is 0-7.\ \n\nSCSI Logical Unit Number (LUN) --\n\ \nMost SCSI devices are manufactured with a controller embedded in the \ \nsame physical unit as the device. These controllers support one device \ \nonly. In this case, the LUN of the device is 0.\ \nNon-embedded controllers may support up to 8 SCSI devices.\ \nIn this case, LUN numbers are determined by jumper settings on\ \neach device. The valid range of LUN numbers is 0-7." echo "\nPress return to continue: \c" read x } check_ID () { [ `expr "$1"` -ge 0 -a `expr "$1"` -le 15 ] && return $OK echo "\nInvalid ID value. Please try again." ID= return $FAIL } check_vec () { [ `expr "$1" : '[0-9][0-9]*'` -eq `expr "$1" : '.*'` ] && return $OK echo "\nInvalid choice. Please try again." return $FAIL } check_io() { [ `expr "$1" : '[a-fA-F0-9][a-fA-F0-9]*'` -eq `expr "$1" : '.*'` ] && return $OK echo "\nInvalid choice. Please try again." return $FAIL } check_cma() { check_io $1 return $? } #To configure next host adapter in sdevice.d file add_ha_num() { sdev=$1 while : do getyn "'$hatype' SCSI host adapter $HA is not configured.\ \nWould you like to update the link-kit?" [ $? -eq $FAIL ] && { echo "\n'$hatype' SCSI host adapter $HA must be configured in order for\nthe kernel to successfully re-link" return $OK } #use parameters from last entry set -- `grep -v "\*" $sdev | tail -1` name=$1 unit=$3 ipl=$4 vectype=$5 vec=$6 sio=$7 eio=$8 scma=$9 shift 1 ecma=$9 pmes="\\\nThe following parameters will be used to configure '$hatype' SCSI host adapter $HA:\\\n\\\n" #[ "$vectype" -ne 0 -a "$vec" -ne 0 ] && parms="1 $parms" [ "$vec" -ne 0 ] && parms="1 $parms" [ "$sio" -ne 0 ] && parms="$parms 2 3" [ "$scma" -ne 0 ] && parms="$parms 4 5" #get irq, sio and eio for i in $parms do case $i in 1) thisdev="\nWhat is the interrupt vector for this adapter?" pmes="$pmes\\\tInterrupt vector\\\t\$vec\\\n";; 2) thisdev="\nWhat is the start IO address (hex) for this adapter?" pmes="$pmes\\\tStart I/O address\\\t0x\$sio\\\n";; 3) thisdev="\nWhat is the end IO address (hex) for this adapter?" pmes="$pmes\\\tEnd I/O address\\\t\\\t0x\$eio\\\n";; 4) thisdev="\nWhat is the start controller memory address (hex) for this adapter?" pmes="$pmes\\\tStart controller memory address\\\t0x\$scma\\\n";; 5) thisdev="\nWhat is the end controller memory address (hex) for this adapter?" pmes="$pmes\\\tEnd controller memory address\\\t0x\$ecma\\\n";; esac while : do echo "$thisdev\nenter number, or q to quit: \c" read x case $x in *[a-fA-F0-9]*) case $i in 1) vec=$x check_vec $vec || continue ;; 2) sio=$x check_io $sio || continue ;; 3) eio=$x check_io $eio || continue ;; 4) scma=$x check_cma $scma || continue ;; 5) ecma=$x check_cma $ecma || continue ;; esac break ;; q|Q) return $FAIL ;; *) echo "\nInvalid choice. Please try again." ;; esac done done [ -z "$parms" ] && break eval echo "$pmes" getyn "Update the link-kit?" [ $? -eq $OK ] && break done echo "$name\tY\t$unit\t$ipl\t$vectype\t$vec\t$sio\t$eio\t$scma\t$ecma">>$sdev return $OK } # list_haprefixes() { echo "\n\nPrefix\t\tSCSI Host Adapter Type\n" sed '/^#/d /^[ ]*$/d' $HALISTFILE | while read line do set -- $line echo "$1\t\t\c" shift echo $* done } # Get adapter type (supply a default) and number get_adapter () { get_hatype while : do mesg="\ Enter the prefix of the SCSI host adapter that supports this device or press for the default: '$hatype'\nEnter h for a list of host adapters " #skip first prompt if hatype given on command line cmd=$hatype if [ -z "$HATYPE" -o -z "$hatype" ] then # changed below to cleanup $FAIL from cleanup $OK prompt $hatype || cleanup $FAIL case "$cmd" in h|H) list_haprefixes continue;; esac fi HATYPE= sdevroot=`get_mapped_path ID_SDEVICE_D` sdev=$sdevroot/$cmd [ ! -f $sdev ] && { echo "\nMissing 'sdevice.d' file for host adapter driver '$cmd'" get_hatype continue } hatype=$cmd hamax=`grep -v "\*" $sdev | wc -l | sed 's/[ ]//g' ` [ "$hamax" -gt 0 ] && break echo "\nIncomplete 'sdevice.d' file for host adapter driver '$cmd'" get_hatype done [ -z "$HA" -o \( "$HA" -gt $hamax -o "$HA" -lt 0 \) ] && { mesg="Which '$hatype' SCSI host adapter supports this device?\ \nSelect 0-${hamax}, " while : do prompt || return $FAIL case $cmd in [0-$hamax]) HA=$cmd; break;; *) echo "\nInvalid selection. Please try again." ;; esac done } if [ $HA -eq $hamax ] then while : do add_ha_num $sdev && return $OK done elif [ ${action} = "add" ] then show_haparams fi return $OK } get_device () { while quit=" or enter q to quit:" mesg="What type of device do you want to $action? 1. Hard Disk 2. Tape 3. CD-ROM 4. Floptical 5. Juke Box 6. Other Select an option " do prompt || cleanup $OK devcmd=$cmd case $devcmd in 1) devtype=Sdsk break ;; 2) devtype=Stp break ;; 3) devtype=Srom break ;; 4) devtype=Sflp break ;; 5) devtype=Sjk break ;; *) echo "\nPlease enter 1 2 3 4 5 or q to quit." ;; esac done } just_relink () { CCFD=`get_mapped_path ID_CCF_D` # AHS - ROOT="" in order for idmkenv to be called ( cd $CCFD; ROOT="" ./link_unix ) } upgrade_mscsi () { #make a new mscsi file with added 'bus' field from old style #split into comments and real entries grep "*" $mscsi > /tmp/scsi_c$$ grep -v "*" $mscsi | \ while read ha attach number id lun do echo "$ha\t$attach\t$number\t$id\t$lun\t0" >> /tmp/scsi_d$$ done mv $mscsi $mscsi.old cat /tmp/scsi_c$$ /tmp/scsi_d$$ > $mscsi rm /tmp/scsi_c$$ /tmp/scsi_d$$ } ask_relink () { getyn "A new kernel must be built, to reflect the changes\n\ to the SCSI configuration. Do you want to do this now?" case $? in 0) dir=`pwd` cd /etc/conf/cf.d ROOT="" ./link_unix # AHS - for idmkenv to be called case $? in 0) cd $dir return 0 ;; 1) cd $dir return 1 ;; esac ;; 1) return 1 ;; esac } get_action () { while quit=" or enter q to quit:" mesg="\tSCSI Device Configuration\n 1. Add a SCSI device 2. Remove a SCSI device 3. Display current SCSI configuration 4. Display SCSI help message Select an option " do prompt || cleanup $OK maincmd=$cmd case $maincmd in 1) action=add break ;; 2) action=remove break ;; 3) scsi_display ;; 4) scsi_help ;; *) echo "\nPlease select 1,2,3, or 4" ;; esac done } usage () { echo "\n\ Usage: /usr/lib/mkdev/.scsi-ahs [ -artdcfjnhuCU ] [ha [id [lun [hatype [bus] ] ] ] ]\n\n\ -a add SCSI device\n\ -r remove SCSI device\n\ -t device is a tape\n\ -d device is a disk\n\ -c device is a cd-rom\n\ -f device is a floptical\n\ -j device is a juke-box\n\ -n do not reconfigure & relink the kernel\n\ -h display SCSI help message\n\ -u display this usage message\n\ -C check if device is configured\n\ -U upgrade mscsi file\n\ \n All arguments are optional" exit $OK } # begin main init_path_mapping mscsi=`get_mapped_path ID_MSCSI` devtype= action= relink= check=0 index=-1 settrap # arg processing [ $# != 0 ] && { set -- `getopt artdcfjnhuC $*` || usage for i in $* do case $i in -a) action=add ;; -r) action=remove ;; -t) devtype=Stp ;; -d) devtype=Sdsk ;; -c) devtype=Srom ;; -f) devtype=Sflp ;; -j) devtype=Sjk ;; -n) relink=no ;; -h) scsi_help exit $OK ;; -u) usage ;; -C) check=1; ;; -U) upgrade_mscsi exit $OK ;; --) shift; break ;; *) break;; esac shift done HA=$1 ID=$2 LUN=$3 HATYPE=$4 BUS=$5 } # verify that link kit is installed check_link # determine a default host adaptor type # get_hatype while : do [ ! "$action" -a $check != 1 ] && get_action [ ! "$devtype" ] && get_device get_adapter || cleanup $OK [ ! "$HA" -o ! "$BUS" -o ! "$ID" -o ! "$LUN" ] && get_numbers thisentry="$hatype $devtype $HA $ID $LUN $BUS" # If hatype is 'eiad' and there is already an 'ad' entry with # the same HA number in mscsi, then its quite likely that the # user is configuring a 174X running in 154X emulation mode, to # run in enhanced mode. Handle this by replacing ad instances of # the given HA number, with 'eiad'. if [ "$hatype" = "eiad" ] then grep -v "\*" $mscsi > /tmp/scsi_a$$ line=`grep -n "^ad[ ]*[a-zA-Z]*[ ]*$HA" /tmp/scsi_a$$` if [ -n "$line" ] then getyn "Are you reconfiguring a 174X adapter which is currently\ running in 154X\nemulation mode, to run in enhanced mode ?" case $? in 0) UPGRADE=Y ;; 1) ;; esac fi fi #once thisentry is set, check only (no action) can exit [ $check = 1 ] && { [ -z "$action" ] && cleanup $OK get_index [ "$action" = "add" -a $index -ne -1 ] && cleanup $OK [ "$action" = "remove" -a $index -eq -1 ] && cleanup $OK } # Give user a last chance to back out, else edit mscsi file echo "\nYou are about to $action the following SCSI device:\n" echo "Host\nAdapter Adapter\nType Device Number ID LUN BUS\n----------------------------------------------" echo "$hatype\t$devtype\t$HA\t$ID\t$LUN\t$BUS" getyn "Update SCSI configuration?" && edit_mscsi case $? in 0) echo "\nThe SCSI configuration file has been updated." # if -n flag given on command line, don't prompt for relink [ "$relink" = "no" ] && cleanup $OK if [ "$_RELINK" -o "$_NOPROMPT" ] then just_relink cleanup $OK fi if ask_relink then cleanup $OK else echo "\nThe kernel will not be rebuilt now." [ "$action" = "add" ] && { echo "\nNote: Any device that \ has been added to the SCSI configuration\nwill not be usable until the \ kernel is rebuilt & rebooted." } cleanup $FAIL fi ;; 1) echo "\nSCSI configuration files not updated." getyn "Would you like to try again?" case $? in 0) HA= BUS= ID= LUN= continue ;; 1) echo "\nSCSI Configuration script exiting." cleanup $FAIL ;; esac ;; esac done : # @(#) hd_iiop.sh 26.1 95/07/21 # # Copyright (C) 1987-1995 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # mkdev/hd - Hard Disk Configuration # # source in standard functions, message file and iqm variables, if present thisentry= ns0list=/usr/lib/mkdev/perms/NS0LIST # Set up pathname mapping rel=`grep rel /etc/perms/rts | sed "s/^#rel=//" | cut -c1-7` shared_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" client_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" ROOT=/ export ROOT [ "$IQM_FILE" ] && { . "$IQM_FILE" } || { . $ROOT/etc/conf/bin/path_map.sh init_path_mapping shared_cf_dir=`get_mapped_path ID_SCF_D` client_pack_dir=`get_mapped_path ID_CPACK_D` } [ "$STDFUNCS" ] && { . "$STDFUNCS" } || { echo "Fatal Error: Can't load function file: $STDFUNCS" exit 1 } # set umask umask 0 #Hooks for IDA Driver #disk type 'I' indicates an IDA driver IDASCRIPT=/usr/lib/mkdev/ida #pick up 'mkdev hd' back-end functions . /usr/lib/mkdev/.hdfuncs [ -z "$IQM_FILE" ] && { #and pick up nodefuncs for DQI stuff . /usr/lib/mkdev/.nodefuncs } # mkdev hd functions # set a trap so that if the user dels out, a value of $STOP # is passed to the calling program settrap() { if [ -n "$interactive" ] then trap 'error "Installation interrupted." cleanup $FAIL' 1 2 3 15 else trap 'cleanup $FAIL' 1 2 3 15 fi } # unset the traps unsettrap() { trap '' 1 2 3 15 } get_args () { case ${rootdisk}$arch in WAT|WMC|IAT) case ${rootdisk} in W) echo "\nYour root hard disk is attached to an ST506 controller." ;; I) echo "\nYour root hard disk is attached to an IDA controller." ;; esac mesg="Pick one of the choices below or you may quit and invoke mkdev hd -u for a detailed usage message. 1) Add a hard disk to ST506 controller 2) Add a hard disk to SCSI controller 3) Add a hard disk to an IDA controller (EISA).\n Enter 1, 2, 3 " while : do prompt || { cleanup $FAIL } case $cmd in 1) newtype=W case $arch in AT|MC) major=1 set_disknum drivenum=$disknum ctrlnum=0 ;; esac break;; 2) newtype=S break;; 3) exec $IDASCRIPT echo "\nPlease enter 1 or 2 (or 'q' to quit)";; *) echo "\nPlease enter 1 or 2 (or 'q' to quit)";; esac done ;; EAT) echo "\nYour root hard disk is attached to an OMTI controller." if getyn "The only available choice is to add one other hard disk.\n\ Enter 'y' to add another disk. If you enter 'n' you will exit\nthis \ script. You may then invoke mkdev hd -u for a detailed\nusage message." then newtype=E drivenum=1 ctrlnum=0 major=1 else cleanup $FAIL fi ;; EMC) echo "\nYour root hard disk is attached to an ESDI controller." mesg="Pick one of the choices below or you may quit and invoke mkdev hd -u for a detailed usage message. 1) Add a hard disk to ESDI controller 2) Add a hard disk to SCSI controller Enter 1, 2 " while : do prompt || { cleanup $FAIL } case $cmd in 1) newtype=E drivenum=1 ctrlnum=0 major=1 break;; 2) newtype=S break;; *) echo "\nPlease enter 1 or 2 (or 'q' to quit)";; esac done ;; SAT|SMC) echo "\nYour rootdisk is attached to a SCSI controller." if getyn "The only available choice is to add another SCSI disk.\n\ Do you want to add another SCSI disk?" then newtype=S else cleanup $FAIL fi ;; esac } # this function used when adding ST506 or ESDI disks get_drivenum () { while [ "$drivenum" != "0" -a "$drivenum" != "1" ] do echo "\nWill this disk be the first or second disk on this controller?" echo "Enter 1 (first) or 2 (second): \c" read num case $num in 1|2) drivenum=`expr $num - 1` ;; q|Q) cleanup $FAIL ;; *) echo "Error. Not a valid number. Try again" ;; esac done } # this function used only when adding ST506 disks get_ctrlnum () { while [ "$ctrlnum" != "0" -a "$ctrlnum" != "1" ] do echo "\nWill this disk attach to the first or second ST506 controller?" echo "Enter 1 (first) or 2 (second): \c" read cnum case $cnum in 1) ctrlnum=`expr $cnum - 1` major=1 ;; 2) ctrlnum=`expr $cnum - 1` major=54 ;; q|Q) cleanup $FAIL ;; *) echo "Error. Not a valid number. Try again" ;; esac done } scsi_config () { #check that disk if configured and add if necessary to mscsi #.scsi writes to filedes 3: 1) SCSI index to use and 2) 'a' if added pid=$$ /bin/sh /usr/lib/mkdev/.scsi_iiop -n -a -C -d $pid $HA $ID $LUN $HATYPE $BUS 3>${tmp}4.$$ scsi_ret=$? set -- `cat ${tmp}4.$$` scsi_index=$1 if [ "$2" = "iiop" ] then hatype=iiop else hatype=$3 fi [ "$scsi_index" -eq -1 ] && error scsi_noconfig #was it already configured? [ "$2" != "added" ] && return 0 [ $scsi_ret = 0 ] && { relink=`expr $relink + 1 ` return 0 } rm -f ${tmp}4.$$ cleanup $FAIL } # get the major number associated with the scsi entry scsi_major () { if [ "$rootdisk" = "S" -a "$hatype" = "iiop" ] then driver=hd else driver=Sdsk fi driver_to_major } # usage and help usage () { echo " Usage: $0 drivenum ctrlnum [ lun [ hatype ] ] [-nhu ] -u display this usage message -h display usage message for combining disk interfaces -n means initialize the disk non-interactively using system defaults. This may only be done when installing the root hard disk (when drivenum is 0 and ctrlnum is 0; for SCSI disks, lun is not specified and defaults to 0) The arguments 'drivenum', 'ctrlnum' and 'lun' are dependent on the type of hard disk being installed. The arguments 'lun' and 'hatype' apply to SCSI disks only. SCO System V supports four different hard disk interfaces -- ST506 (standard), ESDI, IDA (EISA), and SCSI. Following is a section describing installation of each of these. Please note: ST506 and SCSI interfaces may be combined on the same system. ESDI and SCSI interfaces may also be combined on an MCA system. To view a guide to selecting mkdev hd arguments when combining these interfaces, enter \"mkdev hd -h\" at a shell prompt." echo "\nPress return to continue: \c" read x echo "\n Installation of a disk on to an ST506 controller ------------------------------------------------ drivenum is the number of the disk drive. The first disk on a controller is disk 0; the second disk is disk 1. ctrlnum is the controller number. Two controllers are supported. The first controller is ctrlnum 0. It may also be referred to as \"ST506-0\". The second controller is ctrlnum 1. It may be also be referred to as \"ST506-1\". On an MCA system, only the first controller \"ST506-0\" is supported. ST506 disks will install with one of the following commands: mkdev hd 0 0 (or ST506-0) for the first disk on first controller (root) mkdev hd 1 0 (or ST506-0) for the second disk on first controller mkdev hd 0 1 (or ST506-1) for the first disk on second controller (not MCA) mkdev hd 1 1 (or ST506-1) for the second disk on second controller (not MCA) NOTE: Some ST506 controllers may support ESDI interface disks." echo "\nPress return to continue: \c" read x echo "\n Installation of a disk on to an OMTI or ESDI controller ------------------------------------------------------- drivenum is the number of the disk drive. The first disk on the controller is disk 0. The second disk is disk 1. ctrlnum is the controller number. One controller is supported. The ctrlnum is always 0. It may be referred to as \"OMTI-0\", or as \"ESDI-0\". ESDI disks will install with one of the following commands: mkdev hd 0 0 (or OMTI-0, or ESDI-0) for the first disk on the controller (root) mkdev hd 1 0 (or OMTI-0, or ESDI-0) for the second disk on the controller NOTE: Some OMTI controllers may support standard interface disks." echo "\nPress return to continue: \c" read x echo " Installation of a SCSI disk on to a SCSI bus -------------------------------------------- drivenum is the ID number of the controller for this disk. The ID number is determined by jumper settings. Valid ID numbers are 0-7. ctrlnum is the host adapter number. Multiple host adapters are supported. The first host adapter is \"SCSI-0\". The second host adapter is \"SCSI-1\", etc. lun Most SCSI disks are manufactured with a controller embedded in the same physical unit as the disk. These controllers support only one disk. In this case the lun (logical unit number) is 0. The lun argument is optional. If not specified, it will default to 0. If you have a non-embedded controller, you must set the lun for each device, via jumper settings. Valid lun numbers are 0-7. hatype is the type of SCSI host adapter referenced by ctrlnum." bus Some SCSI host adapters control more than one SCSI bus; this field specifies which SCSI bus the disk is connected to. Valid bus numbers are determined by the host adapter. If not specified it will default to 0. echo "\nPress return to continue: \c" read x echo " Invoke mkdev hd with the correct numbers as follows: mkdev hd [0-7] [SCSI-x] [0-7] [hatype] [bus] Please note: This program 'mkdev hd' must be invoked twice to install a SCSI disk. The first time, the kernel will be reconfigured to support the new disk. The second time, the disk will be initialized. Use the same mkdev hd arguments both times.\n" echo "\nPress return to continue: \c" read x echo "\n Installation of a disk on to a IDA (Intelligent Disk Array) controller ---------------------------------------------------------------------- drivenum is the logical number of the disk drive. The first disk array on a controller is disk 0; the second disk is disk 1. ctrlnum is the controller number. Six controllers are supported. The first controller is ctrlnum 0, the second controller is ctrlnum 1 and so on. These may also be referred to as \"IDA-0\", \"IDA-1\" and so on. IDA disks will install with one of the following commands: mkdev hd 0 0 (or IDA-0) for the first disk on first controller mkdev hd 1 0 (or IDA-0) for the second disk on first controller mkdev hd 0 1 (or IDA-1) for the first disk on second controller mkdev hd 1 1 (or IDA-1) for the second disk on second controller \n" cleanup $OK } combo_help () { echo " Combining Hard Disk Interfaces ------------------------------ SCSI hardware may be added on to a system that has a root hard disk attached to an ST506 controller. On an MCA system, SCSI hardware may also be added when the root hard disk is attached to an ESDI controller. The addition of ST506 or ESDI disks on to a system with a SCSI root disk is not supported. Adding ST506 or ESDI disks to a combination system is identical to adding them to a simple system. Invoke 'mkdev hd -u' for more information. Adding SCSI disks to a combination system is accomplished by invoking mkdev hd with the arguments 'drivenum', 'ctrlnum', 'lun' and 'hatype' The first argument, 'drivenum', is the disk number. Choices for 'drivenum' are identical to the choices on a SCSI-only system. Invoke 'mkdev hd -u' for further information." echo "\nPress return to continue: \c" read x echo " The second argument, 'ctrlnum', must be in the following format: \"SCSI-0\" -- for the first SCSI Host Adapter \"SCSI-1\" -- for the second SCSI Host Adapter \"SCSI-n\" -- for the n+1 th SCSI Host Adapter The third argument 'lun', is optional. Selection of this argument is identical to selection of it when installing on a SCSI-only system. Invoke 'mkdev hd -u' for more information. The fourth argument 'hatype', is optional. This is the prefix of the SCSI host adapter driver used to control 'ctrlnum'. To specify a hatype, you must give a complete command line including id, ctrlnum, id, and hatype. Example: Adding a SCSI disk to the first SCSI host adapter on a combination system. If disk ID is 0, and the disk is being attached to the first SCSI host adapter, and the lun is 0, enter: mkdev hd 0 SCSI-0 0\n" cleanup $OK } do_relink() { [ $relink -lt 1 ] && return if getyn "A new kernel must be built and rebooted before disk \ configuration can continue. Would you like to relink at this time?" then unset ROOT ( cd "$shared_cf_dir"; ./link_unix ) ROOT=/ export ROOT else echo "\nYou must build a new kernel before proceeding with \ further configuration\nof this disk." fi echo "\nAfter the system is rebooted with the new kernel, reinvoke mkdev hd_iiop to initialize the new hard disk.\n" exit $? } create_iqm_mount_variable() { iqm_disknum=$1 iqm_active_partition=$2 iqm_division=$3 iqm_action=$4 if [ "$iqm_action" = "M" ]; then iqm_division_name=$5 iqm_mount_point=$6 echo "IQM_HDP_MOUNT_DR${iqm_disknum}_PART${iqm_active_partition}_DIV${iqm_division}=\"M $iqm_division_name ${iqm_mount_point}\"" >> $iqm_divvy_file else echo "IQM_HDP_MOUNT_DR${iqm_disknum}_PART${iqm_active_partition}_DIV${iqm_division}=\"N\"" >> $iqm_divvy_file fi } ask_for_mount_point() { iqm_disknum=$1 iqm_active_partition=$2 iqm_division=$3 iqm_mount_state=$4 iqm_mount_name=$5 iqm_mount_point=$6 # # Need to check for duplicate mount points somehow....!!!!! # if [ "$iqm_mount_state" = "M" -a -z "$iqm_mount_point" ]; then if [ -z "$iqm_issued_mount_msg" ];then echo "It is necessary to obtain mount points for any additional" echo "non-root and non-boot mountable filesystems. Please ensure" echo "that the mount points are unique for each filesystem." echo "" echo "" iqm_issued_mount_msg=yes fi echo "Please enter the mount point for division - $iqm_mount_name \c" read mount_point_name create_iqm_mount_variable $iqm_disknum $iqm_active_partition $iqm_division $iqm_mount_state $iqm_mount_name $mount_point_name else create_iqm_mount_variable $iqm_disknum $iqm_active_partition $iqm_division $iqm_mount_state $iqm_mount_name $iqm_mount_point fi } get_iqm_mount_points() { iqm_disknum=`eval echo $1` iqm_active_partition=$2 iqm_last_division=$3 . $iqm_divvy_file # # Should not do this. What about the future with multiple disks/parts.... # rm $iqm_divvy_file while [ "$iqm_last_division" -ge "0" ] do IQM_VAR="$"IQM_HDP_MOUNT_DR${1}_PART${2}_DIV${iqm_last_division} IQM_DATA=`eval echo $IQM_VAR` if test "${IQM_DATA}" then ask_for_mount_point $1 $2 $iqm_last_division $IQM_DATA fi iqm_last_division=`expr $iqm_last_division - 1` done cat $iqm_divvy_file >> $IQM_FILE } create_divvy_names_file() { # Mount the root division, get division names, unmount if [ -r /tmp/newroot ];then rm /tmp/newroot fi rootminor=`expr 40 + $rootDivision` #rootminor=106 mknod /tmp/newroot b 1 $rootminor mount -m /tmp/newroot /mnt result=$? if [ $result != 0 ];then echo "Mount of root filesystem failed." cleanup $FAIL fi cdev=${cdev:-/dev/rdsk/${disknum:-0}s0} /etc/divvy -P -N -d /mnt/dev/ $cdev > /tmp/divvynames.$$ umount -m /mnt # It better be here... if [ -r /tmp/newroot ];then rm /tmp/newroot fi } get_mount_points_and_set_IQM_variables() { create_divvy_names_file count=0 get_active_unix_partition $cdev active_unix_parititon=$? while read division start end name type do # make entries for empty divisons while [ $count != $division ] do create_iqm_mount_variable $disknum $active_unix_parititon $count N count=`expr $count + 1` done if [ "$name" = "boot" ]; then create_iqm_mount_variable $disknum $active_unix_parititon $count M boot /stand elif [ "$name" = "root" ]; then create_iqm_mount_variable $disknum $active_unix_parititon $count M root / elif [ "$name" != "recover" -a "$type" != "WHOLE DISK" -a "$type" != "NON FS" ]; then create_iqm_mount_variable $disknum $active_unix_parititon $count M $name else # ignore division 7, WHOLE DISK if [ "$count" != "7" ]; then create_iqm_mount_variable $disknum $active_unix_parititon $count N fi fi count=`expr $count + 1` done < /tmp/divvynames.$$ rm /tmp/divvynames.$$ get_iqm_mount_points $disknum $active_unix_parititon 8 } set_fdisk_IQM_variables() { cdev=${cdev:-/dev/rdsk/${disknum:-0}s0} active=0 fdisk -p -f $cdev | ( while read part do set `echo $part` if [ "$5" = "UNIX" ] then [ "$6" = "Active" ] && { echo "IQM_HDP_DR${drivenum}_PART${1}=\"$2 $4 UNIX\"" >> $IQM_FILE break } fi done ) } set_divvy_IQM_variables() { create_divvy_names_file count=0 get_active_unix_partition $cdev active_unix_partition=$? while read division start end name type do # make entries for empty divisons while [ $count != $division ] do echo "IQM_HDP_DR${drivenum}_PART${active_unix_partition}_DIV${count}=\"D\"" >> $IQM_FILE count=`expr $count + 1` done if [ "$type" = "NON FS" ]; then type="NONFS" fi if [ "$type" != "WHOLE DISK" ]; then echo "IQM_HDP_DR${drivenum}_PART${active_unix_partition}_DIV${division}=\"C $name $type $start $end\"" >> $IQM_FILE fi count=`expr $count + 1` done < /tmp/divvynames.$$ rm /tmp/divvynames.$$ return 0 } # # Need to determine if boot=root # and set IQM_HDP_FSDEFS approprietly # set_FSDefsIQM() { create_divvy_names_file while read division start end name type do if [ "$name" = "boot" ];then return 1 fi done < /tmp/divvynames.$$ result=$? if [ "$result" = "0" ]; then echo "IQM_HDP_FSDEFS=\"dump=swap boot=root\"" >> $IQM_FILE else echo "IQM_HDP_FSDEFS=\"dump=swap\"" >> $IQM_FILE fi rm /tmp/divvynames.$$ } # This program examines the mscsi file and returns the number of # SCSI disk devices configured. findunit is used to calculate unit # numbers for SCSI disks. findunit() { [ -r "$mscsi" ] || { error "\nCannot read $mscsi." cleanup $FAIL } tnum=`sed '/^*/d' "$mscsi" | grep -c "Sdsk"` [ -n "$tnum" ] || { error "\nGrep failed to read $mscsi." cleanup $FAIL } # SCSI numbering starts at 0. SCSIpos=`expr $tnum - 1` return $OK } # create an Sdsk device.dat entry create_Sdsk_dd_entry() { devfile="${client_pack_dir}/Sdsk/device.dat" echo Sdsk${1}: >> ${devfile} echo '\t'INDEX=Sdsk${1} >> ${devfile} echo '\t'PATH=node0,node1 >> ${devfile} echo '\t'node0=D_SUBSYS,SCSI Disk,0,D_HARDDSK_SUBSYS,,NULL >> ${devfile} echo '\t'node1=D_UNIT,SCSI Drive $1,0,$1,D_RANDOM_ACCESS D_NODE,NULL >> ${devfile} echo '\t'D_USER_MSG=SCSI Disk Drive,0,0,,NULL >> ${devfile} echo '\t'D_BLOCK_NODE = >> ${devfile} echo '\t'D_CHAR_NODE = >> ${devfile} } # rewrite the probe information file in space.c # assumes that devices are contiguously numbered from 0 # and that we pass in the number of the last valid unit update_probe_struct() { tmp="/tmp/$1.$$" devfile="${client_pack_dir}/Sdsk/space.c" awk ' BEGIN { i = 0 } { if ( $1 == "/*_PROBE_START_*/" ) { i = 1 ; n = 0 ; print n = '$1' for (dv = 0; (dv <= n ); dv++) { printf "#define Sdsk%d\t0\n", dv } printf "int SdskProbe[] = {" for (dv = 0; (dv <= n ); dv++) { printf "Sdsk%d,", dv } printf "0};\n" } if ( $1 == "/*_PROBE_STOP_*/" ) { i = 0 } if ( i == 0 ) { print } }' < $devfile > $tmp mv -f $tmp $devfile } makeroothd() { # figure out hard disk type get_root_type # chance to bail out, not if ISL, already given chance before call. [ "$interactive" ] && [ ! "$IQM_FILE" ] && quitnow # run dparam; invoke dkinit if it's an ST506 disk rundparam # fdisk for all, and badtrack for ST506 disks diskprep # divide the disk into file systems rundivvy # Create file that will provide map from mscsi to 0s0,1s0,2s0 so on read thisentry < /tmp/ns0list$$ grep "$thisentry" $ns0list > /dev/null if [ "$?" -ne 0 ] then cat /tmp/ns0list$$ >> $ns0list fi rm -f /tmp/ns0list$$ if [ -n "$IQM_FILE" ]; then # Make sure our temporary file is empty > $iqm_divvy_file get_mount_points_and_set_IQM_variables set_fdisk_IQM_variables set_divvy_IQM_variables set_FSDefsIQM fi } makenonroothd() { # if SCSI, verify that SCSI kernel configuration includes this disk [ "$newtype" = "S" ] && { scsi_config # get major number of SCSI driver from mdevice scsi_major } # set minor numbers set_minors # determine disk number for use in perms list set_disknum # make sure NDISK is big enough conf_ndisk # if SCSI update the device.dat and space.c files. #[ "$newtype" = "S" ] && { # Update the device.dat file # find how many Sdsk's already configured. # findunit # unit=$SCSIpos # create_Sdsk_dd_entry ${unit} # Now fix up the device node minor numbers # DRIVER=Sdsk # update_dd_minor $DRIVER$unit D_BLOCK_NODE $minor_0 # update_dd_minor $DRIVER$unit D_CHAR_NODE $minor_0 # Now update the space.c file # update_probe_struct ${unit} # } # do we need a relink/reboot before we can talk to the device? do_relink # last chance to bail out quitnow # create devices fix # get disk parameters; if ST506/ESDI disk, call dkinit rundparam # fdisk for all, and badtrack for ST506/ESDI disk diskprep # check whether the disk should be divided into divisions checkvdisk && { # divide the disk into file systems rundivvy } echo "\nHard disk initialization procedure completed.\n" } #### begin main #### hatype= if cat /dev/mcapos 1>/dev/null 2>/dev/null then arch=MC else arch=AT fi # ROOT INSTALL CASE if [ "$1" = "0" -a "$2" = "0" -o "${EMERGENCY}" = "bootroot" ] then if [ "$3" = "-n" ] then interactive= elif [ "$3" ] then error bad_arg fi ctrlnum=0 drivenum=0 disknum=0 major=1 rootinstall=TRUE makeroothd cleanup $OK fi # NON-ROOT INSTALL CASE case "$#" in 0) no_args=true # Get root hd type to prompt them for valid choices get_root_type get_args ;; 1) case $1 in -u) usage ;; -h) combo_help ;; *) error bad_arg ;; esac ;; 2|3|4|5) # make sure sed is installed for use by this script [ -x "/bin/sed" ] || error no_sed # Save command line args argv=$* # Find out root hd type to make sure their input is valid get_root_type set $argv case "$2" in ST506-0|ST506-1) newtype=W ;; OMTI-0|ESDI-0) newtype=E ;; SCSI-[0-9]) newtype=S ;; IDA-[0-9]) newtype=I ;; [0-9]) newtype=$rootdisk ;; *) error bad_arg ;; esac case "$2" in *[0-9]) ctrlnum=`expr "$2" : '.*\(.\)$'` ;; esac case ${newtype}$3 in S) LUN=0 ;; S[0-7]) LUN=$3 ;; E|W|I) ;; *) error bad_arg ;; esac [ $# -eq 4 ] && { case $newtype in S) HATYPE=$4 ;; *) error bad_arg;; esac } [ $# -eq 5 ] && { case $newtype in S) HATYPE=$4 BUS=$5 ;; *) error bad_arg ;; esac } case ${newtype}$1 in S[0-7]) ID=$1 HA=$ctrlnum ;; E0|W0) drivenum=0 ;; E1|W1) drivenum=1 ;; E*) error esdi_disk ;; W*) error st506_disk ;; I*) drivenum=$1 ;; *) error bad_arg ;; esac major=1 case ${rootdisk}${newtype} in SS) ;; SE) error esdi_add ;; SW) error st506_add ;; ES) [ $arch = AT ] && \ error scsi_omti ;; EE) [ $ctrlnum -eq 0 ] || \ error esdi_one ;; EW) error st506_add ;; WS) ;; WE) error esdi_add ;; WW) ;; # IDA disks ?I) exec $IDASCRIPT $drivenum $ctrlnum;; IE) ;; #ok? IS) ;; IW) [ $ctrlnum -eq 0 ] && error root_ida esac # set the traps settrap ;; *) error bad_arg ;; esac #need link-kit for node.d, idmknod and mscsi files check_link makenonroothd cleanup $OK o.P..ppiiopviiopimsDsktpicp.o..qSpace.cSpace.oSpace.o.ZSystemMasterDriver.o#ident "@(#) space.c 26.2 95/07/19 " /* * Copyright (C) The Santa Cruz Operation, 1994-1995. * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /* ** ident @(#) @(#) space.c.iiop 1.21 1 5/24/95 11:27:56 ** ** sccs_id[] = {"@(#) 1.21 space.c.iiop "} */ /* *************************************************************************** ** ** MODULE NAME: space.c.iiop ** ** PURPOSE: IIOP device driver table. ** ** DEPENDENCIES: ** ** ** REVISION HISTORY: ** FPR/CRN Date Author Description ** 05/22/90 J. Ruf Initial release. ** 06/21/90 J. Ruf Added IIOP firmware timeout support. ** 10/31/90 J. Ruf Supporting two IIOP boards. ** 11/08/90 J. Ruf Added revision info to identify ** auto-configuration pic ipl value. ** 08/14/91 J. Ruf Added RAID 1 support. ** 11/08/91 J. Ruf Added iiop_poll() loop counter. ** 12/13/91 J. Ruf Provide a single IIOP driver source. ** 04/24/92 J. Ruf Added Extended IIOP support for two ** controllers each with a maximum of ** two SCSI channels. ** 06/09/92 J. Ruf Allow sufficient cache for EIOP RAID 1. ** 08/14/92 S. Cady Add stuff for K2 support ** 08/01/93 K. Conner Distributed interrupt support, mpx 3.0. ** ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990 - 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** System Include Files *************************************************************************** */ #include "sys/param.h" #include "sys/types.h" #include "sys/sysmacros.h" #include "sys/cmn_err.h" #include "sys/immu.h" #include "sys/systm.h" #include "sys/buf.h" #include "sys/iobuf.h" #include "sys/dir.h" #include "sys/signal.h" #include "sys/user.h" #include "sys/scsi.h" #include "sys/devreg.h" /* New adapter init interface structs. */ #include "sys/ci/ciintr.h" /* *************************************************************************** ** Module Related Include Files *************************************************************************** */ #include "sys/iiop.h" #include "config.h" /* *************************************************************************** ** Defines *************************************************************************** */ #define IIOP_TIMEOUT 120000 /* Timeout of 2 minutes in milliseconds. */ #define IIOP_MIN 60000 /* Timeout of 1 minute in Hertz. */ #define IIOP_MAX_IORPS 164 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_MAX_LIORPS 164 /* 1 More than upper level req_io's and scatter/gather descriptors. */ /* ** W A R N I N G ! ! ! ** The following define must match IIOP_MAX_REQIO_K2 in ** space.c.dsk */ #define IIOP_MAX_IORPS_K2 512 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_MAX_LIORPS_K2 512 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_PUT_EM_IN_DUAL_PORT 0 /* Put both physical and logical IORP data sets in dual port memory if this define is TRUE and dual port memory is available. */ /* ** NOTE: Currently SCO MPX 3.0.0j doesnot support dynamic distribution ** of ISS interrupt to a subset of all processors ** ** Select one of each of the following pairs to dictate whether that ** processor is to field an ISS interrupt. 0 - no, non-zero then yes */ /*#define CPU1 0x1*/ /* CPU1 - master gets ISS interrupts. */ #define CPU1 0x0 /* CPU1 - master does not get ISS interrupts. */ #define CPU2 0x2 /* CPU2 - slave 1 gets ISS interrupts. */ /*#define CPU2 0x0*/ /* CPU2 - slave 1 does not get ISS interrupts.*/ #define CPU3 0x4 /* CPU3 - slave 2 gets ISS interrupts. */ /*#define CPU3 0x0*/ /* CPU3 - slave 2 does not get ISS interrupts.*/ #define CPU4 0x8 /* CPU4 - slave 3 gets ISS interrupts. */ /*#define CPU4 0x0*/ /* CPU4 - slave 3 does not get ISS interrupts.*/ #define CPU5 0x10 /* CPU5 - slave 4 gets ISS interrupts. */ /*#define CPU5 0x0*/ /* CPU5 - slave 4 does not get ISS interrupts.*/ #define CPU6 0x20 /* CPU6 - slave 5 gets ISS interrupts. */ /*#define CPU6 0x0*/ /* CPU6 - slave 5 does not get ISS interrupts.*/ #define CPU7 0x40 /* CPU7 - slave 6 gets ISS interrupts. */ /*#define CPU7 0x0*/ /* CPU7 - slave 6 does not get ISS interrupts.*/ /* ** The following define SHAREG_EX_PROCESSOR_MASK dictates which ** cpus IIOP interrupts are allowed to occur on. -Modify the above ** defines to dicate who gets ISS interrupts. */ #define SHAREG_EX_PROCESSOR_MASK ICPU_EXANY /* Interrupt routine will run on any processor but not in parallel on multiple processors. */ /*#define SHAREG_EX_PROCESSOR_MASK ICPU_ANY*/ /* Interrupt routine will run on any processor and in parallel on multiple processors. */ /* ** NOTE: Currently SCO MPX 3.0.0j doesnot support dynamic distribution ** of ISS interrupt to a subset of all processors ** If they do, then we can do the following, if we want to. ** In the mean time we have to do the define above. */ /*#define SHAREG_EX_PROCESSOR_MASK (CPU1 | CPU2 | CPU3 | CPU4 | CPU5 | CPU6 | CPU7 )*/ /* *************************************************************************** ** Global Static Storage *************************************************************************** */ /* *************************************************************************** ** IIOP specific environment, first controller contains boot device. *************************************************************************** */ extern int piiop_entry(); /* Adapter entry routine, issue request. */ extern int piiopintr(); /* Adapter interrupt routine, finish request. */ extern int iiop_get_geometry(); /* Drive capacity to bios geometry computation. */ extern void iiop_init_drive(); /* Set disk drives readahead and bad blocking algorithm. */ /* ** Lock structures associated with each controller */ /* ** Controller 1 */ static struct lockb iorp_lock_ctlr_1 = {0,0}; /* IORP LOCK */ static char pad1[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_1 = {0,0}; /* LIORP LOCK */ static char pad2[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_1 = {0,0};/* Submission queue lock. */ static char pad3[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_1 = {0,0}; /* Complete queue lock. */ static char pad4[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_1 = {0,0}; /* Generic request queue lock.*/ static char pad5[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_1 = {0,0}; /* Error queue lock. */ static char pad6[28] = {0}; /* 32 bytes apart */ /* ** Controller 2 */ static struct lockb iorp_lock_ctlr_2 = {0,0}; /* IORP LOCK */ static char pad7[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_2 = {0,0}; /* LIORP LOCK */ static char pad8[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_2 = {0,0};/* Submission queue lock. */ static char pad9[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_2 = {0,0}; /* Complete queue lock. */ static char pada[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_2 = {0,0}; /* Generic request queue lock.*/ static char padb[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_2 = {0,0}; /* Error queue lock. */ static char padc[28] = {0}; /* 32 bytes apart */ /* ** Controller 3 */ static struct lockb iorp_lock_ctlr_3 = {0,0}; /* IORP LOCK */ static char padd[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_3 = {0,0}; /* LIORP LOCK */ static char pade[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_3 = {0,0};/* Submission queue lock. */ static char padf[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_3 = {0,0}; /* Complete queue lock. */ static char padg[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_3 = {0,0}; /* Generic request queue lock.*/ static char padh[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_3    = {0,0}; /* Error queue lock. */ static char padi[28] = {0}; /* 32 bytes apart */ /* ** Controller 4 */ static struct lockb iorp_lock_ctlr_4 = {0,0}; /* IORP LOCK */ static char padj[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_4 = {0,0}; /* LIORP LOCK */ static char padk[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_4 = {0,0};/* Submission queue lock. */ static char padl[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_4 = {0,0}; /* Complete queue lock. */ static char padm[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_4 = {0,0}; /* Generic request queue lock.*/ static char padn[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_4 = {0,0}; /* Error queue lock. */ static char pado[28] = {0}; /* 32 bytes apart */ /* ** Controller 5 */ static struct lockb iorp_lock_ctlr_5 = {0,0}; /* IORP LOCK */ static char padp[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_5 = {0,0}; /* LIORP LOCK */ static char padq[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_5 = {0,0};/* Submission queue lock. */ static char padr[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_5 = {0,0}; /* Complete queue lock. */ static char pads[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_5 = {0,0}; /* Generic request queue lock.*/ static char padt[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_5 = {0,0}; /* Error queue lock. */ static char padu[28] = {0}; /* 32 bytes apart */ /* ** Controller 6 */ static struct lockb iorp_lock_ctlr_6 = {0,0}; /* IORP LOCK */ static char padv[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_6 = {0,0}; /* LIORP LOCK */ static char padw[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_6 = {0,0};/* Submission queue lock. */ static char padx[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_6 = {0,0}; /* Complete queue lock. */ static char pady[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_6 = {0,0}; /* Generic request queue lock.*/ static char padz[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_6 = {0,0}; /* Error queue lock. */ static char padaa[28] = {0}; /* 32 bytes apart */ SHAREG_EX iiop_ctlr_1 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_2 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_3 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_4 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_5 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_6 = { (SHAREG *) NULL, (SHAREG *) NULL, piiop_entry, piiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; IIOP_DEVICE iiop_devices[] = { /* ** IIOP device 0. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_1, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_1, (struct lockb *) &liorp_lock_ctlr_1, (struct lockb *) &submitq_lock_ctlr_1, (struct lockb *) &cmpltq_lock_ctlr_1, (struct lockb *) &rq_lock_ctlr_1, (struct lockb *) &errorq_lock_ctlr_1, }, /* ** IIOP device 1. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_2, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_2, (struct lockb *) &liorp_lock_ctlr_2, (struct lockb *) &submitq_lock_ctlr_2, (struct lockb *) &cmpltq_lock_ctlr_2, (struct lockb *) &rq_lock_ctlr_2, (struct lockb *) &errorq_lock_ctlr_2, }, /* ** IIOP device 2. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_3, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_3, (struct lockb *) &liorp_lock_ctlr_3, (struct lockb *) &submitq_lock_ctlr_3, (struct lockb *) &cmpltq_lock_ctlr_3, (struct lockb *) &rq_lock_ctlr_3, (struct lockb *) &errorq_lock_ctlr_3, }, /* ** IIOP device 3. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_4, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_4, (struct lockb *) &liorp_lock_ctlr_4, (struct lockb *) &submitq_lock_ctlr_4, (struct lockb *) &cmpltq_lock_ctlr_4, (struct lockb *) &rq_lock_ctlr_4, (struct lockb *) &errorq_lock_ctlr_4, }, /* ** IIOP device 4. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_5, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_5, (struct lockb *) &liorp_lock_ctlr_5, (struct lockb *) &submitq_lock_ctlr_5, (struct lockb *) &cmpltq_lock_ctlr_5, (struct lockb *) &rq_lock_ctlr_5, (struct lockb *) &errorq_lock_ctlr_5, }, /* ** IIOP device 5. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_6, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_6, (struct lockb *) &liorp_lock_ctlr_6, (struct lockb *) &submitq_lock_ctlr_6, (struct lockb *) &cmpltq_lock_ctlr_6, (struct lockb *) &rq_lock_ctlr_6, (struct lockb *) &errorq_lock_ctlr_6, }, }; /* *************************************************************************** ** Command timeout values. *************************************************************************** */ IIOP_CMD iiop_cmds[] = { /* 0x00 TEST_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* 0x01 REWIND_CMD */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x03 SENSE_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* 0x04 FORMAT_CMD */ {IIOP_MIN*60*2, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x07 RD_BACK_CMD */ {IIOP_MIN, 0, IIOP_SCSI_WRITE}, /* 0x08 READ_CMD */ {0xfffffff, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x0A WRITE_CMD */ {0xfffffff, 0, IIOP_SCSI_WRITE}, /* 0x0B SEEK_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x0F TP_RDB */ {IIOP_TIMEOUT, 0, -1}, /* 0x10 TP_WFM */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* 0x11 TP_SP */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* 0x12 INQUIRY_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x15 MODESELECT_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_WRITE}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x19 TP_ERASE */ {IIOP_MIN*60*3, 0, IIOP_SCSI_CMD}, /* 0x1A MODESENSE_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* 0x1B TP_LOAD */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x1E unused */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x25 READ_CAP_CMD */ {IIOP_TIMEOUT, 8, IIOP_SCSI_READ}, /* DEFAULT ENTRY */ {IIOP_TIMEOUT, 0, -1}, }; /* *************************************************************************** ** Configuration information *************************************************************************** */ int is_K2; /* (K2_ADDED) contains value returned */ /* by call to ims_is_K2() */ int iiop_cmds_len = (sizeof(iiop_cmds) / sizeof(IIOP_CMD)) -1; int iiop_tune_iorps_dpm = IIOP_PUT_EM_IN_DUAL_PORT; /* Put physical IORP d.s. in dual port if TRUE and dual port available. */ int iiop_tune_liorps_dpm = IIOP_PUT_EM_IN_DUAL_PORT; /* Put logical IORP d.s. in dual port if TRUE and dual port available. */ int iiop_tune_iorps = IIOP_MAX_IORPS; int iiop_tune_liorps = IIOP_MAX_LIORPS; int iiop_tune_iorps_k2 = IIOP_MAX_IORPS_K2; int iiop_tune_liorps_k2 = IIOP_MAX_LIORPS_K2; int Log_IIOP_Errors = 1; /* Enable IIOP SCSI error reports. */ int max_iiop_elogs = 10000; /* Number of error reports before being disabled. */ int iiop_1st_eisa_slot = IIOP_EISA_SLOT_9; int iiop_last_eisa_slot = IIOP_EISA_SLOT_13; int iiop_1st_eisa_irq = IIOP_EISA_VECT_9; int iiop_max_devices = sizeof(iiop_devices) / sizeof(IIOP_DEVICE); int iiop_dp_ram_incr = IIOP_DP_RAM_INCR; int iiop_intr_ipl = IIOP_INTR_PRI; /* Interrupt Priority Level. */ /* *************************************************************************** ** Individual SCSI disk manufacturer's mode select command to ** enable disk drive readahead and bad blocking algorithm. *************************************************************************** */ char iiop_cdc_ms_cmd[] = { /* Mode Select Parameter List */ 0, 0, 0, 0, /* Error Recovery Page*/ 0x1, 6, /* Error Recovery Parameters */ 0xc0, 0x1b, 0xb, 0, 0, 0xff, /* Cache Control Page */ 0x38, 14, /* Cache Control Parameters */ 0x11, 0xff, 0x34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; char iiop_fuji2_ms_cmd[] = { /* Mode Select Parameter List */ 0, 0, 0, 0, /* Error Recovery Page*/ 0x1, 10, /* Error Recovery Parameters */ 0xec, 0x12, 0xb, 0, 0, 0, 0x12, 0, 0, 0, /* Cache Control Page */ 0x8, 10, /* Cache Control Parameters */ 0x0, 0, 0xff, 0xff, 0, 0, 0x00, 0xff, 0x00, 0xff }; /* ** Table of SCSI disk manufacturer. */ IIOP_MS_TABLE iiop_ms_table[] = { {"CDC ", (ulong) 4, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"SEAGATE", (ulong) 7, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"IMPRIMIS", (ulong) 8, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"FUJITSU", (ulong) 7, iiop_fuji2_ms_cmd, (ulong) sizeof(iiop_fuji2_ms_cmd)}, }; int iiop_ms_tbl_entries = sizeof(iiop_ms_table) / sizeof(IIOP_MS_TABLE); /* *************************************************************************** ** STUBS for NON-RAID 1 *************************************************************************** */ #ifndef RAID_0 int iiop_release_revision = IIOP_EIOP_REV; int raid_get_geometry(scsi_req, cylinders, heads, sectors) REQ_IO *scsi_req; /* (i) SCSI request, ID and LUN. */ ushort *cylinders; /* (u) # cylinders in device. */ ushort *heads; /* (u) # heads in device. */ ushort *sectors; /* (u) # sectors in track of device. */ { if ( iiop_get_geometry(scsi_req, cylinders, heads, sectors) ) return (-1); iiop_init_drive(&iiop_devices[IIOP_HA_NUM(scsi_req->ha_num, is_K2)], scsi_req); return (0); } #else int iiop_release_revision = IIOP_EIOP_R1_REV; #endif r.O..sdriverinstalls.r..twdt.s..Space.oSpace.cDevice.datSpace.o.ZSystemMasteruDriver.o$(vm'5w'R@ ZF]lI*,dU9d n~"Gs6l^v rbPl3DEGjʭ^(߿YJ+߁'wHm"yZ-v0A $]>.dաJv!FzBُqAhՎ;՗~?1cKage/A fީG2dĔCaV]?D=}A ]6pV ,ɑw.2,3W8r<_w-{3PϿRӫ.*^I/'Xs5ܺfF7:Ktad#nJ bQaovZ]r,AVP"M[6/&<okx6/NJ԰|Џ0jG67e1~5!ݥXӱjMqw:SP֞!SkqqzSdӂ#f@[5Ua&!ѩ̘l;ymU%)2-jHY#>D\$ VZϜdv$=Hq0$2@ 9њaH v7D1(&OöA֑oOÈڽJnĄTsE7rEcaM>$ɉ.ڀljTF ֶ#! " f;Nؐd>9~0E;`hA(t(!^慣LU*0$`3QiE,$'0v-Ӊ6"y'4&1{0!hCɾS$0qQK [roYoOu/%8y~@3*(ɲ뀐i?Sb$&':TƉl!J1Rݪ Fh(8oTʖ[D;.X0ԗ"!*fכ0)+`}˅] j- "% ŸDe#v:5Agy]|9A\.YsV7Jw:e qbY(N$h6#;@vpAe2Jw)XJKuCfsz|LfF(^aO̤%a1&7 =zd no^-$>oNvǽ&R[ъ2W7 ymCv*庡s:nk=fzQv OG u2εk7RNoK`H|v=H峴㜁@H'G.x< س$Ţ`f Vҗ2kasX,we3B@r3&Hؙ UwkP3TӋp/>#w γ4v;m#228r/Fa|miNIڋEc503 ŗ*m,&)CT-3k3O$]䢤:QQHU22:SM)aW\#@>ilťW![(Lf16grL^P0/Ve;pY#BϑCئv<S-/Fjze`Ԉ7&t<-FW/$l3ۧ#߸taREe@',FvȐ}Ѧ3S0mɼC n (/^uiF%Jy գJ5))#Asgӣ^Ȳ 5R^@ ^>,Ёނl',˧ |y#u*=x@Dj#sЙjn荭Z}9ћ"F靧z^QZ5wrX[ШYh+T٥8R92s@ TW} A5k{KuWF1E떁l|mɺ6!d 3  2G jʢ,E)Y?kZ<#5. `(2>a@5x M!Pbk>t;!f%c`b޷"y~96ڜɁwwW^Hᯃ\87TUU0˽ߊTt,|J:z %80II^ gE I}QŜӊ]( C)PY3%e0(!BbMlA{?RS G=ВnUY#[oiԎX3N\ ڀZâ y9s߂}Lz&iG" ,9P+ 57WɭᙱMJ`=0GOQ6ol=P>o+.2*Gassx2LF?JY4.xN DsdPeOo(e+.2Zh@Ϙ~X8xbD/>Z: Lq{nVqtq ۀ^و(:18u ~pm| 8!ƒPIO7lU/FG/;Ofʹ|Y\0W@cP{f5F`ʤ$^hd ,1!"1 yhbm[ HќGS6KP ('<B'mEu2#WX"ȸعਲ਼Qs@0c6 |w#ɜ):b}(0x=XLupB}*HpxNm1l<\'nb\8>J<#$a9' 3 vQXbp-vh+QwQgΪoV&dkJ+~qlp`a $xLβOQeT+~Μb|-^;W_Tø+]! H+ua=z:ZѬBRC4* $6Qi"D~ݯ!:N [Opy MQ GZ3rg\WÔ]#*w5LՄݎ3<"s fˇM Rř0C+]V:廽| _$S=.4* P%a Ns6k|:)i#hk֢ͼ=|; ô?5Ŭ3m7ɁؾM{"ƩO;a0f ឩ3P[QFO6dٌGM*#f8⤩MY\$CVV&o_͊<)ޓt`] S4 9v,1W(AAd}8[RNpFh )CvcfKFv9ΐ4~R&'] oͧfwvp>R3P!ȏ5wB֯| u 2V|/2ūgۍX1/&UMV˨gCd^[A5[+~*7|7uV*Omr0??` H 4yɂ7l dS $ blm)̟jL.=3vik_)8+=P|y4RGM2~ O\lX+! e5E~p%:lТ 5!`}DS c+A~[h a$}-Un1VP s cCFX +0زP'w`\4,_Dx(| G! 64'fQ42Z р8"VZ%j2s(˕ݮ+%."RWVx6!<>`h>z!@8Z K~g_a\3;ӆ<,W_`h;~X$x0mψ>lDcI}Hl0`F,c2!={/'^?N~7M|n4*/g Zujr=A -u͌~kO φnԖԑԬ@3GqW`^}>vdz]V޳%Lu9Sfko^ o Uee RǡzC;K$`Xxcɖ>`V Xy#-O'8sӨCis IXOn);_?C*~Eǯ= hl6&zYq|b3VQφWPaG%A.3if^ٓ8>M+V)DkZUrP-d؃h W79 >TAi8^sH6Vabު3%tGA Q]kmDk+U0knֹ̰2΍ϣ˓#q?C+L6}U,N6ވH0A ji&qCsdXD)ntK Rkl$մWZsI?SBqal{W6h.xq.t'QG<| ,&kESnddR/g~ˉ59 xg`*vsX/~+VWg=9Օvy@htZ EVjq+.fX}>ELf1 TL=D6`.+V HM ?k+vT%b)@A& Q]. 6Œ+ 7+; ׃>oIa yGk̙ טS3*O)kn_S(c֧QD%N $ф- F_X[?v_O^s"xp!rv.؊zTuAgޙ^yYov\y X->^cNvֺR ÐhYmͨ-pWcsp7J鹼j ia(X@ȅ6W(_ iiJzh%$_*3wD{`]i  :bj1%EAݍl<@+~?(%xEt{[^ڧ dlV]t́]`1e#pJx҃P ~ GpQCotb~.Dx&ECi0z}ۑM0!5=HATZqE8[RȯT5D׎LD.$ I8aJH! {_Ms'O5caOX{'YpxS!ih] y)dPG7mշ=$X|!q9>睏v~qE2b8+qq-6ߑ 2"O/1=N[P@m&ZnƇ+=@awO虔\ ىΆ5AyY7|=q>A%u6><;*H?SLȠ06u_%"o`Z7*AƼA6*#ꇿ *0VL{}Y$(-&VEN:Gޔm"b$~k:x#َ*zl;8Ӎ\l(Y#2-$Nvŭt3CtTv~-̝v u&XnS&Jux6_mNlO;I ì(A$7I@mW4j3so|h;%A=rwsG%Ιa%m^j)[8] 9^ٕt"gs#TyZ0y$w:0qE WMh} \j7ڏ @ y~3C>S(QwkU[HA* X ,(ȗv3mfXZ8q>slON.Ъ1g|ɗB[Y-oFVX)o)`M;\V?t E9 z>1UF-]t><jܫSzm%r]q%KZ G Gz5Qϑ6%(є m`5@7`XP(rft)\c;B1?u)ABx^ulLì `;y~﫱 ;FG/h bqaW˹{nX'{VvFgI;@!ƛ8R@\uH~ QΘsVK7U un1#PUK&̽Qts݋Y/\K܋H +p3f2REn~)LJӬYnc=e\oI">FO߃ޔ[`8JgZ-]`F ;Vxau1~7Z Iff͇C(/ ؆&XU1Ѹ(\sˇ}X1pAľVaX=:9m9@$挊BPjp>fUt#a_.AR]r;K!^!F17\37,ՌxfU;|ˆ:Yuj3JEݑHOQWw7i Xܗpg qbT` ݵŁگB?k8qwG1a0A~,Qg}*z`0!2@cEIiZ_͐xv0ف/F4l\Ke˼h\ /0򄨑T$) xtk "iR], c{,wXlAd= e0&_Fm>))uMb,(-S(V\u|/.t!g֑0  p2XZ?SY gDkt[ ߋ2e\O =%8CtL %<^;^4Ye.$ b1 *NUIoۀ g& Y$ն~-[vy%\=Av{ JxQUz 8( f3-)%p: FTiŻcFuSX)SlwhM)Iu_ػl]]{Bׄb$j":ُXXP.1A c !iЯB#97SO*i{W&1t)M4bƭ̌jk$v@$:Zkש=~LǕG-[ #:qBͲv[,oU<2w,CĚ$,M>~&ݎ<uo3"&yM,z Պ+/0i\O[կs?1l)XgFWȝhB5L"=-༛D?hTC%BB5b= 8#;je<O_pTvVp'@l3K1<&i$ [+8|`?#iZN Mv-lpEnOTY׍ =³jYwNJzcP>AEW?[aƤgy=A-Sx}~E ) D2 ~+">꿬l ˴=M rjq=*~v\*iO0:{`ŁQү9yCΔ^/Z`?od#wZ'? FySsngۏoDtLg2r&a"g^\,N|:]Cd1rRxhpn?9~t92kmkW[`ق3{_Ǭ0èI0ZYiҷB~6RjP=b]=a/,^i;%oT:~O$ we`\ _Ez]_XZi\3 GsH̪`f:1moF.GZ>@̵~hMMm*3Q1R'TdeylGV);ܵ׋5Z`gs$ S}UN2L+W,mzgS. +gggUfs[}yycsK)jTFeN/eN/8qϾ 2c9|ٜv(81B]hK(ز3fRW($bLZOy ֦տQ,M2+ZbᗀN7`F~, !"#$%& ]#ZxJcZ@꾁 ɴO8)̏cUݢq;g˩8c@`+pcB+f:] M>%wU օx^H84;&3ORG<,9J `ނ* bn DUj sg g|$(3s8#+B1s6ޜ.=YP]hU#7jO[-ˋwL.f2oO`=6jwi)}oxlÐ[lzsQpJz98Fz|W\%byI KˈfC<"0]#6Dg +З;Y6!eA{!׾/*ZW N 5()Pv Ŕ=$y⾟ThJ1GӮТ%FkR,'ձ*OaH `Kzk֢pX) !Tyd;\+SvwN0ϩ*|U>YtBـfͧqwO;4Wt6p$f.*$=gzI/e_邶HHȤyM$NǨjb1ij`y%?$r%-U"pAu*= dV_&KfK@ 3܉Aa%%>iSx(ГWrq(uX#+Tr4Wf5K~!x?'l;m'-zDXwp愽&YkBX4Ã~;,"@8XZAVv}z}:4Lb@ʪӞ;qӬM^ah ]VXt'qzOs=z)mQaWgR^h>~ya RV.a({]hy^az|*uFov 4>Sztw:R?PQAP.6eqs啺[gb(tk3%YQΘ7íŭsِ_]|)J/-z]d3 bsoV.fуZ$DfS~;!V3᠚LMA Xwl(( eCorFv()R!s"Rgb;Ex7w͈pgǂn~Rsxuf@* 7-:;o~G /Z"2xkf@Kd6yo4;-+OU~t4Z]~Dw[DLTrHg ǛjsЏhnմno,ՅN~Nȸ$~"~V̀αb):xj#Hؑ PeZS1Va/mUJVd+\5iA=k:/k zt7v;NwmC.\o(qb _UPf@o Ii_CvlU۟i;>ZnuUpHsFWf …LwB#޽}*t( qwws܂KRSjTΕZt5V-jRiYESΪ)߾ʛ}y^~nI,_o~m}2 jꫲblqy@?<,T.F N)c&ә&੭35v ΊKiߙ1up=JZx"Դ/w/- \^[ϿV{W%[J~~@Btd. 0(,-fVKP/PbZwe9 ԣVӉG,6ާ^[ގnu>>cWwʺzeǧЩ\WCO½Me3=o`Hqjmfޟ'oTx'C9j\KTtva~3+{d?M?J isVpx>7}ʵqP Mf]7\bIQ)>WVr<~NӒpyk p2%'Nr~{yGZ`XhRGJ$+lҪ<[~}m>v%s^ FE #r\h䪳K+Oe8HǼEYUӮTEKi|kRTDXii洜 )HunTxYQm~rWl^S飫I\TVp_rݣJdJF0RJ)Tt#YCd/ Gi [t#'d.j?_QX-lSq.kNǩwRoxa*˖d䬹'S!C" #yH(wtvj lM;d3Ȧ/a޵Nj5&S:q59+aў[ @y"l.̈́WSϸKuDR7h5wga#fC~ߡڕN߉L!۳:+|SpgOz_y4{ Rkϑw~۝YW`Z\nEN\K_>G_s KrbƦA[;s_c*坯t틵/=_*5R.Rϗ7ve\,ײo_^ų4_3-'hU3v{3hڱ=Uv 5k9_>ܪE}^=_w4?śʶ;ҸZPQZĮ{FrHunJ3,!7# )9ElZ5,+zm շxY~ÖLj[F3e'9J("md'6!үs6tɄH/;cZeܴYbջ_DUfuT=m,UJ4M=:g3[ۖ+lA`7OlyjťؖUbtg{b],^aj/[b)g wT^by͛6F}/{xHFK:_BDl+ u'W`ZT "Kubd3Т9+"\͔~B延웵+Ư,^KW' `Y,fJ9jыUukГi.V(V%=:œ:P"1+_@[" WZr|\t\leiҐ/Fc#${Nܒ 2b,!JqlR whGtFGM2Q͐bҎ{d8{AӪ?3\7f hC)J=Gv:`xh>pqއgE##ۜ WjRpuGp nL2AI[ G,6RQ؃`0'Jv`>HAb7 C?DK:6$(H֥n> l]#Q/}[`?ăUQ:? ٦  )[͂;? o)o$7!\nt@#k=yJ7j!ۙb>G ]hGhڄpf hB<@d#=ăo;+ސ{ć!Hg=V J>jVB9z{~HwQCgzB@!#߄wxB!H>"V+e$brC`$4d!etW#WȃL\; ҝQAbH;T]!w˩ێ.v3u; ]N;dwoVeb F~`HD r8[o27c.#G*e{"{r!ݏ, ς] >BCp˷ h6!ҝXԃU|b-o7gwJM0$2W^Ng o'Jx?ǎ!o8K  ={rِwjgڀG};d-UnvFJ?z*.Un7Ȁ {9{9 nm wG;9nHp8\AH=XـPJvЧJ|~?#| {|=LrfZzχK] +\@m܈ϘA P xo|;I};IN8{N6t<d> {p_0>ߎv_&uW㲾G[[ n8c[ׅ8# GQ tUhcG r41ߟo y)B1'qO:qM!0Cvv{egA+hXH~ppqO"^r8PN''BYUo;5a;539-B:A1{rp VaҸ>hG`0xs[ÝqÝ3ڀ0ެ{j_8,TA<{"ͤA? lÈ9nʈ9=bfh=@#Մ~GxI~Iؓ<&(oX~~8LQc<4"C>pթ (_ >$|P-a4IĀD{IݽIݿs<%N1'O}pډPߌ1t4Xmxwwo>(ۺ_6({\{E;y=1G,b0B]xy{xc[qGwtƚ;4Ąyp#݄}GcGx[ wa#B?#>xGw;8B#>0AՑQ0#H#qYo!*4p$ƝNxcO?|Pqx`<#sqOxkswQ'z߷?=^8m`qx?!q;+D#vǟx Hɏ8$6o@qq=8 V@u<C߀Aǀ##AhfgƟ.c{0<9G?Տ=C>y<H@, s,kC;@H|v? { [ I u)OxgxQ;$N>FDe$O5t'Қy᧬;!ȝ="~7y',2&O"sz\^#D$E[LͿd5 VL_gk ~_8r(y U.Ly,y=pxGr˟.p\\ ńr!t-F.tVĂ\r9s?ٗ=|0ϸ_0A}P{s{˛#y)s˛b\9sB ^#>#ل~X" o%[?Pg?Sx1s90d- iBڹ6lh[ ҟb`O0t?Hq0&z7喺dqs̞h{y L;>qg̝)Mߦ^M妎l=[#3 Ip~Y8 lw7$pgn:lHB96`#}Ds[6z\A|Ͻ>G͝&ǭ[ [y4pӃ #r9|G~gLl|@w5@v7Xu@o|Pmz?  q1:} #ۀ}`#8XDL2Ѐ@u>w>z`7#ƀs@9,]@u@:f@x`?oc= L.<DFy^a/1"wH~,yk0`DlS[@>M)#L~::cg`_4r +:r<xgg6-y|n|39v|ggo>>r? >zBG>7Mx=<+4fmuNtZcN~s>M9 59^u9_N{zxMR]@~)r䩢H>5:ߍn!zC_ A<BwA[OFB~9p - Ҝ=pG4'#4#l=#>[xJ =A:wd3@i*֨oqPwӮ;*c?qÏ,8چ{gzvuI!17&bn9'ă%o#>U )jm#\- V toj)W2yq1 8 h:fZ h,Z 8T{`@v;}P`x<Xh@~PІm4.*!'r$-,Z8CZũ1!hݓ`퐲j˥a ?AKf7+1fw>lGk.n\9h.{Sn\![!JW$,;bH%aR) ] eb-z1[!Y˖WPS5ӗ})jC85}ǝ3LǾB^(YK\ډ=R˗_1COU(EvM6Qɾ]|hCnֱG(zƹt ?`p˭EbKQX.}.:֗N]S9^ݳxEFBCs?21 9jNz:'|<,XY_mrCZ:4|u+Kzc&`&Lp/q!ز㧝}sd0։s/$::2C|NHw3HhZT$:z lQPO.>uړj83Q+~Dg:HwPǞ| | ڿB3Ha1!@ 'BjaQma-ڵ,:cnLzD5R~C;bCxbQc̪znyea](+Z3+yZN!̶o`wz*gbrHuo!ꘖCE몔^(Bmߡ$;n?C}$;WVVѵZ}xc?CHx% )-ef-~HL{,`QR_!M>C@C$7{C rʵi X+uB{mUqQCki+ظcgn]D_HW7\B՚v Y#nfN:pCb[B8]uV?!ԨviJvZf p?rD[@޾ + ]/_8-ʙW>k6|ɋf aP|c;Z]\\1F̚c, UH?65MVt2tlHjs]:lN%JjhzMG栟be6uanHJ-\U1MqepGȻ.[e0F렟bfY^V>Cb͛[?ue^فy߿t[Nj7q,įհVRN8~GzGmu3NZs:uņ|6}f;,FSl[.&Yqn{GLVkT n}lv湓go%K2Vffv ]ϩsmYeN\MՃЧշǪuj~{nb;o5!I k88Y,<"4(J:Y^:cV,U[cmMm:8r~#1h!>< !]T\ɛ75mXB<:iYDKH'e/nbEMק?/mVk+W'͜;4o-:۹VL K2v(0bՋfK" edTZ^d~g{Dajez>]TֹT[׽%eZ*O++ HiaZj# a{-=ADSmFVMӴiy*;)iԼ |˕p冑RcZZW~=+M1hV'EterՄgX2ps#G%fU#.#ѠC-5F*MvҭSs4ܸIx\fv.o..wSpace.cDriver.o.ZSystemNodeMasterDriver.o#ident "@(#) space.c 26.2 95/07/19 " /* * Copyright (C) The Santa Cruz Operation, 1994-1995. * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /* ** ident @(#) @(#) space.c.iiop 1.21 1 5/24/95 11:27:51 ** ** sccs_id[] = {"@(#) 1.21 space.c.iiop "} */ /* *************************************************************************** ** ** MODULE NAME: space.c.iiop ** ** PURPOSE: IIOP device driver table. ** ** DEPENDENCIES: ** ** ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990 - 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** System Include Files *************************************************************************** */ #include "sys/param.h" #include "sys/types.h" #include "sys/sysmacros.h" #include "sys/cmn_err.h" #include "sys/immu.h" #include "sys/systm.h" #include "sys/buf.h" #include "sys/iobuf.h" #include "sys/dir.h" #include "sys/signal.h" #include "sys/user.h" #include "sys/scsi.h" #include "sys/devreg.h" /* New adapter init interface structs. */ #include "sys/ci/ciintr.h" /* *************************************************************************** ** Module Related Include Files *************************************************************************** */ #include "sys/iiop.h" #include "config.h" /* *************************************************************************** ** Defines *************************************************************************** */ #define IIOP_TIMEOUT 120000 /* Timeout of 2 minutes in milliseconds. */ #define IIOP_MIN 60000 /* Timeout of 1 minute in Hertz. */ #define IIOP_MAX_IORPS 164 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_MAX_LIORPS 164 /* 1 More than upper level req_io's and scatter/gather descriptors. */ /* ** W A R N I N G ! ! ! ** The following define must match IIOP_MAX_REQIO_K2 in ** space.c.dsk */ #define IIOP_MAX_IORPS_K2 512 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_MAX_LIORPS_K2 512 /* 1 More than upper level req_io's and scatter/gather descriptors. */ #define IIOP_PUT_EM_IN_DUAL_PORT 0 /* Put both physical and logical IORP data sets in dual port memory if this define is TRUE and dual port memory is available. */ /* ** NOTE: Currently SCO MPX 3.0.0j doesnot support dynamic distribution ** of ISS interrupt to a subset of all processors ** ** Select one of each of the following pairs to dictate whether that ** processor is to field an ISS interrupt. 0 - no, non-zero then yes */ /*#define CPU1 0x1*/ /* CPU1 - master gets ISS interrupts. */ #define CPU1 0x0 /* CPU1 - master does not get ISS interrupts. */ #define CPU2 0x2 /* CPU2 - slave 1 gets ISS interrupts. */ /*#define CPU2 0x0*/ /* CPU2 - slave 1 does not get ISS interrupts.*/ #define CPU3 0x4 /* CPU3 - slave 2 gets ISS interrupts. */ /*#define CPU3 0x0*/ /* CPU3 - slave 2 does not get ISS interrupts.*/ #define CPU4 0x8 /* CPU4 - slave 3 gets ISS interrupts. */ /*#define CPU4 0x0*/ /* CPU4 - slave 3 does not get ISS interrupts.*/ #define CPU5 0x10 /* CPU5 - slave 4 gets ISS interrupts. */ /*#define CPU5 0x0*/ /* CPU5 - slave 4 does not get ISS interrupts.*/ #define CPU6 0x20 /* CPU6 - slave 5 gets ISS interrupts. */ /*#define CPU6 0x0*/ /* CPU6 - slave 5 does not get ISS interrupts.*/ #define CPU7 0x40 /* CPU7 - slave 6 gets ISS interrupts. */ /*#define CPU7 0x0*/ /* CPU7 - slave 6 does not get ISS interrupts.*/ /* ** The following define SHAREG_EX_PROCESSOR_MASK dictates which ** cpus IIOP interrupts are allowed to occur on. -Modify the above ** defines to dicate who gets ISS interrupts. */ #define SHAREG_EX_PROCESSOR_MASK ICPU_EXANY /* Interrupt routine will run on any processor but not in parallel on multiple processors. */ /*#define SHAREG_EX_PROCESSOR_MASK ICPU_ANY*/ /* Interrupt routine will run on any processor and in parallel on multiple processors. */ /* ** NOTE: Currently SCO MPX 3.0.0j doesnot support dynamic distribution ** of ISS interrupt to a subset of all processors ** If they do, then we can do the following, if we want to. ** In the mean time we have to do the define above. */ /*#define SHAREG_EX_PROCESSOR_MASK (CPU1 | CPU2 | CPU3 | CPU4 | CPU5 | CPU6 | CPU7 )*/ /* *************************************************************************** ** Global Static Storage *************************************************************************** */ /* *************************************************************************** ** IIOP specific environment, first controller contains boot device. *************************************************************************** */ extern int iiop_entry(); /* Adapter entry routine, issue request. */ extern int iiopintr(); /* Adapter interrupt routine, finish request. */ extern int iiop_get_geometry(); /* Drive capacity to bios geometry computation. */ extern void iiop_init_drive(); /* Set disk drives readahead and bad blocking algorithm. */ /* ** Lock structures associated with each controller */ /* ** Controller 1 */ static struct lockb iorp_lock_ctlr_1 = {0,0}; /* IORP LOCK */ static char pad1[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_1 = {0,0}; /* LIORP LOCK */ static char pad2[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_1 = {0,0};/* Submission queue lock. */ static char pad3[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_1 = {0,0}; /* Complete queue lock. */ static char pad4[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_1 = {0,0}; /* Generic request queue lock.*/ static char pad5[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_1 = {0,0}; /* Error queue lock. */ static char pad6[28] = {0}; /* 32 bytes apart */ /* ** Controller 2 */ static struct lockb iorp_lock_ctlr_2 = {0,0}; /* IORP LOCK */ static char pad7[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_2 = {0,0}; /* LIORP LOCK */ static char pad8[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_2 = {0,0};/* Submission queue lock. */ static char pad9[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_2 = {0,0}; /* Complete queue lock. */ static char pada[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_2 = {0,0}; /* Generic request queue lock.*/ static char padb[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_2 = {0,0}; /* Error queue lock. */ static char padc[28] = {0}; /* 32 bytes apart */ /* ** Controller 3 */ static struct lockb iorp_lock_ctlr_3 = {0,0}; /* IORP LOCK */ static char padd[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_3 = {0,0}; /* LIORP LOCK */ static char pade[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_3 = {0,0};/* Submission queue lock. */ static char padf[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_3 = {0,0}; /* Complete queue lock. */ static char padg[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_3 = {0,0}; /* Generic request queue lock.*/ static char padh[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_3 = {0,0}; /* Error queue lock. */ static char padi[28] = {0}; /* 32 bytes apart */ /* ** Controller 4 */ static struct lockb iorp_lock_ctlr_4 = {0,0}; /* IORP LOCK */ static char padj[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_4 = {0,0}; /* LIORP LOCK */ static char padk[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_4 = {0,0};/* Submission queue lock. */ static char padl[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_4 = {0,0}; /* Complete queue lock. */ static char padm[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_4 = {0,0}; /* Generic request queue lock.*/ static char padn[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_4 = {0,0}; /* Error queue lock. */ static char pado[28] = {0}; 3456789:;<=> /* 32 bytes apart */ /* ** Controller 5 */ static struct lockb iorp_lock_ctlr_5 = {0,0}; /* IORP LOCK */ static char padp[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_5 = {0,0}; /* LIORP LOCK */ static char padq[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_5 = {0,0};/* Submission queue lock. */ static char padr[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_5 = {0,0}; /* Complete queue lock. */ static char pads[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_5 = {0,0}; /* Generic request queue lock.*/ static char padt[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_5 = {0,0}; /* Error queue lock. */ static char padu[28] = {0}; /* 32 bytes apart */ /* ** Controller 6 */ static struct lockb iorp_lock_ctlr_6 = {0,0}; /* IORP LOCK */ static char padv[28] = {0}; /* 32 bytes apart */ static struct lockb liorp_lock_ctlr_6 = {0,0}; /* LIORP LOCK */ static char padw[28] = {0}; /* 32 bytes apart */ static struct lockb submitq_lock_ctlr_6 = {0,0};/* Submission queue lock. */ static char padx[28] = {0}; /* 32 bytes apart */ static struct lockb cmpltq_lock_ctlr_6 = {0,0}; /* Complete queue lock. */ static char pady[28] = {0}; /* 32 bytes apart */ static struct lockb rq_lock_ctlr_6 = {0,0}; /* Generic request queue lock.*/ static char padz[28] = {0}; /* 32 bytes apart */ static struct lockb errorq_lock_ctlr_6 = {0,0}; /* Error queue lock. */ static char padaa[28] = {0}; /* 32 bytes apart */ SHAREG_EX iiop_ctlr_1 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_2 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_3 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_4 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_5 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; SHAREG_EX iiop_ctlr_6 = { (SHAREG *) NULL, (SHAREG *) NULL, iiop_entry, iiopintr, (int) SHAREG_VERSION, 1, 1, 0, (int) IROUTE_GLOBAL, (int) IIOP_INTR_PRI, (int) IMODE_EXCLUSIVE, (int) SHAREG_EX_PROCESSOR_MASK, 0, 0 }; IIOP_DEVICE iiop_devices[] = { /* ** IIOP device 0. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_1, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_1, (struct lockb *) &liorp_lock_ctlr_1, (struct lockb *) &submitq_lock_ctlr_1, (struct lockb *) &cmpltq_lock_ctlr_1, (struct lockb *) &rq_lock_ctlr_1, (struct lockb *) &errorq_lock_ctlr_1, }, /* ** IIOP device 1. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_2, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_2, (struct lockb *) &liorp_lock_ctlr_2, (struct lockb *) &submitq_lock_ctlr_2, (struct lockb *) &cmpltq_lock_ctlr_2, (struct lockb *) &rq_lock_ctlr_2, (struct lockb *) &errorq_lock_ctlr_2, }, /* ** IIOP device 2. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_3, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_3, (struct lockb *) &liorp_lock_ctlr_3, (struct lockb *) &submitq_lock_ctlr_3, (struct lockb *) &cmpltq_lock_ctlr_3, (struct lockb *) &rq_lock_ctlr_3, (struct lockb *) &errorq_lock_ctlr_3, }, /* ** IIOP device 3. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_4, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_4, (struct lockb *) &liorp_lock_ctlr_4, (struct lockb *) &submitq_lock_ctlr_4, (struct lockb *) &cmpltq_lock_ctlr_4, (struct lockb *) &rq_lock_ctlr_4, (struct lockb *) &errorq_lock_ctlr_4, }, /* ** IIOP device 4. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_5, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_5, (struct lockb *) &liorp_lock_ctlr_5, (struct lockb *) &submitq_lock_ctlr_5, (struct lockb *) &cmpltq_lock_ctlr_5, (struct lockb *) &rq_lock_ctlr_5, (struct lockb *) &errorq_lock_ctlr_5, }, /* ** IIOP device 5. */ {(int) 0, (int) 0, (int) 0, (int) 0, &iiop_ctlr_6, (IIOP_CONTROL_REG *) IIOP_X_CNTRL_REG, (paddr_t) IIOP_X_DP_RAM, (struct lockb *) &iorp_lock_ctlr_6, (struct lockb *) &liorp_lock_ctlr_6, (struct lockb *) &submitq_lock_ctlr_6, (struct lockb *) &cmpltq_lock_ctlr_6, (struct lockb *) &rq_lock_ctlr_6, (struct lockb *) &errorq_lock_ctlr_6, }, }; /* *************************************************************************** ** Command timeout values. *************************************************************************** */ IIOP_CMD iiop_cmds[] = { /* 0x00 TEST_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* 0x01 REWIND_CMD */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x03 SENSE_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* 0x04 FORMAT_CMD */ {IIOP_MIN*60*2, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x07 RD_BACK_CMD */ {IIOP_MIN, 0, IIOP_SCSI_WRITE}, /* 0x08 READ_CMD */ {0xfffffff, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x0A WRITE_CMD */ {0xfffffff, 0, IIOP_SCSI_WRITE}, /* 0x0B SEEK_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x0F TP_RDB */ {IIOP_TIMEOUT, 0, -1}, /* 0x10 TP_WFM */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* 0x11 TP_SP */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* 0x12 INQUIRY_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x15 MODESELECT_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_WRITE}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x19 TP_ERASE */ {IIOP_MIN*60*3, 0, IIOP_SCSI_CMD}, /* 0x1A MODESENSE_CMD */ {IIOP_TIMEOUT, 0, IIOP_SCSI_READ}, /* 0x1B TP_LOAD */ {IIOP_MIN*30, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x1E unused */ {IIOP_TIMEOUT, 0, IIOP_SCSI_CMD}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* unused */ {IIOP_TIMEOUT, 0, -1}, /* 0x25 READ_CAP_CMD */ {IIOP_TIMEOUT, 8, IIOP_SCSI_READ}, /* DEFAULT ENTRY */ {IIOP_TIMEOUT, 0, -1}, }; /* *************************************************************************** ** Configuration information *************************************************************************** */ int is_K2; /* (K2_ADDED) contains value returned */ /* by call to ims_is_K2() */ int iiop_cmds_len = (sizeof(iiop_cmds) / sizeof(IIOP_CMD)) -1; int iiop_tune_iorps_dpm = IIOP_PUT_EM_IN_DUAL_PORT; /* Put physical IORP d.s. in dual port if TRUE and dual port available. */ int iiop_tune_liorps_dpm = IIOP_PUT_EM_IN_DUAL_PORT; /* Put logical IORP d.s. in dual port if TRUE and dual port available. */ int iiop_tune_iorps = IIOP_MAX_IORPS; int iiop_tune_liorps = IIOP_MAX_LIORPS; int iiop_tune_iorps_k2 = IIOP_MAX_IORPS_K2; int iiop_tune_liorps_k2 = IIOP_MAX_LIORPS_K2; int Log_IIOP_Errors = 1; /* Enable IIOP SCSI error reports. */ int max_iiop_elogs = 10000; /* Number of error reports before being disabled. */ int iiop_1st_eisa_slot = IIOP_EISA_SLOT_9; int iiop_last_eisa_slot = IIOP_EISA_SLOT_13; int iiop_1st_eisa_irq = IIOP_EISA_VECT_9; int iiop_max_devices = sizeof(iiop_devices) / sizeof(IIOP_DEVICE); int iiop_dp_ram_incr = IIOP_DP_RAM_INCR; int iiop_intr_ipl = IIOP_INTR_PRI; /* Interrupt Priority Level. */ /* *************************************************************************** ** Individual SCSI disk manufacturer's mode select command to ** enable disk drive readahead and bad blocking algorithm. *************************************************************************** */ char iiop_cdc_ms_cmd[] = { /* Mode Select Parameter List */ 0, 0, 0, 0, /* Error Recovery Page*/ 0x1, 6, /* Error Recovery Parameters */ 0xc0, 0x1b, 0xb, 0, 0, 0xff, /* Cache Control Page */ 0x38, 14, /* Cache Control Parameters */ 0x11, 0xff, 0x34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; char iiop_fuji2_ms_cmd[] = { /* Mode Select Parameter List */ 0, 0, 0, 0, /* Error Recovery Page*/ 0x1, 10, /* Error Recovery Parameters */ 0xec, 0x12, 0xb, 0, 0, 0, 0x12, 0, 0, 0, /* Cache Control Page */ 0x8, 10, /* Cache Control Parameters */ 0x0, 0, 0xff, 0xff, 0, 0, 0x00, 0xff, 0x00, 0xff }; /* ** Table of SCSI disk manufacturer. */ IIOP_MS_TABLE iiop_ms_table[] = { {"CDC ", (ulong) 4, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"SEAGATE", (ulong) 7, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"IMPRIMIS", (ulong) 8, iiop_cdc_ms_cmd, (ulong) sizeof(iiop_cdc_ms_cmd)}, {"FUJITSU", (ulong) 7, iiop_fuji2_ms_cmd, (ulong) sizeof(iiop_fuji2_ms_cmd)}, }; int iiop_ms_tbl_entries = sizeof(iiop_ms_table) / sizeof(IIOP_MS_TABLE); /* *************************************************************************** ** STUBS for NON-RAID 1 *************************************************************************** */ #ifndef RAID_0 int iiop_release_revision = IIOP_EIOP_REV; int raid_get_geometry(scsi_req, cylinders, heads, sectors) REQ_IO *scsi_req; /* (i) SCSI request, ID and LUN. */ ushort *cylinders; /* (u) # cylinders in device. */ ushort *heads; /* (u) # heads in device. */ ushort *sectors; /* (u) # sectors in track of device. */ { if ( iiop_get_geometry(scsi_req, cylinders, heads, sectors) ) return (-1); iiop_init_drive(&iiop_devices[IIOP_HA_NUM(scsi_req->ha_num, is_K2)], scsi_req); return (0); } #else int iiop_release_revision = IIOP_EIOP_R1_REV; #endif x.O..ydriverinstallnewy.x..zdptrz.y..Space.oSpace.cSpace.o.ZMasterSystem{Driver.o%0~m';y,[- F@•J1z[XI(%m*뮽eIݩKYb}bͳܽ];lQ5." Rk*ԀV}]w<|O>~mZ2ܮitgbEϭX Ş0y?p9Y@}=tO^e(}]U6e^j'}>?\P9/zq>X g>=Dŏal(X],^ g"ᆕf~Xzũu9X㛱 rLgl,ab̼Qvgg4fשӆm{tӮVF1'~iXÏp?;Jd-)>cW?@g3nZ/f!zܜy>o N#9>>dQv7MwBv]-ZӸMi;֟\nג4EiцvYiCnu%tA4ِ^M+ha7wdx ;vڄ;-*|8,w -ǓZ^t,A{#1}P,Ly WZc4{E E|VH "j!"tXyp4c#Ȏ OWDwY\V)VI|[f8?TF< O3+Md]U꠵_fY,":;uj[5UĀE܂Kw JD2֏cZwtyltaKN?}S{Y,w@we ٲFtkq f#=8B/ցbg؎9PxqAiqءCaT;Ƙ3ec~=VAv!acʷ&v6x8{F8:* @TWLM°NE拆d:V%nT֋ C_gNIy)cw3żx[\YdJ?ځ="e=ő !CHN8-.mO}ahmϾe%p㴹 UR^tf:QhR\a//4C욠*fP Zr J SK=q>e\qѭ\,EYa4a9A3)عo%IWQ}*%ե`įOWuxbwl\^ /ڒB|~}%c `k@9 9|\y+*j O Wo1$/KlV%[,_3AC< ĽwcwgU;M'6M/3c\_`".r2;Q}LS}_nԚ9ZeV6@a)NC4sU+lߗr3} i`cpyF׷:_ +x:"WHʀQJRK-~| 9nLÁ}5:EEV C=4ay;5$ }!M11n#ߌKB~Eax4p=4}*cWXdЧ{}7ogn8u͎ƣrd,=o[ e|D#` ?Î|`nBS֧Z,O>V^yDcZe-'b(DO[E1wB{ahZS)X̶r?isJTˈ%KnT83 i2CΏ%f3``+SDuEP:k閴 J ^.u5`,;||52ސs9YfVRLͪf-O>y`9/(Hl9 cz,P G. :ZX/:sˊJّ>N g|B2˱XY%\7+qΊlӤg9y'K#8g23ۭNvB'BnpȕjTLRE-]BTY̟} O#Wb'Sq[Z:**5TT>Q3b~+HdPdk3Q̒)bmrR.k팇4doJ77 Rw UmBh9l?DU] xMf ,T+YQsls7gygqЅ:=+UG7@25i4RJged^fF5Mefo?%yT}>NK,=$ՕUI˱NtDU1Q3ZIyu6k(VՁ?*`马hOd(lE'vEj5e4/,(pf+ SB]f &aTxEU"c LX3ˍ9 S3K DϸFg{]H K%$4rx{F f tT#v|=[&:dc_  \X@S@DEE&E-ze'ja.=J0asΡNHo :0Tn"Qn8Mrf//T$kAZtDQDھr+o{lU#o:-d;¬,xxU0cǿ(" E!.8  v>.i36cqkEmqVF;CXr=\ͱUJf[.!`2KJ%|-r88`̈`hոU#9^PQ(W qމD} Qٞ"YOL$PBSӕBR PXp[b%Lzl@g+S&$05VmUΦU'R6Z7E-_-^$~X+hIk]ُbZxNq7N[dh KⶡO\ZVO!cBadv7 M66ɽKnL3_ 0?"VdL@ O|-S)ԟ\4&rղ8 IR\Q(K#%*%HJq8#VxeX@Ex5cH <>D퇝ry`T?ل-X a=ݪ;t;G4CH%< vA5hii|}]qh <}C{xdVB` 'YR餪=?VMj3|&0b+щ6_b|>0˲OhGOhcad 쳵Cj}WV>@QƖNtV2 RsHӑ{`2voGOO'b&VisZ4+Tif\NQ,ֈ#isX:g2O%I\E:ʓҗ 諦΁{q2+Bۜ챯<6K*!8%pyt>p2`ȜfPC57}Ǩ2'p *_<ѬyʿOPA$d1<87hb46T kÆဥs]q8.K8a=(%釯`s[VN H$Sx:,HL{Orb8gbרNFZ qqNJ$ɖZLz/ڀxZƪKU^-|:ou44?@\{s R2zktk"ՒSɃOPAtj2FaMy^@%pPr,av7ޏ+Ru%ޔ'9zx"Ό|lB~,$ĉƍn:zC*6ԓ$lYwQO"/xEꏑ|>["~^Q헖C9dRpg9׆ѡҖ$+HTמoJ"sT`ռsqi lR,<0(cvC’LGνOXR?^dW.֯\B\" {A70%=kG)e)OId QဨoPDǼ\xa2]צԪ7赁^`ozp} & nWrE*mf29¡)Cdg-]3#Y'+ss3ey=NP _jW͠Y䈃Y: ïMvPV#f=02" ڗEc&O*S:ۆH/FN2PuЩƒj>g)(7J[}(Fh1brB#$㄃J%#΢=z?f-ٝIN8u:<d^{*E f:jD6OF|ʼw?h}6XXU a<&E(=FTtJv%dvrh~Gހg"7:rZυ*dt+Jx Y.p`vJ n6kEi/}Gݵ:G^a>o-yQc'* R<{3 (+Yr5F+hW#_-=R7Fx!4?Ԁ9?زlQ@|)|^ thיr3*w"G\ ax'I~qN4|b~P8L“+_,f64 cM.8洋Mn$7m<."`c>/N>RJ$i+!>xqO\2=9`|Џ CȃFyǒ3$KoV~1mtr7BE~ `# a3"v gfw`ƠΏAVX?OW<-% |t5l~:g+#,rOYy0JT5!?\&#gXV/ }:f4\HTM>ĺD6ha zAºϗP1- p! ;K'Tox8nR7XD,<JPՠ*BhO7Ǿxv q|>Ow3k=՝gwae;Al:O΅,Do978sddmȬpYeںMMeo#Z╽hdw^\Ů(9GσAǿ}h}$$nx3uCMrPX x{K1ŜdgZ{T-g#msgK I5ʡUg{UӎXԇ>#`]Vj]S{7Tt7c E*ay0Lca>!K\G}$ɞ)O|^r7t;pch>To2\iasgKjRtxߎwa/K <2#j":&|B02) m(~ >E&xNلIj=$(;kL!_\NB&6_AZ=nv}7,Fhc>Z[5TscKaB g_0=86hyjTgoL C;{}GK۫аm "p )H9fd;Rpx?L >iG O+LTA'hh)?\iM UN])PZXJ =Ϯ {󆩩;[[ܲO*";fGmRyCL%1|JcޘJc|yN <"q, l^U:64Io[D2<?miw<.>.B$ g6I>@+)z2Ɉ8uhS]U11 `X' ,|\VO+FR%?O- R ֕W-kqiQ[cဣaz@w P=r ސoSq (r@3H~T!}p Sa n˱W5=ܗi[H B[ Ţ%xShesmmsԜ*prV='zv;i>\_Ii4Bqicڍg?ٕ5$Zt N2'UY+s ^0{:h1HlCv53!EIb2+3Q \~{S3%A`M( K '[j !lOȇQPZ;_JUvCl|aO2#$]MfHMf b)0?'5+Cxa#R2mGtTukqqא80&攫E\WwABx5x$'2~)z+g?3jԃnt`2gm=VO@߿*6xpi@ 8x"Ak@ :`3*[A`d 8x@kL'u'Q?F̠̲Fk^8ifS : T"A> pgѠТKKz TAB` `9y{d6@čD;)OnFw`pVvPƱOᑳxała L)M°\ [ż FtQi'N|0lfs*!;rж l) VKgT2FAaC&\~wHdvegIIWGى9{! ~5B͚=pn@cTW}dq$s!@ _Tgw-OPOT)Ϥfdp?.V^wJ0~BpP`xA6{LO&L`+87('C UPi+a(䞳@\ #s'h: F<7-Oʯwkq&RAnhlEKE6~YTm3Τ8GF{=LdHepI3JgYl\5,{dKXWڙ}JJ|#zW(@gnEeM"Z%[*=B$uؚYȪOM>uhdg!,q֛hz+n6D^+rn'9+P=.8O%Lud̅EQ*OW z>SKxkX+x,_ %, {:{)oYM<@ T4S$ *yTT^%pvhhEfǓ ^÷"Hwcwg]c8UF fB GV!?O_ X>7䎀~yӢUlUBtΑWOTUkϿK'3ER>>6IwR˃ypS3Q㢠rUl dy%3v9ߧ'p} !K "<:_C9 O!ŚZWH)\K;yebݻ]cTCb:F)F>e>gfMrc9>{9F kEwy Ȏm&>/i׃· `5N e-FR`J^ d9 9V_NCÉn^rN9aZ-HHKT*N_*m9ЕTd2d1I: &A<9uc|FN*I]CA٥:]Ҡn+2Ⱥ*y{rGsΈ^Uj}h_qV:ZYδONä`]MeM)jxij]]0 <t|;-n)¸A[޲sԝwB_4>G>uy}=ei9Xm=6a;wێeR.]0Q\3!~ oHehmtFody#%xCwk?s"[0&ϙW#͈FM@D]؅\rEAti]\Z( w(}hХLVҐ,ƇdP>1Nc8\J%"ʻYF q*MbX;P'RbΖ#@JlMhZt qYEciݵ^ֱ-Q_$ű5'8BN\@PlMNOPQRSTUVWXOOB~lt/ JK,}c;#!^!B@wKkgoċy΁,"fA'j> OSo8Ɠ)z"s?ѩv/j,酕$[]X *17uZaR/͜))j'"HcWKb CLPC1.S8 *FZSNƢhmL篩jnjz֝1'>,T\oJͫ\Vmc_; lxޠabs .ej f Ƅ8|-4 ra4όDj[Cbld5˒R"iQC] ''L ͉^=4E禆ID ^@]b/ t,uwGiz ]M[082<>$@siw ?$K'Bg3i_(Uat6M O/ G6;! p RzIȉ.!`R_TnD#I1Y_kfP0=["3M..{_g 5(Mn6R;Km؁N$[}+K4Xdw }"r4Z 6e$G@D\q_L#} h5a8=[b%kT 3~0:v5 -fIN_]z ?M`5/z- `F66T{p&q,q- fg/aFNĀSlE=|&{}!f%AK]"/V:{ȖH-}( HؿTt[G,oqx~x ͨ|-T8xatpY!`Z)C*E%rr|A}xau <5Bo(9A*ȷE'=CsE^(H (}mx}%yw<+Zs(۰숰k,;b>Lt`}0׾B|\ PʼGs=5ML:  ;o-ebN]&yxQآvf]yk#wNP&P[`]kiX$JoP2a-v}$k jo^yP9T E~&ط+$4xBfY5z)>O}u*UҖ4s Tx$Աw(raQQ08vTiJ ƒm!֣kn׸O/kw닸eћ7ԯm$U(W"+2]"YoZ)=uȻ\oΟI ;}b}o؝GL\U_oT\r^.ㅹ[oS#I雖?P)$F$Oi(AȔ)jJkJi~ʌ( кu (64q\ :>8$G)"S9p$e'cW)gtsY`S3ˇ,-Kȸ8vH fYˀIxNfexL@ɩnJ]E$Tu>F Zz b*m+Z~V E{$]*5o^`/lZLاA9ePn^I`Tۍu̿ R\BŨ>i8> JoȾRL\8?ri:lzcM+lN3nfV7eImbsf[l. J-|8ِVGwI]3Uϊ['b6h-;_W[<,v6 RDȲx-#KNV]4۶jwSZNB8=:ZqT3'jW-_7I,H5gt/  L1"v Mn 0^*0f9az $ B4À:fXx qG=iH%P*H% }pT#߼TqJ8 st q~8F{ sxQ`?u .Ԁju~} ocD-kXiG׀.*J A)d]@\؀;@>Mn'gˉ߼q87}7G Mr`5@:=v) ȑ0[兾[ ?@[T4ra#Āg#m=0G@R ϓt9=B`*^P:?/u<]b=q0NSg ̦xAv?X-]OAYba/[lAZ݋IH9u5Qݎ "ht8ݏ/eyL;JAR^B>8:n=g}vHScV!h#^U[` =T7ğLSIOj~ʼ$^Gmxj<`@-ey:u~P6{[lڐz+3ܯCԤz<xd*3АumMs5-]/G1G=djގ|b6,3!{A>P (l҆O(x =PGAڄ`G>{4x ٣`<[:Aצ#GB?4##oqG!|4khpG/6@?ھy8,qdp 8P"p yYDqh~4wP XS~:߱Ǹ8/[=zhq]' Y:?~7~s_cdKO+<K=]`!o}_ASovV'y[v7 ﳁ S/tRAxX5=߆}g?DHV=eUV<_U+;ˤ  F ,.>v}j>3т[; xWkn53z<ؿd-a@[Հ$[sMlG|h3Ǝ qdeN㫕;{;{;*qC*q8Ϫ8JT?8%Ne|sWvWÞ~>,kp[⥍&7AoY,!XX}@쇿SL3Nc=`z:A܃Ԧ#P@=r.(|\Q;?0ހp29:/u ?v|SlN,~u T .(Ys?l͗=<>2ӣ[C:i -OJT^4= iꩁo0y3t@{`Mq3 ;Lq88? oaHǛߑ7?uo$-ٓos"@v;@2xWL@ehG,i2&yɝV@E/|MB;0 ͩ'4kpFzhJGa*h}IȚ;D\fD҄}^D?M;ȞVy?ȝ[hd8fiGGG {#=G1>H7rG'o8VLxlXfx3rge|lȮ#?ɞێP?=鲆Vrj]=aYC ܀a`P× mQS# ;zM?;ن64͛85<8)szÉ=|p Â~Qs<gao8pZlc)S*vϸʎܩ?#*vʞyAǒyS@Tg,x,vW:3?8&PSiW9ԝ3'~ܩbo`+;5<k=x'r]aO a?b=n i̐riʭ8Z=֜0֜00ZpiؽRӭ얞j+O5vo&#֜?֝E3:l3LNG~)Aߖ9q PE>8H4jx-;:Z5Tt7{PGP":gS@t_@t~: z0:gBu҄?Tb隺#l(Մ};z#|Z#|# :\л=Geǔ\\c.tWFtiFoʌ^xT3`?q4}i365amGBGHGS )ڛÍ:&ևzAiO!y!S Lt* @=0:gEGNh4b)Ώ Yӝ #9=9#|`8@mϷ^l^偽?Ao,=sYuYGՀ ྸ#؀>v`O`S<`hqC]A>^A<:.@qsF4omB'B=VhlP;l̀f͛;^GC*ޙ)>#|d?p/ThlH;E6 Ctz ;9OrXxWg<W7*8Z:>Qʳ{mV b 3!*)X7k;+8 A42MIjk{(94* Ҥ~,R?AG"!B7a#;+$x $V GʌYG7x p p@/@t6 =d@;@p >Xfx 6> ڀ@y@<h8Tq,"&wU 8*d"&w ~@&8x6) X P.^u:p }TTJhneN-pB]ʵЗTrCJ!EKʸBBZ#l,* JBQW|/pﰨU wL~}V΋CB6?<+C_hND&< BIn`Bu^\J>&w'&5sRB`QL8Lp k{řLucC1CS $;N{"묄9uz4aL)vX5Vڳz IkRʡ~xwE\;x_2#C̆Hba!aHhVhXD,zhj6 CX8n!OA^3BȽ!O?hS䅺H~P8y0DE 9xNBh!$:hHZu<+C$4!JfH{|CBC"P!1=BhkHx9zcFu4:H]3N8i0b6"S 99# yGˆ}!ےIH!CC$,!I (T;SHu4:fi+ٺmF;bcǛ4f`c}]Ob|BZ7m+t߂2ͻzzL7NthdzV>Hlš T$9(ޕ4.2x!j12'M<r7]+=OC4G66Zh&]7M\J\[z4>wݽe[ I:ץl8bMpHm#h⡎@иkYT&mz.ތ*׆Ќcۊ* OzL|T ;Dž\ۖ[\v4T$ꄭ-+;m^݇A&ݵA?Dkzd݊',q<'' J#[T'阄LMD`D<\v v$4P[2.2jc@6x]hj֝aOx ighhJXJx-N-=`4TM ҄'Aq!lY>mR6i_'HP ĪlyY/-W\x(L݌ޞsRT/q|2x 6tt0+C@˙Ĵ^;QYbyGgX(Mݹ$(dCJƉj)CEz٤kVn8,b;)*Д(ɡ d򻡂馩rR&:rMFU[و1jg6FySu 5,|07Ҽ/"I ^TNClxMBΙzByCX7GvJյdD3: OFMtKM%Сj'`¤-r:g<'cf!;`'UR-BU<6v˪e? F!)zʤhR,<*,=n*M5^\/qj-U>Tƹ%R$ur}z4F*Nv"4UHѡˈR9nElE N&e90b"ph Qt.'}cܿN_|$~jOaXƟM^LuOG}D-jܘPU|m (VU8 (H@^ICê<>6LJZxy0۞y{oA⯝s3.z-di& \\s"Zæh<Ԓ~oBg10W\__-h.Hhm6;8dY"X3Cd}:E@}D S"YhD k'<gb/rKG$VثZ<Ն,]@FH M|YY.P~hb?֐m@u@Guɐ<h+|buϾVnr9̋g }3rq fIL2grBj%"SؼN1'p̔|NnspoY~G'Tx3wq#9x$$;>op̵'E ~#+@)@}OY4< j'SHIڒBa΂ձ)2C-]0nhO,*%Jy.;!"ȁ5g|ּ^2ز7/Xier+bY6A)l &V,ӍGIcH S-5{! 1kU !Mp5F+-vKZK [6oZa(ύӜ6*xDҼex޽ҋF2i& •rYwW0VTi`]81"0"ӟpljޞ[S 5GBs& {f47)JgpQ 4aAZBuӐ5BH.b(m)r7l(#Qtc }:u 800p;C2 .BItY <8! n1\xKѫmWՐUdc.gGbo2~5 cr L[%iV{)6cZt&( )^L5~>1 @O$?ɣt=ƎPCnM~96WU+>w[IGf4gGQ‹:%a6 7h5x5E{COgKVٲ7߻6yu?/0d"iV~ |o!Y̖sbF/-k~y8y*paaN pȋ-Qi}F;ӱ]VDwwɰ(y 95Tmw;2x:j7 $%{MFJ0";la<4Dwp_`m ooQ!A'F $ Ԓ}'jrsA(xAw6(櫼8Qwar͌9Ott9w7.t>ؗH RU쑶ZVlevs0)>ك\[[5UDF/L ۚG9Qa%&6p_Ȋ0r7G{RkvaN7M n]߭RL e0~ZƱx*{_[:"Ed>GvC{@oڢ&5 +U(DZ+I=ֻ^M OAH s̠6;j$ǡD}ERx:;7+7c'vp:ָ&$Aʕ\38ܱć4v! 3!J!@}xUpEZbϱo$)Y.oÑx?A=OCk %'ˍ_B ofZzKA7ݙԦ۽#h/QxK7tN|˖὇o}Ce {*,2v-Ibdr)4/+4v$xmyvW?ΗP\7MGs UG[w Rqb/!bkg(7VY Q@OEg{208fmM}怲=0kNv%Ð$s".l,0ZdFPFEJ.,iv=g-WT~'CX^m }objE_WfŔx-S'?jH6p!_2E85ul,' ,Ѱ gjMdF5z(>(؂(aWAD #x^\(җDH%bwX$ҭklq(K}Yy} p:ۂ#@eZ^-!J[5ϹM҈!jp6>vfȞWC맧k z3lm7ps)tsDӉ9D_x|Su2"t8ߜ>T,B4iw)JT(~. [-? Uqt[LUGCL_slq=I w$$>q/}(t@{ekBʡ-ynQӷw̘*t'l Q|g5PcPJSdu:nH>X"tz4Rds'B^A6k讐:f'b`}q);m :Ź6:ڌky[ ^mvTt)FZa0cS[2 dAi1fjx7(~&hZ(r4*oS鍢/ÏmS^ Hҹ3- & ż/މLBXǫ &DJD(gǯGȋ?~lYEܬшy}'8gbc[(+@LF;z!3:INh̶XAȿ 8@ 2@y3{} ;eBxiseaZ=a]+TAB€2I^ d#Hq,HKAx gozz/Ob@<Xr-8 bwwJ5QmSx\뉘B rg!$ }EaMJ>/|Fq YnK7Pgp(~pSEtr,q:z=ypZWÅwaہm\nߣF% 'ܹO:l⌱n+X`vEUiaVy>"'hc4{\:z-B4LyQLXO/A.@.qe:"%c%p+sXo"2 "x1:{%Pg,7K*gA*%L~zCYg޲*p(85Z-wØD;BfI =]\Gk)&=WS(O%.SJd8a|t*!n'#H0OE9)}cH\P]0C4oBjWƠЗfe}t&,Ck Kއ{uH!u^lV bUY$c 6գyG?+W:a$Nh/Yҽ]b]],p*׮)s9&ڞ|`?lkj֞zGuŰO ̂4~Os `#m,.#KHiʰMku+4)ovE}ڰQ~s7.ZpJWWaˑ&Ib5ZֹiZ" &o#Qe!_[W~hrum$m0b)d[s7e6Kj N5n`ut/E *S &?NuF‚ǿgb+o5>hMWio[?[?5P9?۽ش#`ѿR :,,;=F=:ageese`t+?6GָZ`7b}53MsL771, ߪg_gm_]\9UXMg}Gޭ(4ǾCu+:vjJR MOAk&;PEEpFίW2#2x')Td~џп6Ȁxb=:[MWb!D 5'U)64GY:.ȵΰ{մ0!R ]q΂4T{$7HׂŖʌ]Nb-h h^ qQkIrZzvei $\ e @ ml ,\̊Ջ(tZ3uCO9OZ(AXRK_3f0dN"yk"BBib3Uᲁ}e\;+ S"ϴDekWJp#$xc; j3IPeDl 4: %||ooz(XZFpGpUdie N݈{!7G%2Fz(PːkqAsTmʺڔjS<2ɴ3BFJ;vDdR4h͔Uw.kk4e;QuiGhpdyJ6o6s!rf}"ypZ{kEJxcp/m#KJ!RWo@ߥuo!Gr If0f jªwG&MTwn&a΀{,݋"ҎmM63~|ӝ:**\D{1QJjjCmc;3VCWǴ2E(A[aUy&<ս;8j=ψX6 ^wm3F_)ΐgjdžXvTD>+Q3էŬ.#CSE̘/hA)Aw4tagͫd^Xj PzQGCG7zP,81`Nnf "D j J J6rr 4`:a~^B5~[|ܴ&xSnTa-鈂4Zv $1v>|)8W5lJz "hu3{D5Fȴfa/rtޑC; 쎊ee5x'snׇ.N:vK(N2opXRU5#˟6&e- a0ƜK](b^K[/)+$A쁣'֊| \Vil%"=aHU@퉝^cYf~a%E  Sԭ|M< :*袯E| I * Ti5kZ)pݟ׬84b:/*JHǵƏjH{Y~r}/;@_;vR,J-0Smx9?g^ {b_'YfWP!tn>8SwAz5'Ow;o_9\w6l1- oYaK*л Lmk-۵ rG{R,\Ͷl(9[zC SiUW4gih~+SZ/?4D3i̥3üW]k ;1oCiPKJ楉iTHnhXG]ir}mULxZ sA)M D2:Uкz>KȊB:dPz!MDGVT qUK%ĝ ,؄S`/.a 68 iV=Ƙxlb%/-1W}I+0(VLdDhSGםXzwGpz M7 :FБ&q(SР7#gצTY{{YaHr8YQ*JV Q*oJgnRC풙?m}Lrrδ::W]䕤ro9&-Hi RϲcQ\XM|CxWO5ٽ''_^ RPm_'_XTNeg+S{E_ P+5gvÊBmk1<hml =D >s]w =ᦄUQhtW{ZLT jA=Pr 5Hw/1Ǻ(SBD([Ut{ k!Jy`;+i{C )RG }Gm) j◔iwCqc|NЇi| ZRok)/"Iai)7H̚s$2ʚyNed/YN)9 dȉU)[,qpPbfk629|_;gHp \41I{ށm7h9tXT[|I i~b+,H;i+qi[ӎvĀcf}ý3H5'EKaS.D%Ψu^n.gSgR~zPsƮoj-dk EX :8b$ܰA~ۦ[R^]\ %K Zzѣ->;~M~tj @r2RHM H.rVЖ"!苾M4\, δV7-8-MFuȾm ύu[K-R3x8d ʎ<*e`A zm!i)ay6,>\.EG0+S*:"'l; ȥ=w4ӥG9S#%!rlkKȀQx+zxL|V7 Mzb PLMPW7)| ()4x8;m+1/=Hb3n",v} wK?k1뒩md"ULꡤ#``RtE1NBӥ"-+P }*rɅ`cy0XZ/mX`?D-Rd ۄk16YBNk뵼}1gJԈrJJsy/G˸G&",Pp8GKL"˭ۣ@6^{ã/1ds2m%D$dC&ogȤƳk(Q+] Qe,P!1MWo#${sok݋ͯOb2KCi&&';.`}i`DؕqMQdruerzb?vw叨j {W%VVX{ڍic/(wEP%u7=cV?=Gj_Mhc+;Մpo?6hHY{UuwSW%v__/e/~/('yFoOj)PXU#kU'=1ɺєE/Via""f{ش+YJ.mO֣OMYb+\~; Ovx|VrZI*uB& ͐pQ!(+9')M#YJuM Y)pܕ@=ÜKG?Jt-.Ҋ\ZxE%y'PmD¥ⷒxJvGQ5|TaS {F~=7 =X/g(FzHky_h VwՔt^9$D.Ӊ+ +YӷSKsȠրÃ{V+eε?Mo74(/,ǭv|N9˹Yg?zn*gD\ N/>i|lYS9܈#&l4A$u.P >= nOiks4n9IaghijklmnopqsB`'"iBqg^le { AJv#uNG")rI;=.=a"<o2H_ܝ'*~E[ "4>-)Q O:`*\Fv.s)aW[5ߏKWR柺DpY,\: t(U(>D=sZHCM4PzsbHl*_^$+Al]ȥ/yz1%>k[":ٱ!؍nFNW 2 Xax#1±l,֧hNDj7@bd8F 윏"1e`Qjx1;!6(5}MYTjpZ3)ebs @Tĭ6$XI~o>$P#g~ E I?[ĉH'U(.&) ر' u3N 2cbNY8Yn~ކ/cگO%QEE)]J_O >xm t£𛹦AK Z.'f )&~d0O7BHW䳭Dv9U^\}hC>W /bKnoN<"EطqJdsIHIX:xh~btT `bZh *g 5eR hWƆ%͈mk8kՈRYď 9o*GyFeQ"Ⱦ pF 1g3z-f)F xk/ Ps[iY.B2QuXK8xRo3 {D]j˟#y0X_FʿŅ`\j8N̾ +Bi?g)J'gYں./ 0woYXc%Jd1 tEq,K*4_M'ECH]G_u "F@? cqR!6!1|YVpb-i#{j6CIۯJshˉф9h(kr`aAɈpDE +Fy(@ H [$J[}9TV*ΩѴ6w)Yk#aduA 7`>!$b-|"&(^D|`biȺLU{P>V{W#T^i%!嵨i᳆uKzXS* ʑVhX5ooHNTxN!JC/ۢҸ_ΛGPض0u(5JL 93>{}e LSOH½ۃMa‚ ^9o 69llti%Yef|chʲ8DB"(<zQ#\#1PF?߂+fP{+c 1> \PsCe)xv;58kq_A ٙ 6lP.Q*ͫ;\Sp߶Pk+Ev!b/g%+P`B_48sMNXC=U8 'X2kPGc=ǧ3gV/FD_Yss#>zIW+M 6 05=_O?,log>tH ]Ƕf<{RJ9W]g…  4rhrǶӋjnIK3 Z]u+wq!cE^tIN?⢙ +(*ʢ!` aff*ZL+TkKM6ֵ8K,I|2ww{wwp씒' rі3Ѱ~h|.,[~Ѫ,r1V2%ءN嶮j"~̨x6bY^9 @<(}|$]aW a2wn準JND q}MW9;D'dE N(6ɷa}n(sW #}i\F ~{q`qpX~H'+"O— xIק 7±dm.wCf:JeLLF#YX2У}NڷX ]GMĝuZ>9OlY]@ MǕe_1㨼X'^d_yNW'Nm/XA891y(]I|߻-Zq;]GM:}2gC~y攅m=5P~WM͠y"wVvWBFhlsG]v(= mHoyӢY"q)B7[r\K['棞 ? D>ؽ-Ե8E1qcR~nQGSwwK^KNZq(s-VINʻo7{z4ߘmI2JZ}=]NWtnVer|O͈:'*36,빘_$ZhbM6(e唌^F r4QE9p )@1y}DCuZQgDG'%, g.۶ /b+Rr̆SfNT4'{ƹt$q*q}:}^أϺSϿyӾZy%n"w(C?R䠹R7{Lhss_CRoydh:򷍚s-}+#NE+/V/)l|V5'^XK\݇.&==z z g@(wգqo)z-0Ǔ-pŶzJ{%jZfCWkx9}eF}}l)Q~a/7/\ƣ\664BqOX.Wޜ=iałL_Tl9j)M_2m$>t^Za8?;KD&Ƀ}˹QwOUr ݰ:{o=oT>ya!aɣʹM󫤴OMHtݤ!,"SW|`3\f${т~<ͱwcLۗv1wRqYrH^o<[ bDW_c P]*'@'dED;_iw7=N)ewM7Aa wgd]GGv+9#?'S7u0o=Skb5 ;Q+RN$J,}JۤEf}> =Q"*W&CܴsGW3ۙ7b׼s|O^NSFe)ya> R y Z޹ń:v(x#~[GrObڗ.9r\+K縸RUrz$ϢC*t]#S@<\\fń da gDʍGiݩK^1RUs9*=z˒⫠I\3Nǟjt/,nsU.9Ǜ>\O>.rm^ֽ1 sW.>ƿG:1DZGK[L7=oBJF~50 O"^~?B˔]ޡ_nDy;wK莨ց7s'AKy\wi-G؊򎏙t ح-?=[G$94Xμ(}p۶ ؗ)wU{*8GB%^==j/ykkJ( ?Cʲ.JSá7e#Z[<7iˁ;𒙔e&aE!KR4WחS>(.BǗ/|}eK_#طmJR)7Gc#ةFnZe"lv67'Gy.^-*: fR\_4FtE8TR$E/.V"gR6}9rj''1x竧zqH=‘iSJwmZ,xOc7;=YEҳrѺt2gU jX8'(jGIMִdѾx)vQY f;enԓpXܔlvAG}f_ B@o8p |Hpu! vQ*8 nh'Ђ8 |3w^{@D.x<HC >68{x@= p  p^@; [v4t=@8a׀/hhUD;L8 hÅ9gAHzA8{ɇɀ8d}O༜j8t0!e!y w3tFQ݀ 8&>N|:Sڀ Rwڀـ"pB$EXy~;j瀩0Ώg@ډ1gTn#Y+'ަDخ\`0OHkb@t2Br^|h ʘlS,~+p}0d`1]Zn{pj>jt/ nqss搝\jEe1"YqF@:JWp<; 0wzߌ'!>pN't(|9v7p!<(N4' X;Є:~C|5OþOl܄?x^ ; } SI2CAN0_9O τn}Jzy5hxLK S|Lv$_pMbHmpIC <ȸ)Cr2Eh}̡u`<`@64@4`.> e Do A `ʨ> t=X2l8r֫.XΖ:eF\v?.ޥ;IK;.t-ȃ˝ dw@րH>R]v|Z?Xt ׫@v/ 6?`WM =B~ fƽlӒ͝[lv7fYw>l pN#8r;8nipOhB{6B|PPyӃೣ7P:q@OΟ~Ç}w4}a3xQW%<иnuHA'3 Oϝ}P ~|~|韠&?HAh{luۃ9Dslx><'fa3?e3<ۄ:+:+8<к[˄~O^|&' ) =u!WA8X'& {r)iN=*QqpCٟ:A޲AUҖ49j#~O‮? 8tDoD&`3Nnxs? ˀӟiiηCρwѧ<}a|`i?Btu,քsP~I@y!PژnMܐNT;`MO7wr5:;+$[%I RrEIBy  8Н3ۄ:w*XntݹWg,ދ(Ra\  $ =![&t:X`>`j;@<@x*/ )QlȗfD ➢]]dkdu%B5pKK>oѲ/5 iE3SR-hGHq ErdZ4HcVFҌj*ײFG*O#5%?Y=}H,_*,ЩB{5u9ir,ZP(20WL RߙոkXʕHPyCE07-ְV}V/}:,Idz9}DʭJ#B#~,u/dP~U$b{eǢ۫^Ḙ#Зeh!}T1ZGԒ:+Eu_0@Y, gR|EgցKbHKEcbF&+3Rh@+EtK6֟{EvqduȑE}D@#DZkزcJ#arұ,NtnV+ҥ&YTh\:M mCJM +UG%nz7Ȳh쮂\{JHCŋ$NɩZ".Y)st̩ӛeg)\J-R"Z7GUVVQ!IT .fOhڭ`vtlY5rV3fe}.6Lh>OrW{7rV9{]Sh30zvY͜3}kq{[cO6cQp֑QYlW V]~[}BFŌ}"љFt )_Zܚlg՚XE6FەHda]-:t-$ٷ+3>Hشk]3-)I$h:ոӪ2 5и-Xm+5| ʓMhз 9^Sl b7)Z:rԙ. $U}qWUUJ ['w()urN<>;BKǴS4Xh&&ssSӳyĢB .s<紵FQ 7fy-M}FrӆyFKWd+`> _xh'M7F|뗸pVdY(n4ex"9dl-IJiCEtwuT8R(#ifdef __STDC__ #pragma comment(exestr, "@(#) ims.h 26.1 95/07/19 ") #else #ident "@(#) ims.h 26.1 95/07/19 " #endif /* ** ident @(#) ims.h 1.27 1 10/10/94 13:08:00 ** ** sccs_id[] = {"@(#) 1.27 ims.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: ims.h ** ** PURPOSE: Intelligent Maintenance Subsystem Interface Declarations. ** ** DEPENDENCIES: ** ** o IMS hardware. ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1992 ** All rights reserved. ** *************************************************************************** */ /* *************************************************************************** ** Defines *************************************************************************** */ /* ** Remote console flags equates - configurable ims_remote_console */ #define KIN 1 #define KOUT 2 #define UIN 4 #define UOUT 8 #define EST_TIME 300 /* Estimated time required to shutdown system. */ #define DEL_TIME 1 /* Delay time after O/S is down before reset. */ #define LINE_FEED 0xa #define CARRIAGE_RET 0xd #define COMBO_STATUS_PORT 0x64 /* Mombo-combo chip status port. */ #define COMBO_STATUS_FULL 0x1 /* Keystrokes present on combo */ #define NUM_SYS_SLOTS 7 /* System slots in K2 */ #define IMS_WCCB_INDEX NUM_SYS_SLOTS /*Index into the watchdog counter control table for the IMS counter */ #define IMS_BASESLOTNUM 9 /* Base slot # */ /* ** IMS maximum log message size - Everything beyond will be truncated. */ #define IMS_MAX_LOG_MSG 1024 /* Max. log message size in chars.*/ /* ** IMS UNIX Driver Revisions */ #define IMS_DRIVER_REVISION "1.0" /* ** - Product id portion of eisa id from EISA Bridge Subsystem EISA id ** - If product id is 01 or 02 then we are running on a model 30/40. ** - If product id is 08 then K2 */ #define IMS_3040_PRODUCT_ID_01 1 #define IMS_3040_PRODUCT_ID_02 2 #define IMS_K2_PRODUCT_ID 8 #define IMS_MAX_DEVICES 1 /* Max. IMS hardware devices supported. */ #define IMS_SUBMIT_INTR 1 /* Writing any value will generate an interrupt. */ #define IMS_WATCHDOG_TIMEOUT HZ*30 /* 30 second timeout value. */ /* ** imshdr->status */ #define IMS_UNINITIALIZED 0 /* IMS is not ready to use. */ #define IMS_READY 1 /* IMS is ready for use. */ #define IMS_CRASHED 2 /* IMS has crashed. */ /* ** Interrupt vector, relative to the global "ivect" table for IMS ** */ #ifdef TEST #define IMS_INTERRUPT_VECTOR 20 /* IIOP used for IMS testing. */ #else #define IMS_INTERRUPT_VECTOR 16 /* Somehow this equates to IRQ0 of PIC 3*/ #endif #define IMS_INTR_PRI 5 #ifdef TEST #define IMS_DUAL_PORT_ADDR 0xfe018000 /* Dual port memory address */ #else #define IMS_DUAL_PORT_ADDR 0xfdf00000 /* Dual port memory address */ #endif #define IMS_MAX_INTR 24 /* Maximum number of interrupts. 3 pics */ /* ** Allocation of dual port mrp's. */ #define IMS_DP_PHYSICAL 1 /* Physical d.s. in dual-port. */ /* ** IMS IOCTL command parameter values. */ #define IMS_IOCTL_READ_STAT 0x1 /* Retrieve IMS driver statistics. */ #define IMS_IOCTL_READ_HDR 0x2 /* Retrieve IMS driver header d.s. */ #define IMS_IOCTL_IS_K2 0x3 /* Are we running on a K2 machine */ #define IMS_IOCTL_IS_IMS 0x4 /* Is the IMS present in the system */ #define IMS_IOCTL_MRP_HDR_REQ 0x5 /* Setup a MRP_HDR request */ #define IMS_IOCTL_LOG_MSG 0x6 /* Log message */ #define IMS_IOCTL_READ 0x7/* Post a read for log messages, misc. */ /* ** Usage values associated with returned data of IMS_IOCTL_READ */ #define IMS_LOG_MSG 1/* Returned data is log message. */ /* ** tbd kec for test purposes */ #define IMS_IOCTL_DEV 0x8a #define IMS_IOCTL_MPIC 0x8c #define IMS_IOCTL_RC 0x8d #define IMS_IOCTL_NMI 0x8f /* ** mrp->status values. */ #define IMS_MRP_HDR_OK 0 /* Request terminated without error. */ #define IMS_SG_ERROR 7 /* Scatter/gather setup error. */ #define IMS_RTYPE_ERROR 8 /* MRP_HDR request type error. */ #define IMS_NO_DEVICE 9 /* Device is not available. */ #define IMS_LIMIT_TIMED_OUT 10 /* Request time limit expired. */ /* ** MPIC input interrupt pin definitions */ #define SYS_ATTN 7 #define SYS_POWER_FAIL 8 #define SYS_TIMEOUT 9 #define SYS_ERROR 10 #define SYS_EISA_PERR 11 #define SYS_IMS_ATTN 12 #define SYS_INT 13 #define SYS_NMI 14 #define LOC_RESET_CPU 15 /* Local MPIC spurious interrupt */ #define SPURIOUS 16 /* *************************************************************************** ** Macros *************************************************************************** */ /* ** ** WARNING: AT NO TIME MAY QCB->qcbin be used as the 2nd parameter!!!! */ #define IMS_QCB_NEXT_MRP_HDR(qcb, new) \ { \ new = (qcb)->qcbin + 1; \ if ((new) >= (qcb)->qcblba) \ new = (qcb)->qcbfba; \ } /* ** ** WARNING: AT NO TIME MAY QCB->qcbin be used as the 2nd parameter!!!! */ #define IMS_QCB_NEXT_CHAR_ADDR(qcb, new) \ { \ new = (CHAR_QCB *)((qcb)->qcbin + 1); \ if ((new) >= (CHAR_QCB *)((qcb)->qcblba)) \ new = (CHAR_QCB *)((qcb)->qcbfba); \ } /* ** Convert a physical address within the IMS dual-port RAM to a virtual ** kernel address. ** ** vbase - virtual base to use ** base - physical dual-port RAM base address ** addr - physical address to convert */ #define PHYSTOVIRT(vbase,base,addr) ((u_int) ((u_int) addr - (u_int) base) \ + (u_int) vbase) /* ** Convert a virtual address within the IMS dual-port RAM to a physical ** kernel address. ** ** vbase - virtual base to use ** base - physical dual-port RAM base address ** addr - virtual address to convert */ #define VIRTTOPHYS(vbase,base,addr) ((u_int) ((u_int) addr - (u_int) vbase) \ + (u_int) base) #define IMS_QCB_FULL(qcb, new) ((void *)((qcb)->qcbout) == (void *) new) /* ** Remove physical requests from the head of the queue. */ #define IMS_DEQUEUE_REQ(ims, req) \ { \ req = (ims)->queued_reqs; \ (ims)->queued_reqs = (req)->req_forw; \ (req)->req_forw = (APPL_REQ *) NULL; \ \ if ((ims)->queued_reqs == (APPL_REQ *) NULL) \ (ims)->queued_reqs_tail = (APPL_REQ *) NULL;\ (ims)->stats.queued_reqs--; \ } /* ** Queue a physical request waiting for an MRP_HDR d.s. */ #define IMS_QUEUE_REQ(tims, req) \ { \ if ((req)->req_forw != (APPL_REQ *) NULL) \ cmn_err(CE_PANIC, "ims: req_forw NOT NULL.");\ if ((tims)->queued_reqs == (APPL_REQ *) NULL) \ (tims)->queued_reqs = req; \ else \ (tims)->queued_reqs_tail->req_forw = req; \ \ (tims)->queued_reqs_tail = req; \ (tims)->stats.queued_reqs++; \ } /* ** Convert millisecond value to a clock tick count for the ** purpose of calling kernel timeout() routine. */ #define MS_TO_TICKS(ms) \ ((((u_int)ms) +((1000/(u_int)Hz)-1)) / (1000/(u_int)Hz)) /* *************************************************************************** ** Typedefs *************************************************************************** */ typedef int (*FNCT_PTR)(); /* Generic function ptr. */ /* ** Used to configure re-direction table on I/O MPIC */ typedef struct { unchar on_or_off; /* Usage - If 0 dont modify re-direction table entry for this Input interrupt pin. If 1 - then modify the I/O MPIC re-direction table entry to receive interrupt*/ unchar reg_select; /* I/O register select value (bits 7:0) for this re-direction table entry. */ ushort vector; /* Interrupt vector associated with this input interrupt pin on the I/O MPIC */ ulong routine; /* Interrupt routine to process this interrupt.*/ } CONFIG_MPIC; /* ** "Interrupt Descriptor Table" entry format. ** This is used to update the idt table for mpic interrupts. ** See ims_init_idt. */ typedef struct idt_entry { ushort proc_low; /* Lower 16 bits of interrupt procedure address. */ ushort seg_select; /* Segment selector for destination code segment. */ ushort control; /* Privilege level, seg. present and interrupt gate*/ ushort proc_high; /* Upper 16 bits of interrupt procedure address. */ } IDT_ENTRY; typedef struct log_ctrl { unchar *ip; /* Circular log buffer insert}~ pointer */ unchar *rp; /* Circular log buffer remove pointer */ ulong m_count; /* Circular log buffer msg. count. */ } LOG_CTRL; typedef struct { MRP_HDR **qcbfba; /* IMS queue's lower address. */ MRP_HDR **qcblba; /* IMS queue's upper address. */ MRP_HDR **qcbin; /* IMS next mrp to use. */ MRP_HDR **qcbout; /* IMS mrp to be executed. */ } QCB; /* ** WARNING: This error log crap has to be packed. */ #pragma pack(1) /***************************************************************************** ** ** IMS error log structure ** *****************************************************************************/ #define IMS_MAX_ERRLOG_SIZE 256 typedef struct { char tm_sec; /* Seconds after the minute. */ char tm_min; /* Minutes after the hour. */ char tm_hour; /* Hours after midnight. */ char tm_mday; /* Day of the month. */ char tm_mon; /* Month of the year. */ char tm_year; /* Years since 1900. */ char tm_wday; /* Days since Sunday. */ } IMS_TM_T; /* ** Severity levels for the error messages. */ #define SEV_OFFSET 10 #define SEV_INFORMATIONAL (0x0 + SEV_OFFSET) #define SEV_WARNING (0x1 + SEV_OFFSET) #define SEV_SERIOUS (0x2 + SEV_OFFSET) #define SEV_FATAL (0x3 + SEV_OFFSET) typedef struct { IMS_TM_T timestamp; unchar feature_id; unchar module_id; ushort line_num; /* Line number. */ ushort error_code; unchar severity; /* Alarm severity. */ unchar hex_display; /* Module hex display. */ ulong seq_num; /* Sequence number. */ } IMS_EXCEPTION_T; typedef struct ims_errlog_t { struct ims_errlog_hdr { unchar dirty_flag; #define IMS_ERRLOG_FLAG_FREE 0 #define IMS_ERRLOG_FLAG_USED 1 unchar data_type; #define IMS_ERRLOG_DATA_RAW 0 ushort data_offset; ushort data_length; ushort text_offset; ushort errlog_size; ulong reserved2; IMS_EXCEPTION_T exception; } errlog_hdr; char data[IMS_MAX_ERRLOG_SIZE - sizeof(struct ims_errlog_hdr)]; } IMS_ERRLOG; #pragma pack() /* ** Error log QCB structure */ typedef struct { IMS_ERRLOG **qcbfba; /* IMS queue's lower address. */ IMS_ERRLOG **qcblba; /* IMS queue's upper address. */ IMS_ERRLOG **qcbin; /* IMS next mrp to use. */ IMS_ERRLOG **qcbout; /* IMS mrp to be executed. */ } ERR_LOG_QCB; /* ** Queueing structure for remote console raw character input and ** output. */ typedef struct { char *qcbfba; /* IMS char. input queue's lower address. */ char *qcblba; /* IMS char. input queue's upper address. */ char *qcbin; /* IMS char. input next mrp to use. */ char *qcbout; /* IMS char. input mrp to be executed. */ } CHAR_QCB; /****************************************************************************** ** ** Structure: Watchdog Counter Control Block (WCCB) ** ** Purpose: The WCCB provides a method of monitoring "I'm Alive" counters ** associated with each system bus module. The WCCB is pointed at ** by imshdr.ims_wccb. Each system bus slot ** has a COUNTER pointer. The COUNTER pointer is either ** null or points to an 8-byte structure containing a 32-bit counter ** and a maximum timeout period. If the counter is not incremented ** at least once within the max timout period, the IMS generates ** an ALERT condition. If the COUNTER pointer is null, the IMS ** watchdog task does not monitor the associated system module. ** ** It is the responsibility of the IMS to initialize the address ** imshdr.ims_wccb. It is the responsibility of the UNIX IMS ** host device driver to initialize each system bus slot COUNTER ** pointer or leave it NULL if no processor resides in that ** system bus slot. It is the responsibility of the IMS firmware ** to initialize the system bus slot COUNTER pointer associated ** with the IMS device. ** ******************************************************************************/ typedef struct wccb_t { paddr_t cntptrs[NUM_SYS_SLOTS+1]; /* The +1 provides a counter for the IMS that the HDD can monitor*/ } WCCB; typedef struct wd_ia_t { ulong wccb_cnt; /* 32-bit "I'm alive" counter */ ulong wccb_max_ud; /* Max counter update period (milli-sec) */ } WCNTB; /* ** The IMS header data structure. This structure is read by the ** unix IMS driver to interact with the IMS firmware. The structure is ** built by the IMS firmware and resides in IMS dual port memory. ** ** NOTE: All the address values are physical addresses. */ typedef struct imshdr { ulong ims_dplen; /* Dual-port RAM size in bytes. */ ulong ims_fw_rev; /* IMS firmware revision. */ ulong ims_cb_dep; /* Max. MRP_HDR queue depth. */ ulong ims_sg_max; /* Max. scatter/gather descriptors. */ ulong ims_status; /* IMS status. */ QCB *ims_s_qcb; /* IMS submimsion queue control block. */ QCB *ims_c_qcb; /* IMS completion queue control block. */ unchar *ims_scb; /* IMS statistics. */ unchar *ims_ccb; /* IMS crash data. */ paddr_t ims_phys_wccb; /* Physical address of wdog control blk. */ unchar *ims_s_int; /* IMS submimsion IRQ address. */ unchar *ims_c_int; /* IMS completion IRQ address. */ ulong ims_free_len; /* IMS length of free memory area */ paddr_t ims_free_addr; /* IMS pointer to IMS free memory area. */ unchar *ims_bios_comm_p; /* IMS pointer to BIOS comm. area. */ char ims_dstvalid; /* imsbiosdst ptr valid for next 100 mills */ char ims_rsv1[3]; /* Reserved. */ unchar *ims_bios_dst_p; /* BIOS device status table. physical addr */ CHAR_QCB *ims_rc_inp; /* Remote console data. IMS to OS queue. */ CHAR_QCB *ims_rc_out; /* Remote console data. OS to IMS queue. */ ERR_LOG_QCB *ims_error_log; /* IMS error log address */ char ims_mms_errlog_sync;/* MMS error log synchronization. */ char ims_rsv2[3]; /* Reserved */ } IMSHDR; /* ** IMS driver statistics per device. */ typedef struct { ulong interrupts; /* Completion interrupt count. */ ulong finished_reqs; /* Completed I/O requests. */ ulong start_reqs; /* Initiated I/O requests. */ ulong queued_reqs; /* Waiting I/O requests. */ ulong queue_depth; /* Outstanding I/O requests. */ ulong max_queue_depth; /* Greatest amount of I/O requests. */ ulong rc_out_chars_lost; /* Remote output chars lost occurrences. */ ulong rc_inp_chars_lost; /* Remote input chars lost occurrences. */ ulong sbe_ucount[4][2]; /* Single bit errors, upper 64. Indexed by memory bank (0-3), jnum position (0,1) */ ulong sbe_lcount[4][2]; /* Single bit errors, lower 64. Indexed by memory bank (0-3), jnum position (0,1) */ ulong dbe_ucount[4][2]; /* Double bit errors, upper 64. Indexed by memory bank (0-3), jnum position (0,1) */ ulong dbe_lcount[4][2]; /* Double bit errors, lower 64. Indexed by memory bank (0-3), jnum position (0,1) */ ulong mbe_ucount[4][2]; /* Multi bit errors, upper 64. Indexed by memory bank (0-3), jnum position (0,1) */ ulong mbe_lcount[4][2]; /* Multi bit errors, lower 64. Indexed by memory bank (0-3), jnum position (0,1) */ } IMS_DEVICE_STATS; /* ** IMS device table entry. */ typedef struct ims_device { int flag; /* Current state of device. */ int ivector; /* Interrupt vector. */ int pages; /* The number of memory mapped pages. */ paddr_t dp_ram; /* Physical address of dual port ram. */ IMSHDR *hdr; /* Virtual address of dual port ram. */ MRP_HDR *free_mrps; /* Current pool of available MRP_HDRs. */ MRP_HDR *free_mrps_tail; /* Tail ptr of available MRP_HDRs. */ MRP_HDR *active_mrp_hd; /* Head of active MRP_HDRs. */ MRP_HDR *active_mrp_tail; /* Tail of active MRP_HDRs. */ MRP_HDR *queued_mrp_hd; /* Head of queued MRP_HDRs. */ MRP_HDR *queued_mrp_tail; /* Tail of queued MRP_HDRs. */ IMS_DEVICE_STATS stats; /* Device specific diagnostic statistics. */ WCCB *virt_wccb; /* Virtual address of watchdog counter control block */ WCNTB *wd_ia; /* Virtual addr of CPU "I am alive" counters*/ struct cblock *rc_input; /* Queued remote console input . */ MRP_HDR *completed_mrps;/* Completed daemon requests. */ } IMS_DEVICE; #define TC_CTLOCK(tp) (clockbtty(&(tp)->t_cilock)) .o..Space.cDriver.o.ZRcSystemMaster NodeDriver.o#ident "@(#) space.c 26.2 95/07/19 " /* * Copyright (C) The Santa Cruz Operation, 1994-1995. * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /* ** ident @(#) @(#) space.c.ims 1.33 1 5/24/95 11:28:07 ** ** sccs_id[] = {"@(#) 1.33 space.c.ims "} */ /* *************************************************************************** ** ** MODULE NAME: space.c.ims ** ** PURPOSE: IMS device driver configurables. ** ** DEPENDENCIES: ** ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** System Include Files *************************************************************************** */ #include "sys/param.h" #include "sys/pic.h" #include "sys/types.h" #include "sys/sysmacros.h" #include "sys/cmn_err.h" #include "sys/sysinfo.h" /* *************************************************************************** ** Module Related Include Files *************************************************************************** */ #include "sys/ims_mrp.h" #include "sys/ims.h" #include "config.h" #include "sys/triccs.h" #ifdef TPF_0 #include "sys/trimpic.h" #include "sys/tpf.h" #include "sys/ci/cidefs.h" #endif /* *************************************************************************** ** Defines *************************************************************************** */ #define IMS_DEBUG_MSG 0 /* Usage: 0 Turn off debug messages. 1 Turn on debug messages. */ #define IMS_NMI 1 /* Usage: 0 Driver NMI processiong off 1 Driver NMI processing on */ #define IMS_MPIC_REDIRECTION 1 /* Usage: 0 I/O MPIC re-direction off. 1 I/O MPIC re-direction on. */ /* REMOTE CONSOLE FLAGS */ #define IMS_REMOTE_CON_KIN 1 /* Bit 0 Usage: 0 Kernel input processing off. 1 Kernel input processing on. */ #define IMS_REMOTE_CON_KOUT 2 /* Bit 1 Usage: 0 Kernel output processing off. 1 Remote console processing on. */ #define IMS_REMOTE_CON_UIN 4 /* Bit 2 Usage: 0 User mode input processing off. 1 User mode input processing on. */ #define IMS_REMOTE_CON_UOUT 8 /* Bit 3 Usage: 0 User mode out. processing off. 1 User mode output processing on. */ #define IMS_MIN 60000 /* Timeout of 1 minute in Hertz. */ #define IMS_TUNE_MRPS 5 /* Tunable number of mrp's data sets */ #define IMS_CPU_UPDATE_RATE 2000 /* Time in milliseconds at which the master CPU's watchdog counter will be updated by an IMS driver timeout function. */ #define IMS_CPU_DEAD_TIMEOUT 10000 /* Time in milliseconds during which the UNIX O/S must update a CPU I'm alive counter before the IMS considers the CPU deceased!!! */ /* ** Log buffer size */ #define IMS_LOG_SIZE 4096 /* Log buffer size */ /* *************************************************************************** ** Typedefs *************************************************************************** */ /* *************************************************************************** ** Externals **************************************************************************** */ extern void tri_mpic_int_7(); /* Interrupts originating from the local I/O MPIC that this driver is to detect. These interrupt routine addresses are added via "add_intr_handler". The re-direction table associated with the I/O MPIC on the base processor is modified to cause these interrupts, if configured to do so. */ extern void tri_mpic_int_8(); extern void tri_mpic_int_9(); extern void tri_mpic_int_10(); extern void tri_mpic_int_11(); extern void tri_mpic_int_12(); extern void tri_mpic_int_13(); extern void tri_mpic_int_14(); extern void tri_mpic_int_15(); #ifdef TPF_0 extern struct tpfproc tpfmap[]; #endif extern struct sysinfo sysinfo; /* Kernel counters and such */ /* *************************************************************************** ** Global Storage *************************************************************************** */ /* ** I/O MPIC redirection table configuration control ** This table dictates which Interrupt inputs on the I/O MPIC will ** actually cause an interrupt to the UNIX kernel. ** Each CONFIG_MPIC_IMS entry in the table controls whether the redirection ** table entry associated with that Interrupt input pin is modified ** so that UNIX receives the interrupt. ** ** Two tables exist: One to be used when the IMS is present in the ** system and one when the IMS is not present. ** ** Each entry contains 4 things, the first being usage: ** 0 - Dont modify the re-direction table entry for this input ** interrupt pin. ** 1 - Modify the re-direction table entry. ** ** The second is the I/O register select value (bits (7:0) for ** this redirection table entry. ** ** The third thing is the UNIX vector to be used for this ** interrupt. We start with vector 143 and work backwards ** with each succeeding entry. Vector 143 is the last valid ** vector in the idt. ** ** The last thing is the interrupt routine to process this interrupt. ** */ #define IMS_FIRST_PIN_OFFSET 7 int ims_first_pin_offset = IMS_FIRST_PIN_OFFSET; CONFIG_MPIC config_mpic_ims[] = { {(unchar)1, (unchar)0x1e, (ushort)PIC_VECTBASE + 143, (ulong)tri_mpic_int_7}, /* SYS_ATTN pin 7 */ {(unchar)1, (unchar)0x20, (ushort)PIC_VECTBASE + 142, (ulong)tri_mpic_int_8}, /* SYS_POWER_FAIL pin 8 */ {(unchar)0, (unchar)0x22, (ushort)PIC_VECTBASE + 141, (ulong)tri_mpic_int_9}, /* SYS_TIMEOUT pin 9 */ {(unchar)1, (unchar)0x24, (ushort)PIC_VECTBASE + 140, (ulong)tri_mpic_int_10}, /* SYS_ERROR pin 10 */ {(unchar)1, (unchar)0x26, (ushort)PIC_VECTBASE + 139, (ulong)tri_mpic_int_11}, /* SYS_EISA_PERR pin 11 */ /* ** Soft memory errors cause this */ {(unchar)0, (unchar)0x28, (ushort)PIC_VECTBASE + 138, (ulong)tri_mpic_int_12}, /* SYS_IMS_ATTN pin 12 */ /* ** NOTICE - Dont turn on SYS_INT as it occurs normally, kec. */ {(unchar)0, (unchar)0x2a, (ushort)PIC_VECTBASE + 137, (ulong)tri_mpic_int_13}, /* SYS_INT pin 13 */ /* ** NOTICE - Dont turn on SYS_NMI as it is set up by the bios */ {(unchar)0, (unchar)0x2c, (ushort)PIC_VECTBASE + 136, (ulong)tri_mpic_int_14}, /* SYS_NMI pin 14 */ {(unchar)1, (unchar)0x2e, (ushort)PIC_VECTBASE + 135, (ulong)tri_mpic_int_15}, /* LOC_RESET_CPU pin 15 */ }; #define CONFIG_MPIC_IMS_SIZE ((sizeof(config_mpic_ims)) / (sizeof(CONFIG_MPIC))) /* ** With NO IMS present - Get everything on SYS_IMS_ATTN */ CONFIG_MPIC config_mpic_noims[] = { {(unchar)1, (unchar)0x1e, (ushort) PIC_VECTBASE + 143, (ulong)tri_mpic_int_7}, /* SYS_ATTN pin 7 */ {(unchar)1, (unchar)0x20, (ushort) PIC_VECTBASE + 142, (ulong)tri_mpic_int_8}, /* SYS_POWER_FAIL pin 8 */ {(unchar)0, (unchar)0x22, (ushort) PIC_VECTBASE + 141, (ulong)tri_mpic_int_9}, /* SYS_TIMEOUT pin 9 */ {(unchar)1, (unchar)0x24, (ushort)PIC_VECTBASE + 140, (ulong)tri_mpic_int_10}, /* SYS_ERROR pin 10 */ {(unchar)1, (unchar)0x26, (ushort)PIC_VECTBASE + 139, (ulong)tri_mpic_int_11}, /* SYS_EISA_PERR pin 11 */ /* ** Soft memory errors cause this */ {(unchar)1, (unchar)0x28, (ushort)PIC_VECTBASE + 138, (ulong)tri_mpic_int_12}, /* SYS_IMS_ATTN pin 12 */ /* ** NOTICE - Dont turn on SYS_INT as it occurs normally, kec. */ {(unchar)0, (unchar)0x2a, (ushort)PIC_VECTBASE + 137, (ulong)tri_mpic_int_13}, /* SYS_INT pin 13 */ /* ** NOTICE - Dont turn on SYS_NMI as it is set up by the bios */ {(unchar)0, (unchar)0x2c, (ushort)PIC_VECTBASE + 136, (ulong)tri_mpic_int_14}, /* SYS_NMI pin 14 */ {(unchar)1, (unchar)0x2e, (ushort)PIC_VECTBASE + 135, (ulong)tri_mpic_int_15}, /* LOC_RESET_CPU pin 15 */ }; #define CONFIG_MPIC_NOIMS_SIZE ((sizeof(config_mpic_noims)) / (sizeof(CONFIG_MPIC))) /* ** Log buffer */ char tri_log_buf[IMS_LOG_SIZE]; /* Log message buffer */ int ims_log_size = IMS_LOG_SIZE; /* ** Driver device structure */ IMS_DEVICE ims_device[] = { /* ** IMS device 0. - NOTE: This structure is bigger than what ** is initialized because of IMS_DEVICE typedef */ {(int) 0, (int) 0, (int) 0, (paddr_t) IMS_DUAL_PORT_ADDR} }; /* *************************************************************************** ** Configuration information *************************************************************************** */ int ims_debug_msg = IMS_DEBUG_MSG; /* 1 then debug messages on. */ int ims_nmi = IMS_NMI; /* Usage: 0 Driver NMI processiong off 1 Driver NMI processing on */ int ims_mpic_redirection = IMS_MPIC_REDIRECTION; /* Usage: 0 I/O MPIC redirection off 1 I/O MPIC redirection on */ int ims_remote_console = IMS_REMOTE_CON_KIN | IMS_REMOTE_CON_KOUT | IMS_REMOTE_CON_UIN | IMS_REMOTE_CON_UOUT; int ims_tune_dpm = IMS_DP_PHYSICAL; /* Place some mrp d.s. in dual-port RAM */ int ims_tune_mrps = IMS_TUNE_MRPS; /* The number of physical MRP d.s. to allocate. */ int ims_intr_ipl = IMS_INTR_PRI; /* Interrupt Priority Level. */ int ims_cpu_dead_timeout = IMS_CPU_DEAD_TIMEOUT; /*ms till CPU considered dead by IMS */ int ims_cpu_update_rate = IMS_CPU_UPDATE_RATE; /* ms during which, master cpu in an MP environment will its "I'm alive counter updated. */ int config_mpic_ims_size = CONFIG_MPIC_IMS_SIZE; /* Size of mpic configuration table in CONFIG_MPIC entries. IMS is present */ int config_mpic_noims_size = CONFIG_MPIC_NOIMS_SIZE;/* Size of mpic configuration table in CONFIG_MPIC entries. IMS isnot present */ #ifdef TPF_0 /* *************************************************************************** ** ** FUNCTION NAME: ims_init_wccb (MULTIPROCESSOR VERSION) ** ** PURPOSE: To initialize the watchdog counter control block (WCCB) ** with the physical addresses of the "I'm alive" counters ** for each CPU configured in a multiprocessor environment. ** ** METHOD: ** ** o Utilize the structure "tpfmap" which has been built ** by the tpf driver and defines all processors in an MPX system. ** o For each processor defined, set up the physical address ** of the "I'm alive" counter associated with that processor ** in the WCCB (Watchdog counter control block). The WCCB ** is indexed by (slot-IMS_BASESLOTNUM). ** o Also initialize the GROSS timeout that the IMS is to use ** when determining if the CPU is dead or not. ** ** EXIT STATUS: ** ** o NONE. ** ** DEPENDENCIES: ** ** o TRICORD MPX software. ** ** REVISION HISTORY: ** FPR/CRN Date Author Description ** 08/01/92 K. Conner Initial release. ** *************************************************************************** */ void ims_init_wccb(ims) IMS_DEVICE *ims; /* (i) Pointer to device control */ { WCNTB *wd_ia; int slot; int i; if (ims_debug_msg) cmn_err(CE_CONT, "ims_init_wccb: MULTI processor system.\n"); for (i=0; i> 12; if (ims_debug_msg) cmn_err(CE_CONT, "ims_init_wccb: slot from tfpmap = %x.\n",slot); /* ** Set up physical address of I'm alive counter for this processor ** in the WCCB (Watchdog counter control block */ wd_ia = (WCNTB *) (ims->wd_ia + (slot - IMS_BASESLOTNUM)); if (ims_debug_msg) cmn_err(CE_CONT, "ims_init_wccb: virt addr of wd_ia = %x.\n",wd_ia); wd_ia->wccb_max_ud = ims_cpu_dead_timeout; ims->virt_wccb->cntptrs[slot - IMS_BASESLOTNUM] = VIRTTOPHYS(ims->hdr, ims->dp_ram, wd_ia); } } if (ims_debug_msg) cmn_err(CE_CONT, "ims_init_wccb: Exitting ims_init_wccb.\n"); } #else /* *************************************************************************** ** ** FUNCTION NAME: ims_init_wccb (UNIPROCESSOR VERSION) ** ** PURPOSE: To initialize the watchdog counter control block (WCCB) ** with the physical addresses of the "I'm alive" counter ** for this CPU. ** ** METHOD: ** ** o Read the slot value that this processor is running in. ** o Set up the physical address ** of the "I'm alive" counter associated with this processor ** in the WCCB (Watchdog counter control block). The WCCB ** is indexed by (slot-IMS_BASESLOTNUM).A ** o Also initialize the GROSS timeout that the IMS is to use ** when determining if the CPU is dead or not. ** ** EXIT STATUS: ** ** o NONE. ** ** DEPENDENCIES: ** ** o Cannot be TRICORD MPX software. ** ** REVISION HISTORY: ** FPR/CRN Date Author Description ** 08/01/92 K. Conner Initial release. ** *************************************************************************** */ void ims_init_wccb(ims) IMS_DEVICE *ims; /* (i) Pointer to device control */ { int slot; WCNTB *wd_ia; /* ** Find out what slot its in */ slot = inb(CCS_SLOT); slot = slot >> 4; /* Slot is in upper nibble of lower eight bits. */ if (ims_debug_msg) cmn_err(CE_CONT, "ims_init_wccb: UNI processor system, slot = %d\n",slot); /* ** Set up physical address of I'm alive counter for this processor ** in the WCCB (Watchdog counter control block */ wd_ia = (WCNTB *) (ims->wd_ia + (slot - IMS_BASESLOTNUM)); wd_ia->wccb_max_ud = ims_cpu_dead_timeout; ims->virt_wccb->cntptrs[slot - IMS_BASESLOTNUM] = VIRTTOPHYS(ims->hdr, ims->dp_ram, wd_ia); } #endif /*Multiprocessor*/ /* *************************************************************************** ** ** FUNCTION NAME: ims_check_for_debugger ** ** PURPOSE: To monitor characters incoming from the remote console ** looking for the string "scodb^x" and enter the ** kernel debugger. ** ** METHOD: ** ** o Always look for the indicated string. ** o If found call debugger. ** ** EXIT STATUS: ** ** o None ** ** DEPENDENCIES: ** ** K2 and IMS. ** ** REVISION HISTORY: ** FPR/CRN Date Author Description ** 10/01/92 K. Conner Initial release. ** *************************************************************************** */ void ims_check_for_debugger(inp_char) unchar inp_char; /* (i) Character received from remote console. */ { #ifdef SCODB_0 extern FNCT_PTR cdebugger; static int index = 0; /* Current index into Saved string. */ static unchar debug_string[6]; /* Saved debug string. "scodb(Ctrl x)" cause remote console to enter kernel debugger. */ if (index == 0) { if (inp_char == 's') { debug_string[index] = 's'; index++; } else index = 0; /* Reset index. */ } else if (index == 1) { if (inp_char == 'c') { debug_string[index] = 'c'; index++; } else index = 0; /* Reset index. */ } else if (index == 2) { if (inp_char == 'o') { debug_string[index] = 'o'; index++; } else index = 0; /* Reset index. */ } else if (index == 3) { if (inp_char == 'd') { debug_string[index] = 'd'; index++; } else index = 0; /* Reset index. */ } else if (index == 4) { if (inp_char == 'b') { debug_string[index] = 'b'; index++; } else index = 0; /* Reset index. */ } else if (index == 5) { if (inp_char == 0x18) /* Control x */ { debug_string[index] = 0x18; (void) cdebugger(0,0); index = 0; } else index = 0; /* Reset index. */ } #endif } #ifdef __STDC__ #pragma comment(exestr, "@(#) trimpic.h 26.1 95/06/26 ") #else #ident "@(#) trimpic.h 26.1 95/06/26 " #endif /* ** ident @(#) @(#) trimpic.h 1.8 1 5/16/95 14:41:30 ** ** sccs_id[] = {"@(#) 1.8 trimpic.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: trimpic.h ** ** PURPOSE: Tricord K2 MPIC equate file ** ** DEPENDENCIES: ** ** o None. ** ** ** Rev 1.2 5/13/92 EDA Initial Version ** ** ---- 5/14/92 MWC Converted for SCO use ** ** ---- 7/20/92 MWC Changed MPIC addresses ** Added structure definition for ** local mpics. ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990, 1991, 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** Defines *************************************************************************** */ /* ** ****************************************************************************** ** **--- IO & LOCAL MPIC EQUATES ** ***************************************************************************** ** */ #define CCS_MPIC_BASE 0x0fee00000 /* Memory Mapped CCS Local MPIC */ #define EBS_MPIC_BASE 0x0fec00000 /* Memory Mapped EBS IO MPIC */ #define CCS_IOMPIC_BASE 0x0fec20000 /* Memory Mapped CCS IO MPIC */ #define MPIC_IORS 0x000 /* MPIC IO Register select (r/w) */ #define MPIC_IOWR 0x010 /* MPIC IO Window Register (r/w) */ #define MPIC_ID 0x020 /* MPIC ID Register (r/w) */ #define MPIC_VERSION 0x030 /* Version Register (ro) */ #define MPIC_PRIVATE0 0x040 /* Private Register 0 (r/w) */ #define MPIC_PRIVATE1 0x050 /* Private Register 1 (r/w) */ #define MPIC_PRIVATE2 0x060 /* Private Register 2 (r/w) */ #define MPIC_PRIVATE3 0x070 /* Private Register 3 (r/w) */ #define MPIC_TPR 0x080 /* Task Priority Register (r/w) */ #define MPIC_APR 0x090 /* Arbitration Priority Register(ro) */ #define MPIC_PPR 0x0a0 /* Processor Priority Register (ro) */ #define MPIC_EOI_REG 0x0b0 /* EOI Register (r/w) */ #define MPIC_REMOTE_REG 0x0c0 /* Remote Register (ro) */ #define MPIC_LOG_DES_REG 0x0d0 /* Logical Destination Register (r/w) */ #define MPIC_DES_FMT_REG 0x0e0 /* Destination Format Register (r/w) */ #define MPIC_SP_VEC_REG 0x0f0 /* Spurious Vector Register (r/w) */ #define MPIC_ISR0 0x100 /* ISR (31:0) (ro) */ #define MPIC_ISR1 0x110 /* ISR (63:32) (ro) */ #define MPIC_ISR2 0x120 /* ISR (95:64) (ro) */ #define MPIC_ISR3 0x130 /* ISR (127:96) (ro) */ #define MPIC_ISR4 0x140 /* ISR (159:128) (ro) */ #define MPIC_ISR5 0x150 /* ISR (191:160) (ro) */ #define MPIC_ISR6 0x160 /* ISR (223:192) (ro) */ #define MPIC_ISR7 0x170 /* ISR (255:244) (ro) */ #define MPIC_TMR0 0x180 /* TMR (31:0) (ro) */ #define MPIC_TMR1 0x190 /* TMR (63:32) (ro) */ #define MPIC_TMR2 0x1a0 /* TMR (95:64) (ro) */ #define MPIC_TMR3 0x1b0 /* TMR (127:96) (ro) */ #define MPIC_TMR4 0x1c0 /* TMR (159:128) (ro) */ #define MPIC_TMR5 0x1d0 /* TMR (191:160) (ro) */ #define MPIC_TMR6 0x1e0 /* TMR (223:192) (ro) */ #define MPIC_TMR7 0x1f0 /* TMR (255:244) (ro) */ #define MPIC_IRR0 0x200 /* IRR (31:0) (ro) */ #define MPIC_IRR1 0x210 /* IRR (63:32) (ro) */ #define MPIC_IRR2 0x220 /* IRR (95:64) (ro) */ #define MPIC_IRR3 0x230 /* IRR (127:96) (ro) */ #define MPIC_IRR4 0x240 /* IRR (159:128) (ro) */ #define MPIC_IRR5 0x250 /* IRR (191:160) (ro) */ #define MPIC_IRR6 0x260 /* IRR (223:192) (ro) */ #define MPIC_IRR7 0x270 /* IRR (255:244) (ro) */ #define MPIC_ICR0 0x300 /* Interr. Cmd Register (31:0) (r/w) */ #define MPIC_ICR1 0x310 /* Interr. Cmd Register (63:32) (r/w) */ #define MPIC_LVT_TIME0 0x320 /* Local Vec. Tbl [timer 0] (r/w) */ #define MPIC_LVT_TIME1 0x330 /* Local Vec. Tbl [timer 1] (r/w) */ #define MPIC_LVT_TIME2 0x340 /* Local Vec. Tbl [timer 2] (r/w) */ #define MPIC_LVT_LI0 0x350 /* Local Vec. Tbl [local int 0] (r/w) */ #define MPIC_LVT_LI1 0x360 /* Local Vec. Tbl [local int 1] (r/w) */ #define MPIC_LVT_PE 0x370 /* Local Vec. Tbl [prty err] (r/w) */ #define MPIC_ICNTR0 0x380 /* Initial Count Register 0 (r/w) */ #define MPIC_CCNTR0 0x390 /* Current Count Register 0 (ro) */ #define MPIC_ICNTR1 0x3a0 /* Initial Count Register 1 (r/w) */ #define MPIC_CCNTR1 0x3b0 /* Current Count Register 1 (ro) */ #define MPIC_ICNTR2 0x3c0 /* Initial Count Register 2 (r/w) */ #define MPIC_CCNTR2 0x3d0 /* Current Count Register 2 (ro) */ #define MPIC_DCR 0x3e0 /* Divider Config. Register (r/w) */ /* ****************************************************************************** ** **--- MPIC SPURIOUS INTERRUPT VECTOR REGISTER MASKS AND MISC. EQUATES ** ***************************************************************************** ** ** D[31:18] - Reserved ** D[17] - MRU Enable ** 0:MRU disabled ** 1:MRU enabled ** D[16] - MRU Supported ** 0:MRU not supported ** 1:MRU supported ** D[15] - UNIT ENABLED ** 0:Unit disabled ** 1:Unit enabled ** D[7:0] - Spurious Vector ** */ #define MPIC_MRU_EN_MSK 0x00020000 /* MRU Enable Mask */ #define MPIC_MRU_SUP_MSK 0x00010000 /* MRU Supported Mask */ #define MPIC_UNIT_EN_MSK 0x00000100 /* UNIT ENABLED Mask */ #define MPIC_SPUR_VEC_MSK 0x000000ff /* Spurious Vector Mask */ #define CCS_SPURIOUS_INT 0x0000000f /* IRQ7 Spurious Vector */ /* ****************************************************************************** ** **--- MPIC LOCAL VECTOR TABLE MASKS AND MISC. EQUATES ** ***************************************************************************** ** ** D[31:20] - Reserved ** D[19:18] - Timer Base (Timer 0,1,2 Only) ** D[17] - Timer Mode (Timer 0,1,2 Only) ** D[16] - Mask ** D[15] - Trigger Mode (Local 0/1 Only) ** D[14] - Remote IRR (Local 0/1 Only) ** D[12] - Delivery Status ** D[10:8] - Delivery Mode (Local 0/1 Only) ** D[7:0] - Vector ** */ #define MPIC_TMR_BASE_MSK 0x000c0000 /* Timer Base Mask */ #define MPIC_TMR_MODE_MSK 0x00020000 /* Timer Mode Mask */ #define MPIC_MASK_MSK 0x00010000 /* Mask Mask */ #define MPIC_TRIG_MSK 0x00008000 /* Trigger Mode Mask */ #define MPIC_RMT_MSK 0x00004000 /* Remote IRR Mask */ #define MPIC_DS_MSK 0x00001000 /* Delivery Status Mask */ #define MPIC_DM_MSK 0x00000700 /* Delivery Mode Mask */ #define MPIC_VEC_MSK 0x000000ff /* Vector Mask */ /***************************************************************************** ** **--- IO MPIC EQUATES (indirect I/O access) ** ***************************************************************************** ** */ #define IOMPIC_MPIC_ID 0x00 /* MPIC ID Register (r/w) */ #define IOMPIC_VERSION 0x01 /* Version Register (ro) */ #define IOMPIC_RDRCTN_TAB 0x10 /* Start of Redirection Table (r/w) */ /* Redirect. Table has 120 entries */ #define EBS_MPIC_IOID 0x01000000 /***************************************************************************** ** **--- IO MPIC VERSION REGISTER MASKS AND MISC. EQUATES ** ***************************************************************************** ** ** D[31:42] - Reserved ** D[23:16] - Max Redirection Table ( # of MPIC int. input pins -1) ** D[15:8] - Reserved ** D[7:0] - Version ** */ #define IOMPIC_MAXREDIR_MSK 0x00ff0000 /* # of MPIC interrupt input pins-1*/ #define IOMPIC_VERSION_MSK 0x000000ff /* MPIC version */ /* ****************************************************************************** ** **--- IO MPIC REDIRECTION TABLE ENTRY MASKS AND MISC. EQUATES ** ***************************************************************************** ** */ #define IOMPIC_RT_MASK_MSK 0x10000 /* Mask Mask */ #define IOMPIC_RT_TRIG_MSK 0x08000 /* Trigger Moded Mask */ #define IOMPIC_RT_RMT_MSK 0x04000 /* Remote IRR Mask */ #define IOMPIC_RT_DS_MSK 0x01000 /* Delivery Status Mask */ #define IOMPIC_RT_DESM_MSK 0x00800 /* Destination Mode Mask */ #define IOMPIC_RT_DM_MSK 0x00700 /* Delivery Mode Mask */ #define IOMPIC_RT_VEC_MSK 0x000ff /* Vector Mask */ #define IOMPIC_EXTINT 0x00700 /* Deliv. Mode - ExtINT */ #define IOMPIC_DEBUG 0x00600 /* Deliv. Mode - Debug */ #define IOMPIC_RESET 0x00500 /* Deliv. Mode - Reset */ #define MPIC_ASSERT 0xc000 #define MPIC_DEASSERT 0x8000 #define IOMPIC_INIT_REASSERT 0x00088500H #define IOMPIC_NMI 0x00400 /* Deliv. Mode - NMI */ #define IOMPIC_LOW_PRI 0x00100 /* Deliv. Mode - Lowest Priority */ #define IOMPIC_FIXED 0x00000 /* Deliv. Mode - Fixed */ #define IOMPIC_NO_MASK 0x00000 /* Dont mask interrupt. */ #define IOMPIC_TO_ALL 0xffffffff /* Logical Destination to all cpus */ /* * --- Interrupt Command Register Field Specifications */ #define MPIC_EXTINT 0x00700 /* Deliv. Mode - ExtINT */ #define MPIC_DEBUG 0x00600 /* Deliv. Mode - Debug */ #define MPIC_RESET 0x00500 /* Deliv. Mode - Reset */ #define MPIC_NMI 0x00400 /* Deliv. Mode - NMI */ #define MPIC_LOW_PRI 0x00100 /* Deliv. Mode - Lowest Priority */ #define MPIC_FIXED 0x00000 /* Deliv. Mode - Fixed */ #define MPIC_PHYSICAL 0x00000 /* Physical Destination mode */ #define MPIC_LOGICAL 0x00800 /* Logical Destination mode */ #define MPIC_DELIVERY_STATUS 0x01000 /* Delivery Status Mask */ #define MPIC_IDLE 0x00000 /* Interrupt Idle */ #define MPIC_INTERRUPT_PENDING 0x01000 /* Interrupt pending */ #define MPIC_LEVEL 0x08000 /* Level Interrupt */ #define MPIC_EDGE 0x00000 /* Edge interrupt */ #define MPIC_INVALID 0x00000 /* Invalid remote read status */ #define MPIC_IN_PROGRESS 0x10000 /* In progress remote read */ #define MPIC_VALID 0x20000 /* Valid remote read */ #define MPIC_DEST_FIELD 0x00000 /* Use Dest Field */ #define MPIC_SELF 0x40000 /* Destination self */ #define MPIC_ALL_SELF 0x80000 /* All including self */ #define MPIC_ALL_EX_SELF 0xc0000 /* All excluding self */ #define MPIC_TIMER_PERIODIC 0x20000 /* Periodic timer output */ /* *************************************************************************** ** Macros *************************************************************************** */ /* *************************************************************************** ** Structures *************************************************************************** */ /* * --- I/O MPIC access structure definition */ struct io_mpic { ulong select; /* Register select */ ulong filler[3]; /* Fill words */ ulong window; /* Window register */ }; /* * --- Local MPIC access structure definition */ struct local_mpic { ulong f0[4]; /* Fill words */ ulong f1[4]; /* Fill words */ ulong id; /* MPIC ID Register (r/w) */ ulong f2[3]; /* Fill words */ ulong version; /* Version Register (ro) */ ulong f3[3]; /* Fill words */ ulong private0; /* Private Register 0 (r/w) */ ulong f4[3]; /* Fill words */ ulong private1; /* Private Register 1 (r/w) */ ulong f5[3]; /* Fill words */ ulong private2; /* Private Register 2 (r/w) */ ulong f6[3]; /* Fill words */ ulong private3; /* Private Register 3 (r/w) */ ulong f7[3]; /* Fill words */ ulong tpr; /* Task Priority Register (r/w) */ ulong f8[3]; /* Fill words */ ulong apr; /* Arbitration Priority Register(ro) */ ulong f9[3]; /* Fill words */ ulong ppr; /* Processor Priority Register (ro) */ ulong f10[3]; /* Fill words */ ulong eoi_reg; /* EOI Register (r/w) */ ulong f11[3]; /* Fill words */ ulong remote_reg; /* Remote Register (ro) */ ulong f12[3]; /* Fill words */ ulong log_des_reg; /* Logical Destination Register (r/w) */ ulong f13[3]; /* Fill words */ ulong des_fmt_reg; /* Destination Format Register (r/w) */ ulong f14[3]; /* Fill words */ ulong sp_vec_reg; /* Spurious Vector Register (r/w) */ ulong f15[3]; /* Fill words */ ulong isr0; /* ISR (31:0) (ro) */ ulong f16[3]; /* Fill words */ ulong isr1; /* ISR (63:32) (ro) */ ulong f17[3]; /* Fill words */ ulong isr2; /* ISR (95:64) (ro) */ ulong f18[3]; /* Fill words */ ulong isr3; /* ISR (127:96) (ro) */ ulong f19[3]; /* Fill words */ ulong isr4; /* ISR (159:128) (ro) */ ulong f20[3]; /* Fill words */ ulong isr5; /* ISR (191:160) (ro) */ ulong f21[3]; /* Fill words */ ulong isr6; /* ISR (223:192) (ro) */ ulong f22[3]; /* Fill words */ ulong isr7; /* ISR (255:244) (ro) */ ulong f23[3]; /* Fill words */ ulong tmr0; /* TMR (31:0) (ro) */ ulong f24[3]; /* Fill words */ ulong tmr1; /* TMR (63:32) (ro) */ ulong f25[3]; /* Fill words */ ulong tmr2; /* TMR (95:64) (ro) */ ulong f26[3]; /* Fill words */ ulong tmr3; /* TMR (127:96) (ro) */ ulong f27[3]; /* Fill words */ ulong tmr4; /* TMR (159:128) (ro) */ ulong f28[3]; /* Fill words */ ulong tmr5; /* TMR (191:160) (ro) */ ulong f29[3]; /* Fill words */ ulong tmr6; /* TMR (223:192) (ro) */ ulong f30[3]; /* Fill words */ ulong tmr7; /* TMR (255:244) (ro) */ ulong f31[3]; /* Fill words */ ulong irr0; /* IRR (31:0) (ro) */ ulong f32[3]; /* Fill words */ ulong irr1; /* IRR (63:32) (ro) */ ulong f33[3]; /* Fill words */ ulong irr2; /* IRR (95:64) (ro) */ ulong f34[3]; /* Fill words */ ulong irr3; /* IRR (127:96) (ro) */ ulong f35[3]; /* Fill words */ ulong irr4; /* IRR (159:128) (ro) */ ulong f36[3]; /* Fill words */ ulong irr5; /* IRR (191:160) (ro) */ ulong f37[3]; /* Fill words */ ulong irr6; /* IRR (223:192) (ro) */ ulong f38[3]; /* Fill words */ ulong irr7; /* IRR (255:244) (ro) */ ulong f39[35]; /* Fill words */ ulong icr0; /* Interr. Cmd Register (31:0) (r/w) */ ulong f40[3]; /* Fill words */ ulong icr1; /* Interr. Cmd Register (63:32) (r/w) */ ulong f41[3]; /* Fill words */ ulong lvt_time0; /* Local Vec. Tbl [timer 0] (r/w) */ ulong f42[3]; /* Fill words */ ulong lvt_time1; /* Local Vec. Tbl [timer 1] (r/w) */ ulong f43[3]; /* Fill words */ ulong lvt_time2; /* Local Vec. Tbl [timer 2] (r/w) */ ulong f44[3]; /* Fill words */ ulong lvt_li0; /* Local Vec. Tbl [local int 0] (r/w) */ ulong f45[3]; /* Fill words */ ulong lvt_li1; /* Local Vec. Tbl [local int 1] (r/w) */ ulong f46[3]; /* Fill words */ ulong lvt_pe; /* Local Vec. Tbl [prty err] (r/w) */ ulong f47[3]; /* Fill words */ ulong icntr0; /* Initial Count Register 0 (r/w) */ ulong f48[3]; /* Fill words */ ulong ccntr0; /* Current Count Register 0 (ro) */ ulong f49[3]; /* Fill words */ ulong icntr1; /* Initial Count Register 1 (r/w) */ ulong f50[3]; /* Fill words */ ulong ccntr1; /* Current Count Register 1 (ro) */ ulong f51[3]; /* Fill words */ ulong icntr2; /* Initial Count Register 2 (r/w) */ ulong f52[3]; /* Fill words */ ulong ccntr2; /* Current Count Register 2 (ro) */ ulong f53[3]; /* Fill words */ ulong dcr; /* Divider Config. Register (r/w) */ }; struct returned_io_mpic { ulong id; ulong version; ulong rdr0_low; ulong rdr0_high; ulong rdr1_low; ulong rdr1_high; ulong rdr2_low; ulong rdr2_high; ulong rdr3_low; ulong rdr3_high; ulong rdr4_low; ulong rdr4_high; ulong rdr5_low; ulong rdr5_high; ulong rdr6_low; ulong rdr6_high; ulong rdr7_low; ulong rdr7_high; ulong rdr8_low; ulong rdr8_high; ulong rdr9_low; ulong rdr9_high; ulong rdr10_low; ulong rdr10_high; ulong rdr11_low; ulong rdr11_high; ulong rdr12_low; ulong rdr12_high; ulong rdr13_low; ulong rdr13_high; ulong rdr14_low; ulong rdr14_high; ulong rdr15_low; ulong rdr15_high; }; : # @(#) cdrom_iiop.sh 26.1 95/07/21 # # Copyright (C) 1990-1995 The Santa Cruz Operation, Inc. # All Rights Reserved. # The information in this file is provided for the exclusive use of # the licensees of The Santa Cruz Operation, Inc. Such users have the # right to use, modify, and incorporate this code into other products # for purposes authorized by the license agreement provided they include # this notice and the associated copyright notice with any such product. # The information in this file is provided "AS IS" without warranty. # # mkdev/cdrom - CD-ROM and WORM Configuration # rel=`grep rel /etc/perms/rts | sed "s/^#rel=//" | cut -c1-7` shared_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" client_ssoId="__SSO_ID_ST@SCO:Unix:$rel @SSO_ID_END__" ROOT=/ export ROOT . ${ROOT}/etc/conf/bin/path_map.sh init_path_mapping PATH=/etc:/bin:/usr/bin LANG=english_us.ascii export PATH LANG # Set change to NO change=NO tmp=/tmp/cd.$$ # Define return values : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Function definitions ########################## # ---------- STANDARD ROUTINES -------- These routines are common to scripts # requiring kernel relinking. # Define traps for critical and non critical code. set_trap() { trap 'echo "Interrupted! Exiting ..."; cleanup 1' 1 2 3 15 } unset_trap() { trap '' 1 2 3 15 } # Remove temp files and exit with the status passed as argument cleanup() { trap '' 1 2 3 15 [ "$tmp" ] && rm -f $tmp* exit $1 } # clear the screen if it is supported clearscr() { # check if the terminal environment is set up [ "$TERM" ] && clear 2> /dev/null } # Prompt for yes or no answer - returns non-zero for no getyn() { while echo "\n$* (y/n) \c">&2 do read yn rest case $yn in [yY]) return $OK ;; [nN]) return $FAIL ;; *) echo "Please answer y or n" >&2 ;; esac done } # Prompt with mesg, return non-zero on q prompt() { while echo "\n${mesg}or enter q to ${quit}: \c" >&2 do read cmd case $cmd in +x|-x) set $cmd ;; Q|q) return $FAIL ;; !*) eval `expr "$cmd" : "!\(.*\)"` ;; "") # If there is an argument use it as the default # else loop until 'cmd' is set [ "$1" ] && { cmd=$1 return $OK } : continue ;; *) return $OK ;; esac done } # Print an error message error() { echo "\nError: $*" >&2 return $FAIL } # Configure error message conferr() { CCFD=`get_mapped_path ID_CCF_D` error "\nConfigure failed to update system configuration. Check $CCFD/conflog for details." } # perms list needed if link kit must be installed permschk () { return $OK if [ -f /etc/perms/extmd ]; then PERM=/etc/perms/extmd else error "Cannot locate /etc/perms/extmd. This file is needed to verify Link Kit installation." cleanup $FAIL fi } # test to see if link kit is installed linkchk() { return $OK cd / until fixperm -i -d LINK $PERM do case $? in 4) echo "\nThe Link Kit is not installed." >&2 ;; 5) echo "\nThe Link Kit is only partially installed." >&2 ;; *) echo "\nError testing for Link Kit. Exiting." >&2; cleanup $FAIL ;; esac # Not fully installed. Do so here getyn "\nDo you wish to install it now?" || { # answered no echo " The Link Kit must be installed to run this program. Exiting ..." cleanup $OK } # answered yes, so install link kit echo "\nInvoking /etc/custom\n" /etc/custom -o -i LINK || { # custom exited unsuccessfully error "custom failed to install Link Kit successfully. Please try again." cleanup $FAIL } done } asklink() { SCFD=`get_mapped_path ID_SCF_D` getyn " You must create a new kernel to effect the driver change you specified. Do you wish to create a new kernel now?" || { echo " To create a new kernel execute $SCFD/link_unix. Then you must reboot your system by executing /etc/shutdown -i0 before the changes you have specified will be implemented.\n" return $FAIL } return $OK } # re-link new kernel klink() { SCFD=`get_mapped_path ID_SCF_D` cd $SCFD unset ROOT ./link_unix || { echo "\nError: Kernel link failed." ROOT=/ export ROOT cleanup $FAIL } ROOT=/ export ROOT return $OK } # ---------- CONFIGURE ROUTINES ------- These routines extract information # from and modify kernel configuration # files and parameters. # This routine sets cf_state and the device major number if applicable. # Possible values for cf_state are as follows. # NO: Device not present in mdevice file and therefore has # no major number. # PART: Device present in mdevice file but the -Y option in the configure # field of the sdevice file is not set. This causes the driver to # be excluded from the next reconfiguration. # All: Device has a major number and the -Y option is set in # the sdevice file. confchk () { name=$1 cf_state= major= SCFD=`get_mapped_path ID_SCF_D` cd $SCFD major=`./configure -j $name` || { cf_state=NO return $FAIL } cf_state=PART CSDEVD=`get_mapped_path ID_SDEVICE_D` if [ -f $CSDEVD/$name ] then fieldval=`awk '{print $2}' $CSDEVD/$name` || { error "awk failed to read sdevice file." cleanup $FAIL } [ "$fieldval" = "Y" ] && { cf_state=YES return $OK } else getyn " This device has an entry in the master device file but no corresponding system device entry. Do you wish to continue and have a default entry created?" || cleanup $FAIL fi return $FAIL } # Add driver according to cf_state. # Global variables used and where set: # $fns: add routines; $cf_state: confchk(); # $major: confchk() or add routine confadd() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD case $cf_state in NO) echo "\nAdding device to system configuration files ...\c" >&2 [ "$ipl" ] && IPL="-l $ipl" [ "$iv" ] && IV="-v $iv" $SCFD/configure -a $fns $devchar -m $major $IPL $IV > conflog 2>&1 || { conferr return $FAIL } $SCFD/configure -d $devchar -m $major -R > conflog 2>&1 || { conferr return $FAIL } $SCFD/configure -a $devchar -m $major -Y > conflog || { conferr return $FAIL } ;; PART) $SCFD/configure -a $devchar -m $major -Y > conflog || { conferr return $FAIL } ;; esac echo "\n\nSystem files have been successfully updated." change=YES rm -f conflog return $OK } # Configure driver out of system configuration files by unsetting -Y option. # Global variables used and where set: # $major: confchk() confrm() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD echo "\nUpdating system files to effect removal of driver ...\c" $SCFD/configure $devchar -d -m $major -Y > conflog 2>&1 || { conferr return $FAIL } echo "\n\nSystem files have been updated." rm -f conflog change=YES return $OK } # ------- Add Drivers -------- These routines add drivers to configuration # files and create necessary devices # -------CD-ROM SPECIFIC ROUTINES ------- These routines are specific to the # CD-ROM driver # # This program examines the mscsi file and finds out the number of # SCSI cd-rom devices configured. SCSIpos is used to calculate minor # device numbers for SCSI cd-roms. # Global variables set: # SCSIpos find_SCSIpos() { CMSCSI=`get_mapped_path ID_MSCSI` [ -r $CMSCSI ] || { error "\nCannot read $CMSCSI" cleanup $FAIL } num=`sed '/^*/d' $CMSCSI | grep -c "$DRIVER"` [ -n "$num" ] || { error "\nGrep failed to read $CMSCSI." cleanup $FAIL } # calculate total number of driver units configured # SCSI numbering starts at 0. SCSIpos=`expr $num - 1` return $OK } # Create all non-default devices. # Global variables used and where set: # $SCSIpos: find_SCSIpos(); $MINIpos: find_MINIpos() mk_nodes() { minor=`expr 0 + $SCSIpos` echo "$DRIVER $DEVNAME$minor b $minor" >> /etc/conf/node.d/$DRIVER echo "$DRIVER r$DEVNAME$minor c $minor" >> /etc/conf/node.d/$DRIVER } rm_nodes() { CNODED=`get_mapped_path ID_NODE_D` minor=`expr 0 + $SCSIpos` cp $CNODED/$DRIVER /tmp/$DRIVER.$$ grep -v $DEVNAME$minor /tmp/$DRIVER.$$ > $CNODED/$DRIVER rm /tmp/$DRIVER.$$ rm -f /dev/*$DEVNAME$SCSIpos } # Create all non-default devices. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; $major: confchk() or confadd() # $SCSIpos: find_SCSIpos() # Global variables set: # dev_major, change install () { CMSCSI=`get_mapped_path ID_MSCSI` CNODED=`get_mapped_path ID_NODE_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk # Configure the driver if necessary. confchk "$DRIVER" || { # Add scsi driver to config files. fns=$FNS devchar=$DEVCHAR major=$MAJOR confadd || cleanup $FAIL } find_SCSIpos ; oSCSIpos=$SCSIpos [ $oSCSIpos -ge $MAXUNIT ] && { echo " Sorry, the maximum of $MAXUNIT $NAME Drives has been reached. Unable to configure another one." return $FAIL } getyn "The $NAME Driver must be configured before use. Do you wish to configure the $NAME Driver now?" || { echo " The SCSI $NAME Driver has been added to system configuration files. However, $CMSCSI must also be updated before using a SCSI $NAME Drive. It is advisable to reinvoke mkdev $MYNAME to accomplish this." return $FAIL } # Make sure mscsi and node.d are in synch: # in particular, after installation there may be # cdt nodes and Srom in mscsi, but no Srom cd nodes: # remove Srom from mscsi so we can add successfully # (possibly with a different ID or whatever) # if [ -s $CNODED/$DRIVER ] then [ $SCSIpos -ge 0 ] || rm -f $CNODED/$DRIVER elif [ $SCSIpos -ge 0 ] then cp $CMSCSI /tmp/$DRIVER.$$ grep -v $DRIVER /tmp/$DRIVER.$$ > $CMSCSI rm -f /tmp/$DRIVER.$$ SCSIpos=-1; oSCSIpos=-1 fi # Edit /etc/conf/cf.d/mscsi as was /bin/sh /usr/lib/mkdev/.scsi_iiop -a $DEVTYPE -n || return $FAIL while : do find_SCSIpos ; nSCSIpos=$SCSIpos differ=`expr $nSCSIpos - $oSCSIpos` case $differ in 0) getyn " The number of SCSI $NAME Drives has not been changed. Do you wish to try again?" || return $FAIL ;; *) [ $SCSIpos -lt $MAXUNIT ] && break; echo " A maximum of $MAXUNIT SCSI $NAME Drives are allowed. Please reconfigure." ;; esac echo " Invoking the interface to the master SCSI device file." /bin/sh /usr/lib/mkdev/.scsi_iiop || return $FAIL done change=YES # Set dev_major for use in mkdevice(). dev_major=$major SCSIpos=$oSCSIpos while [ $SCSIpos -lt $nSCSIpos ] do SCSIpos=`expr $SCSIpos + 1` # Create pure scsi devices. mk_nodes "$DRIVER" done if [ "$MYNAME" = "cdrom" ] then # first unit configured [ "$oSCSIpos" -eq -1 ] && { getyn "Do you want to configure a $CDTNAME installation device?" && { cdtinstall || cleanup $FAIL } } fi # don't bother with the kernel linking with -l option getyn "Do you want to add/configure the $HSFILSYS file system?" && { /bin/sh /usr/lib/mkdev/$HSFILSYS -l } return $OK } # $DRIVER, $DESCR: menu routines; # $SCSIpos: find_SCSIpos() remove() { CMSCSI=`get_mapped_path ID_MSCSI` confchk "$DRIVER" || { echo " The $NAME Driver is not currently configured.\n" return $FAIL } find_SCSIpos ; oSCSIpos=$SCSIpos if [ $oSCSIpos -lt 0 ] then getyn " There are currently no SCSI $NAME Drives configured in the /etc/conf/cf.d/mscsi file. Do you wish to continue." || return $FAIL # Pretend we have 4 so we can remove any nodes created and # remove scsi driver from kernel. oSCSIpos=$MAXUNIT else # Edit /etc/conf/cf.d/mscsi /bin/sh /usr/lib/mkdev/.scsi_iiop -r $DEVTYPE -n || return $FAIL fi find_SCSIpos ; nSCSIpos=$SCSIpos differ=`expr $oSCSIpos - $nSCSIpos` case $differ in 0) echo " The number of SCSI $NAME Drives has not been changed." return $FAIL ;; esac change=YES SCSIpos=$oSCSIpos while [ $SCSIpos -gt $nSCSIpos ] do rm_nodes SCSIpos=`expr $SCSIpos - 1` done [ $SCSIpos -eq -1 ] && { permschk && linkchk devchar=$DEVCHAR confrm || cleanup $FAIL echo " The SCSI $NAME Driver and associated devices have been removed." } if [ "$MYNAME" = "cdrom" ] then [ $SCSIpos -eq -1 ] && { cdtremove } confchk "$DRIVER" && { echo " $NAME device unit 0 (first $NAME device in $CMSCSI) is configured as the $CDTNAME installation device." } fi # don't bother with the kernel linking with -l option getyn "Do you want to remove the $HSFILSYS file system?" && { /bin/sh /usr/lib/mkdev/$HSFILSYS -l } return $OK } # -------CD-ROM/TAPE SPECIFIC ROUTINES ------- These routines are specific # to the CD-ROM/TAPE driver # cdtedit() { CPACKD=`get_mapped_path ID_CPACK_D` [ -r $CPACKD/$CDTDRIVER/space.c ] || { error "\nCannot read $CPACKD/$CDTDRIVER/space.c." cleanup $FAIL } ed - $CPACKD/$CDTDRIVER/space.c <<-EOF /phydrv_name/s?= "[A-Za-z].*";?= "$DRIVER";? /cdt_unitnum/s?num = [0-9]*;?num = $unitnum;? w q EOF } cdtmk_nodes() { CNODED=`get_mapped_path ID_NODE_D` nodefile="$CNODED/$CDTDRIVER" rm -f $nodefile > $nodefile minor=`expr 0 + $unitnum` echo "$CDTDRIVER r$CDTDRIVER$unitnum c $minor" >> $nodefile minor=`expr 128 + $unitnum` echo "$CDTDRIVER x$CDTDRIVER$unitnum c $minor" >> $nodefile minor=`expr 8 + $unitnum` echo "$CDTDRIVER nr$CDTDRIVER$unitnum c $minor" >> $nodefile } cdtrm_nodes() { CNODED=`get_mapped_path ID_NODE_D` CPACKD=`get_mapped_path ID_CPACK_D` rm -f $CNODED/$CDTDRIVER # since the author deleted all entries in node.d there # seems little point leaving any device files around. rm -f /dev/*cdt* } cdtinstall() { CMSCSI=`get_mapped_path ID_MSCSI` # Check for the presence of the link kit. Install if it not present. permschk && linkchk # Check for presence of CD-ROM driver. Fail if not present. confchk "$DRIVER" || { echo "\nThe $NAME Driver is not configured currently. It must be configured before the $CDTNAME Driver is used." return $FAIL } # Check for presence of CD-ROM device configured. Fail if not present. find_SCSIpos [ "$SCSIpos" -lt 0 ] && { echo " The SCSI $NAME Driver has been added to system configuration files. However, no $NAME devices are configured in $CMSCSI. Install the $NAME driver again to accomplish this." return $FAIL } echo "\nConfiguring $CDTDRIVER driver ..." # Configure the driver if necessary. confchk "$CDTDRIVER" || { # Add scsi driver to config files. fns=$CDTFNS devchar=$CDTDEVCHAR major=$CDTMAJOR confadd || cleanup $FAIL } unitnum=0 # edit $CPACKD/$CDTDRIVER/space.c cdtedit # Create driver devices. cdtmk_nodes echo " $NAME device unit 0 (first $NAME device in ) $CMSCSI configured as the $CDTNAME installation device." change=YES return $OK } cdtremove() { permschk && linkchk confchk "$CDTDRIVER" || { echo " The $CDTNAME Driver is not currently configured.\n" return $FAIL } echo "\nRemoving $CDTDRIVER driver ..." devchar=$CDTDEVCHAR confrm || cleanup $FAIL cdtrm_nodes echo " The $CDTNAME Driver and associated devices have been removed." return $OK } # main() ######################### set_trap cd / clearscr MYNAME=`basename $0` HSFILSYS="high-sierra" case $MYNAME in cdrom_iiop) # CD-ROM driver DRIVER=Srom NAME=CD-ROM DEVNAME=cd DEVTYPE=-c DEVCHAR="-b -c" MAJOR=51 MAXUNIT=256 FNS="Srominit Sromopen Sromclose Sromread Sromstrategy Sromioctl" # CD-ROM/TAPE driver CDTDRIVER=cdt CDTNAME=CD-ROM/TAPE CDTFNS="cdtopen cdtclose cdtread cdtioctl" CDTDEVCHAR="-c" CDTMAJOR=50 # Configuration options MESG="\n\n$NAME Configuration Program \n 1. Install a $NAME Drive 2. Remove a $NAME Drive 3. Install a $CDTNAME Driver 4. Remove a $CDTNAME Driver Select an option " break ;; worm) DRIVER=Swrm NAME=WORM DEVNAME=worm DEVTYPE=-w DEVCHAR="-b -c" MAXUNIT=8 FNS="Swrminit Swrmopen Swrmclose Swrmread Swrmwrite Swrmstrategy Swrmioctl" MESG="\n\n$NAME Configuration Program \n 1. Install a $NAME Drive 2. Remove a $NAME Drive Select an option " break ;; *) echo "configuration of `basename $0` not supported" exit $FAIL esac while mesg=$MESG quit="quit" do prompt || break # reset these flags prior to each pass through menu major= IPL= IV= select=$cmd if [ "$MYNAME" = "cdrom" ] then case $select in 1) install ;; 2) remove ;; 3) cdtinstall ;; 4) cdtremove ;; *) echo "\n Please select 1, 2, 3 or 4." continue ;; esac else case $select in 1) install ;; 2) remove ;; *) echo "\n Please select either 1 or 2." continue ;; esac fi done if [ "$change" = "YES" -a ! "$_RELINK" ] then asklink && klink fi cleanup $OK .O..driverinstall...smad...Space.oSpace.cSpace.o.ZSystemMasterDriver.o$8{m'nK%[d$(X*AȖD,aid6P-*js*+m'9mݳe^a;;8BVP(QUyX*"jPMg߿r*wW@8aFy,q}ed& O0fat,4fo! 3Ԯ?>蟛da+Y?PL _ap`5$ݗ#뵚iG'Wb$0F\>M@TAvݽ|,I&~ւqIp]a$qt|7>W{B-mМ 1a{u6Ͻ~x@oe3{MU|稙1'™5䯢SJ3Iŗ=dg2 Pg+Ry]Wr7Qm>{sb xcoXWzoi8(~Q[]mM^Sku h7QQ5gB 25͍_XWƛMJ5{DֿG C=~QSgaIAB-5b3n8A&6z$dul:f m^"riJ1UJt;i@ml67pFxL0rc 󒦼еUq+= ~;߄t{B P4d+샟׾ NJ9\3ThP _I*!ǯ ɾWޏaA9YzSpKQ0-wzpZFqD% pgT/5q!Ԫ)! '[٨zx,좐 =Nt |Nd!0C|O:cZϞ@s8GGxD ;./cIumWf32IX+(k^GJQ9JQJ2b 1ХIId4iSZ[KݏqećW!r:Ln=+ JN#, \S1Jڼ]ռne}Vn4Ư_DN%rjբ/[ݜ<)B9=Fǭ86J,6LJlx탉۞ֹ#uΚlɝhYSai{W6vWhqI$*Y6v)Gb{3pQ{C `'ΡY!MGb,$[\%Cδ\d}Ph%xtO%k uόL! gc}Xfea>O Xhh. bpƼh'7y11^v \p^RMo쩭\cSc{ Z z Z/&xrlKl @Otĉָ~8Wpb`N+em ԌOnE6Kq>?]4[ 7pX%hX+KT(r܉F1ŷZG/%#A6JMRxpm *AV}ppȕWɓ6nf6d20ph 0T>d:r;9O/eN K)E9ȧz7/H->M=z0LC^uo\)wmRo" p,T5ʵC_BM!qFh>h+XPO+&Y1x=*O3`zՔW>A::hӳv@U(3Q^}8XǍ o1>Ȍ C1f7lvG^EpalDOuu w{VHPO Xy7g@}RxwAЧ'Y*:] )bGK8CߖUr=u!/:)m.Re&7h⡘0|4\;ò\4Q݀G)#~?EtUdUb h۰bgꬽtVbbO5WS8usy=R)i-i6y>L-8RT(%n>Ǣ|ŀRxtMpӉ]!JU`j^#Q5S2mD+rEP"x) aÿ;%,[krz~m ^lm۶+}D͍ (6i50X?a\ |;g';_ 3rkV d!_ = u-"KT*%l&$v!~~"Df*HhrnqW]ySbvق0:H5q "_:wrp} KCh9*{p-|}#3FGmw:u,d,u76r'P_|\={Zb_ &*`jh{1Y V(r@ 4!j Àϱ ~;#uyRN " NB #Ԑhm2&FPb9F)LP U ¨49p+3uxAQdP{B U(⦍+xD!یF1N4vu06`IB;W  MF&&LV('X0Y¡Hj[:XJM2MhM;J1 -Qh\%k& sD@W1de*o]!@yiy|~ou|#f|zeSB'n"UgcߴP`tQ}Ou.#=x5xUVpj\2_3S)>F7 # Bl (fu=TC5P)oRGTd:CXm"0-B)6[_-+ӒAVvO "b#qfˢBR)ݼo8U#cM^ .۳2FTJ"lЄp%R] F X);c`#O뀹3)!q s p4@~|-]!bh0 f_r쟷 `p_yCWfDMJ5Frלt2ey!4UR߁d QDs8|.t Sk$G!&=1(0dR8&12_'^U؋'zLL`-Eb$DL]Et ,JMtט"IXBZޫ:CU@ bcTH@gRy n'!؁U3?@ZIapc%}@{"?>թ@KH1`)8J$g33k/8\$HHxe%_=jl2aJZOg5pvI@(&B!Z#yv ItbLa僎/|uI>gglEw3$l-TiYr ~<2| {X IʴP}HM(DmLhjʬO,/mہ=3v9홄]óoO5]͸a $&xv ҹ& MXxB  9b=r+\? Kl! VOn R4W̱7`bD2Iv2 PʊF:_NS |H?2:(?Y=Ag4,9xN5tߟèGB:]鄎 SrcwaT1R!,5 ~uCqT_IWf`vD’^C7A;qIjAd4&U9N*XfH4 ! 5qɸDαN jwP|==f~6A"w |8aD*f G` #]UnpФ}'uuhquEF7غ,Gap ?߀-Oz&p݁(؁`؇E.]]s 4!>5_]y Ѕͯט]Jqy:K͛/"p@ wh*sAgF3$8 %9)Dc$IL@#zrtE5a|SLG!SiFzXiDٷHڞ! }7 [ BpV-;!Oq ֹh?6rU-!)B|Gn\gz D)ة(Πɺd:M/(f k9U Q;e!|H.M}H>~g}k[qH qbv6NTeA|;5a o|ZKwOp=xk{ق')*rIbg߄2Пh@7xw|2~x%+%y窾evs;gпGOiT s^'ު^y;BQ -\pC[j4ZOp;|(ӉRze=7}ր`MgT~̱ 9ɘ߂Wބ.F~!^8E8ikCrJA}='d"Ve:if>wy`q8'ɘN& ~QIÞO 'j П$DefKs$׳8و:/UD_18Aީhv#4lB.`%Ou Sɻ^9,Yy7&dij;> *;3@6D쳷)jm!ڢ]v?惓/ =K~뫔o-8~77L[ڦf.B\|)J"jaqNt 94.eat,0Ws7.?+ |U*D\:Rm5JDUKCPN:Tę0j ꢝH-:iq'V1aaBz?@ DΡI 3i=;2(gQ$1 /\RMأeJ;D%zzY=SL:3cV5dHDgIA}k!w萇1Pu~Aտ;g!5"]G3mf ;?-vKX cO̍4kh5MkJuR~ϕ^}z%_wLVXtv-a2%(WSc.T3T#\G7~~o{{W_G)nЁ6QhXaǼa5s f a-m8`D{yb'Wz\-Ap$Y1.xw~f ׊w ¤%'2;Jp{)]:]jw$&;s|X{-Æ$V@OD͏ycdzF '獾3x5'OYOߋROY{xF~_ 1bK)Kj튾+749 MFO%r dSzvdjRdpPG.wB Jod wf;'"<9!+(^q {,U)@gԊ䢇0@*AatAM98g:?ymc>6aJh$tXFLP9 z# RmnꃕͱuU[B~_l rAi]RɁhە*R]/.n:/٨Msf#}9R~RtvL\3lr 'b3ΚzJ+B=UzLMiO̴i nbnp-F(Ff{2lYSಓLXlns!|)m>RR88-dʲ[ C)I>{wPqa8Cٖ>7F &')m\ b7vP1Am!ow&(O w<770OǢ HkH1Ey- cI:7+*s̔5ɫ5a M ՒbTo-OrNkCv42\ŀD<ڕIstEEQR|++#B!l ?T-h2ƣ[UI&e79{eKӭHlm.F xlnTd0ofqy*r|(g73,'>B72ZF},>~|e ` OWL ma&|b1"0j*2&.$:Lj5)UnTI2&t)UMyTLV̦:V+:$>Qʴ 2C[JFHNw R{os)?::#an ,Q 96mPayES7 MHވ _GαKͻ#N**ۘQ^R oGvb#P[B75-Ƥ: 6>5j6`oJ(ai02$/ݫDԞ~ϛGmfK:zyoeO2C%1҅*U1T,E/L+pb$ C~)}Ģ`d@>\GQ~3 ZfBH?R jX'X΃ 7&dwF@yφ3:-U~Pb wRr\/LK}&i2;'FB4Y0#zs;c'*Ze1GfłGE4*l[]&-R& #T1qPКL9S=68q 8OfM1%E"t.qh_* w5Jl v`q b@,h!2+}cvR0Mgb~ J%4Gڴ'(2i%oxHok6<;`htF)'mPrnc}I7#:""l4oEU mLIi6Ld<䛶,$~9$5YIM/l ◹'鑺78) GVGKDes~`VbS篽 |!vAnWѼ-&Z_ vi\R< |/cCX"=BL@[GA^Pa[nȞx|39ȩ{GIra=v7:0=z`e `E~Bƭ3b(͜|q̀yN%7Vr'"f3I-&HM=J;aZPhا\ *^敥W_w6W{]_O[|^\T=v yS9 Vi':֤Wʛ?9ׅn1;p /: 'ߐ=F9P_[[b 箧sezZL\`k4Y_uS`-" =+>Z&ͫ+EYŒLUYӅQGXj;@ xaGꕟZ =QVb~#y5n-F({fI]2I%r5J:l?r!GHnZϿZ)QݭgptE5}Ar6[jIk7Q=-{ .L(؅̬vJUQZْIQ֣p-gZu3V9NRam@ZTzŰfnS(¡k=Q,k: ?al?[ֳޅGTVwieVMk>reգӭGZaj=ji֣R>TtG*5^Yrֳ킎.MS=&j^MSY%:(L֣qQZR>/{*BU%U%Uk?`(bʪ(偋LyY+gh颹Et}]l[7VT}Q@(Lu{.]\={@ҕZ-GZ|VFi1ܸQyya\D¨Khj*#VaPQ+QL*gZUhګkQZkUx\el-G+QlEeOw:PTQZF`(aeAzVݭ{zÅ&֠voYZ|v~O*{w`{1;7@|>xlH[G@^@wLbռ: j䱪vCH}C4 LׁjxɁ-oǪ{>=n?(6=:|;@|Pu #p<4J> @ }?"2+qAޏ$iK#d`;;ܒ_"| Oɨq{ܚP4T=XH`>(i4 SA(K;qUP @06d~ʭۥꋎ60Pҁ|ڞ , ]2P|~ 1"| @v|P>i7Ĩ[@㴹L4@{@?[4C>P%x4yp9p5`lY0~ |>k6W=LÜ_ P:ӺΚ%&yCL<.;~8Zۉ8|wºOé<*~ ?0F}CہZ?^}>}Vaܘ .ب`;&o.O }߄O'pBxZ lV-Ga(w<@@o4KBe }AlDY@jk^W3OpK(rst@mz岽l!O-tE3H:10:O;4^p0zտNJ@4.p;>A#!?T@qzcp,؁>f`9:յ2@M֞Pkڪkm{6Gv]W=^xÁ֭@l5ǰZ?z+Obybc8~$>bC`ۿ7d~wwd'@vfY_"}k=+Niυ i& (@p;;`;>Ghv#T?T@ j#{$SGztc\ʼn <~n iߐkz3?y1gi B=߽:F{tF\d.NGlg#r>B#Df槉:H?ÅSPwDXj-?r^,Fbw,*|Gп?$f-*y}•w>+\dJ}fIy>}k9$HVc>Ui:cvN3yЕj}Gƞ=9IVK 9vL6ZkCtX-?+姀BJċ*^BbO<ѣF<\K$NFT"sf\y-碐 ƞ >`K^oq7:L"3w`3v,L5e,H:ї*Br6b-1o[Ì)#Yiz̚LeٚU56enl+-;.v1rc+&o{ݓqfDluU}SKeK..-YDiDdy11-/ sro%& Ir "]Ǽ Y*ybD~%4 w0OtWGzym5jra\Xm/$ͻ(Zk.\!Ff7LkDn+qҝLQXLdt;67WIsasi d}S8ƚtY%m1ɋmS?U܉2-.%]_]Bw \-:+I*s9+kv^41=Vi5I/ K7d4𝹮<|/^˼M /dev/null } # Prompt for yes or no answer - returns non-zero for no getyn() { while echo "\n$* (y/n) \c">&2 do read yn rest case $yn in [yY]) return $OK ;; [nN]) return $FAIL ;; *) echo "Please answer y or n" >&2 ;; esac done } # Prompt with mesg, return non-zero on q prompt() { while echo "\n${mesg}or enter q to ${quit}: \c" >&2 do read cmd case $cmd in +x|-x) set $cmd ;; Q|q) return $FAIL ;; !*) eval `expr "$cmd" : "!\(.*\)"` ;; "") # If there is an argument use it as the default # else loop until 'cmd' is set [ "$1" ] && { cmd=$1 return $OK } : continue ;; *) return $OK ;; esac done } # Print an error message error() { echo "\nError: $*" >&2 return $FAIL } # Configure error message conferr() { CCFD=`get_mapped_path ID_CCF_D` error "\nConfigure failed to update system configuration. Check $CCFD/conflog for details." } # perms list needed if link kit must be installed permschk () { return $OK if [ -f /etc/perms/extmd ]; then PERM=/etc/perms/extmd else error "Cannot locate /etc/perms/extmd. This file is needed to verify Link Kit installation." cleanup $FAIL fi } # test to see if link kit is installed linkchk() { return $OK cd / until fixperm -i -d LINK $PERM do case $? in 4) echo "\nThe Link Kit is not installed." >&2 ;; 5) echo "\nThe Link Kit is only partially installed." >&2 ;; *) echo "\nError testing for Link Kit. Exiting." >&2 cleanup $FAIL ;; esac # Not fully installed. Do so here getyn "Do you wish to install it now?" || { # answered no echo " The Link Kit must be installed to run this program. Exiting ..." cleanup $OK } # answered yes, so install link kit echo "\nInvoking /etc/custom\n" /etc/custom -o -i LINK || { # custom exited unsuccessfully error "custom failed to install Link Kit successfully. Please try again." cleanup $FAIL } done } asklink() { SCFD=`get_mapped_path ID_SCF_D` getyn " You must create a new kernel to effect the driver change you specified. Do you wish to create a new kernel now?" || { echo " To create a new kernel execute ./link_unix from the /etc/conf/cf.d directory. Then you must reboot your system by executing /etc/shutdown -i0 before the changes you have specified will be implemented.\n" return $FAIL } return $OK } # re-link new kernel klink() { SCFD=`get_mapped_path ID_SCF_D` cd $SCFD # AHS - ROOT="" to allow idmkdev to be called ROOT="" ./link_unix || { echo "\nError: Kernel link failed." cleanup $FAIL } echo " You have successfully re-linked a new kernel. In order for the changes to be reflected on your emergency boot floppy set, it is recommended that you run the command '/etc/mkdev fd' and re-create the emergency boot floppy set with the newly linked kernel.\n" return $OK } # ---------- CONFIGURE ROUTINES ------- These routines extract information # from and modify kernel configuration # files and parameters. # This routine sets cf_state and the device major number if applicable. # Possible values for cf_state are as follows. # NO: Device not present in mdevice file and therefore has # no major number. # PART: Device present in mdevice file but the -Y option in the configure # field of the sdevice file is not set. This causes the driver to # be excluded from the next reconfiguration. # All: Device has a major number and the -Y option is set in # the sdevice file. confchk () { name=$1 cf_state= major= SCFD=`get_mapped_path ID_SCF_D` cd $SCFD major=`./configure -j $name 2>/dev/null` || { cf_state=NO return $FAIL } cf_state=PART CSDEVD=`get_mapped_path ID_SDEVICE_D` if [ -f $CSDEVD/$name ] then fieldval=`awk '{print $2}' $CSDEVD/$name` || { error "awk failed to read sdevice file." cleanup $FAIL } [ "$fieldval" = "Y" ] && { cf_state=YES return $OK } else getyn " This device has an entry in the master device file but no corresponding system device entry. Do you wish to continue and have a default entry created?" || cleanup $FAIL fi return $FAIL } # Add driver according to cf_state. # Global variables used and where set: # $fns: add routines; $cf_state: confchk(); # $major: confchk() or add routine confadd() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD case $cf_state in NO) echo "\nAdding device to system configuration files ...\c" >&2 major=`$SCFD/configure -j NEXTMAJOR` [ "$ipl" ] && IPL="-l $ipl" [ "$iv" ] && IV="-v $iv" $SCFD/configure -a $fns $cfgflags $devchar -m $major $IPL $IV > conflog 2>&1 || { conferr return $FAIL } $SCFD/configure -d $devchar -m $major -R > conflog 2>&1 || { conferr return $FAIL } $SCFD/configure -a $devchar -m $major -Y > conflog || { conferr return $FAIL } ;; PART) $SCFD/configure -a $devchar -m $major -Y > conflog || { conferr return $FAIL } ;; esac echo "\n\nSystem files have been successfully updated." change=YES rm -f conflog return $OK } # Configure driver out of system configuration files by unsetting -Y option. # Global variables used and where set: # $major: confchk() confrm() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD echo "\nUpdating system files to effect removal of driver ...\c" $SCFD/configure $devchar -d -m $major -Y > conflog 2>&1 || { conferr return $FAIL } echo "\n\nSystem files have been updated." rm -f conflog change=YES return $OK } # parse_mscsi # ----------- # parse mscsi to get the HATYPE, HA, ID and LUN of a particular unit # Returns # $OK if the entry exists # $FAIL if the entry does not exist # Globals set # HATYPE which type of host adapter driver the unit is attached to # HA the host adapter number the unit is attached to # BUS the scsi bus of the adapter the target is attached to # ID the target SCSI ID of the unit # LUN The Logical Unit Number of the unit # # Calling sequence # parse_mscsi parse_mscsi() { MSCSI=`get_mapped_path ID_MSCSI` unit=$1 driver=$2 [ "x$unit" = "x" ] && return $FAIL [ "x$driver" = "x" ] && return $FAIL args=$* set `grep -v -e '^*' $MSCSI | awk ' BEGIN { entries=0; found=0; } /'$driver'/ { if ( entries == '$unit' ) { found=1; printf("%s %d %d %d %d\n", $1, $3, $4, $5, $6); } else { entries++; } } END { if ( found == 0 ) { printf("UNKNOWN -1 -1 -1\n") } }'` HATYPE=$1 HA=$2 ID=$3 LUN=$4 BUS=$5 set $args if [ "$HATYPE" = "UNKNOWN" ] then return $FAIL else return $OK fi } # ----------- JUKE SPECIFIC ROUTINES ---------- Routines specific to juke # configuration. # This program examines the mscsi file and finds out the number of # SCSI devices configured. SCSIpos is used to calculate minor # device numbers for SCSI cd-roms. # Global variables set: # SCSIpos find_SCSIpos() { CMSCSI=`get_mapped_path ID_MSCSI` [ -r $CMSCSI ] || { error "\nCannot read $CMSCSI" cleanup $FAIL } num=`sed '/^*/d' $CMSCSI | grep -c "$DRIVER"` [ -n "$num" ] || { error "\nGrep failed to read $CMSCSI." cleanup $FAIL } # calculate total number of driver units configured # SCSI numbering starts at 0. SCSIpos=`expr $num - 1` return $OK } # # Add or remove enough nodes from an existing node.d file to # make $SCSIpos be the last entry. # update_nodes() { CNODED=`get_mapped_path ID_NODE_D` lastminor=`expr 0 + $SCSIpos` # # Create a node.d file with only devices less than lastminor. # rm -f ${tmp}nd > ${tmp}nd > $CNODED/$DRIVER while read name dev type minor rest do [ $minor -gt $lastminor ] && continue echo "$name $dev $type $minor $rest" >> ${tmp}nd done < $CNODED/$DRIVER # # Add node.d entries of missing minors upto lastminor # minor=0 while [ $minor -le $lastminor ] do grep -q "$DRIVER $DEVNAME$minor c $minor" ${tmp}nd && continue echo "$DRIVER $DEVNAME$minor c $minor root root 666" >> ${tmp}nd minor=`expr $minor + 1` done # # Update node file # cp ${tmp}nd $CNODED/$DRIVER rm -f ${tmp}nd return $OK } # # This routine selects a juke to do an operation on. # Input globals: $DRIVER - Name of driver to search for # $action - Action to perform (eg. "Remove") # $oSCSIpos - Unit number of last configured juke # Output globals: $HA $ID $LUN $HATYPE $BUS # - Parameters of thing to remove # # select_juke() { CMSCSI=`get_mapped_path ID_MSCSI` show_juke while mesg="\n$action which unit " quit="quit" HATYPE= HA= ID= LUN= BUS= do prompt || break case $cmd in [0-9]|[1-9][0-9]|[1-9][0-9][0-9]) ;; *) echo "\n\tPlease select a unit number from 0 to $oSCSIpos" continue ;; esac if [ $cmd -lt 0 -o $cmd -gt $oSCSIpos ] then echo "\n\tPlease select a unit number from 0 to $oSCSIpos" continue fi parse_mscsi $cmd $DRIVER || { echo "\n\tCannot find unit $cmd in /etc/conf/cf.d/mscsi" return $FAIL } return $OK done return $FAIL } # ---------- JUKE ROUTINES ---------- The routines are used to configure the # juke box. # # This routine adds a new juke box to the system. # add_juke() { CMSCSI=`get_mapped_path ID_MSCSI` CNODED=`get_mapped_path ID_NODE_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk # Configure the driver if necessary. confchk "$DRIVER" || { fns=$FNS cfgflags=$CFGFLAGS devchar=$DEVCHAR confadd || cleanup $FAIL } find_SCSIpos ; oSCSIpos=$SCSIpos [ $oSCSIpos -ge $MAXUNIT ] && { echo " Sorry, the maximum of $MAXUNIT $NAME Drives has been reached. Unable to configure another one." return $FAIL } getyn "The $NAME Driver usually requires one or more associated SCSI devices to be configured which act as the read/write and control devices. Often the Juke Box driver differs only in the LUN (logical unit number), or Target ID. Consult your Juke Box documentation for more information. Do you wish to configure the associated SCSI devices now?" && { echo " Please use the mkdev command to configure the associated devices, noting Adapter, ID, LUN and BUS configurations and then re-invoke mkdev juke." cleanup $FAIL } # Edit /etc/conf/cf.d/mscsi as was /bin/sh $SCSISH -a $DEVTYPE -n || return $FAIL while : do find_SCSIpos ; nSCSIpos=$SCSIpos differ=`expr $nSCSIpos - $oSCSIpos` case $differ in 0) getyn " The number of SCSI $NAME Drives has not been changed. Do you wish to try again?" || return $FAIL ;; *) [ $SCSIpos -lt $MAXUNIT ] && break; echo " A maximum of $MAXUNIT SCSI $NAME Drives are allowed. Please reconfigure." ;; esac echo " Invoking the interface to the master SCSI device file." /bin/sh $SCSISH -n || return $FAIL done change=YES update_nodes return $OK } # # This routine removes a juke box from the system. # rmv_juke() { CMSCSI=`get_mapped_path ID_MSCSI` confchk "$DRIVER" || { echo " The $NAME Driver is not currently configured.\n" return $FAIL } find_SCSIpos ; oSCSIpos=$SCSIpos if [ $oSCSIpos -lt 0 ] then getyn " There are currently no SCSI $NAME Drives configured in the /etc/conf/cf.d/mscsi file. Do you wish to continue." || return $FAIL fi action="Remove" select_juke || return $FAIL # Edit /etc/conf/cf.d/mscsi /bin/sh $SCSISH -r $DEVTYPE -n $HA $ID $LUN $HATYPE $BUS || return $FAIL find_SCSIpos ; nSCSIpos=$SCSIpos differ=`expr $oSCSIpos - $nSCSIpos` case $differ in 0) echo " The number of SCSI $NAME Drives has not been changed." return $FAIL ;; esac change=YES update_nodes echo " A SCSI $NAME device has been removed. Usually there are one or more associated SCSI devices which act as the read/write and control devices for this juke box. These may need to be deconfigured seperately using an appropriate mkdev command, in this case you should defer the kernel relink until this has been done. " if [ $SCSIpos -eq -1 ]; then permschk && linkchk devchar=$DEVCHAR confrm || cleanup $FAIL echo " The SCSI $NAME Driver has been removed." fi return $OK } # # This routine shows all juke boxes configured in the system. # show_juke() { CMSCSI=`get_mapped_path ID_MSCSI` find_SCSIpos [ $SCSIpos -lt 0 ] && { error "There are no SCSI Juke boxes currently configured." return $FAIL } echo "\n\nThe current SCSI Juke Box configuration is:\n" echo "\tUnit\tDevice\tHost Adapter\tHA\tID\tLUN\tBUS\n" minor=0 while read hatype dev ha id lun bus do [ "$dev" != "Sjk" ] && continue echo "\t$minor\t$dev$minor\t$hatype\t\t$ha\t$id\t$lun\t$bus" minor=`expr $minor + 1` # # Shame we can't figure out which SCSI devices are associated # with the juke box, the specification says they may share # either the same ID with differing LUN, or through seperate # IDs, and don't even have to share the same Adapter or bus. # So -- we don't know. # done < $CMSCSI return $OK } # main() ######################### set_trap DRIVER=Sjk # Name of driver to configure NAME="Juke Box" # Name for displaying to user DEVNAME=Sjk # Prefix of driver's device nodes DEVTYPE=-j # AHS - New flag for /usr/lib/mkdev/.scsi-ahs CFGFLAGS="-Hp" # Hardware and SCSI peripheral DEVCHAR="-c" # Character device only MAXUNIT=256 # Maximum number of units available FNS="Sjkinit Sjkopen Sjkclose Sjkioctl" umask 022 cd / clearscr while mesg="\n\nSCSI Juke Box Configuration Program\n 1. Install a SCSI Juke Box 2. Remove a SCSI Juke Box 3. View Current SCSI Juke Box configuration Select an option " quit="quit" do prompt || break # reset these flags prior to each pass through menu major= select=$cmd case $select in 1) add_juke ;; 2) rmv_juke ;; 3) show_juke ;; *) echo "\n Please select either 1, 2 or 3" continue ;; esac done if [ "$change" = "YES" ] then if [ "$_RELINK" -o "$_NOPROMPT" ] then klink else asklink && klink fi fi cleanup $OK #ifdef __STDC__ #pragma comment(exestr, "@(#) triccs.h 26.2 95/07/03 ") #else #ident "@(#) triccs.h 26.2 95/07/03 " #endif /* ** ident @(#) triccs.h 1.1 1 11/14/94 10:27:21 ** ** sccs_id[] = {"@(#) 1.1 triccs.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: triccs.h ** ** PURPOSE: Tricord K2 CCS equate file ** ** DEPENDENCIES: ** ** o None. ** ** ** REVISION HISTORY: ** FPR/CRN Date Author Description ** ** Rev 1.6 5/13/92 EDA Initial Version ** ** ---- 5/14/92 MWC Converted for SCO use ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990, 1991, 1992 ** All rights reserved. ** ** *************************************************************************** */ /* * --- CCS I/O register map definitions */ #define CCS_ADDR_LOCAL 0xcf0 /* Local I/O address */ #define CCS_DATA_LOCAL 0xcf2 /* Local I/O data */ #define CCS_SLOT 0xcf4 /* Slot Id */ #define CCS_EISA_ID 0xc80 /* CCS EISA Identifier */ #define CCS_FCR 0xc84 /* feature control register */ #define CCS_CFG_REG 0xc86 /* Configuration Register */ #define CCS_HEX_DSP 0xc87 /* Diagnostic display */ #define CCS_ATTR_PAGE 0xc8a /* Attribute RAM paging address */ #define CCS_ATTR_DATA 0xc8d /* Attribute RAM data register */ #define CCS_EN_PC_REG 0xc8e /* Sys Bus Parity Chk Enable Reg */ #define CCS_SENSE 0xc8f /* Sys Bus Parity Chk Sense Reg */ #define CCS_SR 0xc90 /* Module Status Register */ #define CCS_PE_SOURCE 0xc92 /* Sys Bus Parity Err Source Reg */ #define CCS_PE_STATUS 0xc93 /* Sys Bus Parity Err Byte Src. */ /* * --- LOCAL IO EQUATES */ #define CCS_MR1_UART 0x00 /* Mode Register */ #define CCS_MR2_UART 0x00 /* Mode Register */ #define CCS_SR_UART 0x04 /* Status Register */ #define CCS_CLKSR_UART 0x04 /* Clock Select Register */ #define CCS_CSR_UART 0x08 /* Command Register */ #define CCS_RHR_UART 0x0c /* Receive Holding Register */ #define CCS_THR_UART 0x0c /* Transmit Holding Register */ #define CCS_ACR_UART 0x10 /* Auxiliary Control Register */ #define CCS_IMR_UART 0x14 /* Interrupt Mask Register */ #define CCS_CTU_UART 0x18 /* Counter/Timer Upper */ #define CCS_CTUR_UART 0x18 /* Counter/Timer Upper Register */ #define CCS_CTL_UART 0x1c /* Counter/Timer Lower */ #define CCS_CTLR_UART 0x1c /* Counter/Timer Lower Register */ /************************************************************************** * --- CCS MASKS AND MISC EQUATES ************************************************************************** */ /* * --- Feature Control register multiple CPU extenstions */ /* * D[15] - Reset CPU1 * D[14] - Select cache organization * D[13] - Error check enable * D[12] - Select cache locks * D[11] - Reset CPU3 * D[10] - Reset CPU2 * D[9] - Level 2 cache enable * D[8] - Enable read for ownership */ /* * --- Feature Control register I/O 0c84h (CCS_FCR) */ /* * D[15:8] - Reserved * D[7] - CPU Reset * D[6] - Serial port DTR * D[5] - Assert SYS_ATTN * D[4] - Reserved * D[3] - Assert SYS_IMS_ATTN * D[2] - Over-ride Config. RAM * D[1] - Over-ride Config. RAM * D[0] - Enable Cache and Config. RAM */ #define CCS_CR_RESET_MSK1 0x8000 /* CPU 1 Reset */ #define CCS_CR_RESET_MSK2 0x0400 /* CPU 2 Reset (future)*/ #define CCS_CR_RESET_MSK3 0x0800 /* CPU 3 Reset (future)*/ #define CCS_CR_RESET_MSK 0x0080 /* CPU Reset */ #define CCS_CR_DTR_MSK 0x0040 /* Serial port DTR */ #define CCS_CR_SYS_ATN_MSK 0x0020 /* Assert SYS_ATTN */ #define CCS_CR_SYS_IMS_ATN_MSK 0x0008 /* Assert SYS_IMS_ATTN */ #define CCS_CR_CRAM_ORIDE1_MSK 0x0004 /* Over-ride Config. RAM */ #define CCS_CR_CRAM_ORIDE2_MSK 0x0002 /* Over-ride Config. RAM */ #define CCS_CR_CACHE_EN_MSK 0x0001 /* Enable Cache and Config. RAM */ #define CCS_CR_RESET 1 /* CPU Reset */ #define CCS_CR_SYS_ATN 1 /* Assert SYS_ATTN */ #define CCS_CR_SYS_IMS_ATN 1 /* Assert SYS_IMS_ATTN */ #define CCS_CR_OR_NORMAL 00 /* Normal operation */ /* cache not over-ridden, cache */ /* enabled, write back */ #define CCS_CR_OR_CDWT 01 /* Cache disabled, Write Through */ #define CCS_CR_OR_CEWT 10 /* Cache enabled, Write Through */ #define CCS_CR_OR_CETM 11 /* Cache enabled test mode */ #define CCS_CR_ENC_ENCRAM 1 /* Enable Cache and Config. RAM */ #define CCS_SLAVE_START_FCR CCS_CR_OR_NORMAL | CCS_CR_ENC_ENCRAM /************************************************************************** * --- Configuration register ************************************************************************** */ /* * D[7] - cpu-cache module reset one-shot * D[6] - master/slave * D[5] - Self test enable * D[4] - System bus enable * D[3] - BIOS H/DIAG L ROM decoding * D[2] - ROM enable, * D[1] - strong/weak write orders * D[0] - cache line size (32 or 64 bytes) */ #define CCS_CF_ONE_SHOT_MSK 0x80 /* cpu-cache module reset one-shot*/ #define CCS_CF_MSTR_SLAVE_MSK 0x40 /* master/slave */ #define CCS_CF_SELF_TEST_MSK 0x20 /* Self test enable */ #define CCS_CF_SYS_BUS_MSK 0x10 /* System bus enable */ #define CCS_CF_LROM_DECODE_MSK 0x08 /* BIOS H/DIAG L ROM decoding*/ #define CCS_CF_LROM_ENABLE_MSK 0x04 /* ROM enable,*/ #define CCS_CF_STRNG_WEAK_MSK 0x02 /* strong/weak write orders */ #define CCS_CF_LNSIZE_MSK 0x01 /* cache line size (32 or 64 bytes) */ #define CCS_CF_ONE_SHOT 1 /* cpu-cache module reset one-shot */ #define CCS_CF_MASTER 1 /* master/slave */ #define CCS_CF_SLAVE 0 /* master/slave */ #define CCS_CF_SELF_TEST_ENABLE 1 /* Self test enable*/ #define CCS_CF_SYS_BUS_ENABLE 1 /* System bus enable */ #define CCS_CF_LROM_DECODE_BIOS 1 /* BIOS ROM decoding */ #define CCS_CF_LROM_DECODE_DIAG 0 /* DIAG ROM decoding */ #define CCS_CF_LROM_ENABLE 1 /* ROM enable, */ #define CCS_CF_STRONG_ORDER 1 /* strong write orders*/ #define CCS_CF_WEAK_ORDER 0 /* weak write orders*/ #define CCS_CF_LNSIZE_64 0 /* cache line size 64 bytes*/ #define CCS_CF_LNSIZE_32 1 /* cache line size 32 bytes */ /* * --- HEX DISPLAY * * D[7] - AMBER LED * D[6:0] - GREEN LEDs */ #define CCS_AMBER_LED_MSK 0x80 /* CCS AMBER LED Mask */ #define CCS_GREEN_LED6_MSK 0x40 /* CCS Green LED #6 mask */ #define CCS_GREEN_LED5_MSK 0x20 /* CCS Green LED #5 mask */ #define CCS_GREEN_LED4_MSK 0x10 /* CCS Green LED #4 mask */ #define CCS_GREEN_LED3_MSK 0x08 /* CCS Green LED #3 mask */ #define CCS_GREEN_LED2_MSK 0x04 /* CCS Green LED #2 mask */ #define CCS_GREEN_LED1_MSK 0x02 /* CCS Green LED #1 mask */ #define CCS_GREEN_LED0_MSK 0x01 /* CCS Green LED #0 mask */ /* * --- Attribute RAM data register (rw, byte ) * * D[7:5] - reserved * D[4] - 64/32 Bit Slave * D[3] - Main memory H/EISA L * D[2] - Write Back H/Write Though L * D[1] - Memory Read only L * D[0] - Memory cachability L * */ #define CCS_BUS_SIZE_MSK 0x10 /* Bus Size 64Bits H/32Bits L */ #define CCS_MEM_EISA_MSK 0x08 /* Main memory H/EISA L */ #define CCS_WB_WT_MSK 0x04 /* Write Back H/Write Though L */ #define CCS_MEM_RO_MSK 0x02 /* Memory Read only L*/ #define CCS_SELECT_64BIT 1 /* Select 64 Bit Wide Bus */ #define CCS_SELECT_32BIT 0 /* Select 32 Bit Wide Bus*/ #define CCS_SELECT_MEMORY 1 /* Select Main memory */ #define CCS_SELECT_EISA 0 /* Select EISA memory*/ #define CCS_SELECT_WB 1 /* Write Back */ #define CCS_SELECT_WT 0 /* Write Though */ #define CCS_SELECT_MEM_RO 0 /* Memory Read only */ #define CCS_SELECT_MEM_RW 1 /* Memory Read/Write */ #define CCS_SELECT_MEM_CACHE 0 /* Memory cachable */ #define CCS_SELECT_MEM_NOT_CACH 1 /* Memory NOT cachable */ #define CCS_ATTR_RAM_SZ 0xffff /* size of CCS attribute RAM */ /* * --- Sys Bus Parity Checker Enable Reg. (rw, byte ) * * * D[7] - Enable Parity Check for byte 7 * D[6] - Enable Parity Check for byte 6 * D[5] - Enable Parity Check for byte 5 * D[4] - Enable Parity Check for byte 4 * D[3] - Enable Parity Check for byte 3 * D[2] - Enable Parity Check for byte 2 * D[1] - Enable Parity Check for byte 1 * D[0] - Enable Parity Check for byte 0 */ #define CCS_BEN7_MSK 0x80 /* Enable Parity Check for byte 7*/ #define CCS_BEN6_MSK 0x40 /* Enable Parity Check for byte 6*/ #define CCS_BEN5_MSK 0x20 /* Enable Parity Check for byte 5*/ #define CCS_BEN4_MSK 0x10 /* Enable Parity Check for byte 4*/ #define CCS_BEN3_MSK 0x08 /* Enable Parity Check for byte 3*/ #define CCS_BEN2_MSK 0x04 /* Enable Parity Check for byte 2*/ #define CCS_BEN1_MSK 0x02 /* Enable Parity Check for byte 1*/ #define CCS_BEN0_MSK 0x01 /* Enable Parity Check for byte 0*/ #define CCS_BEN_ALL_MSK 0xff /* Enable Parity Check for all bytes*/ #define CCS_EN_PC 0 /* Enable Parity Checker */ /* * --- Sys Bus Parity Checker Sense Reg. (rw, byte ) * * D[7] - Parity Sense for byte 7 * D[6] - Parity Sense for byte 6 * D[5] - Parity Sense for byte 5 * D[4] - Parity Sense for byte 4 * D[3] - Parity Sense for byte 3 * D[2] - Parity Sense for byte 2 * D[1] - Parity Sense for byte 1 * D[0] - Parity Sense for byte 0 */ #define CCS_SEN7_MSK 0x80 /* Parity Sense for byte 7 */ #define CCS_SEN6_MSK 0x40 /* Parity Sense for byte 6 */ #define CCS_SEN5_MSK 0x20 /* Parity Sense for byte 5 */ #define CCS_SEN4_MSK 0x10 /* Parity Sense for byte 4 */ #define CCS_SEN3_MSK 0x08 /* Parity Sense for byte 3 */ #define CCS_SEN2_MSK 0x04 /* Parity Sense for byte 2 */ #define CCS_SEN1_MSK 0x02 /* Parity Sense for byte 1*/ #define CCS_SEN0_MSK 0x01 /* Parity Sense for byte 0 */ #define CCS_SEN_ALL_MSK 0x0ff /* Parity Sense for all bytes */ #define CCS_SENSE_EVEN 0 /* Generate even parity (default) */ #define CCS_SENSE_ODD 1 /* Generate odd parity */ /* * --- Module Status Register (ro, word ) * * * D[15] - Cache self test pass/fail * D[14] - System bus address width (40 or 32 bits) * D[13:12] - cacheline size (256, 128, 64 or 32 bytes) * D[11:8] - module diagnostic switches * D[7] - Master/Slave * D[6] - Is it me? * D[5] - IMS present * D[4] - Flush/Sync/Init status * D[3] - Parity Error * D[2] - Module fault LED (formerly reserved) * D[1] - cpu shutdown cycle occurred (formerly reserved) * D[0] - module detected error Interrupt pending to IMS */ #define CCS_SR_CACHE_ST_MSK 0x08000 /* Cache self test pass/fail */ #define CCS_SR_BUS_WIDTH_MSK 0x04000 /* System bus address width */ /* (40 or 32 bits) */ #define CCS_SR_LNSIZE_MSK 0x03000 /* cacheline size */ /* (256, 128, 64 or 32 bytes) */ #define CCS_SR_SWITCH_MSK 0x00f00 /* module diagnostic switches */ #define CCS_SR_MSTR_SLV_MSK 0x00080 /* Master/Slave */ #define CCS_SR_IS_IT_ME_MSK 0x00040 /* Is it me? */ #define CCS_SR_IMS_PRESENT_MSK 0x00020 /* IMS present */ #define CCS_SR_FSIS_MSK 0x00010 /* Flush/Sync/Init status */ #define CCS_SR_PE_MSK 0x00008 /* Parity Error */ #define CCS_SR_RED_LED_MSK 0x00004 /* Module fault LED */ #define CCS_SR_SHUTDOWN_MSK 0x00002 /* cpu shutdown cycle occurred */ /* * DP54C CCS Module Extended status ports (zC95,zC94,zC93,zC92) * * zC92 - CPU0 * zC93 - CPU1 * zC94 - CPU2 * zC95 - CPU3 * * D[7:6] - Cache Memory Installed * 00 - 512 kb cache * 01 - 1 Mb cache * 10 - 2 Mb cache * 11 - 4 Mb cache * D[5] - Cache Self-Test Active * D[4] - Cache Self-Test Failed * D[3] - CPU Shutdown Occured * D[2] - Reserved * D[1] - CPU parity error * D[0] - Internal Error */ #define CCS_SR_ST_ACTIVE_DP54 0x00020 /* Self-Test Active */ #define CCS_SR_ST_FAILED_DP54 0x00010 /* Self-Test Failed */ #define CCS_SR_SHUTDOWN_MSKDP54 0x00008 /* cpu shutdown cycle occurred */ /* for DP54C CCS */ #define CCS_SR_PE_MSKDP54 0x00002 /* Parity Error for DP54C CCS */ #define CCS_SR_INTERNL_DP54 0x00001 /* Internel Error */ #define CCS_SR_IMSATTN_MSK 0x00001 /* error Interrupt pending to IMS */ #define CCS_SR_CACHE_ST_PASS 1 /* Cache self test pass */ #define CCS_SR_CACHE_ST_FAIL 0 /* Cache self test pass */ #define CCS_SR_BUS_WIDTH_40 1 /* System bus address width 40 bits */ #define CCS_SR_BUS_WIDTH_32 0 /* System bus address width 32 bits */ #define CCS_SR_LNSIZE_32 0 /* cacheline size 32 bytes */ #define CCS_SR_LNSIZE_64 1 /* cacheline size 64 bytes */ #define CCS_SR_LNSIZE_128 2 /* cacheline size 128 bytes */ #define CCS_SR_LNSIZE_256 3 /* cacheline size 256 bytes */ #define CCS_SR_MASTER 1 /* master/slave */ #define CCS_SR_SLAVE 0 /* master/slave */ #define CCS_SR_IT_IS_ME 1 /* Yes its is! */ #define CCS_SR_IMS_PRESENT 1 /* IMS is installed */ #define CCS_SR_SYNC_FLUSH 1 /* Flush or Sync in progress */ #define CCS_SR_RED_LED_ON 1 /* Module fault LED */ #define CCS_SR_SHUTDOWN 1 /* cpu shutdown cycle occurred */ #define CCS_SR_IMSATTN 1 /* error Interrupt pending to IMS */ /* * --- Sys Bus Parity Error Source Reg.(ro, byte ) * * * D[7:4] - Slave id on parity error * * D[3] - parity error on slave write (formerly reserved) * This bit when a one indicates that the module has * detected a parity error on data written to the module * * D[2] - parity error on cpu read (formerly reserved) This * bit when a one indicates that the module has detected * a parity error on a cpu read. * * D[1] - local cache read parity error (formerly bit 2= * local parity error) This bit when a one indicates * that a local cache parity error on a cache read has * been detected * * D[0] - local cache copy back parity error This bit when * a one indicates that a local cache parity error on * a copy back has been detected */ #define CCS_PE_SLV_ID_MSK 0xf0 /* Slave id on parity error */ #define CCS_PE_SLV_WRT_MSK 0x08 /* parity error on slave write */ #define CCS_PE_CPU_READ_MSK 0x04 /* parity error on cpu read */ #define CCS_PE_LOC_CREAD_MSK 0x02 /* local cache read parity error */ #define CCS_PE_LOC_CPY_BACK_MSK 0x01 /* local cache copy back parity error */ #define CCS_PE_SLV_WRT 1 /* parity error on slave write */ #define CCS_PE_CPU_READ 1 /* parity error on cpu read */ #define CCS_PE_LOC_CREAD 1 /* local cache read parity error */ #define CCS_PE_LOC_CPY_BACK 1 /* local cache copy back parity error */ /* * --- Parity Error Byte source Reg. (ro, byte 0zc93) * * * Bits [7] - Parity byte 7 error. * Bits [6] - Parity byte 6 error. * Bits [5] - Parity byte 5 error. * Bits [4] - Parity byte 4 error. * Bits [3] - Parity byte 3 error. * Bits [2] - Parity byte 2 error. * Bits [1] - Parity byte 1 error. * Bits [0] - Parity byte 0 error. */ #define CCS_PE_BYTE7_MSK 0x80 /* Parity byte 7 error. */ #define CCS_PE_BYTE6_MSK 0x40 /* Parity byte 6 error. */ #define CCS_PE_BYTE5_MSK 0x20 /* Parity byte 5 error. */ #define CCS_PE_BYTE4_MSK 0x10 /* Parity byte 4 error. */ #define CCS_PE_BYTE3_MSK 0x08 /* Parity byte 3 error. */ #define CCS_PE_BYTE2_MSK 0x04 /* Parity byte 2 error. */ #define CCS_PE_BYTE1_MSK 0x02 /* Parity byte 1 error. */ #define CCS_PE_BYTE0_MSK 0x01 /* Parity byte 0 error. */ /* * --- CCS HEX Display POST Codes */ #define CCS_PC_NULL 0x00 /*Null (contents of display at reset) */ #define CCS_PC_READY 0x70 /* Module "Ready" (used by hs proto */ #define CCS_PC_LAMP_TEST 0x7f /* Lamp Test Post code */ #define CCS_PC_HEART_BEAT 0x40 /* CCS Module Heart Beat Code Mask */ /* * --- CCS HEX Display ERROR Codes */ #ifdef __STDC__ #pragma comment(exestr, "@(#) triebs.h 26.1 95/06/26 ") #else #ident "@(#) triebs.h 26.1 95/06/26 " #endif /* ** ident @(#) @(#) triebs.h 1.3 1 11/4/94 07:09:44 ** ** sccs_id[] = {"@(#) 1.3 triebs.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: triebs.h ** ** PURPOSE: Tricord K2 EISA Bridge subsystem equate file ** ** DEPENDENCIES: ** ** o None. ** ** ** Rev 1.6 5/13/92 EDA Initial Version ** ** ---- 5/14/92 MWC Converted for SCO use ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990, 1991, 1992 ** All rights reserved. ** ** *************************************************************************** */ /* ***************************************************************************** ** ** --- EBS MEMEORY MAP EQUATES ** ***************************************************************************** */ #define EBS_CONV_MEM 0x00000000 /* Start of conventional mem. */ #define EBS_DISPLAY_MEM 0x000a0000 /* Start of 128k Video Display mem. */ #define EBS_OPTION_MEM 0x000c0000 /* Start of 128k Option ROMs */ #define EBS_BIOS_ROM 0x000e0000 /* Start of 128k BIOS ROM */ #define EBS_HIGH_MEM 0x00100000 /* Start of high dram */ #define EBS_DIAG_ROM 0xffe00000 /* Start of EBS resident DIAG ROM */ #define EBS_BIOS_REMAP 0xfff00000 /* Remap of 0e0000-0fffff BIOS RO */ /**************************************************************************** ** ** --- EBS IO REGISTERS ** ***************************************************************************** ** */ #define EBS_HEX_DISPA 0x0080 /* EBS Hex Display Reg Alias (wo, byte) */ #define EBS_SBCR1 0x0c00 /* EBS Cntrl Reg1 ( rw, byte) */ #define EBS_30_40_LEDS 0x0c01 /* Model 30/40 LED Cntrl Reg Emu (ro, byte) */ #define EBS_TCR 0x0c02 /* Trans. Ctrl Reg (rw, byte) */ #define EBS_SBCR2 0x0c03 /* EBS Cntrl Reg2 (rw, byte) */ #define EBS_ECOID 0x0c04 /* EBS ECO ID Reg. (ro, byte) */ #define EBS_SR 0x0c05 /* EBS Error Status Reg (rw, byte) */ #define EBS_PE_SR 0x0c06 /* Parity Error Status Reg. (ro, byte) */ #define EBS_SBTO_SR 0x0c07 /* System Bus Time Out Stat. Reg (ro, byte) */ #define EBS_HEX_DSP 0x0c08 /* EBS Hex Display Register (rw, byte) */ #define EBS_ATTR_DATA 0x0c09 /* Attribute RAM data register (rw, byte) */ #define EBS_ATTR_PAGE 0x0c0a /* Attribute RAM paging address (rw, word) */ #define EBS_IRQ5_SEL 0x0c0c /* IRQ5 Select Register (rw, word) */ #define EBS_MPIC_POLARITY 0x0c0e /* EISA to MPIC Polarity Reg. (rw, byte) */ #define EBS_MPIC_SEL 0x0c0f /* EISA to MPIC Select (rw, byte) */ #define EBS_NVM_ADDR_LSB 0x0c10 /* EISA NVM Address Reg. (LSB) (rw, byte) */ #define EBS_NVM_ADDR_MSB 0x0c11 /* EISA NVM Address Reg. (MSB) */ /* (rw, byte) (bits 7-5, not used) */ #define EBS_NVM_DATA 0x0c12 /* EISA NVM Data Register (rw, byte) */ #define EBS_EISA_ID 0x0c80 /* EBS EISA Identifier (ro, dword)*/ /* ** - Product id portion of eisa id from EISA Bridge Subsystem EISA id ** - If product id is 02 then we are running on a model 30/40. ** - If product id is 08 then K2 */ #define IMS_3040_PRODUCT_ID 2 #define IMS_K2_PRODUCT_ID 8 #define EBS_PIC_CR1 0x0cc0 /* 3rd PIC command register #1 (rw, byte) */ #define EBS_PIC_CR2 0x0cc1 /* 3rd PIC command register #1 (rw, byte) */ /* ** Edge / level control registers */ #define EBS_PIC1_ELCR_PORT 0x4d0 #define EBS_PIC2_ELCR_PORT 0x4d1 #define EBS_NMI_STATUS_PORT 0x0061 #define EBS_NMI_ESTATUS_PORT 0x0461 /* ***************************************************************************** ** ** --- EBS MASKS AND MISC. EQUATES ** ***************************************************************************** */ /* ** ** ---EBS Cntrl Reg1 ** ** Bit Description Bit="0" Bit="1" Default Normal ** ** D[7] Cache line size (EBS only) 32 bytes 64 bytes 0 1 ** D[6] Reserved 0 0 ** D[5] System Bus Timeout Enable disabled enabled 0 1 ** D[4] Concurrent Mode Enable disabled enabled 0 1 ** D[3:2] CPU_MISS Mode <1:0> 0,0 Normal 0,0 0,0 ** 0,1 Reserved ** 1,0 Reserved ** 1,1 Reserved ** D[1:0] System Bus Arb Mode <1:0> 0,0 Normal 0,0 0,0 ** 0,1 Reserved ** 1,0 Reserved ** 1,1 Reserved ** */ #define EBS_CACHE_LN_SZ_MSK 0x80 /* Cache line size (EBS only) */ #define EBS_SYS_BUS_TO_MSK 0x20 /* System Bus Timeout Enable */ #define EBS_CONC_MODE_MSK 0x10 /* Concurrent Mode Enable */ #define EBS_MISS_MODE_MSK 0x0C /* CPU_MISS Mode <1:0> */ #define EBS_ARB_MODE_MSK 0x03 /* System Bus Arb Mode <1:0> */ /* ** ** ---Trans. Ctrl Reg ** ** Bit Description Bit="0" Bit="1" Default Normal ** ** D[7:5] Mstr Rd Prefetch Md <1:0> ** 0,0,0 Never ftch ln 0,0,0 1,0,1 ** - 0,0,1 LB & CGE4/ No PF ** 0,1,0 LB & CGE4/ PF @ 3wds ** 0,1,1 LB & CGE4/ PF @ 6wds ** 1,0,0 LB & (CGE4+PB)/PF @ 3wds ** 1,0,1 LB & (CGE4+PB)/PF @ 6wds ** 1,1,0 LB/ PF @ 3wds ** 1,1,1 LB/ PF @ 6wds ** D[4] Mstr Wrt Ln Enable disabled enabled 0 1 ** D[3] LIOWAIT no delay delay 0 0 ** D[2] Posted Write Enable disabled enabled 0 1 ** D[1:0] Slv Posted Wr Depth <1:0> 0,0 0,0 0,0 ** 0,1 ** 1,0 ** 1,1 ** */ #define EBS_MSTR_RD_PFM_MSK 0xE0 /* Mstr Rd Prefetch Md <1:0> */ #define EBS_MSTR_WLE_MSK 0x10 /* Mstr Wrt Ln Enable */ #define EBS_LIOWAIT_MSK 0x08 /* LIOWAIT */ #define EBS_POST_WE_MSK 0x04 /* Posted Write Enable */ #define EBS_SLV_PWD_MSK 0x03 /* Slv Posted Wr Depth <1:0> */ /* ** ** ---EBS Cntrl Reg2 ** ** Bit Description Bit="0" Bit="1" Default Normal ** ** D[7:4] Reserved (always read as zeros) ** D[3] EBS to System I/O Enable protect enabled 0 0 ** D[2] Diag FLASH ROM Disable enabled disabled 0 0/1 ** D[1] BIOS FLASH ROM Disable enabled disabled 0 0/1 ** D[0] EBS Parity Check Enable disabled enabled 0 1 ** */ #define EBS_ETS_IO_EN_MSK 0x08 /* EBS to System I/O Enable */ #define EBS_DFRD_MSK 0x04 /* Diag FLASH ROM Disable */ #define EBS_BFRD_MSK 0x02 /* BIOS FLASH ROM Disable */ #define EBS_EPCE_MSK 0x01 /* EBS Parity Check Enable */ /* ** ** ---EBS ECO ID Reg. ** ** D[7:4] Lower nibble of EISA Product ID (bits 11:8) ** D[3:0] Lower nibble of EISA Rev ID (bits 3:0) ** */ #define EBS_EISA_PID_MSK 0xF0 /* Lower nibble of EISA Product ID (bits 11:8) */ #define EBS_EISA_RID_MSK 0x0F /* Lower nibble of EISA Rev ID (bits 3:0) */ /* ** ** ---EBS Error Status Reg ** ** Bit Description ** ** D[7] SYS_IMS_ATTN generated by EBS ** D[6] EBS Master to System Bus Address Phase Timeout ** D[5] EBS Master to System Bus Data Phase Timeout ** D[4] Data FIFO overrun (EISA to Sysbus) ** D[3] Data FIFO overrun (Sysbus to EISA) ** D[2] Data FIFO error (Sysbus to EISA) ** D[1] Address FIFO overrun (EISA to Sysbus) ** D[0] Address FIFO overrun (Sysbus to EISA) ** */ #define EBS_IMS_ATTN_MSK 0x80 /* EBS driving SYS_IMS_ATTN */ #define EBS_APTO_MSK 0x40 /* EBS Master to System Bus Address Phase Timeout */ #define EBS_DPTO_MSK 0x20 /* EBS Master to System Bus Data Phase Timeout */ #define EBS_DFIFO_OR_ETS_MSK 0x10 /* Data FIFO overrun (EISA to Sysbus) */ #define EBS_DFIFO_OR_STE_MSK 0x08 /* Data FIFO overrun (Sysbus to EISA) */ #define EBS_DFIFO_ERROR_MSK 0x04 /* Data FIFO error (Sysbus to EISA) */ #define EBS_AFIFO_OR_ETS_MSK 0x02 /* Address FIFO overrun (EISA to Sysbus) */ #define EBS_AFIFO_OR_STE_MSK 0x01 /* Address FIFO overrun (Sysbus to EISA) */ /* ** ---Parity Error Status Reg. ** ** Bit Description ** ** D[7:5] Master ID Number 000=IMS (or no error) ** (valid only when one or more of bits 3:0 are set) ** 001=Slot J9 ** (first error captured only) ** 010=SlotJ10 ** 011=SlotJ11 ** 100=SlotJ12 ** 101=SlotJ13 ** 110=SlotJ14 ** 111=SlotJ15 ** D[4] EISA Master Read/EISA Slave write ** (valid only when one or more of bits 3:0 are set) ** D[3] Parity Error on data received from system bus, ** byte 7 (bits 63:56) or 3 (bits 31:24) ** D[2] Parity Error on data received from system bus, ** byte 6 (bits 55:48) or 2 (bits 23:16) ** D[1] Parity Error on data received from system bus, ** byte 5 (bits 47:40) or 1 (bits 15:8) ** D[0] Parity Error on data received from system bus, ** byte 4 (bits 39:32) or 0 (bits 7:0) ** */ #define EBS_PE_MID_MSK 0xE0 /* Master ID Number */ #define EBS_MSTR_SLV_MSK 0x10 /* EISA Master Read/EISA Slave write */ #define EBS_PE_BYTE7_OR_3_MSK 0x08 /* PE on data rec from sys bus, byte 7 or 3 */ #define EBS_PE_BYTE6_OR_2_MSK 0x04 /* PE on data rec from sys bus, byte 6 or 2 */ #define EBS_PE_BYTE5_OR_1_MSK 0x02 /* PE on data rec from sys bus, byte 5 or 1 */ #define EBS_PE_BYTE4_OR_0_MSK 0x01 /* PE on data rec from sys bus, byte 4 or 0 */ /* ** --- HEX DISPLAY ** ** D[7] - AMBER LED ** D[6:0] - GREE N LEDs */ #define EBS_AMBER_LED_MSK 0x80 /* EBS AMBER LED Mask */ #define EBS_GREEN_LED6_MSK 0x40 /* EBS Green LED #6 mask */ #define EBS_GREEN_LED5_MSK 0x20 /* EBS Green LED #5 mask */ #define EBS_GREEN_LED4_MSK 0x10 /* EBS Green LED #4 mask */ #define EBS_GREEN_LED3_MSK 0x08 /* EBS Green LED #3 mask */ #define EBS_GREEN_LED2_MSK 0x04 /* EBS Green LED #2 mask */ #define EBS_GREEN_LED1_MSK 0x02 /* EBS Green LED #1 mask */ #define EBS_GREEN_LED0_MSK 0x01 /* EBS Green LED #0 mask */ /* ** ** ---IRQ5 Select Register ** ** Bit Description Bit="0" Bit="1" D N ** ** D[15] Slct SYS_ATTN_15 as input to IRQ5 ignored selected 0 0 ** D[14] Slct SYS_ATTN_14 as input to IRQ5 ignored selected 0 0 ** D[13] Slct SYS_ATTN_13 as input to IRQ5 ignored selected 0 0 ** D[12] Slct SYS_ATTN_12 as input to IRQ5 ignored selected 0 0 ** D[11] Slct SYS_ATTN_11 as input to IRQ5 ignored selected 0 0 ** D[10] Slct SYS_ATTN_10 as input to IRQ5 ignored selected 0 0 ** D[9] Slct SYS_ATTN_9 as input to IRQ5 ignored selected 0 0 ** D[8] Slct SYS_ATTN_IMS as inpt to IRQ5 ignored selected 0 0 ** D[7:3] Reserved (always read as zeros) 0 0 ** D[2] Slct EISA IRQ5 as input to IRQ5 ignored selected 0 0 ** D[1] Slct Third PIC as input to IRQ5 ignored selected 0 1 ** D[0] Slct IRQ5 active polarity act LOW act HIGH 0 1 ** */ #define EBS_SYS_ATTN_15_MSK 0x8000 /* Slct SYS_ATTN_15 as input to IRQ5 */ #define EBS_SYS_ATTN_14_MSK 0x4000 /* Slct SYS_ATTN_14 as input to IRQ5 */ #define EBS_SYS_ATTN_13_MSK 0x2000 /* Slct SYS_ATTN_13 as input to IRQ5 */ #define EBS_SYS_ATTN_12_MSK 0x1000 /* Slct SYS_ATTN_12 as input to IRQ5 */ #define EBS_SYS_ATTN_11_MSK 0x0800 /* Slct SYS_ATTN_11 as input to IRQ5 */ #define EBS_SYS_ATTN_10_MSK 0x0400 /* Slct SYS_ATTN_10 as input to IRQ5 */ #define EBS_SYS_ATTN_9_MSK 0x0200 /* Slct SYS_ATTN_9 as input to IRQ5 */ #define EBS_SYS_ATTN_IMS_MSK 0x0100 /* Slct SYS_ATTN_IMS as inpt to IRQ5 */ #define EBS_IRQ5_MSK 0x0004 /* Slct EISA IRQ5 as input to IRQ5 */ #define EBS_3RD_PIC_MSK 0x0002 /* Slct Third PIC as input to IRQ5 */ #define EBS_IRQ5_PLRTY_MSK 0x0001 /* Slct IRQ5 active polarity */ /* ***************************************************************************** ** 82351 LOCAL I/O EISA SUPPORT PERIPHERAL (LIO.E) ***************************************************************************** */ #define EBS_LIOE_CADDR 0x022 /* LIOE Configuration Index Register */ #define EBS_LIOE_CDATA 0x023 /* LIOE Configuration Data Register */ /* ** ** --- LIOE Configuration Registers (Accessed via EBS_LIOE_CADDR and ** EBS_LIOE_CDATA */ #define EBS_LIOE_IDREG 0x21 /* I.D. Register */ #define EBS_LIOE_PERA 0xc0 /* Peripheral Enable Register A */ #define EBS_LIOE_PERB 0xc1 /* Peripheral Enable Register B */ #define EBS_LIOE_PCR 0xc2 /* Parallel Configuration Register */ #define EBS_LIOE_SCRA 0xc3 /* Serial Configuration Register A */ #define EBS_LIOE_FDCCR 0xc4 /* Floppy Disk Controller Config. Reg */ #define EBS_LIOE_SCRB 0xc5 /* Serial Configuration Register B */ #define EBS_LIOE_COM3LA 0xc6 /* COM3 Prog. Chip Select Low Address */ #define EBS_LIOE_COM3HA 0xc7 /* COM3 Prog. Chip Select High Address */ #define EBS_LIOE_COM4LA 0xc8 /* COM4 Prog. Chip Select Low Address */ #define EBS_LIOE_COM4HA 0xc9 /* COM4 Prog. Chip Select High Address */ #define EBS_LIOE_PCSMR0 0xd0 /* Prog. Chip Select Mask Reg. 0 */ #define EBS_LIOE_PCSMR1 0xd1 /* 1 */ #define EBS_LIOE_PCSMR2 0xd2 /* 2 */ #define EBS_LIOE_PCSMR3 0xd3 /* 3 */ #define EBS_LIOE_PCSLA0 0xd4 /* Prog. Chip Select Low Addr. 0 */ #define EBS_LIOE_PCSLA1 0xd5 /* 1 */ #define EBS_LIOE_PCSLA2 0xd6 /* 2 */ #define EBS_LIOE_PCSLA3 0xd7 /* 3 */ #define EBS_LIOE_PCSHA0 0xd8 /* Prog. Chip Select High Addr. 0 */ #define EBS_LIOE_PCSHA1 0xd9 /* 1 */ #define EBS_LIOE_PCSHA2 0xda /* 2 */ #define EBS_LIOE_PCSHA3 0xdb /* 3 */ #define EBS_LIOE_CRPLRA 0xdc /* Config. RAM Page Location Reg. A */ #define EBS_LIOE_CRPLRB 0xdd /* Config. RAM Page Location Reg. B */ #define EBS_LIOE_CRCR 0xde /* Configuration RAM Command Reg. */ #define EBS_LIOE_EISAID0 0xe8 /* EISA ID Register 0 */ #define EBS_LIOE_EISAID1 0xe9 /* 1 */ #define EBS_LIOE_EISAID2 0xea /* 2 */ #define EBS_LIOE_EISAID3 0xeb /* 3 */ #define EBS_LIOE_EN 0x2 /* Ident LIO.E for programming */ #ѥ$}r]d%IDP@ larAHK% a%$n"˿\q;DWWqs33Y 䀢&(.bD 0~ېṶ\ޮw+j𺫻;{ے74=Y$JI%$6KI&I=e)7uV>8Q$):zWK֘H}Cǃ]8Խ:Ij=8<|%%B ּ_q~'L1s=]įam;[ke.P}-T20em|WE?!_~e{WZRn_Gث {gn0)0Mo[F­ƣM-Vek- ąD.%0HAbl Y[ca%$D.Ixd5d4y!vhoM z~V*knfjI60T׊;޾㕳x=QbΰT-۫X Ԏ2M ;N#oaN) e06#``Hڷ\@$XKā\yEitIFuC) ol ae}C9>l` _{_ G mef]҇IXuy@H9ּod:a#X 8amS"1tKX6ԐmB^#p_)~@zێͱ>rlAfW o]\ 컁9,p>)e%~$2mXI?c(c>8%#Y7uE(`qsIZg]Ʌg(d=@QG&',dQU+L2 Fl#w`WYN7~bo)>E_HPjwL驅 6JWK eв{WX~AlT]ȕa{9Yᄎvr;AOة bՍKgX-̴pѬ!mW$d8kK>+CfEǃ%ڸ kѽ`W}g{#cw"6kg 5К>F̷ܰdNA%tQx;|mIࡍRfD.LH^7&c'}_g+Y%+;+_ p1˅] R8. k#Ԉ7wXE'QZ@uSYޛ,L3׃nMd-m~fhtR?mij۽^4 Hrܛ8,컱*HZIe,kÆbMZRJKM#;wre^1u+g2j=ٲTݭZ|=U:j VIC' }Ť[c_ͣ^*,\) h8 OEگ+j']M=QcE˲?&W-0 )pft~[܇>10[oZr7bm'CE)4M*]:E2SZʹ72 ͛&@o̵2uH,bWcQ'K,쿔xX; Z6jnPLy":ӲRt4!ϕ_/|H\mC-"aIּ:_>;K.Iefa_{岼>"fmu/bή3Sm'n.M&ZOg.=D7uR@"5Kf7u@PN+a'e6hrXźk?( l^Pl|l:ps֓a+ k8s-qrm|5ӯՅ`4bҖv[{nBTPVpO;[y] 2=s_06k\j*4 6i/v JS8c/`y"i/-Rw"|SAqx\~zoy\pUDRY(zfVmCB,T Hb}U}]yc1]N5Tns@ [(Pb :jůZJ$ _/Ffߊв2k57VW3#AvvVߚϱԈ]^Yapړ{Վ/]I "C6q ̭ }ߴLKdvU؋ NF!dI&^ )(dm0 P{͑*{86/{B3GBƵl웅GﯥxろpR^B Gƕ١] Kﬔ}}yvZsE167#b)ť\b؀Cf &`]o$X=hC Үk4֣,CrHdȡ :KfKZ\ݐf4~Lm޹|5[tGVFA~ zSDrJy^`bo\jC( MCfv V=ۈhm+,SK '\W8е֐g5c3/o(K4Xã+Z24õѶ%L~(&\J]h8s 8eb$B,%y4T'mzN3fnX^ayC ψaа!"Ņ ^".0~V2d֝׆̳sx`bhEv Xr`8`ŀ}9} W:0bVnM Ũb}+#╨Gū5d9V# ٫uǬqJ =+fN]q7!4msgXScO 2&%Oυyd`οF{ }u~[3U}s⚤(y~  td&W~r3#\#4l7l+UVIOǻb%0ٌؚ!8 egnl?6|+M)#I< >]}Ek^.H ,rJwD@<7SJ KbPCE"y +~i3qgEBɰDn!K*ލ\)?C;(p'C qeqb,~ٯ N'z4\O;5\E"OgשJyOP'.B3[ X HLG<xڅ1 ]Yܐ켬M6f3\(S?"xlJo`m3 Hv!-XC /X{#X^l2>rMwu͜R&=o/[Z"ⵗ3 B;?jx}ɾ˓Z4"0ˇF~TmkũvR (w9~g,S>n3b뛜r [nqu#B,n~\`ن7(}Կ!XCCX]|%HQkxL.SbM'YL9i[ŹؙL5aln&#N!ѽ- b -!/wIke 8VBܩCPp) u:hcjbHwaѰz(-Wm4>FWv"!nl3[N20r %/~,S0ٝ#An2}q(pg3Έc=_djc%wvאFm;!zJV79i#p 0iae{Yy]@qI);Sgט;[>m ٞu73- ۫zxpMyq͈"L3BO SIޖiδxCudyJ*~d`,nh,o(c %{!m1W,[`̌Jy s hZ:"{\ݰugduU̫oYWB |=c#Ep?05HЂZI򂛟I,>7⇐JO@$ulL+VLZdL3̈u8!|s? ,,YD\8!Hy Cf4SkRh-C4L OdX:|+j*ґm 1kצ䕯1 +R6(o?9LvcVs>9%y䞞,25n;3n3> o@qq (Sџie! P,@:X| |’ (F$µ6߲Z2`(4ɍ0N5&TCkɶz}hG׻0n?X=~dwoKe8WX'Azة;\'c#KF=!tѺu{՝sƻQl_,X8鈃wnw+o{.FHв C=u8""'~VΚ? n'4gRT7h 6dQUqy&VWX ~ LJ9|W͆f -OHKnc(<,y%}|@ %Mk&M6MXKX8C*,> 0. pKs!01c>Rv<2LމV+&TSw|m1s JTRV07!UJσѶ Pպ)T{"[Njj0?@v? ZplGw@^88`՘l=&R;3Rw sA}XAE/0] w:٘O0ވq 7[ؗ[X= 3w\C +qD2ӋsxBu~!Z/E(}NEn:Q+ט/'x <[(ѨI: Ipstmmj 7 [q1mR:e$JVyrhM+wvKbǷ*D LD \4؆Bc; ^5Zѵ=Vo~]iA$Qt׍`pHm0*,=kBGq_kqT9.܌n:W`|q7w~Dyb"AXu@tDl6e:}K8ls eTnɅ4Qsl%BJ~.8W!iw` plZJ/"/Dd]E/KiGciD$uJ.I|Μ2hU'U( }vL7uNmKnoz5u FUZ}Q0#<Kdc{qӍQ [:쁙t_$&u]7oܝI |yEӍu I\~au)K,G{볰8Xw EvИ ܨvC +c"ǰ~#w_-ji,s<՟w%Ա44qJ_Wq`u#%f<\dvD/4;5'a>rb\rc†Zx}*:*{{J D)%?%+aWQ3wyqk$wabYG-ȗ((`*5eזՃ#Zϵr'JbB>يڏn͉T~fjtJ*]sCa&|,?7jP=ˇ{sPD@{@ޠ=pZ=C=Cf$Kva=XǤ{iޓ3X=sAd=KΥgz6hNnjcqL6ֻIm}>4^<ZZα9E+}=-81NW(ԽrjRTsYru &-%M8ncSR aAuirh/G0OZHzM%[Ny=%n=Cꊀ7}UU̧xutjkvSE,#zgNiJʺ@^'9JYJɰ=i˧2%0zZҽ|K:*kɚukRuNk5/]$|xEE'KON=)ӮԹyɋP~6QZK녵uC)ަș XRۚJ`| Yi|tJzI*N+x4SMR6L⁴OQ^ȹ߭}R8dC\2}3t}-H:NN()iJ 4%U= U'o@E&%`acjөrL[+WV.듮u^3rLN+x OidGr;|R 0bIqu5^k)*k+ԦuJ#Ю s\>d1:Zt+SUVuiҼr xCљYR ’1_H5oNK;nC#*Ⱦ>~{* ;t&ݫ ce,淮W #Rhh(4?{y6Z4shqb6@ #p%NMmU7cLdwZ!OE[O-a蝆AZwnucETs?E~zf}-MZ&EyGPڡZG@.Ώ1]K0D؆bTUR~QzW:L$a٥3kj몜&@?c]+6{;x2tP uUUSYZseY6UU94Nїj2oɵ^u%em]mݜmA-m;WDZlήI7 6:g c- ~[NucG FX|aikꖩ52ACڴԚ)=*o>{N, ,2ty:!ڀ xg]KǃJ4gNhI"*[?iΤ6iM[WV˭y:Wz=/fWYotؽ{߇{ =ه({n=xCL=߇zv߱Z{ZpNa.]z:c5=|}Fa$1Yu]uq} jc k@ξ{R r1{)&4:J¬P$Rjxk5 ĽASVZK3f 5NV/vO(0,y|*dNaR&?9}o+W@Vޔ1:ibݝi>0+3O_6','Kr)9sN:CJڪxKy\kG:8xZS_C҄ 32Ї\LΛئrb}̠nɧgb FtL z d/ChhZ %4k05w! Sӧ8_7yRQ,_Ӧ(_EL5+ODoz3AkU/ M?ּdNV>Qu>pΛtE64G목kαe_Vi`r}`R2]kW33'ͽ+CkX͵B9drv,0'ZlG8<%O⡊7m`CL䖠قM4c9Nq-caK3 0~a.0 =Ip|xv"3-ޚ9qCN+;Ww}4LsEJ|Hbp>6_wFߒˍZsl) ~Zı¤@z:5G#q,jև>ÌMr, Mig';~y%9s<03k7siz skH&J!,Q z5G*=Q*?(*>rPTC)28QȢH(I  I:*!xIQA>iŽZkj~ lt ?H! Bv+ >QlD8O~kqsu,zQ=@>uG*07=`V@$ 7 5G 56>8/I*1^{ =i ^uy}XQvT{$2 b6 `qB @(*>QzlEm|t;BX@ޒ /b~Aq 59=LI N"O'A>Ubrxޢ|V'~JG  ( ,$(Hǟ@9d؃E`^Tv(1caT"bE#+P5Q/~9(EnUfηn4 ot~n>QQ!G i2I/@GE(EQ"N鞬(䙭 : 6Gd{d{S E֊11'"60SE;Q1PpQF>4#{SFqulQoMsDQG =P7EQ3IOfIYe]f7HtԠXf}I('f}Iv('(@;g>s3ߛ' h|48J OEAtQ6Ph{Pڃ"aF́Уؕ(EGl ~C焀~C},JIZ]3r~{r~|IegQE(HN:Iؔ_QE@@?Š?nPĝ|]=8㌮(F A?RzQ ; 6aG Pٚ'tGݡ["(nGh㍋:{=#`rǰ/#;EHػTQ'O oE O7E҂M"{P7MǜlyOP7(Ϡ< @ޙ\mRb=(TQG8Fuhۢ,y=,q3x(QF]f8f/@??nQGr\(j G8QcwE4 "S? z&#A(@(BNy۠A?>(O"pxQƢEf2'Vh8.Fh"{?dOtnc'V`ihD+imPaN;ݻudtY9tAPi,F8tli,,"] Նa6w}׻޾v;dM;\Bz:ӄd5BNH 2܈} dw8Ìz[&0ޜcߝcd'$Q =ufMBoP~PIjOv#q@|x `8'fT}QGG8hsC࣪<݈O(N'@v@,|W=wa>UGO 3)=3zB~|hr|` >`YՌ ҄*Lcq~'߄*ݿ4;!>%YUY_9RZ;L _kN y H:= a×NAԽz&MO P'| ' >`O͕OvGN'u;0' p'=O`a?'?֝z!:]+Z# !,$wbG`4ŀUמ<`Ey M`}uMv؈W߀=ZsbzgVׄlOVaw !9O)}Lb#{h缺&Mp㟆H"F# a4Bw7,Q ;@FWP;1|'\Mf{aݰwA<͡=0O m\< ʴ=rV2o|ͩ;-O[;S?qEl z<0 @q}|HR,FH΀ƥz=P)   l:B\bhm{8 \dA<]@|pۀ_@_Bc@D-P_ BQ#ZiX mhQ:Sp;[Ӯliփ_?CrƤٻv.W4R adhޛ#GlɊAq^GDHguQY0B&ڔ$|GČGnU1` *6:*"l^D߿ (ޥvEƖ*HT? 2kM־22 MVԖYPiN6<fu{UuQبuQtWPgAUFBl30XEo%yS~lzWSG99<Éa/aEeXRb.6U:Go9Jr&2 major=`$SCFD/configure -j NEXTMAJOR` [ "$ipl" ] && IPL="-l $ipl" [ "$iv" ] && IV="-v $iv" $SCFD/configure -a $fns -c -R -m $major $IPL $IV > $CCFD/conflog 2>&1 || { conferr return $FAIL } ;; esac echo "\n\nSystem files have been successfully updated." change=YES rm -f $CCFD/conflog 2>/dev/null return $OK } # Configure driver out of system configuration files by unsetting -Y option. # Global variables used and where set: # $major: confchk() confrm() { SCFD=`get_mapped_path ID_SCF_D` CCFD=`get_mapped_path ID_CCF_D` cd $CCFD echo "\nUpdating system files to effect removal of driver ...\c" $SCFD/configure -c -d -m $major -Y -R > conflog 2>&1 || { conferr return $FAIL } echo "\n\nSystem files have been updated." rm -f conflog change=YES return $OK } # Add the QIC-02 driver to configuration files and make devices. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; $major: confchk() or confadd() # Global variables set: # fns, dev_major addqic02 () { SPACKD=`get_mapped_path ID_SPACK_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" && { getyn " The ${DESCR}r is already present in system configuration files. Do you wish to continue?" || return $FAIL } # ctconfig allows user to modify interrupt and base address # (it edits values in /etc/conf/pack.d/ct/space.c ) CPCKD=`get_mapped_path ID_CPACK_D` cd $CPCKD/ct $SPACKD/ct/ctconfig || { error " The system must be configured in order to use the $DESCR. Exiting ...\n" cleanup $FAIL } # Remove tmp file created by ctconfig. rm -f /tmp/ctconfig* fns="ctinit ctioctl ctread ctwrite ctopen ctclose" confadd || cleanup $FAIL cd / # Set dev_major for use in mkdevice(). dev_major=$major # mk_nodes() is not required ct. Nodes created in lnk_defaults(). # Presently, def_nodeclash will always return true for ct since # it must use default devices. def_nodeclash && { # Link driver to default devices. lnk_defaults "$DRIVER" def_driveclash && { # edit /etc/default/tape. edit_def "$DRIVER" } } return $OK } # Global variables used and where set: # $DRIVER, $DESCR: menu routines; $major: confchk() or confadd() # $MINIpos: ask_MINIpos() # Global variables set: # fns, dev_major addqic40 () { CPACKD=`get_mapped_path ID_CPACK_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" && { getyn " The ${DESCR}r is already present in system configuration files. Do you wish to continue?" || return $FAIL } qic40_query || return $FAIL # Set the unit number QICpos ("2" is the default), QICsoft, & QICauto. ask_QICpos "2" || return $FAIL if [ $QICsoft -eq 0 ] then sed -e "s/FT_SOFT_SELECT;/FT_HARD_SELECT;/" $CPACKD/ft/space.c > /tmp/space$$ else sed -e "s/FT_HARD_SELECT;/FT_SOFT_SELECT;/" $CPACKD/ft/space.c > /tmp/space$$ fi cp $CPACKD/ft/space.c $CPACKD/ft/space.c.bak mv /tmp/space$$ $CPACKD/ft/space.c if [ $QICauto -eq 0 ] then sed -e "s/FT_AUTO;/FT_OLD;/" $CPACKD/ft/space.c > /tmp/space$$ else sed -e "s/FT_OLD;/FT_AUTO;/" $CPACKD/ft/space.c > /tmp/space$$ fi mv /tmp/space$$ $CPACKD/ft/space.c fns="ftinit ftioctl ftread ftwrite ftopen ftclose ftpoll" # Add to configuration files. confadd || cleanup $FAIL # Set dev_major for use in mkdevice(). major was set in confchk(). dev_major=$major # Create QIC-40/QIC-80 devices. mk_nodes "$DRIVER" def_nodeclash && { # Link driver to default devices. lnk_defaults "$DRIVER" def_driveclash && { # edit /etc/default/tape. edit_def "$DRIVER" } } return $OK } # add irwin minitape driver # Global variables used and where set: # $DRIVER, $DESCR: menu routines; $major: confchk() or confadd() # $MINIpos: ask_MINIpos() # Global variables set: # fns, dev_major addmini () { CPACKD=`get_mapped_path ID_CPACK_D` CRCD=`get_mapped_path ID_RC_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" && { getyn " The ${DESCR}r is already present in system configuration files. Do you wish to continue?" || return $FAIL } # Set the unit number MINIpos. "1" is the default. ask_MINIpos "1" "$DRIVER" || return $FAIL fns="mcinit mcioctl mcread mcwrite mcopen mcclose mcpoll" # Add to configuration files. confadd || cleanup $FAIL # Set dev_major for use in mkdevice(). major was set in confchk(). dev_major=$major # Create pure irwin devices. mk_nodes "$DRIVER" def_nodeclash && { # Link driver to default devices. lnk_defaults "$DRIVER" def_driveclash && { # edit /etc/default/tape. edit_def "$DRIVER" } } # Install rc script cp $CPACKD/mc/rc $CRCD/mc return $OK } # ------- Remove Drivers -------- These routines remove tape drivers from # configuration files and delete # appropriate devices. # Global variables used and where set: # $DRIVER, $DESCR: menu routines rmqic02 () { # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" || { echo " The ${DESCR}r is not currently configured.\n" return $FAIL } confrm || cleanup $FAIL rm_defaults "$DRIVER" is_default && { echo "\nRemoving default tape devices." rm_defaults "$DRIVER" edit_def "NONE" } echo "\n${DESCR}r and associated devices have been removed." return $OK } # Global variables used and where set: # $DRIVER, $DESCR: menu routines rmmini () { CRCD=`get_mapped_path ID_CR_D` # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" || { echo " The ${DESCR}r is not currently configured.\n" return $FAIL } confrm || cleanup $FAIL rm_nodes "$DRIVER" is_default && { echo "\nRemoving default tape devices." rm_defaults "$DRIVER" edit_def "NONE" } echo "\n${DESCR}r and associated devices have been removed." rm -f $CRCD/$DRIVER return $OK } # Global variables used and where set: # $DRIVER, $DESCR: menu routines rmqic40 () { # Check for the presence of the link kit. Install if it not present. permschk && linkchk confchk "$DRIVER" || { echo " The ${DESCR}r is not currently configured.\n" return $FAIL } confrm || cleanup $FAIL rm_nodes "$DRIVER" is_default && { echo "\nRemoving default tape devices." rm_defaults "$DRIVER" edit_def "NONE" } echo "\n${DESCR}r and associated devices have been removed." return $OK } # ----- Change Default Tape ------ These routines implement a change # in the default tape drive. # Qic-02 Cartridge Tape. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; changeqic02() { confchk "$DRIVER" || { echo "\nThe ${DESCR}r is not currently installed." return $FAIL } # QIC-02 is always linked to the default devices. Just edit $DEFAULT edit_def "$DRIVER" return $OK } # Irwin mini tape. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; changemini() { confchk "$DRIVER" || { echo "\nThe ${DESCR}r is not currently installed." return $FAIL } lnk_defaults "$DRIVER" edit_def "$DRIVER" return $OK } # Qic-40 mini tape. # Global variables used and where set: # $DRIVER, $DESCR: menu routines; changeqic40() { confchk "$DRIVER" || { echo "\nThe ${DESCR}r is not currently installed." retu%&'()rn $FAIL } lnk_defaults "$DRIVER" edit_def "$DRIVER" return $OK } # ------- MENU ROUTINES ------- These routines present a menu, # prompt the user, set global variables # and execute appropriate routines. # find out what they want to install installmenu () { quit="return to the main menu" mesg=" Tape Drive Installation Menu 1. Install Cartridge Tape Drive 2. Install Mini-Cartridge Tape Drive 3. Install Qic-40 or Qic-80 Tape Drive 4. Install $CPQS_DESCR Select an option " while : do prompt || return itape=$cmd case $itape in 1) DESCR="Cartridge Tape Drive" DRIVER=ct addqic02 || return changebootstr ;; 2) DESCR="Mini-Cartridge Tape Drive" DRIVER=mc addmini || return changebootstr ;; 3) DESCR="Qic-40 or Qic-80 Tape Drive" DRIVER=ft addqic40 || return changebootstr ;; 4) DESCR=$CPQS_DESCR DRIVER=$CPQS_DRIVER add$CPQS_DRIVER || return changebootstr ;; *) error "Please enter 1,2,3,4 or q to quit" continue ;; esac break done } # find out what they want to remove removemenu () { quit="return to the main menu" mesg=" Tape Drive Removal Menu 1. Remove Cartridge Tape Drive 2. Remove Mini-Cartridge Tape Drive 3. Remove Qic-40 or Qic-80 Tape Drive 4. Remove $CPQS_DESCR Select an option " while : do prompt || return rtape=$cmd case $rtape in 1) DESCR="Cartridge Tape Drive" DRIVER=ct rmqic02 || return changebootstr ;; 2) DESCR="Mini-Cartridge Tape Drive" DRIVER=mc rmmini || return changebootstr ;; 3) DESCR="Qic-40 or Qic-80 Tape Drive" DRIVER=ft rmqic40 || return changebootstr ;; 4) DESCR=$CPQS_DESCR DRIVER=$CPQS_DRIVER rm$CPQS_DRIVER || return changebootstr ;; *) error "Please enter 1,2,3 or q to quit" continue ;; esac break done } changemenu() { quit="return to the main menu" mesg=" Default Tape Drive Update Menu 1. Cartridge Tape Drive 2. Mini-Cartridge Tape Drive 3. Qic-40 or Qic-80 Tape Drive 4. $CPQS_DESCR Please select which tape drive you would like to have linked to default devices " while : do prompt || return ctape=$cmd case $ctape in 1) DESCR="Cartridge Tape Drive" DRIVER=ct changeqic02 || return changebootstr ;; 2) DESCR="Mini-Cartridge Tape Drive" DRIVER=mc changemini || return changebootstr ;; 3) DESCR="Qic-40 or Qic-80 Tape Drive" DRIVER=ft changeqic40 || return changebootstr ;; 4) DESCR=$CPQS_DESCR DRIVER=$CPQS_DRIVER change$CPQS_DRIVER || return changebootstr ;; *) error "Please enter 1,2,3 or q to quit" continue ;; esac break done } # # configmenu: # ---------- # Main configuration menu for non-SCSI tape drives # configmenu() { clearscr while mesg="\n\nTape Drive Configuration Program \n 1. Install a Tape Drive 2. Remove a Tape Drive 3. Change default Tape Drive Select an option " quit="quit" do prompt || break # reset these flags prior to each pass through menu major= IPL= IV= select=$cmd case $select in 1) installmenu ;; 2) removemenu ;; 3) changemenu ;; *) echo "\n Please select either 1, 2 or 3" continue ;; esac done } # main() ######################### init_path_mapping set_trap #pick-up compaq functionality if [ -f $CPQS_SCRIPT ] then . $CPQS_SCRIPT else CPQS_DESCR="Compaq CPQS Tape Drive" CPQS_DRIVER=cpqs fi #pick-up SCSI functionality SCSI_TAPESCRIPT=/usr/lib/mkdev/.scsitape_iiop if [ -f $SCSI_TAPESCRIPT ] then . $SCSI_TAPESCRIPT fi cd / clearscr while mesg="\n\nTape Drive Configuration Program \n 1. Configure SCSI tape drive 2. Configure non-SCSI tape drive Select an option " quit="quit" do prompt || break # reset these flags prior to each pass through menu major= IPL= IV= select=$cmd case $select in 1) configsmenu ;; 2) configmenu ;; *) echo "\n Please select either 1 or 2" continue ;; esac done SBIN=`get_mapped_path ID_BIN` if [ "$change" = "YES" ] then if [ "$_RELINK" -o "$_NOPROMPT" ] then klink else asklink && klink fi elif [ "$make_nodes" = "YES" ] then $SBIN/idmknod fi cleanup $OK ELF444 (4444<&2h(3/usr/lib/libc.so.1CE59/&@ =.C 03< +#%:8B>17*"$AD?(  -'!2,6;4),  |h#,! (\ 16L=̌BI<NU@ ^܌|dL<l,s~( xlh(L, ,,l  l#̋1h;<B O*W e ns}|܋0hT Д 2|\ < \2h?pFd S__iobopenstrrchr__lstat32read_iob_cleanup_endsetsidtimestrcatforkselect_environctimememmoveperror_r_syscallmemsetsys_nerr_etextstrcasecmpatexit__stat32chdir_edata_runtime_env_init_features_vectorsystemstd_syslogsyscall_getrlimitcloseexitsysi86errnoftime__statlstat32__fstat32memcmp_lib_versionfprintf_libc_syscall_runtimebcmp_r_select__fpstart_GLOBAL_OFFSET_TABLE_geteuidstrncasecmpsleepsys_errlistopenlogstrncatbzerobcopyprintf_DYNAMICdupsigset_features_vectorcloselog_on_everest_sys_gettimeofdaygettimeofdayrindex_libc_select_cerror/usr/lib/libc.so.1/usr/lib/libsocket.so.1(,04/8"<@'DH&L1P*TX9\`d h l<p!t;x5|3 6 > (@%D5 %$%(h%,h%0h%4h%8h %<h(%@h0%Dh8p%Hh@`%LhHP%PhP@%ThX0%Xh` %\hh%`hp%dhx%hh%lh%ph%th%xh%|h%h%hp%h`%hP%h@%h0%h %h%h%h%h%h%h%h%h %h(jj\t h\ET@RU RPO PjÐUU MRQ|]Ð;UU MRQl]Ð;UU MRQ\]Ð;UU MRQL]Ð;UWVS>thhL;j EtE RhhLjjE HQ u&PE PRhد Qoh}hjJVf}hj#;ft jjjf}hj;ft j3~;t WG;|hh,hh<jrjj!E Ps <;WhHRhhhj1hhV. tutM<s3@thth8h@j EPEPhPhhhj Fhhj 6h<hjf hhȲjJ 3۹<f>ËEÙEڅt&jExPh;hh<j]xPhhhhAhhhhhh0G;3Ph 3PhXjrhhijjV u =VW[^_]ÐUEPj{E]ÐUUM RQEPh ]ÐUUMRQE PX ]ÐU tU MRQ@]ÐEP?E t UUPEU3fUP3뺃UE UPR]d u($ÐU3WV}U r:u GtC33ҊF:tN33Ҋ%+^_];3;UWVS}tUu] 33ҊC:t,K33Ҋ%+[^_]ÃFtOu3;ࡤ uZXR$Rø2ÐUU MRjQ ]Ã/etc/shutdown -y -g0 1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899Unknown error8H`lԴ  ,DP\pȵܵ 8H`p|ж,<Xxȷ  8Pd|и  0Hh̹  4H\pȺ(Ppػ $@`Լ,L|Ľܽ$@Tpо  8L`tĿؿ(<Pdx,@Th|DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@(#)rindex.c 6.1 Lachman System V STREAMS TCP source@(#)strcasecmp.c 6.2 Lachman System V STREAMS TCP source  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~imsd: Must be su!Usage: %s "device name" imsd: Error on open of %s = %d //imsd: cannot forkimsd: cannot fork twice/dev/console/dev/nullimsd: read error, status = %d imsd: read error, errno = %d imsd: Retrying read. NOTICE: %s %s %s The IMS has initiated a USER REQUESTED shutdown of the system. The IMS has initiated a USER REQUESTED shutdown of the system. The IMS has initiated a shutdown of the system because of HIGH SYSTEM TEMPERATURE! The IMS has initiated a shutdown of the system because of HIGH SYSTEM TEMPERATURE! The IMS has initiated a shutdown of the system because of a POWER SUPPLY PROBLEM! The IMS has initiated a shutdow of the system because of a POWER SUPPLY PROBLEM! The IMS has initiated a shutdown of the system! The IMS has initiated a shutdown of the system!: -f" " Shutdown command = %s imsd: Read completed with invalid function code = %d. Read completed with invalid function code = %d. imsd: Invalid type returned from IMS driver, IGNORED! nvalid type returned from IMS driver, IGNORED!Unknown errorOperation not permittedNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo child processesResource temporarily unavailableNot enough spacePermission deniedBad addressBlock device requiredDevice busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesInappropriate I/O control operationText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument out of domainResult too large or too smallNo message of desired typeIdentifier removedChannel number out of rangeLevel 2 not synchronizedLevel 3 haltedLevel 3 resetLink number out of rangeProtocol driver not attachedNo CSI structure availableLevel 2 haltedDeadlock situation detected/avoidedNo record locks availableUnknown error: 47Unknown 5678error: 48Unknown error: 49Bad exchange descriptorBad request descriptorMessage tables fullAnode table overflowBad request codeInvalid slotFile locking deadlockBad font file formatUnknown error: 58Unknown error: 59Not a stream deviceNo data availableTimer expiredOut of stream resourcesMachine is not on the networkPackage not installedObject is remoteLink has been severedAdvertise errorSrmount errorCommunication error on sendProtocol errorUnknown error: 72Unknown error: 73Multihop attemptedInode is remote Cross mount point Not a data messageFilename too longValue too large for defined data typeName not unique on networkFile descriptor in bad stateRemote address changedCan not access a needed shared libraryAccessing a corrupted shared library.lib section in a.out corruptedAttempting to link in more shared libraries than system limitCan not exec a shared library directlyIllegal byte sequenceFunction not implementedOperation would blockOperation now in progressOperation already in progressSocket operation on non-socketDestination address requiredMessage too longProtocol wrong type for socketProtocol not supportedSocket type not supportedOperation not supported on socketProtocol family not supportedAddress family not supported by protocol familyAddress already in useCannot assign requested addressNetwork is downNetwork is unreachableNetwork dropped connection on resetSoftware caused connection abortConnection reset by peerUnknown error: 109Socket is already connectedSocket is not connectedCannot send after socket shutdownToo many references: cannot spliceConnection timed outConnection refusedHost is downNo route to hostProtocol not availableUnknown error: 119Unknown error: 120Unknown error: 121Unknown error: 122Unknown error: 123Unknown error: 124Unknown error: 125Unknown error: 126Unknown error: 127Unknown error: 128Unknown error: 129Unknown error: 130Unknown error: 131Unknown error: 132Unknown error: 133Unknown error: 134Structure needs cleaningUnknown error: 136Not a name fileNot availableIs a name fileRemote I/O errorReserved for future useUnknown error: 142Unknown error: 143Unknown error: 144Directory not emptyUnknown error: 146Unknown error: 147Unknown error: 148Unknown error: 149Too many symbolic links in pathStale NFS file handleRestartable system callNo sleeping in stream head of pipe/FIFORbr‹ҋ"2BRbrŒҌ"2BRbr[n0  0 SCO.interp.hash.dynsym.dynstr.rel.plt.init.plt.text.data.data1.got.dynamic.bss.note.symtab.strtab.shstrtab.comment@(#)SCO Open Server AHS 5.1.0/OS_drivers 5.1.0 08/25/95 ( 00P  0(88 .<< p3 <9 ?tF2K2hT((3Y(3oD3y39!ٴ/-@T 4 %4$[K-) dH]~1n˷*w6glVsDDATF啦T}Цwy<;Co_;;/[OTu (BAR!uA ԅ1xh7>Nq NR~Pz ʗ)E4(N?zF̯IW׷|`zA3J"B.[ZfnܴV(IZ5٨٨;=u-&M'A*etmas:LGI4Voc^ei5gl$'P8X!S >Ra$lgRTTp,$HS9b{ !즶/ݯmBSХIvly'QI5s)glOIY$cVl MjL&ow6负qsCfDn$^UչZmgR¸WkrVW-uI7nb#-mmA]g#ѪW,}B 7mao [rUB^ҝ YK g\,h$ςJ?]R?Rm;O!-TqV* l[~JY_Bݿ%e+>kzTn'9u%AEK 45hg,67-b\_/n/Tr=v }:/fx틶r{av"dVuiah1\?rtrt_3 &.X_<1IzJX^<\V+LтY+>\焹wN6A7*|GQr ڸ6<ttsrr|"74-pe9b[Htq%}5*Oդi-r4mιdRf\J7%\/A( ]7(+wÀ0<g3Q,dºdzĵᨑ1m[r1[pt4"zM(_|zq$\a&ݚ܌J}ȠjVu~ ErL]܍IXҹ+FLEGlZR-;B c>E@Nr{-'tӑ-WြLU"NnYI *u.º7kkLRPa/Rfv,F2L_=Ex41iPiDZI$}/+H|f4V_%k0IԗE]{ⴉtXIح"a;aiheŤL?$Ɯ riZuBLuh%t7sg&+?g&BllZFTe ][IFIc,~eo.&Cf$Zo1"h %¼4&Cq.t@x:v!emD|bn78"a?_O1I֙]-~pg `y"C!ڸ ̍H OM8s; pxfr3pтA*0Òy i?zŁ(w8aui0-<Ͱ_ mV6S%GoʊSAaPd-=kj40!3U!ZIP8k b_^ [ 9h&}y oowo3]?p $'#v"NcLr-e6bH-%X4F 11şc[++RWiPhn1W>Ǘ(XC߬l:2Qe},Ai4+́,, ]J,pZxxԴйAhP>k"u~ GIuK i$%s~ȰK&fyZH\ ItT*/<MVMlB[ WR BTi I}Ƞ[tpBõB:,˼"C*Cki\dxRX}͡ %Œ*BϚ&„T K&5oB3TCS+triS罕<`X5JjȬ\Ss/@ԍfWȱ %mpr!<˜5VX]N$<8tReɛ߿ Y43|'ΒJ='-,rJe.dAaՍB%;?@'e#yF)R_M;%Q3z`И5V2%I?K3BG-]ɥG+Q[zlRX0C9Z5cj"#V:LVj@UL1vpd+%.XҖ.Wq>ќO 7 ^Y$l僒 Sr<9G".`^Ѥ,&̃MJL5R lBH~ltzl"J2%M"^^_0o! )j(\ov7ް2_%Jl|C.A@h:PۇWGT 0C \5 59mx,^XK.; >H4J7\NSɕJ$he/O<7/0#@0)kL''ĬΠ,1,N5h٫Ju Pyc(GZ.mEò ĩȦG, HLRU7Zl )$s|ǜĚ*yɚ5mz" [>fXÃW\6YKn9RYF!,PIDv2 mv":]]-u,Wt Z ۄ:Ox0U; h[P=]c <X\v_>Ƶq-"^S'QAgfUY#oOe SzoˏLq yD{5VKCҢ4Qhz;bE5t\"飆-*1IE \~r1;/8pP@C IAAl3PL+W-%xt1.KEKXF;;YqL 5E=@)1HV*2~C+8X,K 4&wGM6uoɧրZ@Ә74^ PM~|r-,5= |oUO (P8h-@g(I!VC6A"n]7J7%pdWxi-ܧ'L8G }`K `(.=AJ2%6[9^4U@#hI"~%9W7tMX7Ktl3Odb-rEr{Hczo@=eE#.4mh3bl{X#ϜH\\,bl@2-N;|Zj8^t>*L72~C[@0N T3D7`~q#<}mMzɯP 2M} llu$?y#')% ?% ( |܈0qA|K h_t]ǛZuulX](΄$~1nzL1JzP=eR^R!%)9@ 8N>Bg[g5r#!A:il*4 @1'zBJyB`Ң:C\E!n?HBiHEvĩ X4Ԧ>E1fxK180i<4% jj<Rq,.@q|P$aZ .J%TTR(YV' 7,J`}d;X%"l;EK{zwOX^HEOYG[qbg˴6g7K-QxhPyHdFȬ_)L/2ZqrS,".)j}rZ㢞αŨRy"p5bM+G ʯIl<Hx+T00?|JEH~HU\#vN[ (<q'Liy)vAV~oLNRc%y A>4Ț!NQhZ2Qhˡbїfі9kA萴 EbBɁ Ih ]N_Z:[> 81ty{6L2[2Ҹ{d=d=+ .UsN/[K!D\B)GC#;gfmH0h8aJ| D(t~(ۼ4F1\kGw~, KYDB>ܤu#FpX,!zHA;TjG)X9-ט;C0{R>`yC yDGWVHS܆+/XJۯoLݿ lX0Noyh97n7m)}#&.|̛g ZHZ$&4`<]m4wB 8)״K1w(`~Noɤ< &No:aߔB*Qyx, 1P`eCѮl%cmh)2P;QrْL`˶^ї>{B?+QJ?\2KŚڎ0BGl B6%TNd=m:Lg6)}x㈲e,E)Yl0::`͵2&WPfǍ!#eup4f` ͘R&ag~M"'>svJ/@'JWb@0v֬9n еǘ.'v ?4{ZV^H:Ep; X# υjNx?[\XYUgMX@{ |>M8Cqj/&Ihun4$|%z|s:4O왐 ɑ[RLT:tC-ﻶ C!m0S505⛌E Ičkq|ޔ7 [eSCE_Ia/2sqBԘa͇} gZ;`E|(stY=@ )j2ߖ^׆F" Xph8{|n({Y59SylyI0 edpE0pY`sO%&.;@&XqRwt<@vs_àJt h] eӅAe5Iú`05 +iB/dxQak.9n2NBOĜH?A"V>a(oC$8 PՖB/\2":ї a/Q#1]$vKj×׆;,Fgjxu G fO=MoG6^|J4q\թ,'7 )|tn|-'e+ YqSI6 ckRTDr%=a#;,=$[eR,i)G<8BP;u3넲V|06G%\մ+oLwٲ \:]2lqv \ex宠$58g& =QZ(68Lp$מrKC*~v Ъ!ZjiJDXс l0 -0]$pvk m p6 ,* ZHwx,Ml1蚸 oV,ryǎj<^nzVz.χ Oӵ98|{[7!3ͬYm$P;.WtoQ_RJ}c<|+sa^OV㺁wҦs-5Lgg9LtLLTn: ;_1aaUX@/)Ruaʚ Ș_CWV&`'OX _$( zJXm}xuE[ |-z)2i~:#KQ2r]Wo"@v%;Qpz0FoZܚ[Uo-6*{/j>0sЯvQLj|e^Eж.&GB@I ;>J3 |(Œb FTxAGBA#3t( :" G (g1VBuJLRe(TqAG!9QGTQTcڣX5UG:?z=dYg"c8=i8=ڜYg ;􄣓1ZJ;5( 2i'JOG+5GGjG :R+Q 3dߞ=*8V8Wp~L!1oycV#w1SchМ^sØ8J

@=D{y"gL|atMG-1?Zb\aXƘO`}87|p~G=Ǡ1,;=ٜ<}ŽJHɗ1ވf|j5=$fk$fĒ3Ic[ j:ptǣ8"kݝ $p|C#[?$kg>rOG%5y1ݑ3i2f/oz?91겆U6YCqrI(r; , ,O2=Qh@uXgGfuD=Tϵ8>(ģ|Oe~#% G5(c'Rt~ y 4'?P|YnQ%A~!Pԇ|DJ?Pm~o:kt.?,fW古>XؓG=z>9Gz<ъ˚n\MȜ4rG=\O6^{gCfq˟ !Ewk^ck7=|Sޯ28;8?q5~`89hpzf N5Gܜo89G8`}ÍpqfL.py8:crz.7lp}Yc̛C{~㺓ԘlRwqnŽ'ʛ|]\M=ѱ={ʙoO<7qѲ 91h=h?l>x0|ٵ͘k8:H@u9-nOGz?T Q"=q\zLY|N7pqп_/8k+8?8k,xe_,c8?lIcl)6"e:89G:vjiNΙ3;1G1?Rz:OF\{3F տp(DE}=g7C0޳eog̅Ѕģs@az,4&'hL lAGZ]Gf `{i+|Q3w=:#QLzy(8:NcN=$|N';ѝO89SsFd/^puf[g;78>FffO9= _hz=ڞvz=D~D8Hs"%pCQSb. ϓn0@L pGՈTxЦimȉPm2"ڭS8؀yқC.mq-+65`Wd"\0;{z] g'׽`s,zAL=ZbMf >o||CART0~VNJ`DhDATC{cRѝ@=pRP1H=v:y ^@# ?T!zCG{P:!tH{z$T=VXi]CpovĽ5nmÊ8`g,G.QMqz@ssؠzP:%ӿ >)cuͅgFٹWP? o2uu,B?k svW=wD|UX_ njF,107*q-1öbj(t7TXHcͽ@\y ښS2T+V6AIRCw#M[ ;0j;u\T u^:pWN+6zw6;$`) E{/[X{&PN+xNDɣb\bUfwn=UOP]lꚪ+Ĵ$aCXXwT6'gڍUZw >jz `{QX!hBB;* 1!{= b> T#r/.C΁2쌝aޜO=|AMC] N^&zd*k o1X[,'x޹KhwK' ,0 =%5v2'؂.k10"o~ٴo-$T@@(ڍ r[HI([-)%-2}ofm˱l.v\:WehJ {.;wy?w|]5m㒚AZ3MPA!4 y!6(1("^Gkh8~Tnj ,Wh(m-Zb}:(!V-cdK/,*A62Q "ֶRR%cFW$ҁlNeKXΔh%$gUi6ތ\m(-u:3 4,D}"Su:9(#>(/YAS JY2m&vP215df'wܵxkk{? '׀6) 7, jK{UpvX) \܉-4*Ex#a*(!iӣNfsykJi4rTjCHnx*Zk7$⬹e5F"y2Qd߅]oٶKe} T/6ogA&l֦Y7;1hQP}*mK~7}Oe|k*Z,@-c ^&Xz:81n+vފX=rux.EdEp4pJZSCX*5{po$ԙﭬ#N IMJGdžɷN:j$\U^5wIjj-`6idtAε;2Җ7fd.%@1a&=h;:#7:iɒVK'[ƃN ۟r [K,6Itqtw䕺Yn:ft t F~0\Nmw[Էvln?vm#o`~xy"9Ǧ̹.e^y,6^!5D;uf!߲S`W v o ( } )?J=KLo(ڌ9 Vo.[>h]7s SC0mҲVŨ< 4S$֙64MZ·փ& 3N"S$lWu@C3RWJDMZ@5M!p;Nq, rlbRԎY}IùCcݾ 41yثI^3$ /$ YفLZ8H,V!yu/F?nůk虯ҕ ZMgc @OַpSLwKu|}49sS=3-b|<ыZ/U|Q_PIk†I.#XRT//v׊Ҕ-0gsrF"̑!5 ʐ_olN5)䰘*V;䓔_,6,Z5;lSfzfzX%$\[NK.H7ş2Lt&OS"Ꚃj2.&'sW u=3}P'Xfx=[Ho T+l-zsa:ImLi̧[39* jz=KC*dj#&T#2IEh`6Eaddǿ,X[ex˒6K%M&y%"91s"1^ ^rjXHsa&HHI4<9TaE$@+ %Bh3pz2V)܇bL?[&8BC MFMP  RR)扥6R&L*L6*I&bĶJH6kL7 J6zEAlC<,! RV,l}gܔJ5c:͌he3"p>-zC~ v)vⰔ4nOŶ[/lM.pI+A:/҅[R)얧].5eʠO"gjBVKy~zukvד5?W,GcXܾ&8ga#%n\dF:=@XTx&AM4!/ oQ \TL;2xycĈhUtTGy|Ξ%+%nƉE)bZIJAN" xYfA?P9HS&t< d ׋IE$13Q}۞^{Ȫm6Z*F3g„" ukj[D˄Pb.nJKJ8 Z KCPF;mG\'a\VS7nnlnكtfpVE h塶h,`km_ot]1)_'tIX"˨ W>ƜE)+BZ%C%E$N+"qz.[nltAZB P@4h% \|&3W Bce҄+pˣ Z99 ` MX(!|ZMBe7e 32t 2˺Mu Hle1ˢջJop+8B'jBf5<箶ԅ.:HT-m4R:\4&{~t9=щ+8!Ռ_6Bu{opɽ0PM050 0!`)ހ˓wG΂Auی>W[@6巄~w2Qm?7ї>!k [օH 0# 4`q%=-&1ʆ6"ʦu|!i49g˒^Ҕ>>h}VL!Ck\]aBrAfPiŽu~2&R(<֕K 7nՑ62іƏa*K g>-hjakhgYyۛþ:6'7jTbtG5TvDy7))ozu{쏜|k{;>!nP! VB!O:Ф0hS 2M6WA]64-> 8[KO&:MuJ]6C6Ώ3IIS`yy>~vۜ]mŦz2YQ`HQټ-b1tëU-%<~:\A!z0Fe6k[ [W@8o(lә b=d9(֞іh@’5#6ySX  gv8mbA=Z\@׸5+y5^ eߖ)^5wEDd\DI XjH8q]o1#i#znEæy0 4j+$ؙ F[uxoc^մO+GD1oG2SM[{em$$nB B|k*VژXtETmS-ص#ZEMu U$;u`x%%c-rk-ɔqyE1R i4qe}$JY/o~7eOSCMm0T`&. Ja^]KW{Pof Y ,r. Ngg~ў9y Igf[`0~Ns99ʇ'aȒIo=|գϳ9]f<հt;6\kWj@u XWՄ 79`{kbWGk Q\UvIS-*+SAxӐLMաK߇zm^^"ҋ ` B5r mXA爒uhBU[c]k^X:t½ӫVCt@5'k_#Ui4z&U,af?ؿtwmI`)@E Tյe3"]&U;tëj6; af?&kg]/\>w.1ŅaJSmj{lHܰwU*o1rzm/QN?흛%4t)*vU,t\e 0ii]j/-PQ5_z.9p %5is+eZՓf!Q{=]50Z7~9U W9t8s>uDEub()޶=."HMkk·icIM#fWB ~>Yb1 OBd Wᒪ~ KI_W6=E)_5%2}z8o`L!Jzk_fnƣ`qլ 6'锇<ټ~l7&k"zk  XX{hLO1EbYbV{a,_[~_\mfuua/!聁Z ˋgpQr]jچYB 0Ӳ e2`( kALc2zrYr'esDL取uΟ@0~` ԍu@QCqzD%eSSQRJɳjF܆6)BΕL=H,qSe飖UE$xj s J";Z`LA6,-װunԤ:âm!LZ=7Mg٥celV&}fQI+0ZclơC@u?aIJهgsݥCba=} 0k^ 3'L4:DX~@Ā@"Ώ:;0Pܐ`  4;::`Ȫ5G6QsUtDL (5nV*[LGfH=tG'9:xr{CO 2OuNLv BNOu&j9>R'1:#m9CXor}# Na9>a8=86fҒHѐCJʚO9?yJfMOzd`Zlc-2[2ޘ.bu\Kr,H.l?.j>\~i1FG G5@r8:YVfg;ߜuZp|0Ƙ}q \bzo}h޸׿||L'tQe;9=g'L]8ne8?_jcBη:? i;85X-î<gG^/kNxt~uyan@'FpYY^N@W[2|qyכ;/ SJhQۜ82șG6ԗ2'dMBԝFlBzÝ|hV@vQMV@ rs`pvRh:Tː2sFb~h͟MB dFf@@g #8:jހ:p =Hс:[#5?{ TWuo$h3Y\;&f&j͊{#8;8>py3ArrC(pe ;(ig; t~(ic̡wkɔ3!6-`cXg`j9;'뜟=9ޑΰʘk*bs'>rmN9S_zs G;w';}r)eO1M|sOe6QO:,l5g;wz?1ؘe؛o3wv&Q<r\  V`EӜhpS8>6`q>ӓN_2bxɉYPÃ3 9>vdO28:єvyU:@͘aϜٳHMMNlONOpr]r~ٮٰ¿6d|l~HٳQ\٭KV]g[o:?xy'|uϲ1dcd}`gGts;vG;t+>ӝlw>g pս9֜a9?r{Ө8lΝΘDN 驙`o@sw|9T~};,D͑3-8eN'':Ü5&psg-9QR=ohkg9=f]g'uge1pt}4ƫv[i`GGi!Fcpp|0? RwMBDCj&"^BTr#r#Du'bEڄFJGC؇Hi z#P<~2GPƫGv4:ϪPt9PcN6=<:9_1ُ"b:}L\|r:#=C>PATءqz@|"D9N_=5h*"?ݴB:@"B9#-6xwFZ/qɇ؄sG#F+]fuzJ:r*!糘v@uPFkëG "6 TAG"&{D;GV C"=r^2jD{ú=zaֶ}.GFH6gsujlz=CeT~!ìWF?S?^a;Q]U]"g05uPӧj[?s\ٻzXuP_u x?ġ< ë6ҹ{C:Pꪼ#6{#S2@\j8wۦHx ȩF@Z=/h(XGnR{~pkCjdTdң]_fiJK ,r.hl Ơ E󯘋u-`|9kjf9/\VUNEwq]jG 2ҢU2×5r4Y/'xZWkdY82t}2`hObsoQxSU2+]p4[kv$՛޵mL~4;~V1 gp6QH6$A!ڒ奝@ҩX`GẪɬy8O ciOq_^4>ܘjUא݂Y_O :y 3~VԂju)C=aQFМC/d(R߀*"۴t jg ŬPu׎_Y5 ! qp@M 0"Nӛ[}! ;5cJvF:E_ # 0.Tt|O-,wIŹ!@g#? w.JɽwN'P ݾxX!5PrڝCgp3GlU`05/홗>b#f˰3d(1)k xlS_7s/5 2QMAݶy` ult-cSnC0&M <-HYv=wk-u[Ba`~p%"UW,lolNśCU 2,dAʞB _(_IOy춆r=l*ckB]4mTO A;AL 0d`7>ٗvɸ[dtV!PpfC^gT!`V Sm͟*k?69gbҦcl8ak`s 5_yA{tAk[>DXx2<3/qpf^S6h20)c.lrbRI۲.46n9CP ql2{+t1kh4X_b˗d}ktVbL^ TBb4"%4JmGk ֛ CZ>)yZdq`Xc@OXb ż^r&'Yh$MG| a!001 Ů/ïh14pN = BǣzZl0b&<{hNvGՒw,`>fC,ئ>V굂 6&r! z3.6fsdz5_79=C~cPlE","Ώ-:r[ӮAmm`?-NJŸ?R?}='ΡAP #3CkFXP[.IGeIZ td4p8D]*ÞgbyE"wlyB'i:Hдc ̏ T&~VRVp}ykS*ƈО0Glv+@T^X6؍#_ufM )❝b_ ̀ND4O+g1B] C"4f.j>kfS3?p{|B4Dq}rb mGSzGmS_0XhB\;3P{U֌Njal>`~=;|9;D/S|>ɡë9=Dl"Y\I5@qY? _>uly9ȭ? UaDa4o?{T>a cfh,9 Rρj 9朎< >rۘ9ˀG ߍD#zFO°^XyvVWelʷU x}cӹ 2s˲q< k}`f<].z9O֏vcȘ8_-J~UYfJh(C[(B_۰KL!MM(,'#9Y4ꅟfAüdQ؂\ZAGIɡ<~Sl>QiR!81Y|]Q?}r4j_"wPW3K C-z)!]->]dWM 8OdJ>)Q_hҙh|2}4fbY z{@nm&.6Aw@ԿC&i iGW5_TuM֎6=B؍iL b7ڍ-|Yyp|{Eh߷`!>Χ #&Gȭ\.>l(? zukEGV' 3 6{8̀d~4HL|O;_%f FnYÊ4+y߶~9v1s_Ia D掂jkR|< vaIidj_~ <mFj_ t(ꉤ(4MJAq] f^De?ߔ?;zڭZ9PphZ}Ŧz<#S~~~}xkiʿ\T8UUECԿUJt]QHe# tFD۪WU>N:;πEB=UKt\RqJK3+#+EU&fW.zM%,̮~~Nl9ZP*Z1Ǹjһ}Ʈ˞vڮ:zvj\񡠊2ւ;~U]Ԫ1t7p*&A9t}8QԪWoU WT1*;։XtZM#U?xE󣡣Fya(Ѵl7T }}jsaWZ?95 yzKogd&B[#П>~%'2j{t=C pb%}ᐏr'`|# 8=#Iǹw8:Gp-M808? rNx@⒣$=`9 Lrsv8>#b|rGw1|?#vz1J>@إ3Q˱NͱNo%@Trz0d$9r=6w=Z b97 2,*+nY%nV bK{2[l}h r>Q9ޅsUmk4`T߳N֐6$$N?DRMiZIbO(a# ^Ŧb[%HI%DߴKȎ{9P,r1'tON18>9<' ͜`8#oG[9޴BV΀b\#Rl):N[s?J>`Nȁ@uƧHjS:¾qNQBs;?~58N:99G1zgxdO\D'G'(ȟ<@ଜ:>&=,Yh jؔ{b[#L?Tޑ!8H@I q2 ;'\znA2&']H' {$tOz"2 ~3r bO`O>niҿKoGx kT&*3 S[$} "pKTZGv;w' -7ɒvf@s͓4=dlՈ)#''8p4GgȟdDސ=8.@0#/eITNTʏN—>W1xN7 2I,^$M-dG$}^6ב=(_ N?2a$ ҏ"z&bȞ́#tr:E dS Α>~E+y' fȦQ Eȝ9 uE>F=@wGuİТȞI$IG ~TrIJI>R'OvfOʒL Mr01K?-J{WH$>AaӔvO|@6t/HRiG-ң'&| sģ tS&SڒHA咏"vDIo p\N @$\slKFHR;\N>#dL# ?me%@G xGq p99;&j󤏟#+;w8`V&/bR%I>HRG{R'ݐ:a-g |Ik9#I?XO(P(W"s$O?(`@r/h@I3҉}`sG>~sW"s8ؐ> yZ~:AR@xgť;Z};v1iqc xR'"p1@Gy#ixd@ c rL \8@b$@ C]Sښ5?65F"D9_ͤ5= H"#ˇVrbFybD9uko.ŌD<GEZgU 3ΏdB#VH]T9|YFC3h/Um# |oȏ-lsڋ7#V?[JD#*!ꪭ#F \B;A'~G̐ *w:x\# MHNBҮX Hoߏv_1:QNg_?V#RHvDGT$<ͭȈ^6"#j8:T=wxkѦ#SpD_t2R* ?VQ| lTIr[RS`!{:?Vi*t!с|1JiUp3K:Ø:CчB, ^3ǰd^]7j^D"5ZZ/`@:+=kU-UKc6×< W4LS{uFZ#*=U=7G_ѪGISlְl||nkgߑCI1WχTVF&~>\]vE8=窻EdB CAދ\GO]qА(.pCY/ѻ.߫G\{1Qi=T;TA{UvxRTU?FЊ]SUпvf"` RʕCB=Cv&,I%© c흩WP3G_ z\~Nx wPje >Gbù֐໩uGPGT A`zwbo8Kp.o..Driver.o.ZSpace.cTdsk.hMaster SystemDriver.oͤ{e_Kad% 9 TQ- K$ed9R /f^w;es37\흇/1r9p†ڢ)֫T@*OyRywvmS, ɣA!BidwAJ??t+iPΤlQ*:@!g]I̅1^g.[ _JOߛQ@ydMY!RU'~ڭt_yR#k5 ď;ᢞj~ۅ?%W N_u[%阽VW{c]-e,dAuXRH/JCJ \$?4 ]yHܤd6hV.\F elONp' iQFp%MMRU=ilueak.(~Rǭ?ѫOZ*U6[5RuÊ= )<êAjK -nWn@f\pTF1MƆ=U BXAWZrݣfr\Rn- Nl\]kI4'-_|66A5r+BܺSiք.FgoWgմ[Ur݄Gmgl7{BC$HOF1<{-Ʈ. 1](D“"HTޫCPJ~Ρ!X3h1{lDL&+T 1afN3 3ݟR&F};f->>l[3ݎor7ӪZv3w^?Gi(Mm>95LgS"2|@ BALf}9jԨ e9y}x>ooow3Χ#:#`pywKd= ;Dnyc&?0&j~+ā kǷυǏq}JzцZVAtj)3#Ÿ*$ΑpRSu[VcӣP]jR3SX𘤵Ž#-c PjkY4?]++fubPx*c w(\Au:2-6Rr?G5NEp\p.8c8y mu߈҉;$W^)TUw2rֲe*=: w9YG,E0+1#͘.$~qXmʨE“..FXIIUOP$Q A\42 T4Eu=/v0LFq0ihb3Qbx%B܇ŵ2+oK7mM mX[ңmMٌB;$ًR{\Cn) ՙlJfWi#F)/p8S FHgl |֦<헁 Fy(/ M*/$a2fNS]+pc7G\7C&>}}膱E}ulw$KQU}6qҧmUC ,J u.Z#Nu}-!L;44z8Rl*gu!R$AQ (D)F`1Q; iiLJv: Bk.^q~0d V@I㓊zax3%ј󢘢}~*~ig@#SJؚ7¨M~R14U*|b?"ݬhnt_jM<:fgܼ)o37W,ϐ>m˙hӜ$E1$ah=hnbU`XvN5ɇMoV M<8b6TYbV~Ke0p#W fV!5En٦D-hp7td;7 ~lhHd¢`Gaxn]uY;PWZ#k7M2{Fv.TiWg7'! 9,5"YgYsdKߡ*_Jo(@bl9T|M q@]'Oa+ZXe#)~׊>;e: \0E>7_iUl[7^vWSI< 뿽!&s_~`(xPZ=$]C{xx*YQ9(V7\tQ=xyzuAT-D^ǩнAP[Gzi֮P-l?3m`}Jl0 `yl rlQ&D}B u:emxE SSbj]GB 壯=,NO!m*LK JjSz΍v"^8ˮ;p%S[P=\5LAtI&Cf0@I_53zE4G\ h =@O 5J>x%ioT`(+Wt%VTLl'~;sE$jKA9 !j{{XJ_uXjbeo: zRGuՔ2aj  ဣ[%_$;(7y^H^T u[gNy\7|(A29v=]qOxt>j~&.8ڨ7ln?SWjmerj–+8xxI=.dx͔9g_%[)JnDb~axl=x"\z8!Xo%Tld؋J,2{o)?v?6Pm]}Bx ,g)@nmym`߯-lan9Kn˴Y[z&H2g{G!~B0|"쥌s'hv2b|0@BhQؾF@y;t$'2^QeFbObvuF|g[}@J\bpth@u''8;#8;+w;8Ŧ{b9yVgC@ td;^t{4~QG;9d½ª4G,5Ѭ4Rat GbV蝋띋=̙C2gp&l4StZru =9BȚh}:&Hآh&&~&~&vsޜvϴv;=Ceimv@=v@=~@s 1j 쁠HYbBSFq394jzy-`r{sMQM;|ӻݿ;٣P=Ѧ^=)\̺͟Tր- t!:ߗ6lf/v/_v/rЫUGl+L>H~ =34+șPdD=IN 9t17G`ӓp>tW3`=-986 ~a@ Q^hqyr@=xP\ ^l0יyӳ'Qxv}w8;חꜟwor~+ͼNqQy :',A*HBtٍ'M#gKåb LuM{'M7ŝ4w2t9?:izwwo;O2Q(COp^#C88#C#4>!xMO380wo:3\BxsƅxG'@wL n^@v 868>apn8>tXp|+qe9'R]ϛVd .LnL8f9>L>]ձ2z^LO:?rG6l( v98.v9=9?4PG?T}P\u^;"h ayQuP89G3Fupig:=x:?~trG'뜚g i ʛ-S9Se]SbN*f-mNNNgll;fnU&bO4rkCJZ) UyA,$YH"=8PICHG,MsqH9GQHCz,yF;6 !K7% {ͶW$/D|vG,>2>L$uRx [OC+! j B$* *G|V*x~.qǷ!I".2]cGGF{WEHl# 9HpU![߼c\׼geGWJ:lb5*!x\l%*VKcJ#9vR|)yq_"O1?^SexyvRu_JC&i1&MJV1V-1' {<2p j&γgJl &<JCr4,lqUt-D#bd>V(,<ʿQQw#1} Dwz]w'ȃ#4zpOA%= =F7ЀS)%l4c2nJK0Fk^גBwbJdZ5crѫ֊\%!#d,\$,Ad/(9 ,%!ȶP9H$䅡I-bCjL{*¬z%0 ¬$W[ pfJ7-'Ä́$At HVK? =-;C+/ԥVM%aՒHB*V.EqX9<0#ident "@(#) space.c 26.1 95/06/15 " /* #ident "@(#) space.c 1.6Beta1 95/02/22 " */ /* * Portions Copyright 1994-1995 The Santa Cruz Operation, Inc * All Rights Reserved * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /********************************************************************** * * Copyright 1994 Adaptec, Inc., All Rights Reserved. * * This software contains the valuable trade secrets of Adaptec. The * software is protected under copyright laws as an unpublished work of * Adaptec. Notice is for informational purposes only and does not * imply publication. The user of this software may make copies of * the software for use with parts manufactured by Adaptec or under * license from Adaptec and for no other use. * *********************************************************************/ #include "sys/types.h" #include "sys/iobuf.h" #include "sys/buf.h" #include "sys/dio.h" #include "sys/disk.h" #include "sys/fs/s5param.h" #include "sys/scsi.h" #include "sys/elog.h" #include "sys/open.h" #include "sys/devreg.h" #include "sys/adaptec.h" #include "config.h" /* Get tunables */ #ifndef SCSI_NALAD #define SCSI_NALAD 2 #endif #if SCSI_NALAD == 0 #undef SCSI_NALAD #define SCSI_NALAD 1 #endif int alad_num_adapters = SCSI_NALAD; #ifdef SCSI_NSTP int alad_num_tapes = SCSI_NSTP; extern DEVCFG Stpcfg[]; #else int alad_num_tapes = 0; DEVCFG *Stpcfg; #endif #ifdef SCSI_NSROM int alad_num_cdroms = SCSI_NSROM; #else int alad_num_cdroms = 0; #endif /* @0002 end */ #ifdef SCSI_NSDSK /* @0002 begin */ extern int Sdsk_num_disks; extern int Sdsk_num_rb; int alad_numscbs = SCSI_NSDSK * (SDSKOUT + 1); #else int alad_numscbs = 0; #endif unsigned char alad_installed[SCSI_NALAD]; /* marked if installed */ struct dkcntlrtab aladctlrinfo[SCSI_NALAD]; /* info. for disk setup */ SHAREG_EX alad_reg[SCSI_NALAD]; /* un-registered adapter */ /* info. for Sharegister */ void *alad_info[SCSI_NALAD]; /* store lance HBAs in order */ /* * Set TRUE to enable tagged queueing for this driver, or FALSE to * disable it. */ int alad_do_tagged = 0; /* * Interrupt Distribution. Currently set to 1 for base cpu interrupts only. * Set to DRIVER_CPU_DEFAULT to cause interrupt distribution across all cpus. */ int alad_processor = DRIVER_CPU_DEFAULT; /* CONFIGURABLE PARAMETERS * * How to set configuration paramters: * If you compile the way it is now, all the configuration parameters * is set to the default by the lance manager (through running PCI * configuration utility). If you want to change the default, the * first number indicates whether the default should be changed. * If set to 0, the parameter will be set to the default. If set * to 1, the second number will be used to override the default. */ /* Host Adapter SCSI ID * Set the SCSI ID for the Host Adapter. */ aha_change alad_hba_id[SCSI_NALAD]; /* Bus Release Timing after Preemption * This specifies the number of PCI BCLKs the host adapter * will continue transferring data before releaseing the bus * after being preempted. The range is 2 to 60 decimal */ aha_change alad_bus_release[SCSI_NALAD]; /* Parity Option * This specifies whether the host adapter will check parity * on incoming SCSI data. (parity will always generate on * outbound SCSI data) * The supported values are: * PARITY_ENABLE parity checking is enabled. * PARITY_DISABLE parity checking is disbled. */ aha_change alad_parity[SCSI_NALAD]; /* Time Selection * This specifies the length of time in milliseconds the host * adapter will wait for a target to respond to selection before * aborting the selection precedure. The supported values are : * SEL_256 256 milliseconds * SEL_128 128 milliseconds * SEL_64 64 milliseconds * SEL_32 32 milliseconds */ aha_change alad_sel_timeout[SCSI_NALAD]; /* Allow Disconnection * This is a 16-bit field where each bit corresponds to a target ID * (bit 0 for target ID 0, and so forth). If bit is set to 1, * disconnection is allowed for the corresponding target ID. * Default value is allow disconnection. * **NOTE** If Disconnection is not allowed, tag-queueing must be * turned off. Turning on Tag-queuing must also allow * Disconnection!. */ aha_change alad_disconnect[SCSI_NALAD]; /* SCSI Option is a 16 byte arrays to specify negotiation options. * If 8-bit data channel, only the first 8 bytes are examined. * Byte 0 for target 0, and so forth. Each byte must contains * SYNC_MODE, SYNC_RATE, and WIDE_MODE. * Synchronous Negotiation : * If SYNC_ENABLE, the host adapter will attempt to negotiate for * synchronous SCSI data transfer. If SYNC_DISALBE, the host adapter * will not initiate synchronous negotiation; however, it will * respond to negotiation initiated by the target. * The SYNC_RATE will be used whether the negotiation * is initiated by the host adapter or by the target. * The supported values for SYNC_MODE: * SYNC_ENABLE host initiates the negotiation * SYNC_DISABLE target initiates the negotiation * The supported values for SYNC_RATE are : * SYNC_10_0 10.0 MHz * SYNC_8_0 8.0 MHz * SYNC_6_7 6.7 MHz * SYNC_5_7 5.7 MHz * SYNC_5_0 5.0 MHz * SYNC_4_4 4.4 MHz * SYNC_4_0 4.0 MHz * SYNC_3_6 3.6 MHz * Wide Mode : * If set to 1, the host adapter will attempt to negotiate for * 16 bit SCSI data transfers. If set to 0, it will not initiate * wide negotiation; however, it will respond to negotiation * initiated by the target. * The supported values for WIDE_MODE are : * WIDE_ENABLE negotiate for 16 bit SCSI data transfer * WIDE_DISABLE will not initiate wide negotiation * **NOTE** changing scsi option value will cause a SCSI bus reset * * EXAMPLE: alad_scsi_opt[SCSI_NALAD][16]={1,1} Sets wide negotiation * for target ID 1. */ aha_change alad_scsi_opt[SCSI_NALAD][16]; /* Ignore underrun * If set to 1, ignore underrun as an error. If set to 0, report * underrun as an error. Default is 1, ignore underrun as an error. */ aha_change alad_underrun[SCSI_NALAD][16]; /* Maximum number of tagged commands * The maximum number of tagged queuing SCBs the driver will * program the AIC-7870 for each SCSI device. The valid values * are 1 to 255. The default value is 8. */ aha_change alad_MaxTagScbs[SCSI_NALAD]; /* Suppress scanning for LUN * During initialization, the driver will scan all devices * to obtain negotiation information. By default, all target * IDs are scanned, but not the LUN. * For example, if you have an AHA-2940 with the following * configuration that you want to modify: * Host adapter number scan for LUN * 0 no (default) * 1 yes * you need to modify the alad_scan_lun: * alad_scan_lun[SCSI_NALAD]={0,0, 1,1}; */ aha_change alad_scan_lun[SCSI_NALAD]; .j..jukeELF44 (4444TTP$ xx`/usr/lib/libc.so.1    ܣ < ܣ! ܄  (|-\4;BأIV̄,l qxlH L* 8,2x __iobopen_iob_cleanup_end_environatoiperror_etextatexit_edata_runtime_env_init_features_vectorexitstrcmpstrpbrk_lib_versionfprintf_runtime__fpstart_GLOBAL_OFFSET_TABLE_printf_DYNAMICioctl_on_everest/usr/lib/libc.so.1D HL PTX\`dhlpt5<%@%Dh%Hh%Lh%Ph%Th %Xh(%\h0%`h8p%dh@`%hhHP%lhP@%phX0%th` jj!܄t h܄.ETRU RP P jÐUWVu S]hVRuEH~@hNQu#EPu~WhhОFPu#Eu~Wh؞hVRZu7Eu ~QjhFPuEu~ [;uRhVRuE*h NQxE`jW؃u"PhhWjZSEu jBVSUP4 [^_];UW}Wh*WhDhXWh hWhПhWh$h@WhthhԠhL_];UWE V3S@EE U3@ EhR؅tShMQ؅tShEPu3fi;hURu3fFhMQu3f"hEPu/3fhLURud3fE U QEPhRp);E Phhkhq[^_];hPMQu3fFhTEPu3f"hXURu33fM WhKJSQ I3i;E MRQh\PE;UjhKJSUR u-E Qhhlhr];3t&UhhKJSURv u.E Qhhhȡ]Ã3U3fPhС3fPh3fPh3fPh3fPhz3fPh,g3fPh@T3fPhPA3@]ÁUWh`3fftWh|3fG;|hh3fftWh3fG;|hh3fftWhĢ3fG;|h̢khТa3fftWhF3fG;|h,3_];t&UjhKJSURi u-E Qhh h];3t&UjhKJSUR u-E Qhhh];3t&UPhE PRtP3f‰EMEQhKJSP u+E Rh$h:h,@]3t&UERh0hM4E0QM(PE$U,RU QMPERUQMPE RQPh<]Ã/dev/Sjk0resetaddrAddresses for device %s: elemValid elements for device %s: moveposlockunlock%s: Usage: %s operation [arguments] [dev] %s reset [dev] Perform a hardware reset on the device %s lock|unlock [dev] Disable/enable the juke front panel controls %s pos st [dev] Position the given slot in front of medium transport %s move src dest [dev] Move the src element to the destination element %s elem [dev] Shows valid element names for src, dest, and st Default device is %s /dev/Sjk001234567890123456789iemtdtstunknown element name '%s'; use the element names from '%s elem' iemtdtstunknown element name '%s'; use the element names from '%s elem' %s: move%s: reset%s: addrmagazine_addr = %d magazine_num = %d slot_addr = %d slot_num = %d import_addr = %d import_num = %d dat_addr = %d dat_num = %d Import/Export Elements: ie%d Medium Transport Elements: mt%d Storage Elements: st%d Data Transfer Elements: dt%d %s: lock%s: unlock0123456789%s: pos%s: x҄"2BRbr\ 8hP SCO.interp.hash.dynsym.dynstr.rel.plt.init.plt.text.data.data1.got.dynamic.bss.note.symtab.strtab.shstrtab.comment@(#)SCO Open Server AHS 5.1.0/OS_drivers 5.1.0 08/25/95  \\ PPh(.39?F88@Kxx`TأYoyx9#ident "@(#) space.c 26.1 95/07/19 " /* * Portions Copyright 1994-1995 The Santa Cruz Operation, Inc * All Rights Reserved * * Copyright 1993 Adaptec, Inc., All Rights Reserved. * * This software contains the valuable trade secrets of Adaptec. The * software is protected under copyright laws as an unpublished work of * Adaptec. Notice is for informational purposes only and does not * imply publication. The user of this software may make copies of * the software for use with parts manufactured by Adaptec or under * license from Adaptec and for no other use. * *********************************************************************/ #include "sys/types.h" #include "sys/iobuf.h" #include "sys/buf.h" #include "sys/dio.h" #include "sys/disk.h" #include "sys/fs/s5param.h" #include "sys/scsi.h" #include "sys/elog.h" #include "sys/open.h" #include "sys/devreg.h" #include "sys/param.h" #include "sys/adaptec.h" #include "config.h" #ifndef SCSI_NSMAD #define SCSI_NSMAD 2 #endif #if SCSI_NSMAD == 0 #undef SCSI_NSMAD #define SCSI_NSMAD 1 #endif #ifndef SMAD_0_SIOA #define SMAD_0_SIOA 0x340 #endif int smad_num_adapters = SCSI_NSMAD ; /* Structure area that will be used in the smad driver */ unsigned char smadinstalled[SCSI_NSMAD]; /* marked if installed */ struct dkcntlrtab smadctlrinfo[SCSI_NSMAD]; /* info. for disk setup */ SHAREG_EX smadreg[SCSI_NSMAD]; /* un-registered adapter */ /* info. for Sharegister */ /* Host Adapter Base Address * By default, Host Adapter Number 0 is set at port address 0x340. * If you want to configure Host Adapter Number 0 as 0x340 and Host * Adapter Number 1 as 0x140, you need to define the "smad_base" as: * smad_base[SCSI_NSMAD] = {0x340, 0x140}; */ paddr_t smad_base[SCSI_NSMAD] = {SMAD_0_SIOA}; /* CONFIGURABLE PARAMETERS * * How to set configuration paramters: * If you compile the way it is now, all the configuration parameters * is set to the default by the HIM. If you want to change the default, * the first number indicates whether the default should be changed. * If set to 0, the parameter will be set to the default. If set * to 1, the second number will be used to override the default. * * NOTE: The supported values that are indicated as "default" are * used for non-readable jumper hardware. For example, AHA-1510. * For readable jumper hardware like AHA-1520, default values will * not be used, but reading from jumper settings. */ /* Host Adapter SCSI ID * For non-readable jumper hardware, the driver uses 7 as default ID. * Else, information will be retrieved from reading the jumper. * For example, if you want to configure Host Adapter Number 0 as * SCSI ID 5 and Host Adapter Number 1 as default, you need to modify * the "smad_hba_id" as: * smad_hba_id[SCSI_NSMAD] = {1,5,0,0}; */ aha_change smad_hba_id[SCSI_NSMAD]; /* Interrupt Level * For non-readable jumper hardware, the driver uses 11 as default IRQ. * Else, information will be retrieved from reading the jumper. */ aha_change smad_irq[SCSI_NSMAD]; /* Parity Option * This specifies whether the host adapter will check parity * on incoming SCSI data. (parity will always generate on * outbound SCSI data) * The supported values are: * 1 parity checking is enabled (default) * 0 parity checking is disbled */ aha_change smad_parity[SCSI_NSMAD]; /* Fast SCSI Option * To enable/disable the Fast SCSI option * The supported values are: * 1 If this is set and an AIC-6360 is present, * synchronous transfers up to 10 MBytes/second * may be negotiated. * 0 If this is cleared, the AIC-6360 will accept * synchronous data transfer negotiations up to * 5 MBytes/second. */ aha_change smad_fast[SCSI_NSMAD]; /* Asynchronous Option * The supported values are: * 1 respond to synchronous negotiation attempts * by SCSI tagets (default) * 0 refuse to respond to synchronous negotiation * and operate in asynchronous mode, only */ aha_change smad_asyn[SCSI_NSMAD]; /* Synchronous Negotiation Option * The supported values are: * 0 initiate for synchronous negotiation (default) * 1 respond to synchronous negotiation * (see "smad_asyn" for running asynchronous mode) */ aha_change smad_sync_mode[SCSI_NSMAD][8]; /* Allow Disconnection * **NOTE** If Disconnection is not allowed, tag-queueing must be * turned off. Turning on Tag-queuing must also allow Disconnection! * The supported values are: * 0 allow target to disconnect (default) * 1 do not allow target to disconnect */ aha_change smad_discon[SCSI_NSMAD][8]; /* CPU Interrupt Load Weighting * Usually set to interrupt priority level of driver. */ int smad_weight = SMAD_0_IPL; /* CPU Interrupt Processor Choice * This describes which processor(s) can execute smadintr(); * DRIVER_CPU_DEFAULT smadintr() can take place on whatever * the driver default is; in this case * any CPU (ie. distribute interrupts) * 1 execute only on the base processor */ int smad_processor = DRIVER_CPU_DEFAULT; #ident "@(#) space.c 26.1 95/06/26 " /* * Copyright (C) The Santa Cruz Operation, 1994-1995. * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /* ** ident @(#) space.c.dsk 1.12 1 1/2/95 12:51:36 ** ** sccs_id[] = {"@(#) 1.12 space.c.dsk "} */ /* *************************************************************************** ** ** MODULE NAME: space.c.dsk ** ** PURPOSE: Dsk space.c file, tunable parameters. ** ** DEPENDENCIES: ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990, 1991, 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** System Include Files *************************************************************************** */ #include "sys/param.h" #include "sys/types.h" #include "sys/sysmacros.h" #include "sys/immu.h" #include "sys/systm.h" #include "sys/buf.h" #include "sys/iobuf.h" #include "sys/dir.h" #include "sys/user.h" #include "sys/dio.h" #include "sys/disk.h" #include "sys/errno.h" #include "sys/conf.h" #include "sys/cmn_err.h" #include "sys/devreg.h" #include "sys/scsi.h" /* *************************************************************************** ** Module Related Include Files *************************************************************************** */ #include "Tdsk.h" /* Scatter/gather d.s. definition. */ /* *************************************************************************** ** Defines *************************************************************************** */ /* ** The following define may be changed by the postinstall script ** to WAKEUPN_STUB_YES or WAKEUPN_STUB_NO. On systems that are pre MSV4.2 you ** will get a undefined symbol, wakeupn, from the Tdsk driver. This define ** controls whether the stub routine (in this space.c) will be ** included */ #define WAKEUPN #define DSK_MAX_DRIVERS 1 /* 7 drivers * 4 drives = 28 drives. */ #define IIOP_REQIO_THRESHOLD 1000 /* Put out warning message if we run out of free REQ_IO's this many times*/ #define IIOP_SG_THRESHOLD 1000 /* Put out warning message if we run out of free Scatter-Gather buffers this many times */ /* ** W A R N I N G ! ! ! The following define cannot be greater than ** the define by the same name in /etc/conf/pack.d/Sdsk/space.c ** This is here to support mpsar -d */ #define NSDSK_STATS 28 /* Size of Sdskstats in entries */ /* ** W A R N I N G ! ! ! The following define must match ** IIOP_MAX_IORPS_K2 in space.c.iiop. */ #define IIOP_MAX_REQIO_K2 512 /* Size of time_t array for Sar */ /* *************************************************************************** ** Global Static Storage *************************************************************************** */ int iiop_hit_max_reqio = 0; /* Counter for REQ_IO buffer unavailable */ int iiop_hit_max_sg = 0; /* Counter for Scatter-Gather buffer unavailable */ int iiop_max_reqio_threshold = IIOP_REQIO_THRESHOLD; int iiop_max_sg_threshold = IIOP_SG_THRESHOLD; DSK_TABLE Dsk_driver[DSK_MAX_DRIVERS];/* Always 1 since 3.2.4 */ int Dsk_do_block_sg = 1; /* File system scatter/gather is enabled now for Everest. */ int Dsk_log_removals = 1; /* Log drives removed after installed */ int Dsk_wakeupn = 1; /* If 1 then Dsk driver will call wakeupn rather than wakeup when waking up processes after running out of resources. This should be more efficient that wakeup., kec mwc. */ /* ** Stub code for pre-MSV4.2 systems. wakeupn doenot exist in these kernels */ #ifdef WAKEUPN_STUB_YES int wakeupn(address, number) char *address; int number; { return(wakeup(address)); } #endif /* ** Number of disk devices we are supporting for mpsar -d */ int Dsk_nsdsk_stats = NSDSK_STATS; /* ** Starting time array for Sar statistics */ time_t Dsk_io_start[IIOP_MAX_REQIO_K2]; #ifdef __STDC__ #pragma comment(exestr, "@(#) Tdsk.h 26.1 95/06/26 ") #else #ident "@(#) Tdsk.h 26.1 95/06/26 " #endif /* ** ident @(#) Tdsk.h 1.10 1 5/24/95 11:28:14 ** ** sccs_id[] = {"@(#) 1.10 Tdsk.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: Tdsk.h ** ** PURPOSE: Upper level disk driver data structure definitions. ** ** DEPENDENCIES: ** ** o None. ** ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1990, 1991, 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** Defines *************************************************************************** */ #define MAX_SG_DESCRIPTORS 33 /* Nbr 4K pages to comprise 128K xfer. */ #define DSK_MAX_SCSI_ID 15 /* Maximum SCSI id value. */ #define SCSI_BOOT_IDENTIFY 99 /* Dsk specific init command for REQ_IO structure. */ #define MAX_DISKS 360 /* 6 ISSs by 4 busses by 15 drives */ #define B_DSK_SG 0x80000000 /* Tricord scatter/gather. */ /* ***************************************************************************** Macros ****************************************************************************/ #define DSK_NDISKS ((DPHYS(0xff))+1) /* Max. nbr. of disks. */ /* *************************************************************************** ** Typedefs *************************************************************************** */ /* ** The scatter/gather definition. This structure is filled by ** the driver making the I/O request. */ typedef struct { paddr_t p_addr; /* Physical buffer address. */ long size; /* Byte count. */ } SG_PAIRS; typedef struct sg_descr { u_short count; /* Number of SG_PAIRS. */ SG_PAIRS ptrs[MAX_SG_DESCRIPTORS];/* Max. grouping of SG_PAIRS. */ struct sg_descr *next; /* Link list of descriptors. */ struct buf *av_forw; /* Saved bp->av_forw ptr. */ u_long b_bcount; /* Saved bp->b_bcount. */ u_long b_blkno; /* Saved bp->b_blkno. */ } SG_DESCRIPTOR; typedef struct disks { DEVCFG *config_tbl; /* Ptr to device config. tbl. */ dip_t disk_para; /* Diskinfo d.s. */ struct dkcntlrtab ctrl_info;/* Info from host adapter cfg table. */ union { struct { /* ** WARNING: ** The order of the following must be the same as ** the data stored in the character array by the ** adapter driver when computing the geometry. */ u_short cylinders; /* Simulated number of cylinders. */ u_short heads; /* Simulated number of heads. */ u_short sectors; /* Simulated number of sectors. */ } st506; u_char bytes[sizeof(u_short)*3]; } geometry; /* Simulated ST506 disk drive. */ } DSKDISKS; typedef struct { REQ_IO *free_buf; /* Head of free list. */ SG_DESCRIPTOR *free_descr; /* Head of the scatter/gather free list. */ u_int buffers; /* The number of REQ_IO d.s. */ u_int sg_buffers; /* The number of scatter/gather buffers. */ u_int used; /* Active buffers. */ u_int used_sg; /* Active scatter/gather buffers. */ u_short want_buffer; /* Waiting on disk drive buffer. */ u_short want_sg; /* Waiting on scatter/gather buffer. */ DSKDISKS drives[MAX_DISKS];/* Array of disk units. */ DEVCFG *cfg_tbl; /* Pointer to head of DskXcfg[]. */ dev_t dev_major; /* Major device number. */ caddr_t *reqio_start; /* Starting virtual address of REQ_IO pool*/ } DSK_TABLE; .P..postinstallpreinstalldriversiiop.namebtld# # @(#) postinstall 26.3 95/07/21 # # Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi SDEVICE=/etc/conf/sdevice.d tmp=/tmp/postbtld.$$ # Modify the lun of the boot drive if it is a logical drive. update_boot_drive_lun () { awk ' BEGIN { getline logical_id<"/etc/logical_boot.id" logical_id = logical_id + 128 } { if ( ($2 == "Dsk") && ($3 == 0) && ($4 == 1) ) { $5 = logical_id printf"%s\t%s\t%d\t%d\t%d\n",$1,$2,$3,$4,$5 } else print } { next } ' < $mscsi > $mscsi.tmp mv $mscsi.tmp $mscsi } patch_mscsi() { unsettrap sed -e '/^piiop/s/piiop/iiop/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'iiop' $scsihas > $tmp test -s "$tmp" && return $OK echo "iiop\t\t\"Tricord Intelligent SCSI Controller and (IMS), Version 5.00\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi # # Turn off piiop and turn on iiop, Dsk, ims, and tpic # # Turn off piiop # sed -e 's/Y/N/' $SDEVICE/piiop > $SDEVICE/piiop.tmp.$$ cp $SDEVICE/piiop.tmp.$$ $SDEVICE/piiop rm $SDEVICE/piiop.tmp.$$ > /dev/null 2>&1 # Turn on iiop # sed -e 's/N/Y/' $SDEVICE/iiop > $SDEVICE/iiop.tmp.$$ cp $SDEVICE/iiop.tmp.$$ $SDEVICE/iiop rm $SDEVICE/iiop.tmp.$$ > /dev/null 2>&1 # Turn on Dsk # sed -e 's/N/Y/' $SDEVICE/Dsk > $SDEVICE/Dsk.tmp.$$ cp $SDEVICE/Dsk.tmp.$$ $SDEVICE/Dsk rm $SDEVICE/Dsk.tmp.$$ > /dev/null 2>&1 # Turn on ims # sed -e 's/N/Y/' $SDEVICE/ims > $SDEVICE/ims.tmp.$$ cp $SDEVICE/ims.tmp.$$ $SDEVICE/ims rm $SDEVICE/ims.tmp.$$ > /dev/null 2>&1 # Turn on tpic # sed -e 's/N/Y/' $SDEVICE/tpic > $SDEVICE/tpic.tmp.$$ cp $SDEVICE/tpic.tmp.$$ $SDEVICE/tpic rm -f $SDEVICE/tpic.tmp.$$ > /dev/null 2>&1 # # Change all Sdsk entries in mscsi to Dsk # sed -e 's/Sdsk/Dsk/' $mscsi > $mscsi.tmp.$$ cp $mscsi.tmp.$$ $mscsi rm -f $mscsi.tmp.$$ > /dev/null 2>&1 & # # Move pic/space.c into place # mv /etc/conf/pack.d/tpic/space.c /etc/conf/pack.d/pic/space.c # # SED the Sdsk entries in the pack.d/hd/space.c to Dsk # sed -e 's/Sdsk/Dsk/g' /etc/conf/pack.d/hd/space.c > /tmp/hd.$$ mv /tmp/hd.$$ /etc/conf/pack.d/hd/space.c # # If there is an enabled a15k GPI, turn it off because it can trash # EIIOP devices in EISA slot 12 # if [ -r /etc/conf/sdevice.d/a15k ] then # There is an a15k file, see if it is on. # grep 'Y' /etc/conf/sdevice.d/a15k > /dev/null 2>&1 if [ $? -eq 0 ] then # It is on, so turn it off. # sed -e 's/Y/N/' /etc/conf/sdevice.d/a15k > /tmp/a15k.tmp.$$ cp /tmp/a15k.tmp.$$ /etc/conf/sdevice.d/a15k rm -r /tmp/a15k.tmp.$$ > /dev/null 2>&1 fi fi # # Now go do the boot_pdm stuff to find out if the root disk is an array. # if [ -x /usr/bin/read_boot_pdm ] then # # We are running before the kernel link so we need to make a temporary # node for read_boot_pdm to use. # /etc/mknod /dev/iiop c 6 1 /usr/bin/read_boot_pdm if [ -s /etc/logical_boot.id ] then update_boot_drive_lun fi rm -f /etc/logical_boot_id > /dev/null 2>&1 rm -f /etc/rev.id > /dev/null 2>&1 rm -f /dev/iiop > /dev/null 2>&1 else echo 'WARNING: /usr/bin/read_boot_pdm not found' fi .h..Sjk...Driver.o.ZSpace.cMasterNodeSystemDriver.o |V}dp װjGi,)ac,UVhYIlBOxh[<͢W/nLsW9qMbg]QQUY9Kp(IO߭9w{նrm9z'Hqڃ;@rq-j7P_^v${?G|EQdCi;?e^q7H:}H>{x7whHDSR d_d.P 8|7 ĵd k0s, Td8QN&*ѕXM%2<Ղ-bqf.38QTbOXǁ!/i̸+CrNX`z@%h֮#[l&8z!ǖͥكK!#Ų9qXy4eOY41.r|LY=qvtE%ck3+9= _ ͜~5Oж1t$jVY c? YZJsDx  qpps<"BУFiчO X˟ e J,9lI9uq"HG9iD@Mc 7iL,)PRd%Ec/>_:#!5/.JFI><@@J/^f\d:/Qֲ9eY^k?-M&-%em 6YzD?=}3:+8ɵm/.f.e 2FĚ/g_ _fwcnJ .ݜ  BGUxt7q-)fMzG6`.cy5Y;Y"KP^ ) XRX%!/ީ.9 Y/l%ߪKBZU%%Ą5I|W,Tp3LP>UD0$t dL%(ю*Y䆘`)P4ƌSgXGd_Jͥòt" [gO^I R 6F랝Kʧf Arf30\鲨f"n$1sVzVuw_Ű /,,εS6>*2 lv*4\; ?u(*Naw b_5m/}!Zb_F!pCq\kIJ ๩ bkJ`#>vUgT 9FOyB ?.w}~;î8 舝pl/8;?NV Z*b൪R|^Ha5dzMncfM48҈}.FU`3hRʾ4 ԍ%-= 4d1әn!R3kr6TD]k/< `8R Cu< ݣ 58Fhά_&x񓖥;dSQZ4ZNv7oTE_ahk9gy͉yk6&eLMhjGY"g5GU^inU"VdpT+6+NV\> Gc@84Eq4)ʢ+E=ͳ~+?\k/Gk/%eߢv̴Ӵ@MfD 6 (Uض: ax<PoK^ΜhWz鞈@f;%ӳ@O$ئ<\O? }˒}0sU)^OݒKh?I 8녫gR&= '1EaFΌN1f<MF_d _nJ3Y<$;n̍nקt z;~6ߣvq݄ 2Ne.A˯x0Lm+'ȿЍG8n(Pa/VvӓDE*PaN"ZD@vLVW]o߉Sn4`»&JDs`;+4u-mZBF&V:E^ѻ8eW]i>ws0?;9DBk犷+{$ۘ\w1ѐc0?9?Q՘\XUz­iOz1ɘ)fφfϐe9arߢ`}C08g&d~z+ްO18V@2>Gcť'ZU+JiQ0>yߘ`qrL+݄I O1=I֘M&1=щCLOjb| 3[LLo@b}IǷ1?&0;5*%ş Mժ\l`}s`}pٔ0(0> m Te NЕo1P31?f.KD]uTEʈ;DT^!0> ib{cۘ.v!܀*]D*[ޛ()q]1!ҳۿH~Y|T3m~nke(g<%U][ݼ'L1ݗHXB#Z<5*c3>XxA2I̞;qPܧGwv$#aCm65 ~!o:`GcrD6E ?B/f@ٻw ,jWG#_xm¼YdvNbϻFQ{:1,4,NWٿ oZtMN=`a$0Ҽs∋C$BxP!D }rx.SpH?cmCJ 'JhÆiFX#ident "@(#) space.c 26.1 95/08/10 " /* * Copyright (C) 1993-1995 The Santa Cruz Operation, Inc. * All Rights Reserved. * The information in this file is provided for the exclusive use of * the licensees of The Santa Cruz Operation, Inc. Such users have the * right to use, modify, and incorporate this code into other products * for purposes authorized by the license agreement provided they include * this notice and the associated copyright notice with any such product. * The information in this file is provided "AS IS" without warranty. */ #include "sys/ci/cilock.h" int wdcmdtime = 60; /* # secs in which all cmds must complete */ int wdrsttime = 60; /* # secs in which ctlr reset must complete */ int wdprmtime = 60; /* # secs in which SET_PARM must complete */ int wdchktime = 60; /* # secs before trying a 'dead' disk again */ /* * Table of machines which require special initialisation during WD1010 * presence checking. Typically these are special IBM systems. */ struct modelinfo { unsigned char Vendor, /* Vendor type (see sys/vendor.h) */ Model, /* Model number (from INT 15 data) */ SubModel, /* SubModel no. " " " */ Pad; /* pad to 32bit boundary */ }; struct modelinfo wd_model_info[]={ { 0x5, 0xF8, 0x19}, /* IBM Models 35sx, 40sx and L40sx */ { 0x5, 0xF8, 0x23}, /* " " " */ { 0x5, 0xF8, 0x24}, /* IBM Model 40 SLC */ { 0x5, 0xF8, 0xB0}, /* IBM Model 76i/77i */ { 0x5, 0xF8, 0x60} /* IBM Thinkpad 720c */ }; int wd_model_info_size = sizeof(wd_model_info) / sizeof(struct modelinfo); /* Probe definitions */ #define wd1010_UNKNOWN 0 #define wd10100_0 115712 /* wd10100_0 */ #define wd10100_1 115713 /* wd10100_1 */ #define wd10101_0 115714 /* wd10101_0 */ #define wd10101_1 115715 /* wd10101_1 */ /* probe device table */ unsigned wdProbe[][2] = { {wd10100_0, wd10100_1}, {wd10101_0, wd10101_1}, {wd1010_UNKNOWN, wd1010_UNKNOWN} }; /* * Device configuration information - these are the values used to auto * configure the interrupt handlers when a WD1010 style controller is * detected */ int wdvect[2] = { 14, /* Controller 0 */ 15 /* Controller 1 */ }; int wdipl[2] = { 5, /* Controller 0 */ 5 /* Controller 1 */ }; /* * Lock structures used to provide multi-threaded support */ LOCKVAR(wdc_lock0, wdjnk0); /* Controller 0 lock */ LOCKVAR(wdc_lock1, wdjnk1); /* Controller 1 lock */ LOCKVAR(wdt_lock0, wdjnk2); /* iobuf lock 0 */ LOCKVAR(wdt_lock1, wdjnk3); LOCKVAR(wdt_lock2, wdjnk4); LOCKVAR(wdt_lock3, wdjnk5); struct lockb *wdctlrlocks[] = { &wdc_lock0, &wdc_lock1 }; struct lockb *wdtablocks[] = { &wdt_lock0, &wdt_lock1, &wdt_lock2, &wdt_lock3 }; /* * Presence check routine used by hd_config() - replaces old wd0pres mehcanism */ extern int wdpres(); wdpresent() { return( wdpres(0) ); } /* * For ATAPI systems which have an ATAPI drive and an IDE on the same controller * the following tunable allows/disallows load balancing. If set, the ATAPI * device will get equal opportunity for its requests to be dispatched. If * reset, the IDE device will be treated with preference. This behaviour is * most noticeable when the system is under heavy disk load and the CD is then * accessed. */ int wd_balanced_load = 1; /* Allow load-balancing (default 1) */ #ident "@(#) space.c 26.1 95/07/19 " static char SCCSid[] = "@(#)Product: PCscsi 2.3.0 Date: 06/20/95"; /*-- Copyright (c) 1993-1994 Advanced Micro Devices, Inc. - All Rights Reserved. This software is unpublished and contains the trade secrets and confidential proprietary information. Unless otherwise provided in the Software Agreement associated herewith, it is licensed in confidence "AS IS" and is not to be reproduced in whole or part by any means except for backup. Use, duplication, or disclosure by the Government is subject to the restrictions in paragraph (b) (3) (B) of the Rights in Technical Data and Computer Software clause in DFAR 52.227-7013 (a) (Oct 1988). DESCRIPTION: space.c file REVISION HISTORY: DATE VERSION INITIAL COMMENT -------- ------- ------- ---------------------------------------- 12/06/94 2.0.0 MS First release of space.c, was empty before (1.0.1). --*/ AMDPciMechanismFlag = 0; /* To make driver to assume PCI mechanism #1 */ /* change value here from 0 to 1, to make it to */ /* assume PCI mechanism #2 change value here */ /* from 0 to 2 and rebuild the kernel. */ /* By default (0) driver will try resolve */ /* mechanism type by itself. */ /* Default behavior could also be changed in the*/ /* boot time by using boot substring ams./PCI1 */ /* or ams./PCI2 */ AMDDisableSGFlag = 0; /* To disable S/G processing by default change */ /* value here from 0 to 1 and rebuild kernel. */ /* Could be also disabled in the boot time by */ /* using boot time substring "ams./SG-" */ AMDEnableTQFlag = 0; /* To enable tag queueing by default change */ /* value here from 0 to 1 and rebuild kernel. */ /* Could be also disabled in the boot time by */ /* using boot time substring "ams./TQ" */ AMDDisableParityFlag = 0; /* To disable parity handling by default change */ /* value here from 0 to 1 and rebuild kernel. */ /* Could be also disabled in the boot time by */ /* using boot time substring "ams./PAR-" */ AMDDisableSyncTransfer = 0; /* To disable sync negotiation by default change*/ /* value here from 0 to 1 and rebuild kernel. */ /* Could be also disabled in the boot time by */ /* using boot time substring "ams./S-" */ ELF4X4 (4444dd`|/usr/lib/libc.so.1    \  $l+|2?L,UZh` f s*{ |܄̄ open_cleanup_end_environ_etextatexit_edata_runtime_env_init_features_vectorexitfopenerrno_lib_versionfprintf_runtime__fpstart_GLOBAL_OFFSET_TABLE_fclose_DYNAMICioctl_on_everest/usr/lib/libc.so.1    5%%h%h%h%h%h %h(% h0%h8p%h@`%hHPjjQ\t h\^ETRU RPN PPjÐUWVSjh4u jh̖h!u jhܖhЖ؅u jEPWvuEt3EPhV lPjW upRhS VSjb [^_]ÁUE WEEEEPjURb u=_]ÃEM;t/dev/iiop/etc/logical_boot.idw/etc/rev.idw%d %d Rbr„҄  P SCO.interp.hash.dynsym.dynstr.rel.plt.init.plt.text.data.data1.got.dynamic.bss.note.symtab.strtab.shstrtab.comment@(#)SCO Open Server AHS 5.1.0/OS_drivers 5.1.0 08/25/95  `   P(88.<<39?@F4K`T||Y|oy9....softmgmt...iiop.flclient.dbClientControl.flesdi.flams.flwd.flalad.flsmad.flbhba.fldptr.flarad.flSjk.flSharedControl.flPKG SCO:OS_drivers:iiop DIR 0755 root sys - ./drivers/iiop DIR 0755 root sys - ./drivers/iiop/driver DIR 0755 root sys - ./drivers/iiop/driver/iiop SYML - ./drivers/iiop/driver/iiop/Driver.o SHARED ./drivers/iiop/driver/iiop/Driver.o SYML - ./drivers/iiop/driver/iiop/Master SHARED ./drivers/iiop/driver/iiop/Master SYML - ./drivers/iiop/driver/iiop/Space.c SHARED ./drivers/iiop/driver/iiop/Space.c SYML - ./drivers/iiop/driver/iiop/System SHARED ./drivers/iiop/driver/iiop/System SYML - ./drivers/iiop/driver/iiop/Node SHARED ./drivers/iiop/driver/iiop/Node DIR 0755 root sys - ./drivers/iiop/driver/piiop SYML - ./drivers/iiop/driver/piiop/Driver.o SHARED ./drivers/iiop/driver/piiop/Driver.o SYML - ./drivers/iiop/driver/piiop/Master SHARED ./drivers/iiop/driver/piiop/Master SYML - ./drivers/iiop/driver/piiop/Space.c SHARED ./drivers/iiop/driver/piiop/Space.c SYML - ./drivers/iiop/driver/piiop/Space.o SHARED ./drivers/iiop/driver/piiop/Space.o SYML - ./drivers/iiop/driver/piiop/System SHARED ./drivers/iiop/driver/piiop/System DIR 0755 root sys - ./drivers/iiop/driver/Dsk SYML - ./drivers/iiop/driver/Dsk/Driver.o SHARED ./drivers/iiop/driver/Dsk/Driver.o SYML - ./drivers/iiop/driver/Dsk/Master SHARED ./drivers/iiop/driver/Dsk/Master SYML - ./drivers/iiop/driver/Dsk/Space.c SHARED ./drivers/iiop/driver/Dsk/Space.c SYML - ./drivers/iiop/driver/Dsk/System SHARED ./drivers/iiop/driver/Dsk/System SYML - ./drivers/iiop/driver/Dsk/Tdsk.h SHARED ./drivers/iiop/driver/Dsk/Tdsk.h DIR 0755 root sys - ./drivers/iiop/driver/ims SYML - ./drivers/iiop/driver/ims/Driver.o SHARED ./drivers/iiop/driver/ims/Driver.o SYML - ./drivers/iiop/driver/ims/Master SHARED ./drivers/iiop/driver/ims/Master SYML - ./drivers/iiop/driver/ims/Space.c SHARED ./drivers/iiop/driver/ims/Space.c SYML - ./drivers/iiop/driver/ims/System SHARED ./drivers/iiop/driver/ims/System SYML - ./drivers/iiop/driver/ims/Node SHARED ./drivers/iiop/driver/ims/Node SYML - ./drivers/iiop/driver/ims/Rc SHARED ./drivers/iiop/driver/ims/Rc DIR 0755 root sys - ./drivers/iiop/driver/tpic SYML - ./drivers/iiop/driver/tpic/Driver.o SHARED ./drivers/iiop/driver/tpic/Driver.o SYML - ./drivers/iiop/driver/tpic/Master SHARED ./drivers/iiop/driver/tpic/Master SYML - ./drivers/iiop/driver/tpic/Stubs.c SHARED ./drivers/iiop/driver/tpic/Stubs.c SYML - ./drivers/iiop/driver/tpic/Space.c SHARED ./drivers/iiop/driver/tpic/Space.c SYML - ./drivers/iiop/driver/tpic/System SHARED ./drivers/iiop/driver/tpic/System DIR 0755 root sys - ./drivers/iiop/install #ident "@(#) space.c 26.2 95/07/03 " /************************************************************************* * * Copyright 1995 Santa Cruz Operation, Inc., All Rights Reserved. * * This software contains the valuable trade secrets of Symbios Logic. * The software is protected under copyright laws as an unpublished work * of Symbios Logic. Notice is for informational purposes only and does * not imply publication. The user of this software may make copies of * the software for use with parts manufactured by Symbios Logic or under * license from Symbios Logic and for no other use. * *************************************************************************/ /************************************************************************ * * * Copyright 1995 Symbios Logic Inc. All rights reserved. * * * * This file is confidential and a trade secret of Symbios Logic Inc. * * The receipt of or possession of this file does not convey any * * rights to reproduce or disclose its contents or to manufacture, * * use, or sell anything is may describe, in whole, or in part, * * without the specific written consent of Symbios Logic Inc. * * * ************************************************************************/ /*+++HDR * Name: Space.c * Title: * $Workfile: * $Revision: * $Modtime: * Programmer: * Creation Date: * * Version History * --------------- * * Date Who? Description * -------- ---- ------------------------------------------------------- * *------------------------------------------------------------------------- * * $Header: $ * $Log: $ * * ---*/ #include "sys/devreg.h" #ifdef SCCS #ident "@(#) /s/unx/usr/src/uts/i386/master.d/bhba/s.space.c 26.2 7/3/95 13:48:22" #endif /*DECLARATIONS*/ extern void bsim_doinit(); extern long SIM17Action(); #define MAX_HBA 8 void (*bsSIMInitTable[])() = { /*INITPTR*/ bsim_doinit, 0 }; long (*bsSIMActionTable[])() = { /*ACTIONPTR*/ SIM17Action, 0 }; SHAREG_EX bhreg [MAX_HBA]; int bhba_processor = DRIVER_CPU_DEFAULT; /* tuneable haInfo Parameters */ int bhba_do_buffer = 0; int bhba_do_tagged = 0; int DCDebug_exPath=8; /* exclude this HBA from DCDebug tracing */ ,r6fvN+UKeN7{3wwc,ee9vtR\۹2Lݛ{ b'! Q'_@Vp_FО %&?g۹FP}2>%m-~!,2]gU^ zZC ɧE'^ZE wEҭR5]}T`o{Tݳv{q۷}ۑ{.;Uݯ } {{c_}nw JF31OkCƂ OkrW6>?.//y&-%=G%N}mmv +Dbg[ mv!!!!!!#pSA?>AZVºR" 톁|@v!HHHHHHHvfh ncN$$$$$$D2qh3 u¶» fPKzn,O<- Sw}uv[?M_7  OoxŃ7"5xæ,9c}jcv|?Ȼ3o< +'.8d!u'~i'9?y8`=xWA9\'y:gyyc;v+\kx<+Ѥ̚R%y̔+Fy%uiK:ue˖uk9R+ J˟)uξJ3benlkU*Y?x> f!XXˠ*=#`HEhBǦlC m6h1Ѱ} |c :!=X1,m>$ f֝  yP6clC\? s`rŏlCQX6iGbo(cXC?̱cl +*=C`Ux1{,z1^} |^6YW/u(c/T#H%zhCBzCw{g?<h!B^P: HC@֫Xv"1I0…:5wtWomzh+ᕯ+^)Zk+_^\\r+W3 fdRs"+W7rW6)\J++u\s]O\]0r.d̀CqcTp*SfݳU ybz#ou!d / Эvw *Qam3Vqi,8g^D3V9!,1ƝvUiˊ5]5:LTpVy. [tCcXٲVm.2."X64t+Z%3ą:; j2@DBASEINFO: type=CLIENT-COMPONENT version=1.0 COMP:SCO:OS_drivers: version=5.1.0h installStd=SSO-1 description=Mass Storage Drivers state=NOT-ATTACHED numFiles=131 subpackages=SCO:OS_drivers:SharedControl, SCO:OS_drivers:ClientControl, SCO:OS_drivers:alad, SCO:OS_drivers:ams, SCO:OS_drivers:arad, SCO:OS_drivers:bhba, SCO:OS_drivers:dptr, SCO:OS_drivers:iiop, SCO:OS_drivers:smad, SCO:OS_drivers:wd, SCO:OS_drivers:esdi, SCO:OS_drivers:Sjk required=SCO:OS_drivers:SharedControl, SCO:OS_drivers:ClientControl dependencies=SCO:ProdUpgrade::.* PKG:SCO:OS_drivers:SharedControl: description=Component Shared Control state=NOT-ATTACHED fileList=SharedControl.fl PKG:SCO:OS_drivers:ClientControl: description=Component Client Control state=NOT-ATTACHED numFiles=14 fileList=ClientControl.fl PKG:SCO:OS_drivers:alad: description=alad Driver state=NOT-ATTACHED numFiles=9 fileList=alad.fl PKG:SCO:OS_drivers:ams: description=ams Driver state=NOT-ATTACHED numFiles=10 fileList=ams.fl PKG:SCO:OS_drivers:arad: description=arad Driver state=NOT-ATTACHED numFiles=9 fileList=arad.fl PKG:SCO:OS_drivers:bhba: description=bhba Driver state=NOT-ATTACHED numFiles=9 fileList=bhba.fl PKG:SCO:OS_drivers:dptr: description=dptr Driver state=NOT-ATTACHED numFiles=9 fileList=dptr.fl PKG:SCO:OS_drivers:iiop: description=iiop Driver state=NOT-ATTACHED numFiles=34 fileList=iiop.fl PKG:SCO:OS_drivers:smad: description=smad Driver state=NOT-ATTACHED numFiles=9 fileList=smad.fl PKG:SCO:OS_drivers:wd: description=wd Driver state=NOT-ATTACHED numFiles=10 fileList=wd.fl PKG:SCO:OS_drivers:esdi: description=esdi Driver state=NOT-ATTACHED numFiles=10 fileList=esdi.fl PKG:SCO:OS_drivers:Sjk: description=Sjk Driver state=NOT-ATTACHED numFiles=8 fileList=Sjk.fl #ifdef __STDC__ #pragma comment(exestr, "@(#) imsd.h 26.1 95/07/19 ") #else #ident "@(#) imsd.h 26.1 95/07/19 " #endif /* ** ident @(#) imsd.h 1.18 1 5/24/95 11:28:15 ** ** sccs_id[] = {"@(#) 1.18 imsd.h "} */ /* *************************************************************************** ** ** INCLUDE FILE NAME: imsd.h ** ** PURPOSE: Intelligent Maintenance Subsystem Daemon ** Interface Declarations. ** ** DEPENDENCIES: ** o NONE ** ** ** ** COPYRIGHT: ** ** (c) Tricord systems, Inc. 1992 ** All rights reserved. ** ** *************************************************************************** */ /* *************************************************************************** ** Defines *************************************************************************** */ /* ** Type values returned by the IMS driver to the IMS daemon */ #define TYPE_LOG 1 /* Returned data is log message */ #define TYPE_READ 2 /* Completed read request from IMS */ /* *************************************************************************** ** Macros *************************************************************************** */ /* *************************************************************************** ** Typedefs *************************************************************************** */ typedef struct read_req { int type; char buffer[IMS_MAX_LOG_MSG]; } READ_REQ; .o..Space.cDriver.o.ZStubs.cpicdummy.c MasterSystemDriver.o#ident "@(#) space.c 26.1 95/06/26 " /* * Copyright (C) 1988-1995 The Santa Cruz Operation, Inc. * All Rights Reserved. * The information in this file is provided for the exclusive use of * the licensees of The Santa Cruz Operation, Inc. Such users have the * right to use, modify, and incorporate this code into other products * for purposes authorized by the license agreement provided they include * this notice and the associated copyright notice with any such product. * The information in this file is provided "AS IS" without warranty. */ /* Copyright (c) 1984, 1986, 1987, 1988 AT&T */ /* All Rights Reserved */ /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */ /* The copyright notice above does not evidence any */ /* actual or intended publication of such source code. */ #include "sys/ipl.h" #include "sys/pic.h" /* Initialized data for Programmable Interupt Controllers */ unsigned short cmdport[] /* command port addrs for pics */ = { MCMD_PORT, SCMD_PORT, 0xCC0 }; unsigned short imrport[] /* intr mask port addrs for pics */ = { MIMR_PORT, SIMR_PORT, 0xCC1 }; unsigned char masterpic[NPIC] /* index of this pic's master (for 82380) */ = { 0, 0 }; unsigned char picbuffered = PICBUFFERED; /* PICs in buffered mode */ unsigned char i82380 = I82380; /* i82380 chip used */ int npic = NPIC; /* number of pics configured */ #ident "@(#) space.c 26.1 95/06/15 " /* * Copyright (C) 1990-1995 The Santa Cruz Operation, Inc. * All Rights Reserved. * The information in this file is provided for the exclusive use of * the licensees of The Santa Cruz Operation, Inc. Such users have the * right to use, modify, and incorporate this code into other products * for purposes authorized by the license agreement provided they include * this notice and the associated copyright notice with any such product. * The information in this file is provided "AS IS" without warranty. */ #include "sys/types.h" #include "sys/iobuf.h" #include "sys/buf.h" #include "sys/dio.h" #include "sys/disk.h" #include "sys/fs/s5param.h" #include "sys/scsi.h" #include "sys/elog.h" #include "sys/open.h" #include "sys/devreg.h" #include "config.h" #ifndef SCSI_NDPTR #define SCSI_NDPTR 2 #endif #if SCSI_NDPTR == 0 #undef SCSI_NDPTR #define SCSI_NDPTR 1 #endif int dptr_NAdapters = SCSI_NDPTR; int dptr_DiskConfig = 0; /* 0 = Auto-Determine. */ /* 1 = Always use SmartROM parms */ /* for non-Emulated drives. */ /* 2 = Always use Emulation and */ /* cyls x 64 x 64 parms. */ int dptr_Weight = DPTR_0_IPL; int dptr_Processor = DRIVER_CPU_DEFAULT; int dptr_UseLocks = 0; int dptr_FlushSecondsToWait = 60; j6ԃ[n9/+v3E6S+j86tzk$N \PŪ`5`UAKJ a$u]P|+N9-8P_ܺjBЊ8pBhB=#| |KvV3jVrrv|0( s-^2TY$*z Z iUǞnU!vS? @aJ-\a] 7s锛C"1.>t O:A?֧崔"l46+2}Bm8%L,?B>;J>i;!s "sAw! ӧo?^u7BL_7.zʶ<%yzπ{TJӒ#ۜ鹻jnΡt)X_Pem#*~ӳ-/1MK?Kv T >T˥N>)>>g9ѧMnv?c߆7j8?Sӂ]8xi°ps}]v׭WM??*4ѣSM4GMͨL(ԉKj#Qr$5V7£Wsh߳o6AعۅvaWa^+ %߸;>  Fxf80zݿn\p='eּΐu2=2.B39|7d۸<2؇FYq>@.?Hx%p>1#.j& ;E3#~.;q~ 1q0q{㤈Yq9"=YE& Q7t>]ٙ@u;!4=IپMCDgM/ Q`l_TC&?F$bHrh̿M!! ڢDݨ|E#|XY.qچ ,HI7!4OSp_<3\?Ԍ.`m*5sV}@|PA X8>TxH:ǔ%_X!Y,0bu/8m, XxcAru}[˛C],V#!pX!B]ƁX"S Ǖ$U`0 %_*Uĕ-#ident "@(#) stubs.c 26.1 95/07/03 " /* * Copyright (C) The Santa Cruz Operation, 1995. * This Module contains Proprietary Information of * The Santa Cruz Operation and should be treated as Confidential. */ /* * The code marked with symbols from the list below, is owned * by The Santa Cruz Operation Inc., and represents SCO value * added portions of source code requiring special arrangements * with SCO for inclusion in any product. * Symbol: Market Module: * SCO_BASE Platform Binding Code * SCO_ENH Enhanced Device Driver * SCO_ADM System Administration & Miscellaneous Tools * SCO_C2TCB SCO Trusted Computing Base-TCB C2 Level * SCO_DEVSYS SCO Development System Extension * SCO_INTL SCO Internationalization Extension * SCO_BTCB SCO Trusted Computing Base TCB B Level Extension * SCO_REALTIME SCO Realtime Extension * SCO_HIGHPERF SCO High Performance Tape and Disk Device Drivers * SCO_VID SCO Video and Graphics Device Drivers (2.3.x) * SCO_TOOLS SCO System Administration Tools * SCO_FS Alternate File Systems * SCO_GAMES SCO Games */ /* BEGIN SCO_BASE */ tpicinit() {} picinit_8259() {} /* END SCO_BASE */ FILE_FORMAT: version=1 wd10100_0: INDEX=wd10100_0 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 0 Drive 0, 0, 0, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =Hard disk ,0,0,,NULL D_BLOCK_NODE = 0 D_CHAR_NODE = 0 wd10100_1: INDEX=wd10100_1 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 0 Drive 1, 0, 1, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =Hard disk ,0,0,,NULL D_BLOCK_NODE = 64 D_CHAR_NODE = 64 wd10101_0: INDEX=wd10101_0 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 1 Drive 0, 0, 2, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =Hard disk ,0,0,,NULL D_BLOCK_NODE = 128 D_CHAR_NODE = 128 wd10101_1: INDEX=wd10101_1 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 1 Drive 1, 0, 3, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =Hard disk ,0,0,,NULL D_BLOCK_NODE = 192 D_CHAR_NODE = 192 #ident "@(#) space.c 26.1 95/07/21 " /* * Copyright (C) 1989-1995 The Santa Cruz Operation, Inc. * All Rights Reserved. * The information in this file is provided for the exclusive use of * the licensees of The Santa Cruz Operation, Inc. Such users have the * right to use, modify, and incorporate this code into other products * for purposes authorized by the license agreement provided they include * this notice and the associated copyright notice with any such product. * The information in this file is provided "AS IS" without warranty. */ #include "sys/types.h" #include "sys/iobuf.h" #include "sys/buf.h" #include "sys/immu.h" #include "sys/scsi.h" #include "sys/Sjk.h" #include "sys/elog.h" #include "config.h" #ifndef SCSI_NSJK #define SCSI_NSJK 4 #endif #if SCSI_NSJK == 0 #undef SCSI_NSJK #define SCSI_NSJK 1 #endif int Sjk_njk = SCSI_NSJK; /* # of jukes configured */ struct Sjk_info Sjk_info[SCSI_NSJK]; FILE_FORMAT: version=1 esdi0_0: INDEX=esdi0_0 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 0 Drive 0, 0, 0, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =ESDI disk ,0,0,,NULL D_BLOCK_NODE = 0 D_CHAR_NODE = 0 esdi0_1: INDEX=esdi0_1 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 0 Drive 1, 0, 0, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =ESDI disk ,0,0,,NULL D_BLOCK_NODE = 64 D_CHAR_NODE = 64 esdi1_0: INDEX=esdi1_0 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 1 Drive 0, 0, 0, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =ESDI disk ,0,0,,NULL D_BLOCK_NODE = 128 D_CHAR_NODE = 128 esdi1_1: INDEX=esdi1_1 PATH=node0,node1 node0=D_SUBSYS,Hard disk,0,D_HARDDSK_SUBSYS,,NULL node1=D_UNIT,Controller 1 Drive 1, 0, 0, D_RANDOM_ACCESS D_NODE, NULL D_USER_MSG =ESDI disk ,0,0,,NULL D_BLOCK_NODE = 192 D_CHAR_NODE = 192 #ident "@(#) space.c 25.1 94/07/19 " /* * Copyright (C) 1985-1994 The Santa Cruz Operation, Inc. * All Rights Reserved. * The information in this file is provided for the exclusive use of * the licensees of The Santa Cruz Operation, Inc. Such users have the * right to use, modify, and incorporate this code into other products * for purposes authorized by the license agreement provided they include * this notice and the associated copyright notice with any such product. * The information in this file is provided "AS IS" without warranty. */ /* Probe definitions */ #define esdi_UNKNOWN 0 #define esdi0_0 120832 /* esdi0_0 */ #define esdi0_1 120833 /* esdi0_1 */ #define esdi1_0 120834 /* esdi1_0 */ #define esdi1_1 120835 /* esdi1_1 */ /* probe device table */ unsigned esdiProbe[][2] = { {esdi0_0, esdi0_1}, {esdi1_0, esdi1_1}, {esdi_UNKNOWN, esdi_UNKNOWN} }; PKG SCO:OS_drivers:ClientControl DIR 0755 bin bin - ./.softmgmt FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/client.db FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/ClientControl.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/alad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/ams.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/arad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/bhba.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/dptr.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/iiop.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/smad.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/wd.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/esdi.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/Sjk.fl FILE 0644 bin bin 1 - - - - - 0 0 ./.softmgmt/SharedControl.fl : ## ## ident @(#) @(#) getns0 1.2 1 5/24/95 11:28:32 ## ## sccs_id[] = {"@(#) 1.2 getns0 "} ## # # This script returns a number, 1 thru n, which represents # the order that a disk device was installed in and also # denotes the node file associated with the disk, i.e., 1s0 # 2s0, 3s0 and so on. This script uses the mscsi entry of # the disk in question as input and utilizes the file # /usr/lib/mkdev/perms/NS0LIST to figure out which node file # the drive in question was installed as. # ns0list=/usr/lib/mkdev/perms/NS0LIST mscsientry= # ## main # fgrep -v "#" $ns0list > /tmp/getns0$$ mscsientry=`fgrep -n "$1" /tmp/getns0$$` if [ "$mscsientry" ] then mscsientry=`expr "$mscsientry" : '\([0-9][0-9]*\)'` else mscsientry=0 fi rm -f /tmp/getns0$$ exit $mscsientry .U..postinstallpreinstallbhba.name"btld#drivers# # @(#) postinstall 26.1 95/07/12 # # Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi tmp=/tmp/postbtld.$$ patch_mscsi() { unsettrap sed -e '/^auto/s/auto/bhba/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'bhba' $scsihas > $tmp test -s "$tmp" && return $OK echo "bhba\t\t\"Symbios Logic SYM53C8xx PCI to SCSI I/O Controller Driver\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi ...postinstallpreinstallsmad.namebtld drivers# # @(#) postinstall 26.1 95/07/19 # # Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi tmp=/tmp/postbtld.$$ patch_mscsi() { unsettrap sed -e '/^auto/s/auto/smad/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'smad' $scsihas > $tmp test -s "$tmp" && return $OK echo "smad\t\t\"Adaptec AIC-6x60 Chipset\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi .c..postinstallpreinstallalad.namebtlddrivers# # @(#) postinstall 26.1 95/07/12 # # Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi tmp=/tmp/postbtld.$$ patch_mscsi() { unsettrap sed -e '/^auto/s/auto/alad/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'alad' $scsihas > $tmp test -s "$tmp" && return $OK echo "alad\t\t\"Adaptec AIC-7870 Chipset\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi .x..postinstallpreinstalldptr.name!btld$drivers# # @(#) postinstall 26.1 95/07/12 # # Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi tmp=/tmp/postbtld.$$ patch_mscsi() { unsettrap sed -e '/^auto/s/auto/dptr/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'dptr' $scsihas > $tmp test -s "$tmp" && return $OK echo "dptr\t\t\"DPT Raid Chipset\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi .|..postinstallpreinstallcopyrightams.name%btld&drivers: # AMDHA PCscsi postinstall # change auto Sdsk, Stp and Srom lines in mscsi to be the name of the adapter # that is supporting the root disk. adapter=`sed -n /tmp/scsihas$$ mv /tmp/scsihas$$ /etc/default/scsihas cat >> /etc/default/scsihas << ! ams "AMD PCscsi 2.3.0" ! fi .\..postinstallpreinstallarad.namebtlddrivers# Return codes : ${OK=0} ${FAIL=1} ${STOP=10} ${HALT=11} # Trap signals, exit and return meaningful code settrap() { trap 'exit $STOP' 1 2 3 15 } # Ignore signals unsettrap() { trap '' 1 2 3 15 } mscsi=/etc/conf/cf.d/mscsi tmp=/tmp/postbtld.$$ patch_mscsi() { unsettrap sed -e '/^auto/s/auto/arad/' $mscsi > $tmp mv $tmp $mscsi settrap return $OK } # patch scsihas file tmp1=/tmp/postbtld1.$$ scsihas=/etc/default/scsihas patch_scsihas() { unsettrap rm -f $tmp grep 'arad' $scsihas > $tmp test -s "$tmp" && return $OK echo "arad\t\t\"Adaptec AIC-7770 Chipset\"" > $tmp cat $scsihas $tmp > $tmp1 mv $tmp1 $scsihas rm $tmp settrap return $OK } #main patch_scsihas patch_mscsi PKG SCO:OS_drivers:esdi DIR 0755 root sys - ./drivers/esdi DIR 0755 root sys - ./drivers/esdi/driver DIR 0755 root sys - ./drivers/esdi/driver/esdi SYML - ./drivers/esdi/driver/esdi/Device.dat SHARED ./drivers/esdi/driver/esdi/Device.dat SYML - ./drivers/esdi/driver/esdi/Driver.o SHARED ./drivers/esdi/driver/esdi/Driver.o SYML - ./drivers/esdi/driver/esdi/Master SHARED ./drivers/esdi/driver/esdi/Master SYML - ./drivers/esdi/driver/esdi/Space.c SHARED ./drivers/esdi/driver/esdi/Space.c SYML - ./drivers/esdi/driver/esdi/Space.o SHARED ./drivers/esdi/driver/esdi/Space.o SYML - ./drivers/esdi/driver/esdi/System SHARED ./drivers/esdi/driver/esdi/System DIR 0755 root sys - ./drivers/esdi/install PKG SCO:OS_drivers:ams DIR 0755 root sys - ./drivers/ams DIR 0755 root sys - ./drivers/ams/driver DIR 0755 root sys - ./drivers/ams/driver:/ams SYML - ./drivers/ams/driver/ams/Bootload SHARED ./drivers/ams/driver/ams/Bootload SYML - ./drivers/ams/driver/ams/Driver.o SHARED ./drivers/ams/driver/ams/Driver.o SYML - ./drivers/ams/driver/ams/Master SHARED ./drivers/ams/driver/ams/Master SYML - ./drivers/ams/driver/ams/Space.c SHARED ./drivers/ams/driver/ams/Space.c SYML - ./drivers/ams/driver/ams/Space.o SHARED ./drivers/ams/driver/ams/Space.o SYML - ./drivers/ams/driver/ams/System SHARED ./drivers/ams/driver/ams/System DIR 0755 root sys - ./drivers/ams/install PKG SCO:OS_drivers:wd DIR 0755 root sys - ./drivers/wd DIR 0755 root sys - ./drivers/wd/driver DIR 0755 root sys - ./drivers/wd/driver/wd SYML - ./drivers/wd/driver/wd/Device.dat SHARED ./drivers/wd/driver/wd/Device.dat SYML - ./drivers/wd/driver/wd/Driver.o SHARED ./drivers/wd/driver/wd/Driver.o SYML - ./drivers/wd/driver/wd/Master SHARED ./drivers/wd/driver/wd/Master SYML - ./drivers/wd/driver/wd/Space.c SHARED ./drivers/wd/driver/wd/Space.c SYML - ./drivers/wd/driver/wd/Space.o SHARED ./drivers/wd/driver/wd/Space.o SYML - ./drivers/wd/driver/wd/System SHARED ./drivers/wd/driver/wd/System DIR 0755 root sys - ./drivers/wd/install PKG SCO:OS_drivers:alad DIR 0755 root sys - ./drivers/alad DIR 0755 root sys - ./drivers/alad/driver DIR 0755 root sys - ./drivers/alad/driver/alad SYML - ./drivers/alad/driver/alad/Driver.o SHARED ./drivers/alad/driver/alad/Driver.o SYML - ./drivers/alad/driver/alad/Master SHARED ./drivers/alad/driver/alad/Master SYML - ./drivers/alad/driver/alad/Space.c SHARED ./drivers/alad/driver/alad/Space.c SYML - ./drivers/alad/driver/alad/Space.o SHARED ./drivers/alad/driver/alad/Space.o SYML - ./drivers/alad/driver/alad/System SHARED ./drivers/alad/driver/alad/System DIR 0755 root sys - ./drivers/alad/install PKG SCO:OS_drivers:smad DIR 0755 root sys - ./drivers/smad DIR 0755 root sys - ./drivers/smad/driver DIR 0755 root sys - ./drivers/smad/driver/smad SYML - ./drivers/smad/driver/smad/Driver.o SHARED ./drivers/smad/driver/smad/Driver.o SYML - ./drivers/smad/driver/smad/Master SHARED ./drivers/smad/driver/smad/Master SYML - ./drivers/smad/driver/smad/Space.c SHARED ./drivers/smad/driver/smad/Space.c SYML - ./drivers/smad/driver/smad/Space.o SHARED ./drivers/smad/driver/smad/Space.o SYML - ./drivers/smad/driver/smad/System SHARED ./drivers/smad/driver/smad/System DIR 0755 root sys - ./drivers/smad/install PKG SCO:OS_drivers:bhba DIR 0755 root sys - ./drivers/bhba DIR 0755 root sys - ./drivers/bhba/driver DIR 0755 root sys - ./drivers/bhba/driver/bhba SYML - ./drivers/bhba/driver/bhba/Driver.o SHARED ./drivers/bhba/driver/bhba/Driver.o SYML - ./drivers/bhba/driver/bhba/Master SHARED ./drivers/bhba/driver/bhba/Master SYML - ./drivers/bhba/driver/bhba/Space.c SHARED ./drivers/bhba/driver/bhba/Space.c SYML - ./drivers/bhba/driver/bhba/Space.o SHARED ./drivers/bhba/driver/bhba/Space.o SYML - ./drivers/bhba/driver/bhba/System SHARED ./drivers/bhba/driver/bhba/System DIR 0755 root sys - ./drivers/bhba/install PKG SCO:OS_drivers:dptr DIR 0755 root sys - ./drivers/dptr DIR 0755 root sys - ./drivers/dptr/driver DIR 0755 root sys - ./drivers/dptr/driver/dptr SYML - ./drivers/dptr/driver/dptr/Driver.o SHARED ./drivers/dptr/driver/dptr/Driver.o SYML - ./drivers/dptr/driver/dptr/Master SHARED ./drivers/dptr/driver/dptr/Master SYML - ./drivers/dptr/driver/dptr/Space.c SHARED ./drivers/dptr/driver/dptr/Space.c SYML - ./drivers/dptr/driver/dptr/Space.o SHARED ./drivers/dptr/driver/dptr/Space.o SYML - ./drivers/dptr/driver/dptr/System SHARED ./drivers/dptr/driver/dptr/System DIR 0755 root sys - ./drivers/dptr/install PKG SCO:OS_drivers:arad DIR 0755 root sys - ./drivers/arad DIR 0755 root sys - ./drivers/arad/driver DIR 0755 root sys - ./drivers/arad/driver/arad SYML - ./drivers/arad/driver/arad/Driver.o SHARED ./drivers/arad/driver/arad/Driver.o SYML - ./drivers/arad/driver/arad/Master SHARED ./drivers/arad/driver/arad/Master SYML - ./drivers/arad/driver/arad/Space.c SHARED ./drivers/arad/driver/arad/Space.c SYML - ./drivers/arad/driver/arad/Space.o SHARED ./drivers/arad/driver/arad/Space.o SYML - ./drivers/arad/driver/arad/System SHARED ./drivers/arad/driver/arad/System DIR 0755 root sys - ./drivers/arad/install b{ƿ, G ^vL&QC=w[׎r0V*0X,v& @Gֹ~+?ܡԑw+`3s0p@W+UVzg<(!u=eDyH;G@}bCm͛>_ן.OҹZ}# +[pŸ⼂.vwElS@+i_FEq<}uv\ճiƧ1Hm\Ӳ.Udۮ4Cg*S?E3[؆#T3w̝ű}AEMe4INm2et+FX5 d6yl*uA'yAOH=A]UAڃKEwǃ+(X?]4?@=8Gm4~v=uy4noTi`4MH?OS:>~@GOqc<~uqg%XK/n$8v$vX|ht%3hYP"3EzaC_yO@bcȣ{FSD o}"#`"a4۽{Gmn 𙬆 !e2mͷ=Qw;<޼lU+,kγ/J5`{s?}*SOZ~W/3C"v .gk|cztDh߂'m-|Okv; #MZtp?CL1X (: gyLI.%@靥@**Ft_0ןSn Ḗ+9GJKM`~\EJsc:_p:cgWzOyzLy,cR[\>]^K쀷fzx3(Jb@19dg;xcnD-l[ gr- ?pb_MUg齟c[O c|g},k}{Q7 Ό78 q?;[tRXs,IҊn]D-ԔRu,tPYܱBL}Hq&FvTS3(2̾g&ѥf ^9s?r5@cw.Y11a1IlE!f6]zu$]1c|xxJ;KV!,2/ Q{=>otT!=o@_PU?'9UGNO Puy}13f7ϴm0! &?6Xb$&IX,1"s i9kiF%|+; g:dzBe\dk\fT(Z bf+,Hh!=ۭRq?~'(u;b? UN|_ o}jo^&c:K/-E|Onqۣ߅gEoGw. kh;8_{ȭBu;{`(Zi= eSj+ҖP;pYSЭǤ(mWԚZŅM# # @(#) preinstall 26.3 95/08/22 # # Move the files to *.Z, then uncompress them # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Check for a directory at /etc/idrc.d and create it if it missing. # if [ ! -d /etc/idrc.d ] then # There may be a file there so remove it just in case rm -f /etc/idrc.d mkdir -p /etc/idrc.d > /dev/null 2>&1 fi Mb #xT7(o>-[p t]!d|:Y.a_tKMZ7.pX8p@>j䑢:öST!Q0꓈tTe s1 6.Gm\ۖs.yDE-\ník=5 <'n~%>H_ȅ4s_GMыNMVN'jv;-2Iw5dq7)c /dev/null 2>&1 if [ ! $? -eq 0 ] then /usr/bin/imsd /dev/ims fi fi Z <ۅp$Un2Z 3K6`[2Y0;ⷙdm6wxū`ƀ g+FE~6'`b̔L = ^Kͦ=EV T.C Qx\tn=}ŸR(]+{rCP *^^6XmΏwׅQvGwO?&-r;=Vo$ _B 闾Bh`p$!3_=!$Vuf"...preinstallesdi.namebtlddrivers)postinstall# # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; .r..preinstallwd.name'btld(drivers*postinstall# # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; # # Move the files to *.Z, then uncompress them # # for fname in `/ibin/find ${pkgpath}/driver -name "*.o"` do /ibin/mv -f $fname ${fname}.Z done # # /ibin/find ${pkgpath}/driver -name '*.Z' -exec /ibin/uncompress {} \; Rw(cV( Z,^ Y/"!BXa{Io]qPX8} OS_{c-driver@install>.=..?arad?.>..Space.oSpace.cSpace.o.ZMasterSystem_Driver.o@.=..postinstallpreinstallarad.namebtlddriversA...BdriverDinstallB.A..CbhbaC.B..Space.oSpace.cSpace.o.Z MasterSystemXDriver.oD.A..postinstallpreinstallbhba.name"btld#driversE...FdriverHinstallInewF.E..GdptrG.F..Space.oSpace.cSpace.o.ZMasterSystem{Driver.oH.E..postinstallpreinstalldptr.name!btld$driversI.E..JetcJ.I..KcopyrightsK.J..ahs5L...MdriverOinstallM.L..NesdiN.M..Space.oDevice.datSpace.cSpace.o.ZMasterSystemDriver.oO.L..preinstallesdi.namebtlddrivers)postinstallP...QnewYdriver_installQ.P..RusrR.Q..SbinTincludeVlibS.R..Trviewimsdread_boot_pdmT.R..UsysU.T..[iiop.hims.htrimpic.htriccs.htriebs.hims_mrp.himsd.hV.R..WmkdevW.V..b.scsitape_iiopg.scsi_iiopnhd_iiopcdrom_iioptape_iiopgetns0XpermsX.W..NS0LISTY.P..Zpiiop[iiop\ims]Dsk^tpicZ.Y..qSpace.cSpace.oSpace.o.ZSystemMasterDriver.o[.Y..wSpace.cDriver.o.ZSystemNodeMasterDriver.o\.Y..Space.cDriver.o.ZRcSystemMaster NodeDriver.o].Y..Driver.o.ZSpace.cTdsk.hMaster SystemDriver.o^.Y..Space.cDriver.o.ZStubs.cpicdummy.c MasterSystemDriver.o_.P..postinstallpreinstalldriversiiop.namebtld`...adrivercinstalla.`..bsmadb.a..Space.oSpace.cSpace.o.ZSystemMasterDriver.oc.`..postinstallpreinstallsmad.namebtld driversd...edriverginstalle.d..fwdf.e..Space.oSpace.cDevice.datSpace.o.ZSystemMasteruDriver.og.d..preinstallwd.name'btld(drivers*postinstallh...iINSTALLexec /etc/btldinstall $2