Hi David,
I seem to be at my wits end, so maybe you have a bright idea....
I am using Wine 20000614, compiled from sources, on a Redhat 6.1 system
with a 2.4test2 kernel. Works OK, I can run Solitaire.
The whole point of the exercise, however, is to access my digital camera
under Wine. It's a Polaroid PDC-2000, which comes with a SCSI2 interface.
I have it plugged into an old BusLogic controller, which dutifully
recognizes it and puts it at /dev/sg0 and /dev/sga. When I go and run
the find-scanner tool from the SANE packet, it finds the camera (which
for some reason claims to be a scanner), so the kernel/driver part seems
OK.
Now I go and start the camera's software under Wine --- and it tells me
that it didn't find the camera, and do I want to try again? If I say yes
to that, *then* the line
fixme:aspi:SendASPI32Command ASPI: Partially implemented SC_HA_INQUIRY
for adapter 0.
shows up 12 times, and the software informs me that "a SCSI card was found,
but no device". If I run Wine with -debugmsg +aspi, before those 12 lines
I get
trace:aspi:SCSI_printprocentry Host: scsi0 Channel: 00 Id: 04 Lun: 00
trace:aspi:SCSI_printprocentry Vendor: POLAROID Model: ESC
Rev: 1.00
trace:aspi:SCSI_printprocentry Type: Scanner
ANSI SCSI revision: 02
so the /proc scanning code found the device alright.
Now, the odd part is that that's *all* the trace output the ASPI module
ever provides. Even odder, it doesn't appear as if Wine ever touches
the scsi device --- strace shows no access to any /dev/sg* device file,
and the host adaptor stats (counting attempted and completed data transfers)
also don't change at all. For all practical purposes, it looks as if wine
is unaware of any SCSI devices....
The software uses a DLL to access the SCSI system; That one is called
PLSCSI32.DLL, and Wine has the following to say about it:
trace:win32:dump_exports Module name is PLSCSI32.dll, 10 functions, 10 names
2 000014e0 0x406014e0 scsiInitialize
3 00001620 0x40601620 scsiCommand
4 00001600 0x40601600 scsiClose
5 00001b40 0x40601b40 scsiGetVersion
6 00001a10 0x40601a10 scsiGetDeviceInfo
7 000021c0 0x406021c0 scsiGetLastError
8 00001b10 0x40601b10 scsiGetAdapterInfo
9 00001850 0x40601850 scsiGetDeviceList
10 000019f0 0x406019f0 scsiFreeDeviceList
11 00001f30 0x40601f30 scsiGetErrorStr
Very soon after that, it tries to call scsiInitialize and triggers the
printprocentry output (BTW: ignore the h01 part --- when I created this
log file, I also had IDE SCSI emulation enabled, so the BusLogic was host
number 1. I have since disabled it, with no apparent change to Wine):
CALL plscsi32.0: scsiInitialize(<unknown, check return>trace:heap:HeapAlloc
(40400000,00000002,00000040): returning 4043ea8c
trace:reg:RegCreateKeyExA
(0x80000006,"WineScsi",0,(null),1,f003f,(nil),0x409e68f4,0x409e68f8)
0805f3f0: create_key( parent=-2147483642, access=000f003f, options=00000001,
modif=962989417, name=L"WineScsi", class=L"" )
Create key DYNDATA\\WineScsi
Set key DYNDATA\\WineScsi value "h01c00t04d00"="/dev/sga"
trace:aspi:SCSI_printprocentry Host: scsi1 Channel: 00 Id: 04 Lun: 00
trace:aspi:SCSI_printprocentry Vendor: POLAROID Model: ESC Rev: 1.00
trace:aspi:SCSI_printprocentry Type: Scanner ANSI SCSI
revision: 02
Set key DYNDATA\\WineScsi value @=dword:00000002
RET plscsi32.0: scsiInitialize(409e6c10,00400000) retval = 00002712 ret=0043aa0d
fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa0d fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa0d fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa0d fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa0d fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
CALL plscsi32.0: scsiInitialize(409e6c10,00400000) ret=0043aa29 fs=008f
RET plscsi32.0: scsiInitialize() retval = 00002712 ret=0043aa29 fs=008f
and then it decides that it couldn't find a device, and outputs the text
about "A scsi card was found, but no device".
It appears that the software is unhappy with what it gets back from
SC_HA_INQUIRY, and tries over and over again, until it finally gives up,
without ever trying to ask for devices.
I don't know what to look at next.... Any ideas?
Thanks in advance,
Bernie