Linux Kernel 2.6 Documentation:
/usr/src/linux/Documentation/zorro.txt
zorro.txt
Zorro デバイス用デバイスドライバの作成
[プレインテキスト版]
- 原著作者: Geert Uytterhoeven <geert@linux-m68k.org>
- 翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
- バージョン: 2.6.5
- 翻訳日時: 2004/04/15
Zorro デバイス用デバイスドライバの作成
--------------------------------------
Geert Uytterhoeven <geert@linux-m68k.org> 著
最終更新日: 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
翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
Linux カーネル 2.6 付属文書一覧へ戻る