1 /* 2 * scsi.h 3 * 4 * Interface between SCSI miniport drivers and the SCSI port driver. 5 * 6 * This file is part of the w32api package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns (at) users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 16 * This code is distributed in the hope that it will be useful but 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18 * DISCLAIMED. This includes but is not limited to warranties of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 */ 22 23 #ifndef _NTSRB_ 24 #define _NTSRB_ 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 #define SCSI_MAXIMUM_LOGICAL_UNITS 8 31 #define SCSI_MAXIMUM_TARGETS_PER_BUS 128 32 #define SCSI_MAXIMUM_LUNS_PER_TARGET 255 33 #define SCSI_MAXIMUM_BUSES 8 34 #define SCSI_MINIMUM_PHYSICAL_BREAKS 16 35 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255 36 #define SCSI_MAXIMUM_TARGETS 8 37 38 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */ 39 #define SCSI_DMA64_MINIPORT_SUPPORTED 0x01 40 #define SCSI_DMA64_SYSTEM_SUPPORTED 0x80 41 #if (NTDDI_VERSION > NTDDI_WS03SP1) 42 #define SCSI_DMA64_MINIPORT_FULL64BIT_SUPPORTED 0x02 43 #endif 44 45 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0) 46 #define SP_UNTAGGED ((UCHAR) ~0) 47 48 /* Asynchronous events */ 49 #define SRBEV_BUS_RESET 0x0001 50 #define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002 51 52 #define MAXIMUM_CDB_SIZE 12 53 54 #if DBG 55 #define DebugPrint(x) ScsiDebugPrint x 56 #else 57 #define DebugPrint(x) 58 #endif 59 60 #define SCSI_COMBINE_BUS_TARGET(Bus, Target)( \ 61 ((((UCHAR) (Target)) & ~(0x20 - 1)) << 8) | \ 62 (((UCHAR) (Bus)) << 5) | \ 63 (((UCHAR) (Target)) & (0x20 - 1))) 64 65 #define SCSI_DECODE_BUS_TARGET(Value, Bus, Target)( \ 66 Bus = (UCHAR) ((Value) >> 5), \ 67 Target = (UCHAR) ((((Value) >> 8) & ~(0x20 - 1)) | ((Value) & (0x20 - 1)))) 68 69 /* SCSI_REQUEST_BLOCK.Function constants */ 70 #define SRB_FUNCTION_EXECUTE_SCSI 0x00 71 #define SRB_FUNCTION_CLAIM_DEVICE 0x01 72 #define SRB_FUNCTION_IO_CONTROL 0x02 73 #define SRB_FUNCTION_RECEIVE_EVENT 0x03 74 #define SRB_FUNCTION_RELEASE_QUEUE 0x04 75 #define SRB_FUNCTION_ATTACH_DEVICE 0x05 76 #define SRB_FUNCTION_RELEASE_DEVICE 0x06 77 #define SRB_FUNCTION_SHUTDOWN 0x07 78 #define SRB_FUNCTION_FLUSH 0x08 79 #define SRB_FUNCTION_ABORT_COMMAND 0x10 80 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11 81 #define SRB_FUNCTION_RESET_BUS 0x12 82 #define SRB_FUNCTION_RESET_DEVICE 0x13 83 #define SRB_FUNCTION_TERMINATE_IO 0x14 84 #define SRB_FUNCTION_FLUSH_QUEUE 0x15 85 #define SRB_FUNCTION_REMOVE_DEVICE 0x16 86 #define SRB_FUNCTION_WMI 0x17 87 #define SRB_FUNCTION_LOCK_QUEUE 0x18 88 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19 89 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20 90 #define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21 91 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22 92 #define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23 93 #define SRB_FUNCTION_POWER 0x24 94 #define SRB_FUNCTION_PNP 0x25 95 #define SRB_FUNCTION_DUMP_POINTERS 0x26 96 97 /* SCSI_REQUEST_BLOCK.SrbStatus constants */ 98 #define SRB_STATUS_PENDING 0x00 99 #define SRB_STATUS_SUCCESS 0x01 100 #define SRB_STATUS_ABORTED 0x02 101 #define SRB_STATUS_ABORT_FAILED 0x03 102 #define SRB_STATUS_ERROR 0x04 103 #define SRB_STATUS_BUSY 0x05 104 #define SRB_STATUS_INVALID_REQUEST 0x06 105 #define SRB_STATUS_INVALID_PATH_ID 0x07 106 #define SRB_STATUS_NO_DEVICE 0x08 107 #define SRB_STATUS_TIMEOUT 0x09 108 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A 109 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B 110 #define SRB_STATUS_MESSAGE_REJECTED 0x0D 111 #define SRB_STATUS_BUS_RESET 0x0E 112 #define SRB_STATUS_PARITY_ERROR 0x0F 113 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10 114 #define SRB_STATUS_NO_HBA 0x11 115 #define SRB_STATUS_DATA_OVERRUN 0x12 116 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13 117 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14 118 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15 119 #define SRB_STATUS_REQUEST_FLUSHED 0x16 120 #define SRB_STATUS_INVALID_LUN 0x20 121 #define SRB_STATUS_INVALID_TARGET_ID 0x21 122 #define SRB_STATUS_BAD_FUNCTION 0x22 123 #define SRB_STATUS_ERROR_RECOVERY 0x23 124 #define SRB_STATUS_NOT_POWERED 0x24 125 #define SRB_STATUS_LINK_DOWN 0x25 126 #define SRB_STATUS_INTERNAL_ERROR 0x30 127 128 #define SRB_STATUS_QUEUE_FROZEN 0x40 129 #define SRB_STATUS_AUTOSENSE_VALID 0x80 130 131 #define SRB_STATUS(Status) \ 132 (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN)) 133 134 /* SCSI_REQUEST_BLOCK.SrbFlags constants */ 135 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002 136 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004 137 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008 138 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010 139 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020 140 #define SRB_FLAGS_DATA_IN 0x00000040 141 #define SRB_FLAGS_DATA_OUT 0x00000080 142 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000 143 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) 144 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100 145 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200 146 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400 147 #define SRB_FLAGS_IS_ACTIVE 0x00010000 148 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000 149 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000 150 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000 151 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000 152 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000 153 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000 154 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000 155 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000 156 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000 157 158 #if DBG 159 #define SCSI_PORT_SIGNATURE 0x54524f50 160 #endif 161 162 #define SRB_SIMPLE_TAG_REQUEST 0x20 163 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21 164 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22 165 166 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x0001 167 #define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x0001 168 #define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x0001 169 170 #define SP_BUS_PARITY_ERROR 0x0001 171 #define SP_UNEXPECTED_DISCONNECT 0x0002 172 #define SP_INVALID_RESELECTION 0x0003 173 #define SP_BUS_TIME_OUT 0x0004 174 #define SP_PROTOCOL_ERROR 0x0005 175 #define SP_INTERNAL_ADAPTER_ERROR 0x0006 176 #define SP_REQUEST_TIMEOUT 0x0007 177 #define SP_IRQ_NOT_RESPONDING 0x0008 178 #define SP_BAD_FW_WARNING 0x0009 179 #define SP_BAD_FW_ERROR 0x000a 180 #define SP_LOST_WMI_MINIPORT_REQUEST 0x000b 181 182 #define SP_VER_TRACE_SUPPORT 0x0010 183 184 #define SP_RETURN_NOT_FOUND 0 185 #define SP_RETURN_FOUND 1 186 #define SP_RETURN_ERROR 2 187 #define SP_RETURN_BAD_CONFIG 3 188 189 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS; 190 191 typedef struct _ACCESS_RANGE { 192 SCSI_PHYSICAL_ADDRESS RangeStart; 193 ULONG RangeLength; 194 BOOLEAN RangeInMemory; 195 } ACCESS_RANGE, *PACCESS_RANGE; 196 197 typedef struct _PORT_CONFIGURATION_INFORMATION { 198 ULONG Length; 199 ULONG SystemIoBusNumber; 200 INTERFACE_TYPE AdapterInterfaceType; 201 ULONG BusInterruptLevel; 202 ULONG BusInterruptVector; 203 KINTERRUPT_MODE InterruptMode; 204 ULONG MaximumTransferLength; 205 ULONG NumberOfPhysicalBreaks; 206 ULONG DmaChannel; 207 ULONG DmaPort; 208 DMA_WIDTH DmaWidth; 209 DMA_SPEED DmaSpeed; 210 ULONG AlignmentMask; 211 ULONG NumberOfAccessRanges; 212 ACCESS_RANGE (*AccessRanges)[]; 213 PVOID Reserved; 214 UCHAR NumberOfBuses; 215 UCHAR InitiatorBusId[8]; 216 BOOLEAN ScatterGather; 217 BOOLEAN Master; 218 BOOLEAN CachesData; 219 BOOLEAN AdapterScansDown; 220 BOOLEAN AtdiskPrimaryClaimed; 221 BOOLEAN AtdiskSecondaryClaimed; 222 BOOLEAN Dma32BitAddresses; 223 BOOLEAN DemandMode; 224 BOOLEAN MapBuffers; 225 BOOLEAN NeedPhysicalAddresses; 226 BOOLEAN TaggedQueuing; 227 BOOLEAN AutoRequestSense; 228 BOOLEAN MultipleRequestPerLu; 229 BOOLEAN ReceiveEvent; 230 BOOLEAN RealModeInitialized; 231 BOOLEAN BufferAccessScsiPortControlled; 232 UCHAR MaximumNumberOfTargets; 233 UCHAR ReservedUchars[2]; 234 ULONG SlotNumber; 235 ULONG BusInterruptLevel2; 236 ULONG BusInterruptVector2; 237 KINTERRUPT_MODE InterruptMode2; 238 ULONG DmaChannel2; 239 ULONG DmaPort2; 240 DMA_WIDTH DmaWidth2; 241 DMA_SPEED DmaSpeed2; 242 ULONG DeviceExtensionSize; 243 ULONG SpecificLuExtensionSize; 244 ULONG SrbExtensionSize; 245 UCHAR Dma64BitAddresses; 246 BOOLEAN ResetTargetSupported; 247 UCHAR MaximumNumberOfLogicalUnits; 248 BOOLEAN WmiDataProvider; 249 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; 250 251 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION) 252 253 #ifdef __GNUC__ 254 __extension__ /* enums limited to range of integer */ 255 #endif 256 typedef enum _SCSI_ADAPTER_CONTROL_TYPE { 257 ScsiQuerySupportedControlTypes = 0, 258 ScsiStopAdapter, 259 ScsiRestartAdapter, 260 ScsiSetBootConfig, 261 ScsiSetRunningConfig, 262 ScsiAdapterControlMax, 263 MakeAdapterControlTypeSizeOfUlong = 0xffffffff 264 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE; 265 266 typedef enum _SCSI_ADAPTER_CONTROL_STATUS { 267 ScsiAdapterControlSuccess = 0, 268 ScsiAdapterControlUnsuccessful 269 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS; 270 271 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST { 272 ULONG MaxControlType; 273 BOOLEAN SupportedTypeList[0]; 274 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST; 275 276 typedef struct _SCSI_REQUEST_BLOCK { 277 USHORT Length; 278 UCHAR Function; 279 UCHAR SrbStatus; 280 UCHAR ScsiStatus; 281 UCHAR PathId; 282 UCHAR TargetId; 283 UCHAR Lun; 284 UCHAR QueueTag; 285 UCHAR QueueAction; 286 UCHAR CdbLength; 287 UCHAR SenseInfoBufferLength; 288 ULONG SrbFlags; 289 ULONG DataTransferLength; 290 ULONG TimeOutValue; 291 PVOID DataBuffer; 292 PVOID SenseInfoBuffer; 293 struct _SCSI_REQUEST_BLOCK *NextSrb; 294 PVOID OriginalRequest; 295 PVOID SrbExtension; 296 _ANONYMOUS_UNION union { 297 ULONG InternalStatus; 298 ULONG QueueSortKey; 299 ULONG LinkTimeoutValue; 300 } DUMMYUNIONNAME; 301 #if defined(_WIN64) 302 ULONG Reserved; 303 #endif 304 UCHAR Cdb[16]; 305 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK; 306 307 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK) 308 309 typedef struct _SCSI_WMI_REQUEST_BLOCK { 310 USHORT Length; 311 UCHAR Function; 312 UCHAR SrbStatus; 313 UCHAR WMISubFunction; 314 UCHAR PathId; 315 UCHAR TargetId; 316 UCHAR Lun; 317 UCHAR Reserved1; 318 UCHAR WMIFlags; 319 UCHAR Reserved2[2]; 320 ULONG SrbFlags; 321 ULONG DataTransferLength; 322 ULONG TimeOutValue; 323 PVOID DataBuffer; 324 PVOID DataPath; 325 PVOID Reserved3; 326 PVOID OriginalRequest; 327 PVOID SrbExtension; 328 ULONG Reserved4; 329 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64) 330 ULONG Reserved6; 331 #endif 332 UCHAR Reserved5[16]; 333 } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK; 334 335 typedef enum _STOR_DEVICE_POWER_STATE { 336 StorPowerDeviceUnspecified = 0, 337 StorPowerDeviceD0, 338 StorPowerDeviceD1, 339 StorPowerDeviceD2, 340 StorPowerDeviceD3, 341 StorPowerDeviceMaximum 342 } STOR_DEVICE_POWER_STATE, *PSTOR_DEVICE_POWER_STATE; 343 344 typedef enum _STOR_POWER_ACTION { 345 StorPowerActionNone = 0, 346 StorPowerActionReserved, 347 StorPowerActionSleep, 348 StorPowerActionHibernate, 349 StorPowerActionShutdown, 350 StorPowerActionShutdownReset, 351 StorPowerActionShutdownOff, 352 StorPowerActionWarmEject 353 } STOR_POWER_ACTION, *PSTOR_POWER_ACTION; 354 355 typedef struct _SCSI_POWER_REQUEST_BLOCK { 356 USHORT Length; 357 UCHAR Function; 358 UCHAR SrbStatus; 359 UCHAR SrbPowerFlags; 360 UCHAR PathId; 361 UCHAR TargetId; 362 UCHAR Lun; 363 STOR_DEVICE_POWER_STATE DevicePowerState; 364 ULONG SrbFlags; 365 ULONG DataTransferLength; 366 ULONG TimeOutValue; 367 PVOID DataBuffer; 368 PVOID SenseInfoBuffer; 369 struct _SCSI_REQUEST_BLOCK *NextSrb; 370 PVOID OriginalRequest; 371 PVOID SrbExtension; 372 STOR_POWER_ACTION PowerAction; 373 #if defined(_WIN64) 374 ULONG Reserved; 375 #endif 376 UCHAR Reserved5[16]; 377 } SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK; 378 379 typedef enum _STOR_PNP_ACTION { 380 StorStartDevice = 0x0, 381 StorRemoveDevice = 0x2, 382 StorStopDevice = 0x4, 383 StorQueryCapabilities = 0x9, 384 StorQueryResourceRequirements = 0xB, 385 StorFilterResourceRequirements = 0xD, 386 StorSurpriseRemoval = 0x17 387 } STOR_PNP_ACTION, *PSTOR_PNP_ACTION; 388 389 typedef struct _STOR_DEVICE_CAPABILITIES { 390 USHORT Version; 391 ULONG DeviceD1:1; 392 ULONG DeviceD2:1; 393 ULONG LockSupported:1; 394 ULONG EjectSupported:1; 395 ULONG Removable:1; 396 ULONG DockDevice:1; 397 ULONG UniqueID:1; 398 ULONG SilentInstall:1; 399 ULONG SurpriseRemovalOK:1; 400 ULONG NoDisplayInUI:1; 401 } STOR_DEVICE_CAPABILITIES, *PSTOR_DEVICE_CAPABILITIES; 402 403 typedef struct _SCSI_PNP_REQUEST_BLOCK { 404 USHORT Length; 405 UCHAR Function; 406 UCHAR SrbStatus; 407 UCHAR PnPSubFunction; 408 UCHAR PathId; 409 UCHAR TargetId; 410 UCHAR Lun; 411 STOR_PNP_ACTION PnPAction; 412 ULONG SrbFlags; 413 ULONG DataTransferLength; 414 ULONG TimeOutValue; 415 PVOID DataBuffer; 416 PVOID SenseInfoBuffer; 417 struct _SCSI_REQUEST_BLOCK *NextSrb; 418 PVOID OriginalRequest; 419 PVOID SrbExtension; 420 ULONG SrbPnPFlags; 421 #if defined(_WIN64) 422 ULONG Reserved; 423 #endif 424 UCHAR Reserved4[16]; 425 } SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK; 426 427 typedef BOOLEAN 428 (NTAPI *PHW_INITIALIZE)( 429 IN PVOID DeviceExtension); 430 431 typedef BOOLEAN 432 (NTAPI *PHW_STARTIO)( 433 IN PVOID DeviceExtension, 434 IN PSCSI_REQUEST_BLOCK Srb); 435 436 typedef BOOLEAN 437 (NTAPI *PHW_INTERRUPT)( 438 IN PVOID DeviceExtension); 439 440 typedef VOID 441 (NTAPI *PHW_TIMER)( 442 IN PVOID DeviceExtension); 443 444 typedef VOID 445 (NTAPI *PHW_DMA_STARTED)( 446 IN PVOID DeviceExtension); 447 448 typedef ULONG 449 (NTAPI *PHW_FIND_ADAPTER)( 450 IN PVOID DeviceExtension, 451 IN PVOID HwContext, 452 IN PVOID BusInformation, 453 IN PCHAR ArgumentString, 454 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, 455 OUT PBOOLEAN Again); 456 457 typedef BOOLEAN 458 (NTAPI *PHW_RESET_BUS)( 459 IN PVOID DeviceExtension, 460 IN ULONG PathId); 461 462 typedef BOOLEAN 463 (NTAPI *PHW_ADAPTER_STATE)( 464 IN PVOID DeviceExtension, 465 IN PVOID Context, 466 IN BOOLEAN SaveState); 467 468 typedef SCSI_ADAPTER_CONTROL_STATUS 469 (NTAPI *PHW_ADAPTER_CONTROL)( 470 IN PVOID DeviceExtension, 471 IN SCSI_ADAPTER_CONTROL_TYPE ControlType, 472 IN PVOID Parameters); 473 474 typedef enum _SCSI_NOTIFICATION_TYPE { 475 RequestComplete, 476 NextRequest, 477 NextLuRequest, 478 ResetDetected, 479 CallDisableInterrupts, 480 CallEnableInterrupts, 481 RequestTimerCall, 482 BusChangeDetected, 483 WMIEvent, 484 WMIReregister, 485 LinkUp, 486 LinkDown, 487 QueryTickCount, 488 BufferOverrunDetected, 489 TraceNotification 490 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE; 491 492 typedef struct _HW_INITIALIZATION_DATA { 493 ULONG HwInitializationDataSize; 494 INTERFACE_TYPE AdapterInterfaceType; 495 PHW_INITIALIZE HwInitialize; 496 PHW_STARTIO HwStartIo; 497 PHW_INTERRUPT HwInterrupt; 498 PHW_FIND_ADAPTER HwFindAdapter; 499 PHW_RESET_BUS HwResetBus; 500 PHW_DMA_STARTED HwDmaStarted; 501 PHW_ADAPTER_STATE HwAdapterState; 502 ULONG DeviceExtensionSize; 503 ULONG SpecificLuExtensionSize; 504 ULONG SrbExtensionSize; 505 ULONG NumberOfAccessRanges; 506 PVOID Reserved; 507 BOOLEAN MapBuffers; 508 BOOLEAN NeedPhysicalAddresses; 509 BOOLEAN TaggedQueuing; 510 BOOLEAN AutoRequestSense; 511 BOOLEAN MultipleRequestPerLu; 512 BOOLEAN ReceiveEvent; 513 USHORT VendorIdLength; 514 PVOID VendorId; 515 _ANONYMOUS_UNION union { 516 USHORT ReservedUshort; 517 USHORT PortVersionFlags; 518 } DUMMYUNIONNAME; 519 USHORT DeviceIdLength; 520 PVOID DeviceId; 521 PHW_ADAPTER_CONTROL HwAdapterControl; 522 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; 523 524 #if defined(_NTDDK_) 525 #define SCSIPORTAPI 526 #else 527 #define SCSIPORTAPI DECLSPEC_IMPORT 528 #endif 529 530 SCSIPORTAPI 531 VOID 532 NTAPI 533 ScsiPortCompleteRequest( 534 IN PVOID HwDeviceExtension, 535 IN UCHAR PathId, 536 IN UCHAR TargetId, 537 IN UCHAR Lun, 538 IN UCHAR SrbStatus); 539 540 SCSIPORTAPI 541 ULONG 542 NTAPI 543 ScsiPortConvertPhysicalAddressToUlong( 544 IN SCSI_PHYSICAL_ADDRESS Address); 545 546 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart) 547 #define ScsiPortConvertPhysicalAddressToULongPtr(Address) ((ULONG_PTR)((Address).QuadPart)) 548 549 SCSIPORTAPI 550 SCSI_PHYSICAL_ADDRESS 551 NTAPI 552 ScsiPortConvertUlongToPhysicalAddress( 553 IN ULONG_PTR UlongAddress); 554 555 SCSIPORTAPI 556 VOID 557 NTAPI 558 ScsiPortFlushDma( 559 IN PVOID DeviceExtension); 560 561 SCSIPORTAPI 562 VOID 563 NTAPI 564 ScsiPortFreeDeviceBase( 565 IN PVOID HwDeviceExtension, 566 IN PVOID MappedAddress); 567 568 SCSIPORTAPI 569 ULONG 570 NTAPI 571 ScsiPortGetBusData( 572 IN PVOID DeviceExtension, 573 IN ULONG BusDataType, 574 IN ULONG SystemIoBusNumber, 575 IN ULONG SlotNumber, 576 IN PVOID Buffer, 577 IN ULONG Length); 578 579 SCSIPORTAPI 580 PVOID 581 NTAPI 582 ScsiPortGetDeviceBase( 583 IN PVOID HwDeviceExtension, 584 IN INTERFACE_TYPE BusType, 585 IN ULONG SystemIoBusNumber, 586 IN SCSI_PHYSICAL_ADDRESS IoAddress, 587 IN ULONG NumberOfBytes, 588 IN BOOLEAN InIoSpace); 589 590 SCSIPORTAPI 591 PVOID 592 NTAPI 593 ScsiPortGetLogicalUnit( 594 IN PVOID HwDeviceExtension, 595 IN UCHAR PathId, 596 IN UCHAR TargetId, 597 IN UCHAR Lun); 598 599 SCSIPORTAPI 600 SCSI_PHYSICAL_ADDRESS 601 NTAPI 602 ScsiPortGetPhysicalAddress( 603 IN PVOID HwDeviceExtension, 604 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, 605 IN PVOID VirtualAddress, 606 OUT ULONG *Length); 607 608 SCSIPORTAPI 609 PSCSI_REQUEST_BLOCK 610 NTAPI 611 ScsiPortGetSrb( 612 IN PVOID DeviceExtension, 613 IN UCHAR PathId, 614 IN UCHAR TargetId, 615 IN UCHAR Lun, 616 IN LONG QueueTag); 617 618 SCSIPORTAPI 619 PVOID 620 NTAPI 621 ScsiPortGetUncachedExtension( 622 IN PVOID HwDeviceExtension, 623 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, 624 IN ULONG NumberOfBytes); 625 626 SCSIPORTAPI 627 PVOID 628 NTAPI 629 ScsiPortGetVirtualAddress( 630 IN PVOID HwDeviceExtension, 631 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress); 632 633 SCSIPORTAPI 634 ULONG 635 NTAPI 636 ScsiPortInitialize( 637 IN PVOID Argument1, 638 IN PVOID Argument2, 639 IN struct _HW_INITIALIZATION_DATA *HwInitializationData, 640 IN PVOID HwContext OPTIONAL); 641 642 SCSIPORTAPI 643 VOID 644 NTAPI 645 ScsiPortIoMapTransfer( 646 IN PVOID HwDeviceExtension, 647 IN PSCSI_REQUEST_BLOCK Srb, 648 IN PVOID LogicalAddress, 649 IN ULONG Length); 650 651 SCSIPORTAPI 652 VOID 653 NTAPI 654 ScsiPortLogError( 655 IN PVOID HwDeviceExtension, 656 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL, 657 IN UCHAR PathId, 658 IN UCHAR TargetId, 659 IN UCHAR Lun, 660 IN ULONG ErrorCode, 661 IN ULONG UniqueId); 662 663 SCSIPORTAPI 664 VOID 665 __cdecl 666 ScsiPortNotification( 667 IN SCSI_NOTIFICATION_TYPE NotificationType, 668 IN PVOID HwDeviceExtension, 669 IN ...); 670 671 SCSIPORTAPI 672 VOID 673 NTAPI 674 ScsiPortQuerySystemTime( 675 OUT PLARGE_INTEGER CurrentTime); 676 677 SCSIPORTAPI 678 ULONG 679 NTAPI 680 ScsiPortSetBusDataByOffset( 681 IN PVOID DeviceExtension, 682 IN ULONG BusDataType, 683 IN ULONG SystemIoBusNumber, 684 IN ULONG SlotNumber, 685 IN PVOID Buffer, 686 IN ULONG Offset, 687 IN ULONG Length); 688 689 SCSIPORTAPI 690 VOID 691 NTAPI 692 ScsiPortStallExecution( 693 IN ULONG Delay); 694 695 SCSIPORTAPI 696 BOOLEAN 697 NTAPI 698 ScsiPortValidateRange( 699 IN PVOID HwDeviceExtension, 700 IN INTERFACE_TYPE BusType, 701 IN ULONG SystemIoBusNumber, 702 IN SCSI_PHYSICAL_ADDRESS IoAddress, 703 IN ULONG NumberOfBytes, 704 IN BOOLEAN InIoSpace); 705 706 SCSIPORTAPI 707 VOID 708 __cdecl 709 ScsiDebugPrint( 710 IN ULONG DebugPrintLevel, 711 IN PCCHAR DebugMessage, 712 IN ...); 713 714 #if defined(_M_AMD64) 715 716 #define ScsiPortReadPortUchar READ_PORT_UCHAR 717 #define ScsiPortReadPortUshort READ_PORT_USHORT 718 #define ScsiPortReadPortUlong READ_PORT_ULONG 719 720 #define ScsiPortReadPortBufferUchar READ_PORT_BUFFER_UCHAR 721 #define ScsiPortReadPortBufferUshort READ_PORT_BUFFER_USHORT 722 #define ScsiPortReadPortBufferUlong READ_PORT_BUFFER_ULONG 723 724 #define ScsiPortReadRegisterUchar READ_REGISTER_UCHAR 725 #define ScsiPortReadRegisterUshort READ_REGISTER_USHORT 726 #define ScsiPortReadRegisterUlong READ_REGISTER_ULONG 727 728 #define ScsiPortReadRegisterBufferUchar READ_REGISTER_BUFFER_UCHAR 729 #define ScsiPortReadRegisterBufferUshort READ_REGISTER_BUFFER_USHORT 730 #define ScsiPortReadRegisterBufferUlong READ_REGISTER_BUFFER_ULONG 731 732 #define ScsiPortWritePortUchar WRITE_PORT_UCHAR 733 #define ScsiPortWritePortUshort WRITE_PORT_USHORT 734 #define ScsiPortWritePortUlong WRITE_PORT_ULONG 735 736 #define ScsiPortWritePortBufferUchar WRITE_PORT_BUFFER_UCHAR 737 #define ScsiPortWritePortBufferUshort WRITE_PORT_BUFFER_USHORT 738 #define ScsiPortWritePortBufferUlong WRITE_PORT_BUFFER_ULONG 739 740 #define ScsiPortWriteRegisterUchar WRITE_REGISTER_UCHAR 741 #define ScsiPortWriteRegisterUshort WRITE_REGISTER_USHORT 742 #define ScsiPortWriteRegisterUlong WRITE_REGISTER_ULONG 743 744 #define ScsiPortWriteRegisterBufferUchar WRITE_REGISTER_BUFFER_UCHAR 745 #define ScsiPortWriteRegisterBufferUshort WRITE_REGISTER_BUFFER_USHORT 746 #define ScsiPortWriteRegisterBufferUlong WRITE_REGISTER_BUFFER_ULONG 747 748 #define ScsiPortMoveMemory memmove 749 750 #else 751 752 SCSIPORTAPI 753 UCHAR 754 NTAPI 755 ScsiPortReadPortUchar( 756 IN PUCHAR Port); 757 758 SCSIPORTAPI 759 ULONG 760 NTAPI 761 ScsiPortReadPortUlong( 762 IN PULONG Port); 763 764 SCSIPORTAPI 765 USHORT 766 NTAPI 767 ScsiPortReadPortUshort( 768 IN PUSHORT Port); 769 770 SCSIPORTAPI 771 VOID 772 NTAPI 773 ScsiPortReadPortBufferUchar( 774 IN PUCHAR Port, 775 IN PUCHAR Buffer, 776 IN ULONG Count); 777 778 SCSIPORTAPI 779 VOID 780 NTAPI 781 ScsiPortReadPortBufferUlong( 782 IN PULONG Port, 783 IN PULONG Buffer, 784 IN ULONG Count); 785 786 SCSIPORTAPI 787 VOID 788 NTAPI 789 ScsiPortReadPortBufferUshort( 790 IN PUSHORT Port, 791 IN PUSHORT Buffer, 792 IN ULONG Count); 793 794 SCSIPORTAPI 795 UCHAR 796 NTAPI 797 ScsiPortReadRegisterUchar( 798 IN PUCHAR Register); 799 800 SCSIPORTAPI 801 ULONG 802 NTAPI 803 ScsiPortReadRegisterUlong( 804 IN PULONG Register); 805 806 SCSIPORTAPI 807 USHORT 808 NTAPI 809 ScsiPortReadRegisterUshort( 810 IN PUSHORT Register); 811 812 SCSIPORTAPI 813 VOID 814 NTAPI 815 ScsiPortReadRegisterBufferUchar( 816 IN PUCHAR Register, 817 IN PUCHAR Buffer, 818 IN ULONG Count); 819 820 SCSIPORTAPI 821 VOID 822 NTAPI 823 ScsiPortReadRegisterBufferUlong( 824 IN PULONG Register, 825 IN PULONG Buffer, 826 IN ULONG Count); 827 828 SCSIPORTAPI 829 VOID 830 NTAPI 831 ScsiPortReadRegisterBufferUshort( 832 IN PUSHORT Register, 833 IN PUSHORT Buffer, 834 IN ULONG Count); 835 836 SCSIPORTAPI 837 VOID 838 NTAPI 839 ScsiPortWritePortUchar( 840 IN PUCHAR Port, 841 IN UCHAR Value); 842 843 SCSIPORTAPI 844 VOID 845 NTAPI 846 ScsiPortWritePortUlong( 847 IN PULONG Port, 848 IN ULONG Value); 849 850 SCSIPORTAPI 851 VOID 852 NTAPI 853 ScsiPortWritePortUshort( 854 IN PUSHORT Port, 855 IN USHORT Value); 856 857 SCSIPORTAPI 858 VOID 859 NTAPI 860 ScsiPortWritePortBufferUchar( 861 IN PUCHAR Port, 862 IN PUCHAR Buffer, 863 IN ULONG Count); 864 865 SCSIPORTAPI 866 VOID 867 NTAPI 868 ScsiPortWritePortBufferUlong( 869 IN PULONG Port, 870 IN PULONG Buffer, 871 IN ULONG Count); 872 873 SCSIPORTAPI 874 VOID 875 NTAPI 876 ScsiPortWritePortBufferUshort( 877 IN PUSHORT Port, 878 IN PUSHORT Buffer, 879 IN ULONG Count); 880 881 SCSIPORTAPI 882 VOID 883 NTAPI 884 ScsiPortWriteRegisterUchar( 885 IN PUCHAR Register, 886 IN UCHAR Value); 887 888 SCSIPORTAPI 889 VOID 890 NTAPI 891 ScsiPortWriteRegisterUlong( 892 IN PULONG Register, 893 IN ULONG Value); 894 895 SCSIPORTAPI 896 VOID 897 NTAPI 898 ScsiPortWriteRegisterUshort( 899 IN PUSHORT Register, 900 IN USHORT Value); 901 902 SCSIPORTAPI 903 VOID 904 NTAPI 905 ScsiPortWriteRegisterBufferUchar( 906 IN PUCHAR Register, 907 IN PUCHAR Buffer, 908 IN ULONG Count); 909 910 SCSIPORTAPI 911 VOID 912 NTAPI 913 ScsiPortWriteRegisterBufferUlong( 914 IN PULONG Register, 915 IN PULONG Buffer, 916 IN ULONG Count); 917 918 SCSIPORTAPI 919 VOID 920 NTAPI 921 ScsiPortWriteRegisterBufferUshort( 922 IN PUSHORT Register, 923 IN PUSHORT Buffer, 924 IN ULONG Count); 925 926 SCSIPORTAPI 927 VOID 928 NTAPI 929 ScsiPortMoveMemory( 930 IN PVOID WriteBuffer, 931 IN PVOID ReadBuffer, 932 IN ULONG Length); 933 934 #endif /* defined(_M_AMD64) */ 935 936 #ifdef __cplusplus 937 } 938 #endif 939 940 #endif /* _NTSRB_ */ 941