다음을 통해 공유


ScsiPortGetDeviceBase 함수(srb.h)

ScsiPortGetDeviceBase 루틴은 HBA와 통신하는 데 사용할 수 있는 매핑된 논리적 기본 주소를 반환합니다. 모든 미니포트 드라이버는 매핑된 논리적 액세스 범위 주소를 ScsiPort에 전달해야 합니다. 포트XxxScsiPort.. Xxx 루틴을 등록하여 HBA와 통신합니다.

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

구문

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에 대해 매핑된 논리 기본 주소를 반환합니다. 지정된 범위를 매핑할 수 없는 경우 ScsiPortGetDeviceBaseNULL을 반환합니다.

설명

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 호출에 대한 다음 지침을 따릅니다.

  • HwScsiFindAdapterScsiPortGetBusData에서 반환된 기본 버스 상대 액세스 범위 또는 값의 미니포트 드라이버 제공 집합을 사용하는 경우 ScsiPortGetDeviceBase를 호출하기 전에 ScsiPortValidateRange를 호출해야 합니다.
  • HwScsiFindAdapter가 특정 HBA가 미니포트 드라이버에서 지원하는 HBA가 아니라고 판단하는 경우 ScsiPortFreeDeviceBase를 호출하여 해당 HBA와 통신하도록 설정한 매핑을 해제해야 합니다.
ScsiPortGetDeviceBase에서 반환된 논리적 주소는 하드웨어에 대한 모든 후속 참조에 사용해야 하지만 PORT_CONFIGURATION_INFORMATION AccessRanges 사양에 추가해서는 안 됩니다. 미니포트 드라이버 작성기는 ScsiPortGetDeviceBase에서 반환된 논리 기본 주소에서 사용되는 비트 수를 가정하지 않아야 합니다.

ScsiPortGetDeviceBaseSCSI_PHYSICAL_ADDRESS 사용하여 버스 상대 주소를 나타냅니다.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

SCSI_PHYSICAL_ADDRESS 형식은 SCSI 미니포트 드라이버가 물리적 주소 또는 버스 상대 주소를 나타내는 데 사용하는 운영 체제 독립적 데이터 형식입니다.

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

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 srb.h(Miniport.h, Scsi.h 포함)
라이브러리 Scsiport.lib

추가 정보

ACCESS_RANGE

HwScsiFindAdapter

SCSI(PORT_CONFIGURATION_INFORMATION)

ScsiPortFreeDeviceBase

ScsiPortGetBusData

ScsiPortValidateRange