2017-10-09 202 views
0

PCI卡可以有一些與其關聯的內存(映射到內存空間或映射到IO空間)。如何將信號發送到PCI卡?

現在說我們有一個PCI以太網卡(並且它使用內存映射IO),以太網卡將有一些內存作爲緩衝區來放置數據以發送線路,並且每當以太網驅動程序想要通過電線發送數據,它可以要求以太網卡這樣做。

現在我假定以太網卡映射內存的一部分是一個「命令寄存器」,並且當您向該命令寄存器寫入例如字符串"send it"時,以太網卡將向緩衝區發送緩衝區。

現在我的問題是,以太網卡如何知道控制寄存器的內存已被寫入?以太網卡是否輪詢控制寄存器的存儲器內容,或者是否有某種機制用於在控制寄存器的存儲器地址被寫入時自動向以太網卡發送信號(如此類似於中斷,但在相反的方向)?

+1

另請參閱https://en.wikipedia.org/wiki/Conventional_PCI#PCI_command_codes – xmojmr

回答

2

PCI卡的內存映射IO的地址範圍由PCI設備的基址寄存器(BAR)控制。當CPU訪問BAR範圍內的內存地址時,內存訪問將直接路由到設備(如果是寫入操作,則與數據一起),而不是路由到內存。當PCI設備接收到內存訪問時,立即更新指定的控制寄存器。如果MMIO訪問是讀操作,則設備以適當的值響應CPU。

0

MMIO允許您使用加載和存儲指令而不是INOUT指令,但設備仍然看到命令,而不僅僅是內存訪問。

這就是爲什麼它是MM IO,而不僅僅是內存映射設備內存。