免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2113 | 回复: 0
打印 上一主题 下一主题

PCI控制器配置实例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览
1.PCI interface scheme
The MPC8321 has one 32bit PCI BUS. The bus frequency runs up to 66MHz clock. In our design the MPC8321 is
operates as a HOST & Arbiter on the BUS. Because the BCM56228 only can run under 50MHz, so the PCI frequency
runs under 33MHz.
2.寄存器定义
  1. #define M83XXPCI_LAWBAR0 0x60
  2. #define M83XXPCI_LAWAR0 0x64
  3. #define M83XXPCI_LAWBAR1 0x68
  4. #define M83XXPCI_LAWAR1 0x6C

  5. #define M83XXPCI_LAWAR_ENABLE 0x80000000

  6. /* LAWAR SIZE Settings */
  7. #define M83XXPCI_LAWAR_SIZE_4KB 0x0000000B
  8. #define M83XXPCI_LAWAR_SIZE_8KB 0x0000000C
  9. #define M83XXPCI_LAWAR_SIZE_16KB 0x0000000D
  10. #define M83XXPCI_LAWAR_SIZE_32KB 0x0000000E
  11. #define M83XXPCI_LAWAR_SIZE_64KB 0x0000000F
  12. #define M83XXPCI_LAWAR_SIZE_128KB 0x00000010
  13. #define M83XXPCI_LAWAR_SIZE_256KB 0x00000011
  14. #define M83XXPCI_LAWAR_SIZE_512KB 0x00000012
  15. #define M83XXPCI_LAWAR_SIZE_1MB 0x00000013
  16. #define M83XXPCI_LAWAR_SIZE_2MB 0x00000014
  17. #define M83XXPCI_LAWAR_SIZE_4MB 0x00000015
  18. #define M83XXPCI_LAWAR_SIZE_8MB 0x00000016
  19. #define M83XXPCI_LAWAR_SIZE_16MB 0x00000017
  20. #define M83XXPCI_LAWAR_SIZE_32MB 0x00000018
  21. #define M83XXPCI_LAWAR_SIZE_64MB 0x00000019
  22. #define M83XXPCI_LAWAR_SIZE_128MB 0x0000001A
  23. #define M83XXPCI_LAWAR_SIZE_256MB 0x0000001B
  24. #define M83XXPCI_LAWAR_SIZE_512MB 0x0000001C
  25. #define M83XXPCI_LAWAR_SIZE_1GB 0x0000001D
  26. #define M83XXPCI_LAWAR_SIZE_2GB 0x0000001E


  27. #ifndef PCI_MSTR_MEM_BUS
  28. #define PCI_MSTR_MEM_BUS 0x40000000 /* align on 512 MB */
  29. #endif


  30. /* static file scope locals */

  31. #define COMMAND_REGISTER_OFFSET 0x4
  32. #define COMMAND_REGISTER_WIDTH 0x2
  33. #define BRIDGE_BAR0_OFFSET 0x10
  34. #define BRIDGE_BAR0_WIDTH 0x4

  35. /* Control and Status registers */
  36. #define M83XXPCI_ESR_REG    0x500 /* Error Status Register */
  37. #define M83XXPCI_GCR_REG    0x520 /* General Control Register */
  38. #define M83XXPCI_ECR_REG    0x524    /* Error Control Register */
  39. #define M83XXPCI_GSR_REG    0x528    /* General Status Register */


  40. /* TBD ALL the registers for PCI Bridge */
  41. /* configuration space reg and int ack */
  42. #define M83XXPCI_CONF_ADDR 0x300
  43. #define M83XXPCI_CONF_DATA 0x304

  44. /* Outbound translation and base address registers */
  45. #define M83XXPCI_OB_TRANS_ADRS_REG0     0x400
  46. #define M83XXPCI_OB_BASE_ADRS_REG0     0x408
  47. #define M83XXPCI_OB_TRANS_ADRS_REG1     0x418
  48. #define M83XXPCI_OB_BASE_ADRS_REG1     0x420
  49. #define M83XXPCI_OB_TRANS_ADRS_REG2     0x430
  50. #define M83XXPCI_OB_BASE_ADRS_REG2     0x438
  51. #define M83XXPCI_OB_TRANS_ADRS_REG3     0x448
  52. #define M83XXPCI_OB_BASE_ADRS_REG3     0x450
  53. #define M83XXPCI_OB_TRANS_ADRS_REG4     0x460
  54. #define M83XXPCI_OB_BASE_ADRS_REG4     0x468

  55. /* Outbound attributes register definitions */
  56. #define M83XXPCI_OB_ATTR_REG0 0x410
  57. #define M83XXPCI_OB_ATTR_REG1 0x428
  58. #define M83XXPCI_OB_ATTR_REG2 0x440
  59. #define M83XXPCI_OB_ATTR_REG3 0x458
  60. #define M83XXPCI_OB_ATTR_REG4 0x470

  61. /* Outbound Comparison mask register defines */

  62. #define M83XXPCI_OB_WINDOW_ENABLE_BIT 0x80000000
  63. #define M83XXPCI_OB_ATTR_IO_BIT 0x40000000
  64. #define M83XXPCI_OB_ATTR_SE_BIT 0x20000000
  65. #define M83XXPCI_OB_ATTR_WS_4K 0x000FFFFF
  66. #define M83XXPCI_OB_ATTR_WS_8K 0x000FFFFE
  67. #define M83XXPCI_OB_ATTR_WS_16K 0x000FFFFC
  68. #define M83XXPCI_OB_ATTR_WS_32K 0x000FFFF8
  69. #define M83XXPCI_OB_ATTR_WS_64K 0x000FFFF0
  70. #define M83XXPCI_OB_ATTR_WS_128K 0x000FFFE0
  71. #define M83XXPCI_OB_ATTR_WS_256K 0x000FFFC0
  72. #define M83XXPCI_OB_ATTR_WS_512K 0x000FFF80
  73. #define M83XXPCI_OB_ATTR_WS_1M 0x000FFF00
  74. #define M83XXPCI_OB_ATTR_WS_2M 0x000FFE00
  75. #define M83XXPCI_OB_ATTR_WS_4M 0x000FFC00
  76. #define M83XXPCI_OB_ATTR_WS_8M 0x000FF800
  77. #define M83XXPCI_OB_ATTR_WS_16M 0x000FF000
  78. #define M83XXPCI_OB_ATTR_WS_32M 0x000FE000
  79. #define M83XXPCI_OB_ATTR_WS_64M 0x000FC000
  80. #define M83XXPCI_OB_ATTR_WS_128M 0x000F8000
  81. #define M83XXPCI_OB_ATTR_WS_256M 0x000F0000
  82. #define M83XXPCI_OB_ATTR_WS_512M 0x000E0000
  83. #define M83XXPCI_OB_ATTR_WS_1G 0x000C0000
  84. #define M83XXPCI_OB_ATTR_WS_2G 0x00080000
  85. #define M83XXPCI_OB_ATTR_WS_4G 0x00000000



  86. /* Inbound translation and base address registers */
  87. #define M83XXPCI_IB_TRANS_ADRS_REG0          0x568
  88. #define M83XXPCI_IB_BASE_ADRS_REG0         0x570
  89. #define M83XXPCI_IB_ATTR_REG0 0x578
  90. #define M83XXPCI_IB_TRANS_ADRS_REG1          0x550
  91. #define M83XXPCI_IB_BASE_ADRS_REG1     0x558     
  92. #define M83XXPCI_IB_ATTR_REG1 0x560
  93. #define M83XXPCI_IB_TRANS_ADRS_REG2          0x538
  94. #define M83XXPCI_IB_BASE_ADRS_REG2         0x540
  95. #define M83XXPCI_IB_ATTR_REG2 0x548


  96. /* Inbound Window Attribute register defines */

  97. #define M83XXPCI_IB_WINDOW_ENABLE_BIT 0x80000000
  98. #define M83XXPCI_IB_ATTR_PREFETCHABLE 0x20000000
  99. #define M83XXPCI_IB_ATTR_RTT_READ_NO_SNOOP 0x00040000
  100. #define M83XXPCI_IB_ATTR_RTT_READ_SNOOP 0x00050000
  101. #define M83XXPCI_IB_ATTR_RTT_WRITE_NO_SNOOP 0x00004000
  102. #define M83XXPCI_IB_ATTR_RTT_WRITE_SNOOP 0x00005000
  103. #define M83XXPCI_IB_ATTR_IWS_4K 0x0000000B
  104. #define M83XXPCI_IB_ATTR_IWS_8K 0x0000000C
  105. #define M83XXPCI_IB_ATTR_IWS_16K 0x0000000D
  106. #define M83XXPCI_IB_ATTR_IWS_32K 0x0000000E
  107. #define M83XXPCI_IB_ATTR_IWS_64K 0x0000000F
  108. #define M83XXPCI_IB_ATTR_IWS_128K 0x00000010
  109. #define M83XXPCI_IB_ATTR_IWS_256K 0x00000011
  110. #define M83XXPCI_IB_ATTR_IWS_512K 0x00000012
  111. #define M83XXPCI_IB_ATTR_IWS_1M 0x00000013
  112. #define M83XXPCI_IB_ATTR_IWS_2M 0x00000014
  113. #define M83XXPCI_IB_ATTR_IWS_4M 0x00000015
  114. #define M83XXPCI_IB_ATTR_IWS_8M 0x00000016
  115. #define M83XXPCI_IB_ATTR_IWS_16M 0x00000017
  116. #define M83XXPCI_IB_ATTR_IWS_32M 0x00000018
  117. #define M83XXPCI_IB_ATTR_IWS_64M 0x00000019
  118. #define M83XXPCI_IB_ATTR_IWS_128M 0x0000001A
  119. #define M83XXPCI_IB_ATTR_IWS_256M 0x0000001B
  120. #define M83XXPCI_IB_ATTR_IWS_512M 0x0000001C
  121. #define M83XXPCI_IB_ATTR_IWS_1G 0x0000001D
  122. #define M83XXPCI_IB_ATTR_IWS_2G 0x0000001E

  123. /* Encoding direction defines */
  124. #define M83XXPCI_IN_BOUND    0
  125. #define M83XXPCI_OUT_BOUND 1


  126. #define PCI_SNOOP_ENABLE 0x40000000
  127. #define PCI_PREFETCHABLE 0x20000000

  128. /* PCI error Registers */

  129. /* Comand status register defines */
  130. #define BUS_MASTER_ENABLE_BIT 0x4
  131. #define MEMORY_SPACE_ACCESS_ENABLE_BIT 0x2
3.核心数据结构
  1. typedef struct m83xxPciDrvCtrl
  2.     {
  3.     VXB_DEVICE_ID    pInst;
  4.     void *    handle;
  5.     UINT32    magicNumber1;
  6.     UINT32    magicNumber2;
  7.     int pciMaxBus;    /* Max number of sub-busses */
  8.     
  9.     void * mem32Addr;
  10.     UINT32 mem32Size;
  11.     void * memIo32Addr;
  12.     UINT32 memIo32Size;
  13.     void * io32Addr;
  14.     UINT32 io32Size;

  15.     void *    pimmrBase;
  16.     void *    mstrMemBus;
  17.     void *    lclMemAddr;
  18.     UINT32    lclMemMapSize;

  19.     UINT32 tgtIf;
  20.     UINT32 owAttrMem;
  21.     UINT32 owAttrMemIo;
  22.     UINT32 owAttrIo;
  23.     UINT32 iwAttr;
  24.     UINT32 singleLawBar;
  25.     UINT32 singleLawBarSize;
  26.     UINT32 pciExpressHost;
  27.     UINT32 autoConfig;
  28.     UINT32* lawbar; /* LAWBAR address */
  29.     UINT32* lawar; /* LAWAR address*/
  30.     UINT32 lawarAttr; /* LAWAR attributes */
  31.     BOOL    initDone;

  32.     struct vxbPciConfig *pPciConfig;
  33.     struct vxbPciInt *pIntInfo;
  34.     struct hcfDevice * pHcf;
  35.     } M83XXPCI_DRV_CTRL;
4.配置空间寄存器的读写
  1. .
  2. LOCAL STATUS m83xxPciMethodCfgRead
  3.     (
  4.     VXB_DEVICE_ID pInst,    /* device info */
  5.     UINT8     busNo,    /* bus number */
  6.     UINT8     deviceNo,    /* device number */
  7.     UINT8     funcNo,    /* function number */
  8.     UINT32     offset,    /* offset into the configuration space */
  9.     UINT32     width,    /* width to be read */
  10.     void *     pData    /* data buffer read from the offset */
  11.     )
  12.     {
  13.     struct m83xxPciDrvCtrl *    pDrvCtrl;
  14.     int                key;
  15.     STATUS            retStat = OK;

  16.     if ((busNo == 0) && (deviceNo == 12))
  17.         return (ERROR);

  18.     pDrvCtrl = pInst->pDrvCtrl;

  19.     key = intCpuLock ();

  20.     switch (width)
  21.         {
  22.         case 1: /* byte */
  23.             pciOutLong (pInst,M83XXPCI_CONF_ADDR,
  24.                         vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  25.                         (offset & 0xfc) | 0x80000000);

  26.             *(UINT8 *)pData = pciInByte (pInst,
  27.                      M83XXPCI_CONF_DATA + (offset & 0x3));

  28.             break;

  29.         case 2: /* word */
  30.             pciOutLong (pInst,M83XXPCI_CONF_ADDR,
  31.                         vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  32.                         (offset & 0xfc) | 0x80000000);

  33.             *(UINT16 *)pData = pciInWord (pInst,
  34.                      M83XXPCI_CONF_DATA + (offset & 0x2));

  35.             break;

  36.         case 4: /* long */
  37.             pciOutLong (pInst,M83XXPCI_CONF_ADDR,
  38.                         vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  39.                         (offset & 0xfc) | 0x80000000);

  40.             *(UINT32 *)pData = pciInLong (pInst, M83XXPCI_CONF_DATA);

  41.             break;

  42.         default:
  43.             retStat = ERROR;

  44.             break;
  45.         }

  46.     intCpuUnlock (key);

  47.     return (retStat);
  48.     }

  49. .
  50. LOCAL STATUS m83xxPciMethodCfgWrite
  51.     (
  52.     VXB_DEVICE_ID pInst,    /* device info */
  53.     UINT8     busNo,    /* bus number */
  54.     UINT8     deviceNo,    /* device number */
  55.     UINT8     funcNo,    /* function number */
  56.     UINT32     offset,    /* offset into the configuration space */
  57.     UINT32     width,    /* width to be read */
  58.     void *     pData    /* data buffer write to the offset */
  59.     )
  60.     {
  61.     struct m83xxPciDrvCtrl *    pDrvCtrl;
  62.     int                key;
  63.     STATUS            retStat = OK;

  64.     if ((busNo == 0) && (deviceNo == 12))
  65.         return (ERROR);

  66.     pDrvCtrl = pInst->pDrvCtrl;

  67.     key = intCpuLock ();

  68.     switch (width)
  69.         {
  70.         case 1: /* byte */
  71.             pciOutLong (pInst, M83XXPCI_CONF_ADDR,
  72.                         vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  73.                         (offset & 0xfc) | 0x80000000);

  74.             pciOutByte (pInst, (M83XXPCI_CONF_DATA + (offset & 0x3)),
  75.             *(UINT8*)pData);

  76.             break;

  77.         case 2: /* word */
  78.             pciOutLong (pInst, M83XXPCI_CONF_ADDR,
  79.                           vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  80.                           (offset & 0xfc) | 0x80000000);

  81.             pciOutWord (pInst, (M83XXPCI_CONF_DATA + (offset & 0x2)),
  82.             *(UINT16*)pData);

  83.             break;

  84.         case 4: /* long */
  85.             pciOutLong (pInst,M83XXPCI_CONF_ADDR,
  86.                           vxbPciConfigBdfPack (busNo, deviceNo, funcNo) |
  87.                           (offset & 0xfc) | 0x80000000);

  88.             pciOutLong (pInst, M83XXPCI_CONF_DATA, *(UINT32*)pData);

  89.             break;

  90.         default:
  91.      retStat = ERROR;

  92.      break;
  93.         }

  94.     intCpuUnlock (key);

  95.     return (retStat);
  96.     }
5.PCI bridge 初始化
  1. LOCAL STATUS m83xxPciBridgeInit(VXB_DEVICE_ID pInst)
  2.     {
  3.     UINT16 tempWord;
  4.     UINT32 tempLong;
  5.     struct m83xxPciDrvCtrl * pDrvCtrl;
  6. #ifndef    VXB_LEGACY_ACCESS
  7.     PCI_HARDWARE pciDev;
  8.     PCI_HARDWARE * pPciDev = (PCI_HARDWARE *) &pciDev;
  9.     pPciDev->pciBus = 0;
  10.     pPciDev->pciDev = 0;
  11.     pPciDev->pciFunc = 0;
  12. #endif    /* !VXB_LEGACY_ACCESS */

  13.     pDrvCtrl = pInst->pDrvCtrl;

  14.     if(isColdBoot())
  15.     {
  16.      M83XXPCI_REG_WRITE32(M83XXPCI_GCR_REG, 0x1); /* Clear PCI reset */

  17.      /* Allow time for PCI Bus to come out of reset */
  18.      {
  19.      volatile int i;
  20.      for (i = 0 ; i < 0x80000 ; i++)
  21.      WRS_ASM("isync");
  22.      }
  23.     
  24.      M83XXPCI_REG_WRITE32(M83XXPCI_GCR_REG, 0x0); /* PCI reset */

  25.      /* Allow time for PCI Bus to reset */
  26.      {
  27.      volatile int i;
  28.      for (i = 0 ; i < 0x80000 ; i++)
  29.      WRS_ASM("isync");
  30.      }

  31.      M83XXPCI_REG_WRITE32(M83XXPCI_GCR_REG, 0x1); /* Clear PCI reset */

  32.      /* Allow time for PCI Bus to come out of reset */
  33.      {
  34.      volatile int i;
  35.      for (i = 0 ; i < 0x80000 ; i++)
  36.      WRS_ASM("isync");
  37.      }
  38.     }

  39.     M83XXPCI_REG_READ32(M83XXPCI_GCR_REG,tempLong);

  40.     /* Initialize LAWBAR/LAWAR for PCI */
  41.     *pDrvCtrl->lawbar = (UINT32)pDrvCtrl->mem32Addr;

  42.     *pDrvCtrl->lawar = (UINT32)pDrvCtrl->lawarAttr;

  43.     M83XXPCI_REG_WRITE32(M83XXPCI_ECR_REG, 0x0); /* Generate interrupt if PCI error and ESR set*/

  44.     M83XXPCI_REG_WRITE32(M83XXPCI_ESR_REG, 0xffffffff); /* Clear status */

  45.     /* Set outbound translation window addresses */

  46. /* 设置内存空间基址寄存器 */
  47. #ifdef    VXB_LEGACY_ACCESS
  48.     m83xxPciMethodCfgWrite(pInst, 0,0,0,
  49.                            PCI_CFG_BASE_ADDRESS_0,
  50.                            0x4,
  51.                            (void *)&pDrvCtrl->pimmrBase);
  52. #else    /* VXB_LEGACY_ACCESS */
  53.     m83xxPciMethodDevCfgWrite(pInst, pPciDev,
  54.                               PCI_CFG_BASE_ADDRESS_0,
  55.                               0x4,
  56.                               (UINT32)pDrvCtrl->pimmrBase);
  57. #endif    /* VXB_LEGACY_ACCESS */
  58.     /* 设置MPC内部mem基地址 */
  59.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_BASE_ADRS_REG0, pDrvCtrl->mem32Addr >> 12);
  60.     /* 设置PCI总线地址基址 */
  61.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_TRANS_ADRS_REG0, pDrvCtrl->mem32Addr >> 12);
  62.     /* 设置MPC内部memIO基地址 */
  63.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_BASE_ADRS_REG1, pDrvCtrl->memIo32Addr >> 12);
  64.     /* 设置PCI总线memIO地址基址 */
  65.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_TRANS_ADRS_REG1, pDrvCtrl->memIo32Addr >> 12);
  66.     /* 设置MPC内部IO基地址 */
  67.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_BASE_ADRS_REG2, pDrvCtrl->io32Addr >> 12);
  68.    /* 设置PCI总线IO地址基址 */
  69.     M83XXPCI_REG_WRITE32(M83XXPCI_OB_TRANS_ADRS_REG2, pDrvCtrl->io32Addr >> 12);

  70.     /* Switch on the outbound translation windows */
  71.     /* 设置outbound窗口属性 */
  72.     if(pDrvCtrl->owAttrMem == 0)
  73.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG0, M83XXPCI_OB_WINDOW_ENABLE_BIT |
  74.                                                     M83XXPCI_OB_ATTR_SE_BIT |
  75.                                                     M83XXPCI_OB_ATTR_WS_128M);
  76.     else
  77.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG0, pDrvCtrl->owAttrMem);
  78.         
  79.     if(pDrvCtrl->owAttrMemIo == 0)
  80.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG1, M83XXPCI_OB_WINDOW_ENABLE_BIT |
  81.                                                     M83XXPCI_OB_ATTR_SE_BIT |
  82.                                                     M83XXPCI_OB_ATTR_WS_64M);
  83.     else
  84.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG1, pDrvCtrl->owAttrMemIo);
  85.         
  86.     if (pDrvCtrl->owAttrIo == 0)
  87.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG2, M83XXPCI_OB_WINDOW_ENABLE_BIT |
  88.                                                     M83XXPCI_OB_ATTR_IO_BIT |
  89.                                                     M83XXPCI_OB_ATTR_WS_64M);
  90.     else
  91.         M83XXPCI_REG_WRITE32(M83XXPCI_OB_ATTR_REG2, pDrvCtrl->owAttrIo);
  92.         
  93.     /* 设置PCI总线基地址 */
  94.     M83XXPCI_REG_WRITE32(M83XXPCI_IB_BASE_ADRS_REG0, ((UINT32)pDrvCtrl->mstrMemBus>>12) & 0xfffff);
  95.         
  96.     /* 设置mpc存储器基地址 */
  97.     M83XXPCI_REG_WRITE32(M83XXPCI_IB_TRANS_ADRS_REG0, ((UINT32)pDrvCtrl->lclMemAddr>>12) & 0xfffff);
  98.         
  99.     /* 设置inbound窗口属性 */
  100.     M83XXPCI_REG_WRITE32(M83XXPCI_IB_ATTR_REG0, M83XXPCI_IB_WINDOW_ENABLE_BIT |
  101.                                                 M83XXPCI_IB_ATTR_PREFETCHABLE |
  102.                                                 M83XXPCI_IB_ATTR_RTT_READ_SNOOP |
  103.                                                 M83XXPCI_IB_ATTR_RTT_WRITE_SNOOP |
  104.                                                 M83XXPCI_IB_ATTR_IWS_256M);

  105.     /* No need to enable inbound memIo */
  106.     M83XXPCI_REG_WRITE32(M83XXPCI_IB_ATTR_REG1, 0);

  107.     /* No need to enable inboune IO */
  108.     M83XXPCI_REG_WRITE32(M83XXPCI_IB_ATTR_REG2, 0);


  109.     /* configure the bridge as bus master */

  110.     tempWord = PCI_CMD_IO_ENABLE | PCI_CMD_MEM_ENABLE | PCI_CMD_MASTER_ENABLE;

  111. #ifdef    VXB_LEGACY_ACCESS
  112.     m83xxPciMethodCfgWrite(pInst, 0,0,0,
  113.                            COMMAND_REGISTER_OFFSET,
  114.                            COMMAND_REGISTER_WIDTH,
  115.                            (void *)&tempWord);
  116. #else    /* VXB_LEGACY_ACCESS */
  117.     m83xxPciMethodDevCfgWrite(pInst, pPciDev,
  118.                               COMMAND_REGISTER_OFFSET,
  119.                               COMMAND_REGISTER_WIDTH,
  120.                               (UINT32)tempWord);
  121. #endif    /* VXB_LEGACY_ACCESS */

  122.     return(OK);
  123.     }
 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP