|
次のページ
前のページ
目次へ
12. ISAPnP の仕組みISAPnP の仕組みについて説明します。より詳しい ISAPnP の仕組みについては、 参考文献を参照してください。 12.1 ISAPnP カードの用語とハードウェア本書で使用している ISAPnP カードの用語と、ISAPnP 固有のハードウェアについて、 説明します。 論理デバイスISAPnP カードは一つのカードに複数の機能を搭載しているものがあります。 この複数の機能を論理デバイスと呼びます。 例えば、サウンドカードは、サウンド機能と、ジョイスティック機能の二つの 論理デバイスを持ちます。 単機能のカードの場合、論理デバイスが一つあるということになります。 論理デバイスは 256 個まで持てます。 一つの論理デバイスは、最大で、 8 つの I/O アドレス空間、4 つのメモリアドレス 空間、2 つの割り込み、2 つの DMA チャンネルを持つことができます。 コンフィグレーションレジスタOS と ISAPnP カードとは、ISAPnP カードの持つコンフィグレーションレジスタを 介して、8bit 単位で情報のやり取りをします。 コンフィグレーションレジスタは 0 から 0xff まで、アドレス番号が割り当てられ ています。アドレス番号 0 から 0x2f までは ISAPnP カードに 一つだけあり、 カードレベルレジスタと呼びます。 アドレス番号 0x3f から 0xff までは、ISAPnP カード上の論理デバイスの数だけ 何組かあり、デバイスレベルレジスタと呼びます。 ひとつのアドレス番号に対し、複数のデータを持ったものがあります。その意味では、 アドレス番号というよりもコマンド番号と考えた方が解りやすいかもしれません。 分離複数枚ある ISAPnP カードから、1 枚を特定することです。 CSNCSN(Card Select Number) は ISAPnP カードを特定するための 1byte の数値です。 OS は CSN を ユニークに管理する必要があります。 無事 ISAPnP カードの分離に成功すると、OS は ISAPnP カードに CSN を割り当て ます。 OS が CSN を出力すると、ISAPnP カードは自分に割り当てられた CSN の時だけ 反応します。CSN が 0 の場合、特別に全ての ISAPnP カードが反応します。 CSN 0 はISAPnP カードを全てリセットするときや、分離の時に使います。 ISAPnP カードのステートISAPnP カードは幾つかのステート(状態 state)があります。
コンフィグレーション時のデータバスドライブ方法ISAPnP カードの分離が済むまでは、複数のカードが反応してしまいます。 そこで、ISAPnP カードのコンフィグレーションレジスタからの読み出しの場合、 ISAPnP カードは データバスに 論理値 0(Low)のビットのみを駆動し、 論理値 1(High) のビットは駆動せず、ハイインピーダンスにします。 ハイインピーダンスにするとは、電気的に切り離したのと同じ状態にすることです。 ISAPnP 対応のマザーボードのデータバスはハイインピーダンスの場合、 論理値 1(High)になるように、細工(電気抵抗でプルアップ)されていますので、 論理値 1(High)のビットも正しく読み出せます。 もし、データバスの同じビットに対し、あるカードが論理値 1 を駆動し、別の カードが論理値 0 を駆動した場合、論理値 1 を出したカードはビットが 0 に ならないようにがんばり、論理値 0 を出したカードはビットを 0 にしようと がんばってしまいます。その結果、両者のカードの間に大電流が流れ、 両方のカードが壊れてしまいます。 論理値 1(High) を駆動せず、ハイインピーダンスにすれば、 プルアップしている電気抵抗によって電流が制限されていますので、 カードは壊れません。 また、論理値 0 同士の場合は、どちらかのカードも、論理値 0 になれば、 それ以上電流は流れないので、両カードは壊れません。 ISAPnP コンフィグレーション時の アクセス方法ISAPnP はコンフィグレーションのとき、三つの I/O アドレスを使います。
ISAPnP 対応ハードウェアのコンフィグレーションレジスタのアクセス方法は 下記の通りです。
12.2 ISAPnP のコンフィグレーションISAPnP のコンフィグレーションについて、説明します。 分離の仕組みISAPnP カードの仕組みで最も難しいものが、分離(isolation)です。 分離とは ISA Bus 上にある複数枚のカードから、一枚だけを識別し、番号を 付けることです。 ISAPnP カードは 32bit のベンダーID と 32bit のシリアルID の合計 64bit の ID を 持っています。この ID は他の全ての ISAPnP カードと異なるように 付けられています。この ID と ID のチェックサム 8bit の合計 72bit を使って、 ISAPnP カードを分離します。 分離のアルゴリズムの基本的な考えは勝ち抜き戦のようなものです。 勝ち抜き戦は、ID を LSB から順に 1 ビットづつ調べて行います。 勝敗は下記のように決めます。
例として、カード A は 101、カード B は 011、カード C は 001 の 2 進数 3bit の ID を持っているとします。勝負は最下位ビットから始めます。 勝負 | A | B | C | 手 | 判定 =====+=======+=======+=======+====+=========== 1-1 | A = 1 | B = 1 | C = 1 | 挙 | みんな勝ち 1-2 | A = 0 | B = 1 | C = 0 | 挙 | B の勝ち 1-3 | xxxxx | B = 0 | xxxxx | | B の優勝 -----+-------+-------+-------+----+----------- 2-1 | A = 1 | I am | C = 1 | 挙 | 両方勝ち 2-2 | A = 0 | NO. | C = 0 | | 敗者復活 2-3 | A = 1 | one! | C = 0 | 挙 | A の優勝 -----+-------+-------+-------+----+----------- 3-1 | I am | | C = 1 | 挙 | C の勝ち 3-2 | NO. | | C = 0 | | 敗者復活 3-3 | two. | | C = 0 | | C の優勝 -----+-------+-------+-------+----+----------- 4-1 | | | | |カード無し =====+=======+=======+=======+====+=========== CSN | 2 | 1 | 3 |こうして、全てのカードには CSN が付けられたので、今後カードとは、 CSN を使用し、コンフィグレーションを続けます。 勿論、実際の ISAPnP の分離のアルゴリズム(シーケンス)はもう少し複雑です。 基本となるアルゴリズムは下記の通りです。 OS がデータリードポートアドレスからデータを 2 回読み込みます。 ISAPnP カードは ID の 調査中のビットが 1 の場合、データを 0x55, 0xAA の順で 出力します(勝ち組)。ID の調査中のビットが 0 の ISAPnP カードは、データバスを 2 回読み込み、最初のデータの下位 2ビットが 01 で、次のデータの下位 2 ビット が 10 の場合、Sleep ステートに移行します(負け組)が、データの下位 2 ビットが、 01,10 で無かった場合、Isolate ステートを続行します(敗者復活)。 OS は読み込んだ最初のデータが 0x55、 次のデータが 0xAA だった場合、 ID は 1 、そうでない場合、 0 と判断します。 このアルゴリズムを仮に Iso 操作と呼びます。この操作を ID のチェックサムを 求める為に、64 回繰り返し、ISAPnP カードが出力するチェックサムを取得する ために、8 回繰り返します。最後に両者のチェックサムを比較し、ISAPnPカード の 有無を判断します。実際の ISAPnP 分離のアルゴリズムは下記のようになります。
チェックサムの計算チェックサムの計算は LFSR(linear feedback shift register) を使います。 LFSR は 8bit 長で、bit0 と bit1 と ISAPnP の ID ビットの排他的論理和が bit7 にフィードバックされています。LFSR は OS から 0x6a に初期化され、 ID ビットが更新されるときに、シフトされます。 ISAPnP の ID は 64bit ですから、LFSR を 64 回シフトした結果がチェックサムに なります。この計算法により、チェックサムは 0 でないことが、保証されます。 尚、このチェックサムの計算は CRC チェックサムの一種です。 リソースの読み込みリソースの読み込みには二つの方法があります。一つは、ISAPnP カードの分離後、 続けて ISAPnP カードにアクセスする方法です。 ISAPnP カードは分離後、リソースデータを連続して、出力します。OS は コンフィグ レーションレジスタを調べてリソースデータの終了を調べます。 もう一つは、下記の手順を使い、OS が ISAPnP カードのリソースを読み込む方法 です。
リソースの書き込み下記の手順で OS は ISAPnP カードのリソースを書き込みます。
リソースの種類リソースの種類は、下記の通りです。種類ごとにフィールドがあり、さらに、それ毎 に、サブフィールドがあります。
次のページ 前のページ 目次へ |
[ |