Zorro デバイス用デバイスドライバの作成 -------------------------------------- Geert Uytterhoeven 著 最終更新日: 2003 年 9 月 5 日 1. はじめに ----------- 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 の外に あります。 2. Zorro デバイスの検出 ----------------------- Zorro デバイスは `zorro_find_device()' を呼び出すことにより見つけられ ます。この関数は、指定された Zorro ID を持つ「次の」 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")) ... } 3. Zorro リソース ----------------- Zorro デバイスのレジスタにアクセスする前に、それがまだ使われていない ことを保証しなければなりません。これは、I/O メモリ空間リソース管理 関数を使っておこないます。 request_mem_region() release_mem_region() デバイスの全てのアドレス空間を要求するショートカットも、同様に提供 されています。 zorro_request_device zorro_release_device 4. 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); 5. 参照 ------- linux/include/linux/zorro.h linux/include/asm-{m68k,ppc}/zorro.h linux/include/linux/zorro_ids.h linux/drivers/zorro /proc/bus/zorro ------------------------------------------------------------ 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 翻訳日: 2004/04/15 翻訳者: 川崎 貴彦