PCIE BAR空間


 PCIE應用程序編程,首先就要理清PCIE BAR空間到底說的是什么。在PCIE配置空間里,0x10開始后面有6個32位的BAR寄存器,BAR寄存器中存儲的數據是表示PCIE設備在PCIE地址空間中的基地址,注意這里不是表示PCIE設備內存在CPU內存中的映射地址,關於這兩者的關系以及兩者如何轉換后面會有介紹。

    1,BAR寄存器的數據格式,BAR寄存器表示的設備存儲類型有memory space BAR和IO space BAR兩種,

          對於memory space BAR,數組格式如下面所示

          31-----------------------------------4 |        3           |     2-1     |       0

          16-Byte aligned Base Adress   prefetchable    Type   always 0

           對於IO space BAR,數組格式如下所示

           31-----------------------------------2 |      1      |     0

           4-Byte Aligned Base Address    reserve   always 0

           對於memory space BAR的16-Byte aligned Base Address 這里的Base Address代表的是16個byte數據的地址

          對於IO space BAR的4-Byte aligned Base Address這里的BaseAddress代表的是4個byte數據的地址

    2,BAR寄存器數據的初始化

          BAR寄存器的數據是怎么初始化,由誰進行初始化的?因為初始化的數據是PCIE設備所在的總線域的地址空間,所以肯定不會是EP自己進行初始化,因為如果這樣EP是不知道其他PCIE設備對應的總線地址空間的,所以可能會引起總線地址空間的沖突,所以BAR寄存器的初始化是由內核進行初始化的,在系統開機時,內核會遍歷查找哥哥PCIE設備,然后為PCIE設備分配對應的總線地址空間。

    3,BAR寄存器存儲的總線地址和應用程序內存地址的關系

          BAR寄存器存儲的總線地址,應用程序是不能直接利用的,應用程序首先要做的就是讀出BAR寄存器的值,然后用mmap函數建立應用程序內存空間和總線地址空間的映射關系。這樣應用程序往PCIE設備內存讀寫數據的時候,直接利用PCIE設備映射到應用程序中的內存地址即可。但是應用程序的內存地址該由誰解析到PCIE設備對應的總線空間給EP呢,這個工作是由北橋或者是RC(root complex)來完成的,解析到總線地址空間之后,EP會把總線的地址空間解析成PCIE設備對應的設備內存地址。

轉載:http://blog.csdn.net/buyi_shizi/article/details/51068609


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM