2012-09-07 1 views
0

P2P BRIDGE의 경우 'mem'및 'preMem'은 pciConfigTopoShow()의 출력에 무엇입니까? MEM = 0xa0000000/0x9fffffff preMem = 여기 VxWorks의 pciConfigTopoShow() 출력에서 ​​"preMem"은 무엇입니까?

[1,0,0] [2,0,0] 베이스/제한 = P2P 브릿지 입력 ... 내 목표의 출력의 0x0000000080000000/0x00000000800fffff I/O = 0xe8000000/0xe7ffffff 상태 = 0x0010 (CAP DEVSEL = 0) 명령 = 0x0007 (IO_ENABLE MEM_ENABLE MASTER_ENABLE) [2,1,0] 내지 = P2P 브릿지 입력 [3,0,0] 기본/제한 : mem = 0xa0000000/0x9fffffff preMem = 0x0000000080000000/0x00000000800fffff IO = 0xe8000000/0xe7ffffff 상태 = 0x0010 (CAP DEVSEL = 0) 명령 = 0x0007 (IO_ENABLE MEM_ENABLE MASTER_ENABLE) [3,0,0] type = P2P BRIDGE ~ [4,0,0] 기본/제한 : MEM = 0xa0000000/0x9fffffff preMem = 0x80100000/0x800fffff I/O가 = 0000/0xffff가 상태 = 0x0010 (CAP DEVSEL = 0) 명령 = 0x0007 (IO_ENABLE MEM_ENABLE MASTER_ENABLE) prefetchable 64 비트 MEM 공간 BAR0 @ 0x80000000

답변

0

"mem"및 preMem "값은 여러 층의 함수 호출로 pciConfigTopoShow() 함수에서 생성됩니다. "mem"은 메모리 기반과 메모리 제한을 나타내는 Bridge에 매핑되는 일반 메모리 창을 "/"로 구분하여 표시합니다.

"preMem"은 프리 페치가 가능한 메모리 창을 지원하는 장치로,이 장치의 메모리 기준과 메모리 제한을 보여줍니다. 64 비트 시스템 인 경우이 값은 64 비트 수량으로 표시됩니다.

if (cmdReg & PCI_CMD_MEM_ENABLE) 

{ 

    pciConfigInWord(bus,device,function, 

        PCI_CFG_MEM_BASE, &memBase); 

    pciConfigInWord(bus,device,function, 

        PCI_CFG_MEM_LIMIT, &memLimit); 

    printf("\tbase/limit:\n"); 

    printf("\t mem= 0x%04x0000/0x%04xffff\n", 

       memBase & 0xfff0, memLimit | 0x000f); 



    pciConfigInWord(bus,device,function, 

        PCI_CFG_PRE_MEM_BASE, &memBase); 

    pciConfigInWord(bus,device,function, 

        PCI_CFG_PRE_MEM_LIMIT, &memLimit); 

    if ((memBase & 0x000f) == 0x0001) 

    { 

     /* 64-bit memory */ 

     pciConfigInLong(bus,device,function, 

         PCI_CFG_PRE_MEM_BASE_U, 

         &memBaseU); 

     pciConfigInLong(bus,device,function, 

         PCI_CFG_PRE_MEM_LIMIT_U, 

         &memLimitU); 

     printf("\t preMem=0x%08x%04x0000/" 

        "0x%08x%04xffff\n", 

         memBaseU, memBase & 0xfff0, 

         memLimitU, memLimit | 0x000f); 

    } 

    else 

     printf("\t preMem=0x%04x0000/0x%04xffff\n", 

        memBase & 0xfff0, memLimit | 0x000f); 

    } 
:

궁극적으로, 파일 WIND_BASE/대상/SRC/DRV/PCI/pciConfigShow.c에있는 pciConfigForeachShow() 함수는 다음 코드에서 질문에 표시된 출력을 생성