// d3dkmddi.h
typedef struct _DXGK_ADL {
UINT32 PageCount;
DXGK_ADL_FLAGS Flags;
union {
DXGK_PAGE_NUMBER BasePageNumber;
const DXGK_PAGE_NUMBER *Pages;
};
} DXGK_ADL;
View the official Windows Driver Kit DDI referenceNo description available.
The DXGK_ADL structure is an address descriptor list (ADL), which used to describe an array of pages that can be either physical or logical.
PageCountThe number of pages that the ADL represents.
FlagsA DXGK_ADL_FLAGS structure that specifies flags for the ADL.
BasePageNumberUsed for contiguous ADLs. When Flags.Contiguous is set, BasePageNumber is the initial page number of a contiguous range of memory and PageCount is the number of pages that it represents. For example, if PageCount=3 and BasePageNumber=100, then DXGK_ADL represents the pages 100, 101, and 102 (address range 0x100000-0x102000).
PagesUsed for non-contiguous ADLs. When Flags.Contiguous is not set, Pages points to an array of exactly PageCount pages. The pages in the array are not guaranteed to be contiguous.
Pages is of type DXGK_PAGE_NUMBER, which is guaranteed to be the same size as a PFN_NUMBER. This array can be substituted in place of an MDL's PFN array when programming the hardware.
Dxgkernel provides ADLs in order to support both physical and logical access modes, and be able to switch between the two modes seamlessly at runtime. An ADL is very similar to an MDL, but describes an array of pages that can be either physical or logical. Because these pages can be logical pages, the addresses described by an ADL cannot be mapped to a virtual address for direct CPU access.
For more information, see IOMMU DMA remapping.