Linux Kernel 2.4 Documentation:
/usr/src/linux/Documentation/arm/SA1100/PCMCIA
arm/SA1100/PCMCIA
カーネル低レベル PCMCIA インターフェースドキュメント
[プレインテキスト版]
- 原著作者: John G Dorsey <john+@cs.cmu.edu>
- 翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
- バージョン: 2.4.26
- 翻訳日時: 2004/02/10
カーネル低レベル PCMCIA インターフェースドキュメント
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
John G Dorsey <john+@cs.cmu.edu>
最終更新日: 2000 年 6 月 30 日
注意:このインターフェースはまだ完成していません!
参照:http://www.cs.cmu.edu/~wearable/software/pcmcia-arm.html
はじめに
StrongARM 用の初期バージョンの PCMCIA Card Service では、ユーザランドに
おける設定プロセスを使うことによって、各種の SA-1100 ボード上で単一の
ソケットドライバが動くように設計されていました。2.3 カーネルシリーズへの
変更に伴い、全ての設定がカーネル管轄下のサブドライバへと移されました
(linux/drivers/pcmcia/sa1100* を参照のこと)。このドキュメントは、サブ
ドライバと sa1100 ソケットドライバモジュールとのあいだの低レベルインター
フェースについて説明するものです。
現在のところ、ボード固有のコードが提供しなければならない六つのオペレー
ションがあります。このレベルでは、ボード設計の違いにより実装が異なる
ことの多い機能だけが要求されています。たとえば次のようなものが含まれます。
- 割込み生成のためのカード検出ラインの設定
- 挿入されたカードの有効な電圧レベルの診断
- カード用リセット信号のアサート
全ての設計を通じて同じであると思われる機能については、汎用ソケットドライバ
自身の中で実行されます。たとえば次にあげるようなオペレーションが含まれます。
- コアクロック周波数に基づくメモリアクセス時間の設定
- メモリの読み書き、バイト swizzling, ...
現在の実装では、ボード毎の固有な低レベルオペレーションのセットを実行時に
決定することができます。それぞれの固有なボード用に、次の構造体の値を設定
する必要があります。
struct pcmcia_low_level {
int (*init)(struct pcmcia_init *);
int (*shutdown)(void);
int (*socket_state)(struct pcmcia_state_array *);
int (*get_irq_info)(struct pcmcia_irq_info *);
int (*configure_socket)(const struct pcmcia_configure *);
};
各関数については下記で詳細に説明します。machine_is_*() テストを用いて、
ポインタ `pcmcia_low_level' がボード用テーブルの位置を指すようにしなけ
ればなりません。
0. init(struct pcmcia_init *init)
このオペレーションではやるべきことが三つあります。
- 全てのボード固有の初期化処理をおこなう
- 与えられたハンドラと、カード検出やバッテリー電圧検出などの全ての
割込み生成信号とを関連付ける
- カードレディ信号用の必要な全てのエッジ検出をセットアップする
このオペレーションに渡す引数は、下記の構造体により提供されます。
struct pcmcia_init {
void (*handler)(int irq, void *dev, struct pt_regs *regs);
struct pcmcia_maps *maps;
};
ここでは、`handler' はソケットドライバにより提供されます。デフォルトの
マッピングが適切でないならば、`maps' を修正する必要があります。このオペ
レーションは二つの値のどちらかを返す必要があります。
- 使用可能な番号付きソケットの最大番号、プラス1
- 設定におけるエラーを示す負の値
前者の場合、それが「使用可能なソケットの数」と同じでは _ない_ ということに
注意してください。特に、あなたの設計が SA-1100 スロット "zero" ではなく
スロット "one" を使用している場合、ソケットドライバに対して "2" と通知
しなければなりません。
1. shutdown(void)
このオペレーションは引数を取らず、ソケットドライバのクリーンアップ中に
呼び出されます。割り当てられたデータ構造体や確保した IRQ などの、ソケット
コントローラに関連付けられたデータは全て、このルーチンで解放する必要が
あります。
このオペレーションの戻り値はチェックされません。
2. socket_state(struct pcmcia_state_array *state_array)
このオペレーションは、前の init() 呼出しによりセットアップされた割込み
ハンドラから呼び出されます。しかしながら、ペンディングになっている割込み
がないときにこのオペレーションが呼び出された場合にも、不適切な副作用が
発生しないようにしなければなりません。(現在のところ、ソケットドライバの
状態を初期化するために、このオペレーションがもう一度呼ばれるのです。)
このオペレーションに渡される引数は、下記の型の配列を含む構造体により扱わ
れます。
struct pcmcia_state {
unsigned detect: 1,
ready: 1,
bvd1: 1,
bvd2: 1,
wrprot: 1,
vs_3v: 1,
vs_Xv: 1;
};
オペレーションから戻ったとき、ハードウェア的に得られるそれぞれのソケット
毎に構造体 pcmcia_state がセットされていなければなりません。使用可能な
ソケットに対応しない全ての配列要素 (構造体 pcmcia_state_saaray の `size'
まで) は、要素のビットをゼロにします (ソケット zero が使われない場合には
element [0] も含みます。)
各種の信号がどのように SA-1100 に到達するかに関係なく、構造体 pcmcia_state
のビットは常に下記のセマンティックスを持っています。
detect - カードが完全に挿入されていれば 1, そうでなければ 0
ready - カードレディ信号がアサートされていれば 1, そうでなければ 0
bvd1 - バッテリー電圧検出 1 信号の値
bvd2 - バッテリー電圧検出 2 信号の値
wrprot - カードがライトプロテクトされていれば 1, そうでなければ 0
vs_3v - カードが 3.3V で扱われるべきならば 1, そうでなければ 0
vs_Xv - カードが X.XV で扱われるべきならば 1, そうでなければ 0
BVD 信号に関する注意事項: あなたのボードでどちらのラインもプロセッサ
から直接見える状態にない場合は、単に妥当な値を返してください。BVD 信号の
標準的な解釈方法は次のとおりです。
BVD1 BVD2
0 x バッテリーが死んでいる
1 0 バッテリー警告
1 1 バッテリー OK
電圧診断フラグ (vs_3v, vs_Xv) についてですが、これらのビットは、可能ならば
電圧診断ピンのサンプリングに基づいてセットされるべきです。VS 信号 ("低電圧"
ソケット用) の標準的な解釈方法は次のとおりです。
VS1 VS2
0 0 X.XV, そうでなければ 3.3V, そうでなければ none
0 1 3.3V, そうでなければ none
1 0 X.XV, そうでなければ none
1 1 5V, そうでなければ none
BVD と VS の慣習に関するより多くの情報は、Don Anderson による "PCMCIA
System Architecture" 第二版の第五章にあります。
このオペレーションでは、ソケットコントローラで実際に IRQ がペンディング
になっている場合には 1 を、IRQ がペンディングになっていない場合 (ただし、
状態配列のサイズが小さい等のエラー条件が存在していない場合) には 0 を、
エラーの場合には -1 を返すようにしてください。
3. get_irq_info(struct pcmcia_irq_info *info)
このオペレーションは、指定されたソケットに対して有効な IRQ 割当てを獲得
します。下記の型の引数が渡されます。
struct pcmcia_irq_info {
unsigned int sock;
unsigned int irq ;
};
`sock' フィールドには問い合わせ対象のソケットインデックスが含まれます。
`irq' フィールドにはデバイスからのカードレディ信号に対応する IRQ 番号が
含まれます。
このオペレーションは、成功時には 0 を、エラーの場合には -1 を返すように
してください。
4. configure_socket(const struct pcmcia_configure *configure)
このオペレーションにより、呼出し側はソケットへの電源供給、リセットの発行、
各種出力のイネーブルをおこないます。下記の型の引数が渡されます。
struct pcmcia_configure {
unsigned sock: 8,
vcc: 8,
vpp: 8,
output: 1,
speaker: 1,
reset: 1;
};
`sock' フィールドには設定されるソケットのインデックスが含まれます。`vcc'
と 'vpp' フィールドにはそれぞれ、0.1V 単位で、Vcc と Vpp に適用すべき
電圧が含まれています。(vpp==120 はプログラミング電圧が適用されるべきで
あることを意味しているので注意してください。)
二つの出力イネーブル `output' と `speaker' はそれぞれ、カードデータ信号
イネーブルとカードスピーカーイネーブルを意味します。`reset' ビットがセット
されている場合は、カードリセットがアサートされるべきであることを示します。
このオペレーションは、成功ならば 0 を、エラーならば -1 を返すようにします。
ボード固有の注意書き
下記の情報は、カーネルにサポートを追加するときにリファレンスとして使用
される可能性のある各種 SA-11x0 ボードの設計に関するものです。
カーネギーメロン Itsy/Cue (http://www.cs.cmu.edu/~wearable/itsy/)
Itsy チップセレクト 3 (CS3) インターフェース
("ITSY MEMORY/PCMCIA ADD-ON BOARD with BATTERY and CHARGER CIRCUITRY,"
Tim Manns, Richard Martin などの 1999/5/20 付けメモ)
読出し:
ABVD2 (SS)D0 A スロット、バッテリー電圧検出
ABVD1 (SS)D1
AVSS2 (SS)D2 A スロット、電圧診断
AVSS1 (SS)D3
GND (SS)D4
GND (SS)D5
GND (SS)D6
GND (SS)D7
BBVD2 (SS)D8 B スロット、バッテリー電圧検出
BBVD1 (SS)D9
BVSS2 (SS)D10 B スロット、電圧診断
BVSS1 (SS)D11
GND (SS)D12
GND (SS)D13
GND (SS)D14
GND (SS)D15
書込み:
(SS)D0 A_VPP_VCC LTC1472 VPPEN1
(SS)D1 A_VPP_PGM LTC1472 VPPEN0
(SS)D2 A_VCC_3 LTC1472 VCCEN0
(SS)D3 A_VCC_5 LTC1472 VCCEN1
(SS)D4 RESET (A スロット)
(SS)D5 GND
(SS)D6 GND
(SS)D7 GND
(SS)D8 B_VPP_VCC LTC1472 VPPEN1
(SS)D9 B_VPP_PGM LTC1472 VPPEN0
(SS)D10 B_VCC_3 LTC1472 VCCEN0
(SS)D11 B_VCC_5 LTC1472 VCCEN1
(SS)D12 RESET (B スロット)
(SS)D13 GND
(SS)D14 GND
(SS)D15 GND
GPIO ピンの割当ては下記のとおりです。(回路図より)
GPIO 10 スロット 0 カード検出
GPIO 11 スロット 1 カード検出
GPIO 12 スロット 0 レディ/割込み
GPIO 13 スロット 1 レディ/割込み
Intel SA-1100 Multimedia Board (http://developer.intel.com/design/strong/)
CPLD レジスタ
SA-1100 Multimedia Development Board with Companion SA-1101 Development
Board User's Guide, p.4-42
この SA-1100/1101 開発パッケージは、カードの状態変化を伝えるのに一つの
GPIO ピン (24) しか使用せず、ソースが何であるかを判断するのに PCMCIA
ステータスレジスタを調べることをソフトウェアに要求しています。
読出し: (PCMCIA 電源診断レジスタ - 0x19400000)
S0VS1 0 スロット 0 電圧診断
S0VS2 1
S0BVD1 2 スロット 0 バッテリー電圧診断
S0BVD2 3
S1VS1 4 スロット 1 電圧診断
S1VS2 5
S1BVD1 6 スロット 1 バッテリー電圧診断
S1BVD2 7
読出し/書込み: (PCMCIA 電源制御レジスタ - 0x19400002)
S0VPP0 0 スロット 0 Vpp
S0VPP1 1
S0VCC0 2 スロット 0 Vcc
S0VCC1 3
S1VPP0 4 スロット 1 Vpp
S1VPP1 5
S1VCC0 6 スロット 1 Vcc
S1VCC1 7
読出し: (PCMCIA ステータスレジスタ - 0x19400004)
S0CD1 0 スロット 0 カード検出 1
S0RDY 1 スロット 0 レディ/割込み
S0STSCHG 2 スロット 0 状態変化
S0Reset 3 スロット 0 リセット (RW)
S1CD1 4 スロット 1 カード検出 1
S1RDY 5 スロット 1 レディ/割込み
S1STSCHG 6 スロット 1 状態変化
S1Reset 7 スロット 1 リセット (RW)
Intel SA-1100 Evaluation Platform (http://developer.intel.com/design/strong/)
Brutus I/O ピンおよびチップセレクトレジスタ
Ivo Clarysse による pcmcia-brutus.c
(この情報の公式なリファレンスな何だろうか?)
この SA-1100 開発ボードは、Itsy や SA-1100/1101 Multimedia パッケージ
よりも多くの GPIO ピンを使用します。ピンの割当ては次のとおりです。
GPIO 2 スロット 0 バッテリー電圧検出 1
GPIO 3 スロット 0 レディ/割込み
GPIO 4 スロット 0 カード検出
GPIO 5 スロット 1 バッテリー電圧検出 1
GPIO 6 スロット 1 レディ/割込み
GPIO 7 スロット 1 カード検出
Itsy と同様、Brutus は、電圧診断やリセットなどの他の信号用の静的メモリ
バンク 3 のチップセレクトレジスタを使用します。
読出し:
P0_VS1 8 スロット 0 電圧診断
P0_VS2 9
P0_STSCHG 10 スロット 0 状態変化
P1_VS1 12 スロット 1 電圧診断
P1_VS2 13
P1_STSCHG 14 スロット 1 状態変化
読出し/書込み:
P0_ 16 スロット 0 MAX1600EAI 制御ライン
P0_ 17 スロット 0 MAX1600EAI 制御ライン
P0_ 18 スロット 0 MAX1600EAI 制御ライン
P0_ 19 スロット 0 MAX1600EAI 制御ライン
P0_ 20 スロット 0 12V
P0_ 21 スロット 0 Vpp to Vcc (要確認?)
P0_ 22 スロット 0 ファンアウトドライバとトランシーバのイネーブル
P0_SW_RST 23 スロット 0 リセット
P1_ 24 スロット 1 MAX1600EAI 制御ライン
P1_ 25 スロット 1 MAX1600EAI 制御ライン
P1_ 26 スロット 1 MAX1600EAI 制御ライン
P1_ 27 スロット 1 MAX1600EAI 制御ライン
P1_ 28 スロット 1 12V
P1_ 29 スロット 1 Vpp to Vcc (要確認?)
P1_ 30 スロット 1 ファンアウトドライバとトランシーバのイネーブル
P1_SW_RST 31 スロット 1 リセット
各スロットにおいて、"MAX1600EAI" とラベル付けされているビットには、
(おそらく) Vcc 3.3V ならば値 0101 を、Vcc 5V ならば値 1001 を書き
込んでやる必要があります。
Intel SA-1110 Development Platform (http://developer.intel.com/design/strong/)
GPIO ピンの説明およびボード制御レジスタ
SA-1110 Microprocessor Development Board User's Guide, p.4-7, 4-10
Assabet ボードは、SA-1110 上のスロット 1 に取り付けられているコンパクト
フラッシュ一つしか含んでいません。カード検出、レディ、BVD 信号は GPIO を
経由し、電源およびリセットは制御レジスタに置かれています。CF バスは使用
前にイネーブルしておく必要があることに注意してください。
GPIO 21 スロット 1 コンパクトフラッシュ割込み
GPIO 22 スロット 1 カード検出 (CD1 NOR CD2)
GPIO 24 スロット 1 バッテリー電圧検出 2
GPIO 25 スロット 1 バッテリー電圧検出 1
書込みのみ: (ボード制御レジスタ - 0x12000000)
CF_PWR 0 CF バス電源 (3.3V)
CF_RST 1 CF リセット
CF_Bus_On 7 CF バス・イネーブル
------------------------------------------------------------
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日: 2004/02/10
翻訳者: 川崎 貴彦 <takahiko(a)hakubi.co.jp>
Linux カーネル 2.4 付属文書一覧へ戻る