為 Zorro 裝置編寫裝置驅動程式¶
- 作者:
Geert Uytterhoeven 編寫 <geert@linux-m68k.org>
- 上次修訂:
2003 年 9 月 5 日
簡介¶
Zorro 匯流排是 Amiga 系列計算機中使用的匯流排。 感謝 AutoConfig(tm),它是 100% 即插即用。
Zorro 匯流排有兩種型別,Zorro II 和 Zorro III
Zorro II 地址空間為 24 位,位於 Amiga 地址對映的前 16 MB 內。
Zorro III 是 Zorro II 的 32 位擴充套件,它向後相容 Zorro II。 Zorro III 地址空間位於前 16 MB 之外。
探測 Zorro 裝置¶
Zorro 裝置透過呼叫 zorro_find_device() 找到,該函式返回指向具有指定 Zorro ID 的 next Zorro 裝置的指標。 Zorro ID 為 ZORRO_PROD_xxx 的板的探測迴圈如下所示
struct zorro_dev *z = NULL;
while ((z = zorro_find_device(ZORRO_PROD_xxx, z))) {
if (!zorro_request_region(z->resource.start+MY_START, MY_SIZE,
"My explanation"))
...
}
ZORRO_WILDCARD 充當萬用字元並查詢任何 Zorro 裝置。 如果您的驅動程式支援不同型別的板,則可以使用如下結構
struct zorro_dev *z = NULL;
while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
if (z->id != ZORRO_PROD_xxx1 && z->id != ZORRO_PROD_xxx2 && ...)
continue;
if (!zorro_request_region(z->resource.start+MY_START, MY_SIZE,
"My explanation"))
...
}
Zorro 資源¶
在您可以訪問 Zorro 裝置的暫存器之前,您必須確保它尚未使用。 這是使用 I/O 記憶體空間資源管理函式完成的
request_mem_region()
release_mem_region()
還提供了宣告整個裝置地址空間的快捷方式
zorro_request_device
zorro_release_device
訪問 Zorro 地址空間¶
Zorro 裝置資源中的地址區域是 Zorro 匯流排地址區域。 由於 Zorro 總線上的標識匯流排-物理地址對映,它們也是 CPU 物理地址。
這些區域的處理取決於 Zorro 空間的型別
Zorro II 地址空間始終對映,並且不必使用 z_ioremap() 顯式對映。
從匯流排/物理 Zorro II 地址到核心虛擬地址的反向轉換使用以下方法完成
virt_addr = ZTWO_VADDR(bus_addr); bus_addr = ZTWO_PADDR(virt_addr);Zorro III 地址空間必須首先使用 z_ioremap() 顯式對映,然後才能訪問
virt_addr = z_ioremap(bus_addr, size); ... z_iounmap(virt_addr);
參考¶
linux/include/linux/zorro.h
linux/include/uapi/linux/zorro.h
linux/include/uapi/linux/zorro_ids.h
linux/arch/m68k/include/asm/zorro.h
linux/drivers/zorro
/proc/bus/zorro