mirror of
https://github.com/reactos/wine.git
synced 2025-01-26 05:54:34 +00:00
- New function in aspi.c SCSI_Fix_CMD_LEN which determines if Linux is
guessing the command length correctly, and if not, tell's it what's up. - Changed strcat to strcpy in SendASPI32Command to avoid requiring the caller to clear the fields. - Added a new field to HA_Unique content to fix some applications. Will fix this for good at a later date. - Added TRACE to GetASPI32DLLVersion (and FIXME when not running under Linux) - Added some constants to winescsi.h (with the help of Bernd Bernie Meyer <bmeyer@cs.monash.edu.au>)
This commit is contained in:
parent
ae3716d690
commit
8466fc34de
@ -199,6 +199,22 @@ SCSI_OpenDevice( int h, int c, int t, int d )
|
||||
}
|
||||
|
||||
#ifdef linux
|
||||
/* SCSI_Fix_CMD_LEN
|
||||
* Checks to make sure the CMD_LEN is correct
|
||||
*/
|
||||
void
|
||||
SCSI_Fix_CMD_LEN(int fd, int cmd, int len)
|
||||
{
|
||||
int index=(cmd>>5)&7;
|
||||
|
||||
if (len!=scsi_command_size[index])
|
||||
{
|
||||
TRACE("CDBLen for command %d claims to be %d, expected %d\n",
|
||||
cmd, len, scsi_command_size[index]);
|
||||
ioctl(fd,SG_NEXT_CMD_LEN,&len);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
SCSI_LinuxSetTimeout( int fd, int timeout )
|
||||
{
|
||||
|
@ -363,6 +363,8 @@ ASPI_ExecScsiCmd(SRB_ExecSCSICmd *lpPRB)
|
||||
sg_hd->reply_len = out_len;
|
||||
}
|
||||
|
||||
SCSI_Fix_CMD_LEN(fd, lpPRB->CDBByte[0], lpPRB->SRB_CDBLen);
|
||||
|
||||
if(!SCSI_LinuxDeviceIo( fd,
|
||||
sg_hd, in_len,
|
||||
sg_reply_hdr, out_len,
|
||||
@ -453,7 +455,7 @@ error_exit:
|
||||
*/
|
||||
DWORD WINAPI GetASPI32SupportInfo()
|
||||
{
|
||||
return ((SS_COMP << 8) | 1); /* FIXME: get # of host adapters installed */
|
||||
return ((SS_COMP << 8) | ASPI_GetNumControllers());
|
||||
}
|
||||
|
||||
|
||||
@ -468,10 +470,11 @@ DWORD __cdecl SendASPI32Command(LPSRB lpSRB)
|
||||
lpSRB->inquiry.SRB_Status = SS_COMP; /* completed successfully */
|
||||
lpSRB->inquiry.HA_Count = 1; /* not always */
|
||||
lpSRB->inquiry.HA_SCSI_ID = 7; /* not always ID 7 */
|
||||
strcat(lpSRB->inquiry.HA_ManagerId, "ASPI for WIN32"); /* max 15 chars, don't change */
|
||||
strcat(lpSRB->inquiry.HA_Identifier, "Wine host"); /* FIXME: return host adapter name */
|
||||
strcpy(lpSRB->inquiry.HA_ManagerId, "ASPI for WIN32"); /* max 15 chars, don't change */
|
||||
strcpy(lpSRB->inquiry.HA_Identifier, "Wine host"); /* FIXME: return host adapter name */
|
||||
memset(lpSRB->inquiry.HA_Unique, 0, 16); /* default HA_Unique content */
|
||||
lpSRB->inquiry.HA_Unique[6] = 0x02; /* Maximum Transfer Length (128K, Byte> 4-7) */
|
||||
lpSRB->inquiry.HA_Unique[3] = 0x08; /* Maximum number of SCSI targets */
|
||||
FIXME("ASPI: Partially implemented SC_HA_INQUIRY for adapter %d.\n", lpSRB->inquiry.SRB_HaId);
|
||||
return SS_COMP;
|
||||
|
||||
@ -540,8 +543,10 @@ DWORD __cdecl SendASPI32Command(LPSRB lpSRB)
|
||||
DWORD WINAPI GetASPI32DLLVersion()
|
||||
{
|
||||
#ifdef linux
|
||||
TRACE("Returning version 1\n");
|
||||
return (DWORD)1;
|
||||
#else
|
||||
FIXME("Please add SCSI support for your operating system, returning 0\n");
|
||||
return (DWORD)0;
|
||||
#endif
|
||||
}
|
||||
|
@ -5,6 +5,16 @@
|
||||
/* Copy of info from 2.2.x kernel */
|
||||
#define SG_MAX_SENSE 16 /* too little, unlikely to change in 2.2.x */
|
||||
|
||||
#define SG_NEXT_CMD_LEN 0x2283 /* override SCSI command length with given
|
||||
number on the next write() on this file descriptor */
|
||||
|
||||
/* This is what the linux kernel thinks.... */
|
||||
const static unsigned char scsi_command_size[8] =
|
||||
{
|
||||
6, 10, 10, 12,
|
||||
12, 12, 10, 10
|
||||
};
|
||||
|
||||
struct sg_header
|
||||
{
|
||||
int pack_len; /* [o] reply_len (ie useless), ignored as input */
|
||||
@ -54,6 +64,9 @@ SCSI_LinuxDeviceIo( int fd,
|
||||
struct sg_header * lpvInBuffer, DWORD cbInBuffer,
|
||||
struct sg_header * lpvOutBuffer, DWORD cbOutBuffer,
|
||||
LPDWORD lpcbBytesReturned );
|
||||
|
||||
void
|
||||
SCSI_Fix_CMD_LEN( int fd, int cmd, int len );
|
||||
#endif
|
||||
|
||||
BOOL
|
||||
|
Loading…
x
Reference in New Issue
Block a user