SCSI 미니포트 드라이버의 HwScsiDmaStarted 루틴

시스템 DMA 컨트롤러를 사용하는 HBA의 미니포트 드라이버에는 HwScsiDmaStarted 루틴이 있어야 합니다.

데이터 전송 작업의 경우 이러한 미니포트 드라이버는 ScsiPortIoMapTransfer를 호출하여 HBA별 데이터 및 전송을 요청하는 SRB에 대한 포인터를 전달하고 데이터를 전송할 버퍼의 논리적 주소 범위와 함께 전달해야 합니다.

ScsiPortIoMapTransfer에 전달된 논리적 주소 범위는 입력 SRB의 DataBufferDataTransferLength에 대한 매핑된 값이거나 이 범위의 적절한 하위 집합이어야 합니다. 대부분의 전송 요청에서 미니포트 드라이버 작성기는 입력 SRB에 지정된 모든 데이터를 단일 DMA 작업으로 전송할 수 있다고 가정할 수 있습니다.

특히, 미니포트 드라이버는 HBA가 애플리케이션 전용 지원을 제공하고 애플리케이션이 미니포트 드라이버에 직접 큰 전송 요청을 보내는 경우에만 지정된 SRB를 충족하기 위해 두 개 이상의 하위 DMA 전송 작업을 수행해야 할 수 있습니다. 그렇지 않으면 스토리지 클래스 드라이버가 대규모 전송 요청을 부분 전송 요청 집합으로 분할해야 하며, 각 요청은 HBA의 기능에 맞게 크기가 조정됩니다(클래스 드라이버 Storage 참조).

시스템 DMA 컨트롤러가 시스템 메모리와 HBA 간에 데이터를 전송할 준비가 되면 ScsiPortIoMapTransfer는 미니포트 드라이버의 HwScsiDmaStarted 루틴을 호출합니다. HwScsiDmaStarted는 전송 작업에 대해 HBA를 설정해야 합니다.

전송 작업이 완료되면 HBA가 사용자 모드 애플리케이션 지원 전용인 경우 미니포트 드라이버는 SRB를 사용하여 ScsiPortNotification을 호출하기 전에 ScsiPortFlushDma를 호출하거나 ScsiPortIoMapTransfer를 호출하여 애플리케이션 제공 버퍼의 하위 영역에 대해 DMA 컨트롤러를 다시 설정해야 합니다.

ScsiPortFlushDma 는 DMA 컨트롤러에 캐시된 나머지 데이터를 플러시합니다. 미니포트 드라이버의 HwScsiDmaStarted 루틴이 아직 호출되지 않은 경우에도 ScsiPortFlushDma를 호출하여 시스템 DMA 전송을 취소할 수 있습니다.

자세한 내용은 ScsiPortIoMapTransferScsiPortFlushDma 를 참조하세요.