ntdll: Implement CDROM_ScsiGetCaps() on Mac OS.
This commit is contained in:
parent
d22abc20a3
commit
816a78b0cf
@ -1892,12 +1892,12 @@ static NTSTATUS CDROM_ScsiPassThrough(int fd, PSCSI_PASS_THROUGH pPacket)
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static NTSTATUS CDROM_ScsiGetCaps(PIO_SCSI_CAPABILITIES caps)
|
static NTSTATUS CDROM_ScsiGetCaps(int fd, PIO_SCSI_CAPABILITIES caps)
|
||||||
{
|
{
|
||||||
NTSTATUS ret = STATUS_NOT_IMPLEMENTED;
|
NTSTATUS ret = STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
||||||
caps->Length = sizeof(*caps);
|
|
||||||
#ifdef SG_SCATTER_SZ
|
#ifdef SG_SCATTER_SZ
|
||||||
|
caps->Length = sizeof(*caps);
|
||||||
caps->MaximumTransferLength = SG_SCATTER_SZ; /* FIXME */
|
caps->MaximumTransferLength = SG_SCATTER_SZ; /* FIXME */
|
||||||
caps->MaximumPhysicalPages = SG_SCATTER_SZ / getpagesize();
|
caps->MaximumPhysicalPages = SG_SCATTER_SZ / getpagesize();
|
||||||
caps->SupportedAsynchronousEvents = TRUE;
|
caps->SupportedAsynchronousEvents = TRUE;
|
||||||
@ -1906,6 +1906,23 @@ static NTSTATUS CDROM_ScsiGetCaps(PIO_SCSI_CAPABILITIES caps)
|
|||||||
caps->AdapterScansDown = FALSE; /* FIXME ? */
|
caps->AdapterScansDown = FALSE; /* FIXME ? */
|
||||||
caps->AdapterUsesPio = FALSE; /* FIXME ? */
|
caps->AdapterUsesPio = FALSE; /* FIXME ? */
|
||||||
ret = STATUS_SUCCESS;
|
ret = STATUS_SUCCESS;
|
||||||
|
#elif defined __APPLE__
|
||||||
|
uint64_t bytesr, bytesw, align;
|
||||||
|
int io = ioctl(fd, DKIOCGETMAXBYTECOUNTREAD, &bytesr);
|
||||||
|
if (io != 0) return CDROM_GetStatusCode(io);
|
||||||
|
io = ioctl(fd, DKIOCGETMAXBYTECOUNTWRITE, &bytesw);
|
||||||
|
if (io != 0) return CDROM_GetStatusCode(io);
|
||||||
|
io = ioctl(fd, DKIOCGETMINSEGMENTALIGNMENTBYTECOUNT, &align);
|
||||||
|
if (io != 0) return CDROM_GetStatusCode(io);
|
||||||
|
caps->Length = sizeof(*caps);
|
||||||
|
caps->MaximumTransferLength = bytesr < bytesw ? bytesr : bytesw;
|
||||||
|
caps->MaximumPhysicalPages = caps->MaximumTransferLength / getpagesize();
|
||||||
|
caps->SupportedAsynchronousEvents = TRUE;
|
||||||
|
caps->AlignmentMask = align-1;
|
||||||
|
caps->TaggedQueuing = FALSE; /* we could check that it works and answer TRUE */
|
||||||
|
caps->AdapterScansDown = FALSE; /* FIXME ? */
|
||||||
|
caps->AdapterUsesPio = FALSE; /* FIXME ? */
|
||||||
|
ret = STATUS_SUCCESS;
|
||||||
#else
|
#else
|
||||||
FIXME("Unimplemented\n");
|
FIXME("Unimplemented\n");
|
||||||
#endif
|
#endif
|
||||||
@ -2882,7 +2899,7 @@ NTSTATUS CDROM_DeviceIoControl(HANDLE hDevice,
|
|||||||
sz = sizeof(IO_SCSI_CAPABILITIES);
|
sz = sizeof(IO_SCSI_CAPABILITIES);
|
||||||
if (lpOutBuffer == NULL) status = STATUS_INVALID_PARAMETER;
|
if (lpOutBuffer == NULL) status = STATUS_INVALID_PARAMETER;
|
||||||
else if (nOutBufferSize < sizeof(IO_SCSI_CAPABILITIES)) status = STATUS_BUFFER_TOO_SMALL;
|
else if (nOutBufferSize < sizeof(IO_SCSI_CAPABILITIES)) status = STATUS_BUFFER_TOO_SMALL;
|
||||||
else status = CDROM_ScsiGetCaps(lpOutBuffer);
|
else status = CDROM_ScsiGetCaps(fd, lpOutBuffer);
|
||||||
break;
|
break;
|
||||||
case IOCTL_DVD_START_SESSION:
|
case IOCTL_DVD_START_SESSION:
|
||||||
sz = sizeof(DVD_SESSION_ID);
|
sz = sizeof(DVD_SESSION_ID);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user