DEVICE_DESCRIPTION 구조체(wdm.h)

DEVICE_DESCRIPTION 구조는 드라이버가 DMA 어댑터를 요청하는 물리적 디바이스의 특성을 설명합니다.

구문

typedef struct _DEVICE_DESCRIPTION {
  ULONG            Version;
  BOOLEAN          Master;
  BOOLEAN          ScatterGather;
  BOOLEAN          DemandMode;
  BOOLEAN          AutoInitialize;
  BOOLEAN          Dma32BitAddresses;
  BOOLEAN          IgnoreCount;
  BOOLEAN          Reserved1;
  BOOLEAN          Dma64BitAddresses;
  ULONG            BusNumber;
  ULONG            DmaChannel;
  INTERFACE_TYPE   InterfaceType;
  DMA_WIDTH        DmaWidth;
  DMA_SPEED        DmaSpeed;
  ULONG            MaximumLength;
  ULONG            DmaPort;
  ULONG            DmaAddressWidth;
  ULONG            DmaControllerInstance;
  ULONG            DmaRequestLine;
  PHYSICAL_ADDRESS DeviceAddress;
} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;

멤버

Version

이 구조체의 버전입니다. IoGetDmaAdapter 루틴에 전달되는 DEVICE_DESCRIPTION 구조체의 Version 멤버는 이 루틴에서 반환되는 DMA_ADAPTER 구조체의 버전을 결정합니다. 다음은 Version 멤버 및 해당 DMA_ADAPTER 버전의 가능한 값 목록입니다.

DEVICE_DESCRIPTION_VERSION

버전 = 이 DEVICE_DESCRIPTION_VERSION경우 IoGetDmaAdapterIgnoreCount 멤버를 무시하고 DMA_ADAPTER 구조의 버전 1을 반환합니다.

DEVICE_DESCRIPTION_VERSION1

버전 = 이 DEVICE_DESCRIPTION_VERSION1 경우 IoGetDmaAdapterIgnoreCount 멤버를 사용하고 DMA_ADAPTER 구조의 버전 1을 반환합니다.

DEVICE_DESCRIPTION_VERSION2

버전 = 이 DEVICE_DESCRIPTION_VERSION2 경우 IoGetDmaAdapterIgnoreCount 멤버를 사용하고 DMA_ADAPTER 구조의 버전 2를 반환합니다. 버전 2는 Windows XP부터 사용할 수 있습니다.

DEVICE_DESCRIPTION_VERSION3

버전 = 이 DEVICE_DESCRIPTION_VERSION3 경우 IoGetDmaAdapterIgnoreCount 멤버를 사용하고 DMA_ADAPTER 구조의 버전 3을 반환합니다. 버전 3은 Windows 8 시작해서 사용할 수 있습니다.

Master

디바이스가 버스 master DMA 디바이스인지 여부입니다. 디바이스가 버스 master DMA 디바이스인 경우 TRUE로 설정합니다. 하위 DMA 디바이스인 경우 FALSE 로 설정합니다.

ScatterGather

버스 master DMA 디바이스의 경우 이 멤버는 디바이스가 분산/수집 DMA를 지원하는지 여부를 나타냅니다. 디바이스가 분산/수집 DMA를 수행할 수 있는 경우 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

하위 DMA 디바이스의 경우 ScatterGather 값이 사용되지 않습니다. 대신 IoGetDmaAdapter 는 하위 DMA 디바이스의 분산/수집 기능이 디바이스가 연결된 기본 시스템 DMA 컨트롤러와 동일하다고 가정합니다.

DemandMode

이 멤버는 버전 이 DEVICE_DESCRIPTION_VERSION2 경우에만 사용됩니다.

하위 DMA 디바이스의 경우 이 멤버는 시스템 DMA 컨트롤러의 수요 모드를 사용할지 여부를 나타냅니다. 수요 모드를 사용하려면 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

버스 master DMA 디바이스의 경우 DemandMode 값이 사용되지 않습니다.

버전이 DEVICE_DESCRIPTION_VERSION, DEVICE_DESCRIPTION_VERSION1 또는 DEVICE_DESCRIPTION_VERSION3 경우 DemandMode 값이 사용되지 않습니다.

AutoInitialize

하위 DMA 디바이스의 경우 이 멤버는 시스템 DMA 컨트롤러의 자동 초기화 모드를 사용할지 여부를 나타냅니다. 자동 초기화 모드를 사용하려면 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

버스 master DMA 디바이스의 경우 AutoInitialize 값이 사용되지 않습니다.

Dma32BitAddresses

이 멤버는 버전 이 DEVICE_DESCRIPTION_VERSION, DEVICE_DESCRIPTION_VERSION1 또는 DEVICE_DESCRIPTION_VERSION2 경우에만 사용됩니다.

Dma32BitAddresses는 디바이스가 DMA 작업에 전체 32비트 주소를 사용할 수 있는지 여부를 지정합니다. 디바이스가 32비트 주소를 지원하는 경우 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

Version = DEVICE_DESCRIPTION_VERSION3 경우 Dma32BitAddresses 값이 사용되지 않습니다.

IgnoreCount

DMA 컨트롤러의 전송 카운터를 무시할지 여부입니다. 이 플랫폼의 DMA 컨트롤러가 정확한 전송 카운터를 유지 관리하지 않으므로 해결 방법이 필요한 경우 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

Version = DEVICE_DESCRIPTION_VERSION IgnoreCount 값은 사용되지 않습니다.

자세한 내용은 주의 섹션을 참조하세요.

Reserved1

시스템에서 사용하도록 예약되었습니다. FALSE여야 합니다.

Dma64BitAddresses

이 멤버는 버전 이 DEVICE_DESCRIPTION_VERSION, DEVICE_DESCRIPTION_VERSION1 또는 DEVICE_DESCRIPTION_VERSION2 경우에만 사용됩니다.

Dma64BitAddresses는 디바이스가 DMA 작업에 전체 64비트 주소를 사용할 수 있는지 여부를 지정합니다. 디바이스가 64비트 주소를 지원하는 경우 TRUE 로 설정합니다. 그렇지 않으면 이 멤버를 FALSE로 설정합니다.

Version = DEVICE_DESCRIPTION_VERSION3 경우 Dma64BitAddresses 값이 사용되지 않습니다.

BusNumber

I/O 버스에 대한 시스템 할당 버스 번호입니다. 이 멤버는 WDM 드라이버에서 사용되지 않습니다.

DmaChannel

하위 디바이스가 할당된 DMA 채널의 수입니다. 디바이스 드라이버는 디바이스를 시작하는 IRP_MN_START_DEVICE 요청에서 수신하는 리소스 목록에서 이 채널 번호를 가져옵니다. 이 번호에 대한 자세한 내용은 CM_PARTIAL_RESOURCE_DESCRIPTORDma.Channel 멤버에 대한 설명을 참조하세요.

InterfaceType

DMA에 사용할 I/O 버스의 인터페이스 형식입니다. 이 멤버를 인터페이스 형식을 나타내는 INTERFACE_TYPE 열거형 값으로 설정합니다. 자세한 내용은 주의 섹션을 참조하세요.

DmaWidth

종속 DMA 디바이스의 경우 이 멤버는 시스템 DMA 컨트롤러에서 전송할 DMA 데이터 너비를 지정합니다. 가능한 값은 Width8Bits, Width16Bits, Width32BitsWidth64Bits입니다.

버스 master DMA 디바이스의 경우 DmaWidth 값이 사용되지 않습니다.

DmaSpeed

이 멤버는 버전 이 DEVICE_DESCRIPTION_VERSION, DEVICE_DESCRIPTION_VERSION1 또는 DEVICE_DESCRIPTION_VERSION2 경우에만 사용됩니다.

종속 DMA 디바이스의 경우 이 멤버는 시스템 DMA에 대해 호환, TypeA, TypeB, TypeC 또는 TypeF 속도 중 하나를 지정합니다.

버스 master DMA 디바이스의 경우 DmaSpeed 값이 사용되지 않습니다.

Version = DEVICE_DESCRIPTION_VERSION3 경우 DmaSpeed 값이 사용되지 않습니다.

MaximumLength

할당된 어댑터 개체를 사용하는 DMA 작업에서 디바이스가 전송할 수 있는 최대 바이트 수입니다.

DmaPort

마이크로채널 형식 버스 포트 번호입니다. 이 매개 변수는 사용되지 않지만 레거시 드라이버와의 호환성을 위해 구조에 유지됩니다.

DmaAddressWidth

이 멤버는 Version = DEVICE_DESCRIPTION_VERSION3 경우에만 사용됩니다.

버스 master DMA 디바이스의 경우 DmaAddressWidth는 DMA 주소의 너비를 비트 단위로 지정합니다. DmaAddressWidth 값은 0이 아니어야 하며 64를 초과하면 안 됩니다. 메모리 주소 너비가 DMA 주소 너비보다 큰 경우 DMA 컨트롤러의 주소 범위를 벗어나는 메모리 영역에 액세스하려면 맵 레지스터가 필요합니다.

하위 DMA 디바이스의 경우 DmaAddressWidth 값이 사용되지 않습니다. 대신 IoGetDmaAdapter 는 하위 DMA 디바이스의 주소 너비가 디바이스가 연결된 기본 시스템 DMA 컨트롤러와 동일하다고 가정합니다.

DmaControllerInstance

사용되지 않습니다.

DmaRequestLine

이 멤버는 Version = DEVICE_DESCRIPTION_VERSION3 경우에만 사용됩니다.

하위 DMA 디바이스의 경우 DmaRequestLine 은 디바이스가 연결된 DMA 컨트롤러의 요청 줄을 지정합니다. 디바이스 드라이버는 디바이스를 시작하는 IRP_MN_START_DEVICE 요청에서 수신하는 리소스 목록에서 이 요청 줄의 수를 가져옵니다. 요청 줄 번호에 대한 자세한 내용은 CM_PARTIAL_RESOURCE_DESCRIPTORu.DmaV3.RequestLine 멤버에 대한 설명을 참조하세요.

버스 master DMA 디바이스의 경우 DmaRequestLine 값이 사용되지 않습니다.

DeviceAddress

이 멤버는 Version = DEVICE_DESCRIPTION_VERSION3 경우에만 사용됩니다.

하위 DMA 디바이스의 경우 DeviceAddress 는 DMA 전송의 원본 또는 대상으로 사용되는 디바이스의 데이터 레지스터의 메모리 매핑 주소입니다. 이 데이터 레지스터는 디바이스 시작 주소의 알려진 디바이스별 오프셋에 있습니다. 이 레지스터의 너비는 DmaWidth 멤버에 의해 지정됩니다. 디바이스 드라이버는 디바이스를 시작하는 IRP_MN_START_DEVICE 요청에서 수신하는 리소스 목록에서 디바이스 시작 주소를 가져옵니다. 이 주소에 대한 자세한 내용은 CM_PARTIAL_RESOURCE_DESCRIPTORu.Memory.Start 멤버에 대한 설명을 참조하세요.

버스 master DMA 디바이스의 경우 DeviceAddress 멤버가 사용되지 않습니다.

설명

DMA를 사용하여 데이터를 전송하는 디바이스의 드라이버는 DEVICE_DESCRIPTION 구조를 사용하여 디바이스에 대한 정보를 IoGetDmaAdapter 루틴에 전달합니다. 드라이버는 이 루틴을 호출하여 PDO(물리적 디바이스 개체)에 대한 어댑터 개체를 요청합니다. 이 PDO는 DMA에 사용할 I/O 버스에 대한 디바이스의 물리적 연결을 나타냅니다. 자세한 내용은 어댑터 개체 가져오기를 참조하세요.

DMA 컨트롤러에 대한 리소스를 할당하기 위해 I/O 관리자는 컨트롤러에 대한 정보가 필요하지만 드라이버에서만 이 정보 중 일부를 가져올 수 있습니다. 예를 들어 버스 master 디바이스의 드라이버는 디바이스가 분산/수집 DMA를 지원하는지 또는 전체 32비트 주소를 사용하는지 여부를 알고 있습니다. 또는 하위 디바이스의 드라이버는 디바이스를 시작하는 IRP_MN_START_DEVICE 요청에서 드라이버가 수신하는 리소스 목록에서 DMA 채널 번호를 확인할 수 있습니다. 드라이버는 DEVICE_DESCRIPTION 구조를 사용하여 이 정보를 I/O 관리자에게 전달합니다.

IoGetDmaAdapter를 호출하기 전에 드라이버는 먼저 전체 DEVICE_DESCRIPTION 구조를 0으로 초기화한 다음 선택한 멤버를 입력하여 디바이스를 설명해야 합니다.

InterfaceType 멤버는 DMA에 사용할 버스 인터페이스의 형식을 지정합니다. InterfaceType을InterfaceTypeUndefined로 설정하면 IoGetDmaAdapter가 PDO를 쿼리하여 디바이스에 대한 올바른 인터페이스 유형을 확인합니다. 또는 Internal, Isa, Eisa 또는 PCIBus와 같은 명시적 인터페이스 형식을 지정할 수 있습니다. 자세한 내용은 INTERFACE_TYPE 지원되는 인터페이스 형식 목록을 참조 하세요.

ScatterGather 멤버가 TRUE로 설정되고 InterfaceType 멤버가 PCIBus로 설정된 경우 Dma32BitAddresses 멤버는 무시되고 IoGetDmaAdapter는 디바이스가 32비트 DMA 주소를 지원한다고 가정합니다.

Dma64BitAddresses 멤버가 TRUE로 설정된 경우 Dma32BitAddresses 멤버는 무시되고 IoGetDmaAdapter는 디바이스가 64비트 DMA 주소를 지원한다고 가정합니다.

DMA 컨트롤러 하드웨어가 정확한 전송 횟수를 안정적으로 유지할 수 없음을 나타내려면 IgnoreCountTRUE로 설정하고 버전을 DEVICE_DESCRIPTION_VERSION 이외의 값으로 설정합니다. 이러한 DMA 컨트롤러가 있는 플랫폼에서 운영 체제는 DMA 전송 카운터를 무시하지만 DMA 작업 중에 데이터 무결성을 유지하기 위해 특별한 예방 조치를 취해야 합니다. 일반적으로 부족한 DMA 컨트롤러를 보정하기 위해 해결 방법을 사용하면 DMA 전송 속도가 저하됩니다.

드라이버는 컴퓨터의 ACPI 펌웨어가 지원하는 경우에만 TypeFDmaSpeed 값으로 지정해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 지원됩니다.
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)

추가 정보

CM_PARTIAL_RESOURCE_DESCRIPTOR

CM_RESOURCE_LIST

DMA_ADAPTER

INTERFACE_TYPE

IRP_MN_START_DEVICE

IoGetDmaAdapter