DMDLL_PCIGetBaseResources

대상이 되는 하드웨어를 위해서 준비된 BaseAddress정보와 매핑된 가상주소정보를 리턴합니다


Description

int DMDLL_PCIGetBaseResources( 
        IN DMHANDLE             OpenedHandle,
        OUT int                Type[],
        OUT DMIICORE_RESOURCE    Resources,
        OUT PVOID                VirtualAddress[],
        OUT int                *pResourceCount
)

Parameters

    OpenedHandle
            작업중이던 디바이스 핸들, DMDLL_OpenDeviceForInterfaceDeviceStack()함수를 통해서 얻은 권한핸들이어야 합니다
    Type
            해당하는 리소스가 물리메모리인지 아니면 Port IO주소인지를 알려줍니다
            #define CmResourceTypePort        1   // ResType_IO (0x0002)
            #define CmResourceTypeMemory      3   // ResType_Mem (0x0001)
    Resources
            해당하는 PCI 디바이스에게 할당된 물리메모리, Port IO 주소에 대한 정보를 얻습니다
    VirtualAddress
            해당하는 PCI 디바이스에게 할당된 물리메모리와 매핑된 가상주소정보를 얻습니다
    pResourceCount
            얻고자 하는 리소스개수를 의미하며, 동시에 실제 존재하는 리소스개수가 리턴됩니다

Return Values

    return  int
            작업이 성공할 경우 DMSTAT_SUCCESS 리턴

Changelog


Examples

int Type[MAXRESOURCES];
    DMIICORE_RESOURCE Resources[MAXRESOURCES];
    PVOID VirtualAddress[MAXRESOURCES];
    int ResourceCount = MAXRESOURCES;

    dmStatus = DMDLL_PCIGetBaseResources(
                                    DMHandle, Type, Resources, VirtualAddress, &ResourceCount);
    if (dmStatus != DMSTAT_SUCCESS)
        return;

    // ResourceCount 변수는 현재 PCI하드웨어가 가진 리소스의 개수를 담고 있습니다

    for (int count = 0; count < ResourceCount; count++)
    {
        if (Type[count] == CmResourceTypePort)
        {
            // Port IO Type의 리소스입니다
        mTempString.Format(L"0x%I64X",
                                 Resources[count].u.Port.Start.QuadPart);
        mTempString.Format(L"0x%8X",
                                Resources[count].u.Port.Length);
        }
        else if (Type[count] == CmResourceTypeMemory)
        {
            // Memory Type의 리소스입니다
            mTempString.Format(L"0x%I64X",
                                 Resources[count].u.Memory.Start.QuadPart);
            mTempString.Format(L"0x%8X", 
                                Resources[count].u.Memory.Length);
            mTempString.Format(L"0x%8X", VirtualAddress[count]);
        }
    }

results matching ""

    No results matching ""