HW_INITIALIZATION_DATA 구조체(srb.h)

각 SCSI 미니포트 드라이버의 DriverEntry 루틴은 0으로 초기화한 다음 OS 관련 포트 드라이버에 대한 SCSI(관련 HW_INITIALIZATION_DATA) 정보를 입력해야 합니다.

참고 SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
 

구문

typedef struct _HW_INITIALIZATION_DATA {
  ULONG               HwInitializationDataSize;
  INTERFACE_TYPE      AdapterInterfaceType;
  PHW_INITIALIZE      HwInitialize;
  PHW_STARTIO         HwStartIo;
  PHW_INTERRUPT       HwInterrupt;
  PHW_FIND_ADAPTER    HwFindAdapter;
  PHW_RESET_BUS       HwResetBus;
  PHW_DMA_STARTED     HwDmaStarted;
  PHW_ADAPTER_STATE   HwAdapterState;
  ULONG               DeviceExtensionSize;
  ULONG               SpecificLuExtensionSize;
  ULONG               SrbExtensionSize;
  ULONG               NumberOfAccessRanges;
  PVOID               Reserved;
  BOOLEAN             MapBuffers;
  BOOLEAN             NeedPhysicalAddresses;
  BOOLEAN             TaggedQueuing;
  BOOLEAN             AutoRequestSense;
  BOOLEAN             MultipleRequestPerLu;
  BOOLEAN             ReceiveEvent;
  USHORT              VendorIdLength;
  PVOID               VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT              DeviceIdLength;
  PVOID               DeviceId;
  PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

멤버

HwInitializationDataSize

sizeof()에서 반환된 대로 이 구조체의 크기를 바이트 단위로 지정합니다. 실제로 이 멤버는 미니포트 드라이버에서 사용되는 이 구조체의 버전을 나타냅니다. 미니포트 드라이버의 DriverEntry 루틴은 포트 드라이버에 대해 이 멤버의 값을 설정해야 합니다.

AdapterInterfaceType

HBA가 연결된 I/O 버스의 유형을 지정합니다. 이 버스는 내부, Isa, Eisa, MicroChannel, TurboChannel 또는 PCIBus 중 하나일 수 있습니다. 그러나 향후 추가 버스 유형이 지원될 예정입니다. 지원되는 버스 유형의 상한은 항상 MaximumInterfaceType입니다.

PCIBus로 설정된 경우 미니포트 드라이버는 나중에 설명한 VendorIdLength, VendorId, DeviceIdLengthDeviceId 멤버에 대한 값을 제공해야 합니다.

HwInitialize

모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiInitialize 루틴에 대한 포인터입니다. 이 루틴의 프로토타입은 PHW_INITIALIZE.

HwStartIo

모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiStartIo 루틴에 대한 포인터입니다. 이 루틴의 프로토타입은 PHW_STARTIO.

HwInterrupt

인터럽트를 생성하는 HBA의 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiInterrupt 루틴에 대한 포인터입니다. 미니포트 드라이버에 ISR이 필요하지 않은 경우 NULL 로 설정합니다. 이 루틴의 프로토타입은 PHW_INTERRUPT.

HwFindAdapter

모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiFindAdapter 루틴에 대한 포인터입니다. 이 루틴의 프로토타입은 PHW_FIND_ADAPTER.

HwResetBus

모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiResetBus 루틴에 대한 포인터입니다. 이 루틴의 프로토타입은 PHW_RESET_BUS.

HwDmaStarted

HBA가 시스템 DMA, 즉 시스템 DMA 컨트롤러를 사용하는 경우 미니포트 드라이버의 HwScsiDmaStarted 루틴에 대한 포인터입니다. HBA가 master 버스이거나 PIO를 사용하는 경우 NULL로 설정합니다. 이 루틴의 프로토타입은 PHW_DMA_STARTED.

HwAdapterState

x86 보호 모드와 실제 프로세서 모드 간에 전환해야 하는 운영 체제 종속 x86 플랫폼 전용 포트 드라이버와 연결된 BIOS를 사용하여 HBA의 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiAdapterState 루틴에 대한 포인터입니다. 미니포트 드라이버에 HwScsiAdapterState 루틴이 필요하지 않은 경우 이 멤버를 NULL로 설정합니다. x86 전용 포트 드라이버와 호환되고 x86 전용 운영 체제 환경으로 이식하려면 BIOS가 있는 HBA의 미니포트 드라이버에 HwScsiAdapterState 루틴이 있어야 합니다. 이 루틴의 프로토타입은 PHW_ADAPTER_STATE.

DeviceExtensionSize

미니포트 드라이버가 HBA별 디바이스 확장에 필요한 바이트 크기를 지정합니다. 미니포트 드라이버는 드라이버 결정 HBA 정보에 대한 스토리지로 디바이스 확장을 사용합니다. OS 관련 포트 드라이버는 할당된 각 디바이스 확장을 0으로 초기화하고 DriverEntry 루틴을 제외한 미니포트 드라이버에 대한 모든 호출에서 HBA 관련 디바이스 확장에 대한 포인터를 전달합니다. 지정된 크기에는 다음에 설명된 미니포트 드라이버 요청 논리 단위별 스토리지가 포함되지 않습니다.

SpecificLuExtensionSize

미니포트 드라이버가 논리 단위별 스토리지(있는 경우)에 필요한 바이트 크기를 지정합니다. 미니포트 드라이버는 버스의 SCSI 주변 장치에 대한 드라이버 결정 논리 단위 정보에 대한 스토리지로 LU 확장을 사용할 수 있습니다. OS 관련 포트 드라이버는 할당하는 각 LU 확장을 0으로 초기화합니다. 미니포트 드라이버가 스토리지가 필요한 LU별 정보를 유지 관리하지 않는 경우 이 멤버를 0으로 설정합니다. 이 값은 컨트롤러가 실제로 지원할 수 있는 내용에 관계없이 HBA가 32비트 주소를 받을 수 있다는 가정을 기반으로 합니다. 64비트 주소를 처리하기 위해 LUN 또는 SRB 확장에 추가 공간이 필요한 경우 ScsiPortGetUncachedExtension과 같은 루틴과 함께 사용하기 전에 이 값을 적절하게 조정해야 합니다.

SrbExtensionSize

요청당 스토리지에 미니포트 드라이버에 필요한 바이트 크기(있는 경우)를 지정합니다. 미니포트 드라이버는 특정 요청을 처리하는 데 필요한 데이터와 같이 드라이버 결정 요청 관련 정보에 대한 스토리지로 SRB 확장을 사용할 수 있습니다. OS 관련 포트 드라이버는 SRB 확장을 초기화하지 않지만 미니포트 드라이버에 보내는 각 SRB에서 이 스토리지에 대한 포인터를 설정합니다. SRB 확장은 HBA 하드웨어에서 안전하게 액세스할 수 있습니다. 미니포트 드라이버가 스토리지가 필요한 SRB별 정보를 유지 관리하지 않는 경우 이 멤버를 0으로 설정합니다. 이 값은 컨트롤러가 실제로 지원할 수 있는 내용에 관계없이 HBA가 32비트 주소를 받을 수 있다는 가정을 기반으로 합니다. 64비트 주소를 처리하기 위해 LUN 또는 SRB 확장에 추가 공간이 필요한 경우 ScsiPortGetUncachedExtension과 같은 루틴과 함께 사용하기 전에 이 값을 적절하게 조정해야 합니다.

NumberOfAccessRanges

어댑터에서 사용하는 액세스 범위 수를 지정합니다. 각각은 메모리 주소 또는 I/O 포트 주소의 범위입니다. 일반적인 HBA는 I/O 포트와 디바이스 메모리 범위에 대한 두 가지 범위를 사용합니다.

Reserved

시스템 사용을 위해 예약되었으며 미니포트 드라이버에서 사용할 수 없습니다.

MapBuffers

TRUE이면 미니포트 드라이버에서 액세스하기 위해 모든 데이터 버퍼 주소를 가상 주소에 매핑해야 했음을 나타냅니다. FALSE이면 데이터 버퍼 주소를 가상 주소에 매핑할 필요가 없습니다.

NeedPhysicalAddresses

TRUE이면 미니포트 드라이버가 HBA에서 요구하는 대로 디바이스, LU당 모든 및 SRB별 확장 주소와 SRB 버퍼 주소를 실제 주소로 변환해야 했음을 나타냅니다. FALSE이면 이러한 주소 중 어느 것도 실제 주소로 변환할 필요가 없습니다.

TaggedQueuing

TRUE이면 해당 미니포트 드라이버가 SCSI 태그가 지정된 큐를 지원할 수 있음을 나타냅니다. FALSE인 경우 미니포트 드라이버는 SCSI 태그가 지정된 큐를 지원할 수 없습니다.

AutoRequestSense

TRUE인 경우 HBA가 명시적 요청 없이 요청 센스 작업을 수행할 수 있음을 나타냅니다. FALSE인 경우 HBA는 요청 감지 작업을 수행하기 전에 명시적 요청이 필요합니다. 요청 감지 작업을 수행하기 위해 기본 제공 펌웨어로 HBA를 구동하는 미니포트 드라이버만 이 멤버를 TRUE로 설정해야 합니다.

MultipleRequestPerLu

TRUE인 경우 미니포트 드라이버는 특히 HBA 내에서 논리 단위당 여러 요청을 큐에 대기할 수 있음을 나타냅니다. FALSE인 경우 미니포트 드라이버는 논리 단위당 여러 요청을 큐에 대기할 수 없습니다. 이 기능을 사용하려면 HBA가 미니포트 드라이버에 대한 자동 요청 센스 를 지원해야 합니다. 미니포트 드라이버가 이 멤버를 TRUE로 설정하는 경우 이 형식의 요청에 대해 각 SRB QueueTag 멤버를 사용해야 하지만 SRB_FLAGS_QUEUE_ACTION_ENABLE SCSI_REQUEST_BLOCK 구조체의 SrbFlags 멤버에서 설정되지 않습니다.

ReceiveEvent

TRUE이면 미니포트 드라이버가 SCSI 비동기 이벤트에 대한 수신 이벤트 SRB를 지원할 수 있는 HBA를 구동한다는 것을 나타냅니다. FALSE인 경우 HBA는 SCSI 비동기 이벤트에 대한 수신 이벤트 SRB를 지원할 수 없습니다.

VendorIdLength

다음에 설명된 VendorId 문자열의 크기(바이트)를 지정합니다.

VendorId

HBA 제조업체를 식별하는 ASCII 바이트 문자열에 대한 포인터입니다. 이 멤버는 플러그 앤 플레이 드라이버와 관련이 없습니다.

지정된 AdapterInterfaceTypePCIBus인 경우 공급업체 ID는 PCI SIG에서 할당한 USHORT 값으로, 미니포트 드라이버에서 바이트 문자열로 변환해야 합니다. 예를 들어 할당된 PCI 공급업체 ID 값이 1001인 경우 미니포트 드라이버 제공 VendorId 문자열은 ('1', '0', '0', '1')입니다.

ReservedUshort

시스템 사용을 위해 예약되었으며 미니포트 드라이버에서 사용할 수 없습니다.

PortVersionFlags

DeviceIdLength

다음에 설명된 DeviceId 문자열의 크기(바이트)를 지정합니다.

DeviceId

미니포트 드라이버에서 지원하는 HBA 모델을 식별하는 ASCII 바이트 문자열에 대한 포인터입니다. 이 멤버는 플러그 앤 플레이 드라이버와 관련이 없습니다.

지정된 AdapterInterfaceTypePCIBus인 경우 디바이스 ID는 HBA 제조업체가 할당한 USHORT 값입니다. Miniport 드라이버는 VendorId 멤버와 마찬가지로 지원할 수 있는 HBA에 대한 PCI 디바이스 ID 값을 DeviceId 바이트 문자열로 변환해야 합니다. 예를 들어 미니포트 드라이버가 PCI 디바이스 ID 8040 및 8050에서 HBA를 지원할 수 있는 경우 바이트 문자열('8', '0')에 대한 포인터로 DeviceId 를 설정할 수 있습니다.

HwAdapterControl

모든 PnP 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwScsiAdapterControl 루틴에 대한 포인터입니다. 미니포트 드라이버가 플러그 앤 플레이 지원하지 않는 경우 NULL로 설정합니다.

설명

각 미니포트 드라이버는 이 구조체에서 관련 멤버의 값을 설정하고 ScsiPortInitialize를 호출하기 전에 0으로 HW_INITIALIZATION_DATA 구조를 초기화해야 합니다.

HW_INITIALIZATION_DATA Dma64BitAddresses 멤버가 Windows 2000에서 제거되었습니다(자세한 내용은 PORT_CONFIGURATION_DATA 토론 참조).

HW_INITIALIZATION_DATA 및 PORT_CONFIGURATION_INFORMATION 모두 SpecificLuExtensionSizeSrbExtensionSize 라는 멤버 쌍이 있으며 해당 값은 Windows 2000 이전과 다르게 처리됩니다. 미니포트 드라이버는 컨트롤러가 실제로 지원할 수 있는 항목에 관계없이 HBA가 32비트 주소를 처리할 수 있다는 가정하에 HW_INITIALIZATION_DATA SpecificLuExtensionSizeSrbExtensionSize 의 초기 값을 계산해야 합니다. 자세한 내용은 PORT_CONFIGURATION_DATA 아래의 토론을 참조하세요.

요구 사항

요구 사항
헤더 srb.h(Srb.h, Strmini.h 포함)

추가 정보

SCSI 미니포트 드라이버의 DriverEntry

HwScsiInitialize

SCSI_REQUEST_BLOCK

ScsiPortInitialize