ScsiPortGetDeviceBase 함수(srb.h)
ScsiPortGetDeviceBase 루틴은 HBA와 통신하는 데 사용할 수 있는 매핑된 논리적 기본 주소를 반환합니다. 모든 미니포트 드라이버는 매핑된 논리적 액세스 범위 주소를 ScsiPort에 전달해야 합니다. 포트Xxx 및 ScsiPort.. Xxx 루틴을 등록하여 HBA와 통신합니다.
구문
SCSIPORT_API PVOID ScsiPortGetDeviceBase(
[in] PVOID HwDeviceExtension,
[in] INTERFACE_TYPE BusType,
[in] ULONG SystemIoBusNumber,
[in] SCSI_PHYSICAL_ADDRESS IoAddress,
[in] ULONG NumberOfBytes,
[in] BOOLEAN InIoSpace
);
매개 변수
[in] HwDeviceExtension
하드웨어 디바이스 확장에 대한 포인터입니다. 포트 드라이버가 미니포트 드라이버를 대신하여 할당하고 초기화하는 HBA별 스토리지 영역입니다. 미니포트 드라이버는 일반적으로 HBA 상태 및 HBA의 매핑된 액세스 범위와 같은 HBA 관련 정보를 이 확장에 저장합니다. 이 영역은 미니포트 드라이버가 ScsiPortInitialize를 호출한 직후 HBA 디바이스 개체의 DeviceExtension-HwDeviceExtension> 멤버의 미니포트 드라이버에서 사용할 수 있습니다. 포트 드라이버는 디바이스를 제거할 때 이 메모리를 해제합니다.
[in] BusType
HBA가 연결된 I/O 버스의 인터페이스 형식을 지정합니다. 미니포트 드라이버의 HwScsiFindAdapter 루틴은 입력 PORT_CONFIGURATION_INFORMATION AdapterInterfaceType 멤버에서 이 매개 변수의 값을 가져옵니다.
[in] SystemIoBusNumber
HBA가 연결된 I/O 버스의 시스템 할당 번호를 지정합니다. HwScsiFindAdapter 루틴은 입력 PORT_CONFIGURATION_INFORMATION SystemIoBusNumber 멤버에서 이 매개 변수의 값을 가져옵니다.
[in] IoAddress
HBA에서 사용하는 범위의 버스 상대 기준 주소를 지정합니다. HwScsiFindAdapter 루틴은 포트 드라이버가 범위 구성 정보를 제공하는 경우 PORT_CONFIGURATION_INFORMATION AccessRanges 요소 중 하나에서 이 매개 변수의 값을 가져옵니다. 그렇지 않으면 이 주소는 ScsiPortGetBusData 에서 반환된 값 또는 미니포트 드라이버 제공 기본값일 수 있습니다. 반환 상태 NULL(오류 상태)과 충돌할 수 있으므로 기본 주소 0을 사용하지 마세요.
[in] NumberOfBytes
매핑에서 포함해야 하는 범위의 크기(바이트)를 지정합니다. 포트 드라이버가 범위 구성 정보를 제공하는 경우 HwScsiFindAdapter 루틴은 IoAddress와 동일한 AccessRanges 요소에서 이 매개 변수의 값을 가져옵니다. 그렇지 않으면 ScsiPortGetBusData 또는 미니포트 드라이버 제공 기본값에서 이 값을 반환할 수 있습니다. 어떤 경우든 드라이버는 반환된 매핑된 범위 외부의 하드웨어에 액세스해서는 안 됩니다.
[in] InIoSpace
TRUE 는 매핑할 범위가 I/O 공간에 있음을 나타내며 미니포트 드라이버는 이 범위의 매핑된 주소를 ScsiPort...에 전달합니다. HBA 와 통신할 Xxx 포트입니다. HwScsiFindAdapter 루틴은 IoAddress와 동일한 AccessRanges 요소에서 이 매개 변수의 값을 가져옵니다. 미니포트 드라이버는 InIoSpace 인수로 ScsiPortGetDeviceBase에 전달되기 전에 ACCESS_RANGE 형식 요소의 InMemorySpace 멤버 값을 반전해야 합니다. FALSE 는 매핑할 범위가 메모리 공간에 있음을 나타냅니다.
반환 값
지정된 범위를 IoAddress에서 NumberOfBytes로 성공적으로 매핑한 경우 ScsiPortGetDeviceBase는 지정된 IoAddress에 대해 매핑된 논리 기본 주소를 반환합니다. 지정된 범위를 매핑할 수 없는 경우 ScsiPortGetDeviceBase 는 NULL을 반환합니다.
설명
NT 기반 운영 체제 플랫폼에는 여러 유형의 I/O 버스와 동일한 유형의 여러 I/O 버스가 있을 수 있습니다. 또한 HAL은 I/O 공간을 일부 플랫폼의 메모리에 매핑할 수 있습니다.
따라서 미니포트 드라이버는 버스 상대 액세스 범위 주소를 사용하여 HBA와 통신할 수 없습니다. CISC 및 RISC 기반 컴퓨터에서 미니포트 드라이버 이식성을 유지하려면 HBA에 액세스하는 데 사용하는 주소를 ScsiPortGetDeviceBase로 변환해야 합니다.
모든 미니포트 드라이버는 ScsiPortGetDeviceBase에 의해 매핑된 시스템 공간 논리 범위 주소를 사용하여 HBA와 통신해야 합니다. ScsiPort에 대한 호출... 포트/Xxx 루틴 등록에는 이러한 매핑된 논리 주소가 필요합니다.
ScsiPortGetDeviceBase 는 미니포트 드라이버가 지원하는 HBA 수와 각 HBA에 필요한 액세스 범위 수에 따라 여러 번 호출할 수 있습니다. 매핑된 각 범위는 AccessRanges 배열의 ACCESS_RANGE 형식 요소에 지정된 버스 상대 디바이스 주소 범위에 해당합니다.
ScsiPortGetDeviceBase는 컨트롤 형식이 ScsiSetRunningConfig인 경우 미니포트 드라이버의 HwScsiFindAdapter 루틴 또는 HwScsiAdapterControl에서만 호출할 수 있습니다. 다른 미니포트 드라이버 루틴에서 호출하면 시스템 오류가 발생하거나 호출자에 대한 잘못된 작업이 발생합니다.
ScsiPortGetDeviceBase 호출에 대한 다음 지침을 따릅니다.
- HwScsiFindAdapter가 ScsiPortGetBusData에서 반환된 기본 버스 상대 액세스 범위 또는 값의 미니포트 드라이버 제공 집합을 사용하는 경우 ScsiPortGetDeviceBase를 호출하기 전에 ScsiPortValidateRange를 호출해야 합니다.
- HwScsiFindAdapter가 특정 HBA가 미니포트 드라이버에서 지원하는 HBA가 아니라고 판단하는 경우 ScsiPortFreeDeviceBase를 호출하여 해당 HBA와 통신하도록 설정한 매핑을 해제해야 합니다.
ScsiPortGetDeviceBase 는 SCSI_PHYSICAL_ADDRESS 사용하여 버스 상대 주소를 나타냅니다.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
SCSI_PHYSICAL_ADDRESS 형식은 SCSI 미니포트 드라이버가 물리적 주소 또는 버스 상대 주소를 나타내는 데 사용하는 운영 체제 독립적 데이터 형식입니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 데스크톱 |
머리글 | srb.h(Miniport.h, Scsi.h 포함) |
라이브러리 | Scsiport.lib |