HW_INITIALIZATION_DATA 구조체(srb.h)
각 SCSI 미니포트 드라이버의 DriverEntry 루틴은 0으로 초기화한 다음 OS 관련 포트 드라이버에 대한 SCSI(관련 HW_INITIALIZATION_DATA) 정보를 입력해야 합니다.
구문
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, DeviceIdLength 및 DeviceId 멤버에 대한 값을 제공해야 합니다.
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 바이트 문자열에 대한 포인터입니다. 이 멤버는 플러그 앤 플레이 드라이버와 관련이 없습니다.
지정된 AdapterInterfaceType 이 PCIBus인 경우 공급업체 ID는 PCI SIG에서 할당한 USHORT 값으로, 미니포트 드라이버에서 바이트 문자열로 변환해야 합니다. 예를 들어 할당된 PCI 공급업체 ID 값이 1001인 경우 미니포트 드라이버 제공 VendorId 문자열은 ('1', '0', '0', '1')입니다.
ReservedUshort
시스템 사용을 위해 예약되었으며 미니포트 드라이버에서 사용할 수 없습니다.
PortVersionFlags
DeviceIdLength
다음에 설명된 DeviceId 문자열의 크기(바이트)를 지정합니다.
DeviceId
미니포트 드라이버에서 지원하는 HBA 모델을 식별하는 ASCII 바이트 문자열에 대한 포인터입니다. 이 멤버는 플러그 앤 플레이 드라이버와 관련이 없습니다.
지정된 AdapterInterfaceType 이 PCIBus인 경우 디바이스 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 모두 SpecificLuExtensionSize 및 SrbExtensionSize 라는 멤버 쌍이 있으며 해당 값은 Windows 2000 이전과 다르게 처리됩니다. 미니포트 드라이버는 컨트롤러가 실제로 지원할 수 있는 항목에 관계없이 HBA가 32비트 주소를 처리할 수 있다는 가정하에 HW_INITIALIZATION_DATA SpecificLuExtensionSize 및 SrbExtensionSize 의 초기 값을 계산해야 합니다. 자세한 내용은 PORT_CONFIGURATION_DATA 아래의 토론을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | srb.h(Srb.h, Strmini.h 포함) |