1 \ This file is meant to be included by SCSI hosts to provide
2 \ probing helpers - scsi-find-disks
4 : wrapped-inquiry ( -- true | false )
5 inquiry 0= IF false EXIT THEN
6 \ Skip devices with PQ != 0
7 sector inquiry-data>peripheral c@ e0 and 0 =
10 : scsi-read-lun ( addr -- lun true | false )
12 40 OF w@-be 3FFF AND TRUE ENDOF
14 dup dup OF ." Unsupported LUN format = " . cr FALSE ENDOF
18 : vscsi-report-luns ( -- array ndev )
19 \ array of pointers, up to 8 devices
20 dev-max-target 3 << alloc-mem dup
21 0 ( devarray devcur ndev )
23 i 0 dev-generate-srplun (set-target)
25 sector l@ ( devarray devcur ndev size )
26 sector 8 + swap ( devarray devcur ndev lunarray size )
27 dup 8 + dup alloc-mem ( devarray devcur ndev lunarray size size+ mem )
28 dup rot 0 fill ( devarray devcur ndev lunarray size mem )
29 dup >r swap move r> ( devarray devcur ndev mem )
30 dup sector l@ 3 >> 0 ?DO ( devarray devcur ndev mem memcur )
31 dup dup scsi-read-lun IF
32 j swap dev-generate-srplun swap x! 8 +
37 rot ( devarray ndev mem devcur )
38 dup >r x! r> 8 + ( devarray ndev devcur )
42 \ Some USB MSC devices do not implement report
43 \ luns. That will stall the bulk pipe. These devices are
44 \ single lun devices, report it accordingly
46 ( devarray devcur ndev )
47 16 alloc-mem ( devarray devcur ndev mem )
48 dup 16 0 fill ( devarray devcur ndev mem )
49 dup 0 0 dev-generate-srplun swap x! ( devarray devcur ndev mem )
50 rot x! ( devarray ndev )
59 : make-media-alias ( $name srplun -- )
61 get-next-alias ?dup IF
68 : scsi-find-disks ( -- )
69 ." SCSI: Looking for devices" cr
75 dup 0= IF drop TRUE ELSE
76 (set-target) wrapped-inquiry IF
77 ." " current-target (u.) type ." "
78 \ XXX FIXME: Check top bits to ignore unsupported units
79 \ and maybe provide better printout & more cases
80 \ XXX FIXME: Actually check for LUNs
81 sector inquiry-data>peripheral c@ CASE
82 0 OF ." DISK : " " disk" current-target make-media-alias ENDOF
83 5 OF ." CD-ROM : " " cdrom" current-target make-media-alias ENDOF
84 7 OF ." OPTICAL : " " cdrom" current-target make-media-alias ENDOF
85 e OF ." RED-BLOCK: " " disk" current-target make-media-alias ENDOF
86 dup dup OF ." ? (" . 8 emit 29 emit 5 spaces ENDOF
88 sector .inquiry-text cr