/* * ntddscsi.h SCSI device I/O control codes * * ========================================================================= * * Open Watcom Project * * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved. * * This file is automatically generated. Do not edit directly. * * ========================================================================= */ #ifndef _NTDDSCSIH_ #define _NTDDSCSIH_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifdef __cplusplus extern "C" { #endif /* SCSI device type */ #define FILE_DEVICE_SCSI 0x0000001BL /* SCSI device name */ #define DD_SCSI_DEVICE_NAME "\\Device\\ScsiPort" /* SCSI device I/O control codes */ #define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER #define IOCTL_SCSI_PASS_THROUGH \ CTL_CODE( IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_SCSI_MINIPORT \ CTL_CODE( IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_SCSI_GET_INQUIRY_DATA \ CTL_CODE( IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SCSI_GET_CAPABILITIES \ CTL_CODE( IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SCSI_PASS_THROUGH_DIRECT \ CTL_CODE( IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_SCSI_GET_ADDRESS \ CTL_CODE( IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SCSI_RESCAN_BUS \ CTL_CODE( IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SCSI_GET_DUMP_POINTERS \ CTL_CODE( IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_SCSI_FREE_DUMP_POINTERS \ CTL_CODE( IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define IOCTL_IDE_PASS_THROUGH \ CTL_CODE( IOCTL_SCSI_BASE, 0x040A, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_ATA_PASS_THROUGH \ CTL_CODE( IOCTL_SCSI_BASE, 0x040B, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_ATA_PASS_THROUGH_DIRECT \ CTL_CODE( IOCTL_SCSI_BASE, 0x040C, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_ATA_MINIPORT \ CTL_CODE( IOCTL_SCSI_BASE, 0x040D, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_MINIPORT_PROCESS_SERVICE_IRP \ CTL_CODE( IOCTL_SCSI_BASE, 0x040E, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_MPIO_PASS_THROUGH_PATH \ CTL_CODE( IOCTL_SCSI_BASE, 0x040F, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT \ CTL_CODE( IOCTL_SCSI_BASE, 0x0410, METHOD_BUFFERED, FILE_READ_ACCESS | \ FILE_WRITE_ACCESS ) #define IOCTL_SCSI_MINIPORT_NVCACHE ((FILE_DEVICE_SCSI << 16) + 0x0600) /* ATA pass through flags */ #define ATA_FLAGS_DRDY_REQUIRED 0x0001 #define ATA_FLAGS_DATA_IN 0x0002 #define ATA_FLAGS_DATA_OUT 0x0004 #define ATA_FLAGS_48BIT_COMMAND 0x0008 #define ATA_FLAGS_USE_DMA 0x0010 #define ATA_FLAGS_NO_MULTIPLE 0x0020 /* NRB functions */ #define NRB_FUNCTION_NVCACHE_INFO 0xEC #define NRB_FUNCTION_SPINDLE_STATUS 0xE5 #define NRB_FUNCTION_NVCACHE_POWER_MODE_SET 0x00 #define NRB_FUNCTION_NVCACHE_POWER_MODE_RETURN 0x01 #define NRB_FUNCTION_FLUSH_NVCACHE 0x14 #define NRB_FUNCTION_QUERY_PINNED_SET 0x12 #define NRB_FUNCTION_QUERY_CACHE_MISS 0x13 #define NRB_FUNCTION_ADD_LBAS_PINNED_SET 0x10 #define NRB_FUNCTION_REMOVE_LBAS_PINNED_SET 0x11 #define NRB_FUNCTION_QUERY_ASCENDER_STATUS 0xD0 #define NRB_FUNCTION_QUERY_HYBRID_DISK_STATUS 0xD1 /* NRB status codes */ #define NRB_SUCCESS 0 #define NRB_ILLEGAL_REQUEST 1 #define NRB_INVALID_PARAMETER 2 #define NRB_INPUT_DATA_OVERRUN 3 #define NRB_INPUT_DATA_UNDERRUN 4 #define NRB_OUTPUT_DATA_OVERRUN 5 #define NRB_OUTPUT_DATA_UNDERRUN 6 /* Dump pointers constants */ #define DUMP_POINTERS_VERSION_1 1 #define DUMP_POINTERS_VERSION_2 2 #define DUMP_DRIVER_NAME_LENGTH 15 /* SCSI I/O control data constants */ #define SCSI_IOCTL_DATA_OUT 0 #define SCSI_IOCTL_DATA_IN 1 #define SCSI_IOCTL_DATA_UNSPECIFIED 2 /* MPIO I/O control flags */ #define MPIO_IOCTL_FLAGS_USE_PATHID 1 #define MPIO_IOCTL_FLAGS_USE_SCSIADDRESS 2 #define MPIO_IOCTL_FLAGS_INVOLVE_DSM 4 /* SCSI pass through */ typedef struct _SCSI_PASS_THROUGH { USHORT Length; UCHAR ScsiStatus; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR CdbLength; UCHAR SenseInfoLength; UCHAR DataIn; ULONG DataTransferLength; ULONG TimeOutValue; ULONG_PTR DataBufferOffset; ULONG SenseInfoOffset; UCHAR Cdb[16]; } SCSI_PASS_THROUGH; typedef SCSI_PASS_THROUGH *PSCSI_PASS_THROUGH; /* SCSI pass through direct */ typedef struct _SCSI_PASS_THROUGH_DIRECT { USHORT Length; UCHAR ScsiStatus; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR CdbLength; UCHAR SenseInfoLength; UCHAR DataIn; ULONG DataTransferLength; ULONG TimeOutValue; PVOID DataBuffer; ULONG SenseInfoOffset; UCHAR Cdb[16]; } SCSI_PASS_THROUGH_DIRECT; typedef SCSI_PASS_THROUGH_DIRECT *PSCSI_PASS_THROUGH_DIRECT; /* ATA pass through (extended version) */ typedef struct _ATA_PASS_THROUGH_EX { USHORT Length; USHORT AtaFlags; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR ReservedAsUchar; ULONG DataTransferLength; ULONG TimeOutValue; ULONG ReservedAsUlong; ULONG_PTR DataBufferOffset; UCHAR PreviousTaskFile[8]; UCHAR CurrentTaskFile[8]; } ATA_PASS_THROUGH_EX; typedef ATA_PASS_THROUGH_EX *PATA_PASS_THROUGH_EX; /* ATA pass through direct */ typedef struct _ATA_PASS_THROUGH_DIRECT { USHORT Length; USHORT AtaFlags; UCHAR PathId; UCHAR TargetId; UCHAR Lun; UCHAR ReservedAsUchar; ULONG DataTransferLength; ULONG TimeOutValue; ULONG ReservedAsUlong; PVOID DataBuffer; UCHAR PreviousTaskFile[8]; UCHAR CurrentTaskFile[8]; } ATA_PASS_THROUGH_DIRECT; typedef ATA_PASS_THROUGH_DIRECT *PATA_PASS_THROUGH_DIRECT; /* IDE I/O control */ typedef struct _IDE_IO_CONTROL { ULONG HeaderLength; UCHAR Signature[8]; ULONG Timeout; ULONG ControlCode; ULONG ReturnStatus; ULONG DataLength; } IDE_IO_CONTROL; typedef IDE_IO_CONTROL *PIDE_IO_CONTROL; /* IOCTL_MPIO_PASS_THROUGH_PATH parameters */ typedef struct _MPIO_PASS_THROUGH_PATH { SCSI_PASS_THROUGH PassThrough; ULONG Version; USHORT Length; UCHAR Flags; UCHAR PortNumber; ULONGLONG MpioPathId; } MPIO_PASS_THROUGH_PATH; typedef MPIO_PASS_THROUGH_PATH *PMPIO_PASS_THROUGH_PATH; /* IOCTL_MPIO_PASS_THROUGH_PATH_DIRECT parameters */ typedef struct _MPIO_PASS_THROUGH_PATH_DIRECT { SCSI_PASS_THROUGH_DIRECT PassThrough; ULONG Version; USHORT Length; UCHAR Flags; UCHAR PortNumber; ULONGLONG MpioPathId; } MPIO_PASS_THROUGH_PATH_DIRECT; typedef MPIO_PASS_THROUGH_PATH_DIRECT *PMPIO_PASS_THROUGH_PATH_DIRECT; /* SCSI bus data */ typedef struct _SCSI_BUS_DATA { UCHAR NumberOfLogicalUnits; UCHAR InitiatorBusId; ULONG InquiryDataOffset; } SCSI_BUS_DATA; typedef SCSI_BUS_DATA *PSCSI_BUS_DATA; /* SCSI adapter bus information */ typedef struct _SCSI_ADAPTER_BUS_INFO { UCHAR NumberOfBuses; SCSI_BUS_DATA BusData[1]; } SCSI_ADAPTER_BUS_INFO; typedef SCSI_ADAPTER_BUS_INFO *PSCSI_ADAPTER_BUS_INFO; /* SCSI inquiry data */ typedef struct _SCSI_INQUIRY_DATA { UCHAR PathId; UCHAR TargetId; UCHAR Lun; BOOLEAN DeviceClaimed; ULONG InquiryDataLength; ULONG NextInquiryDataOffset; UCHAR InquiryData[1]; } SCSI_INQUIRY_DATA; typedef SCSI_INQUIRY_DATA *PSCSI_INQUIRY_DATA; /* SRB I/O control */ typedef struct _SRB_IO_CONTROL { ULONG HeaderLength; UCHAR Signature[8]; ULONG Timeout; ULONG ControlCode; ULONG ReturnCode; ULONG Length; } SRB_IO_CONTROL; typedef SRB_IO_CONTROL *PSRB_IO_CONTROL; /* Nonvolatile cache request block */ typedef struct _NVCACHE_REQUEST_BLOCK { ULONG NRBSize; USHORT Function; ULONG NRBFlags; ULONG NRBStatus; ULONG Count; ULONGLONG LBA; ULONG DataBufSize; ULONG NVCacheStatus; ULONG NVCacheSubStatus; } NVCACHE_REQUEST_BLOCK; typedef NVCACHE_REQUEST_BLOCK *PNVCACHE_REQUEST_BLOCK; /* Nonvolatile feature parameter */ typedef struct _NV_FEATURE_PARAMETER { USHORT NVPowerModeEnabled; USHORT NVParameterReserv1; USHORT NVCmdEnabled; USHORT NVParameterReserv2; USHORT NVPowerModeVer; USHORT NVCmdVer; ULONG NVSize; USHORT NVReadSpeed; USHORT NVWrtSpeed; ULONG DeviceSpinUpTime; } NV_FEATURE_PARAMETER; typedef NV_FEATURE_PARAMETER *PNV_FEATURE_PARAMETER; /* I/O SCSI capabilities */ typedef struct _IO_SCSI_CAPABILITIES { ULONG Length; ULONG MaximumTransferLength; ULONG MaximumPhysicalPages; ULONG SupportedAsynchronousEvents; ULONG AlignmentMask; BOOLEAN TaggedQueuing; BOOLEAN AdapterScansDown; BOOLEAN AdapterUsesPio; } IO_SCSI_CAPABILITIES; typedef IO_SCSI_CAPABILITIES *PIO_SCSI_CAPABILITIES; /* SCSI address */ typedef struct _SCSI_ADDRESS { ULONG Length; UCHAR PortNumber; UCHAR PathId; UCHAR TargetId; UCHAR Lun; } SCSI_ADDRESS; typedef SCSI_ADDRESS *PSCSI_ADDRESS; /* Dump pointers version */ typedef struct _DUMP_POINTERS_VERSION { ULONG Version; ULONG Size; } DUMP_POINTERS_VERSION; typedef DUMP_POINTERS_VERSION *PDUMP_POINTERS_VERSION; /* Dump pointers */ typedef struct _DUMP_POINTERS { struct _ADAPTER_OBJECT *AdapterObject; PVOID MappedRegisterBase; PVOID DumpData; PVOID CommonBufferVa; LARGE_INTEGER CommonBufferPa; ULONG CommonBufferSize; BOOLEAN AllocateCommonBuffers; #if (NTDDI_VERSION < 0x05010000) UCHAR Spare1[3]; #else BOOLEAN UseDiskDump; UCHAR Spare1[2]; #endif PVOID DeviceObject; } DUMP_POINTERS; typedef DUMP_POINTERS *PDUMP_POINTERS; /* Dump pointers (extended version) */ typedef struct _DUMP_POINTERS_EX { DUMP_POINTERS_VERSION Header; PVOID DumpData; PVOID CommonBufferVa; ULONG CommonBufferSize; BOOLEAN AllocateCommonBuffers; PVOID DeviceObject; PVOID DriverList; } DUMP_POINTERS_EX; typedef DUMP_POINTERS_EX *PDUMP_POINTERS_EX; /* Dump driver */ typedef struct _DUMP_DRIVER { PVOID DumpDriverList; WCHAR DriverName[DUMP_DRIVER_NAME_LENGTH]; WCHAR BaseName[DUMP_DRIVER_NAME_LENGTH]; } DUMP_DRIVER; typedef DUMP_DRIVER *PDUMP_DRIVER; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _NTDDSCSIH_ */