PCI
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* PCIコンフィグレーションに関するページ [#lcc0722f]
-自作OSでPCIデバイスをコントロールしたくなる事はあるでし...
--今じゃほとんどのデバイスがPCIデバイスですしね・・・。
-それぞれのPCIデバイスは最低でも64バイト、最大では256バイ...
* コンフィグレーションレジスタにアクセスする方法 (AT互換...
-利用するI/Oポート
--CONFIG_ADDRESSレジスタ(0x0cf8、32bit、Read/Write可)
---bit0-1:0に固定
---bit2-7:レジスタアドレス
---bit8-10:機能番号
---bit11-15:デバイス番号
---bit16-23:バス番号
---bit24-30:リザーブで、0に固定
---bit31:イネーブルビットで、1に固定
--CONFIG_DATAレジスタ(0x0cfc~0x0cff、任意のサイズ、Read...
---CONFIG_ADDRESSレジスタのイネーブルビットが0の場合は、...
-PCIのコンフィグレーションレジスタにアクセスしたいときは...
-0x0cf8へのワードやバイト幅のアクセスは、CONFIG_ADDRESSレ...
-bit0-7をレジスタアドレスと考えるといいかもしれません。0x...
-機能番号は、0~7の値を取り、一つのデバイスに複数の機能が...
--デバイスが存在するなら、まず機能番号0に何らかの機能が割...
-デバイス番号は0~31です。つまり一つのPCIバスに最大で31個...
-バス番号は0~255です。0から始まります。システムは最大255...
--こう考えてください。まずバス番号0のPCIバスがあり、これ...
--したがってブリッジの設定がうまくいっていないと、バス番...
* 全デバイス共通のコンフィグレーションレジスタ [#k5f45a5b]
-ベンダID(0x00のbit0-15、多分リードオンリー)
--[[(PCI)vendor]]にベンダーIDのリストがあります
-デバイスID(0x00のbit16-31、多分リードオンリー)
-コマンドレジスタ(0x04のbit0-15、リードライト可)
--それぞれのbitについて0固定だったりするデバイスがありま...
--bit0:I/O空間イネーブル これが0だとI/Oポートへのアク...
--bit1:メモリ空間イネーブル これが0だとメモリ空間への...
--bit2:バスマスター
--bit3:スペシャルサイクル
--bit4:メモリライト&インバリデートイネーブル
--bit5:VGAパレットスヌープ
--bit6:パリティエラー応答 これが0だと仮にパリティーエ...
--bit7:ウェイトサイクル制御
--bit8:SERR#イネーブル
--bit9:高速バックツーバックイネーブル
--bit10-15:リザーブ
-ステータスレジスタ(0x04のbit16-31、リードライト可)
--ステータスなので原則としては読み込みが主になりますが、...
--これはどういうことなのかというと、ステータスレジスタは...
--でも多分bit21-23、25-26はクリアできない読み出し専用だと...
--bit16-20:リザーブ
--bit21:66MHz対応可能
--bit22:ユーザ定義機能あり
--bit23:高速バックツーバック可能
--bit24:データパリティエラー検知(バスマスター時のエラー)
--bit25-26:DEVSEL#タイミング 00:高速 01:中速 10:...
--bit27:ターゲットアボート通知
--bit28:ターゲットアボート受信
--bit29:マスタアボート受信
--bit30:システムエラー通知
--bit31:パリティエラー検知
-リビジョンID(0x08のbit0-7、多分リードオンリー)
-クラスコード(0x08のbit8-31、多分リードオンリー)
--プログラムインターフェース(bit8-15)
--サブクラス(bit16-23)
--ベースクラス(bit24-31)
--[[(PCI)class]]にクラスコードのリストがあります
-キャッシュラインサイズ(0x0cのbit0-7)
-マスタレイテンシタイマ(0x0cのbit8-15)
-ヘッダタイプ(0x0cのbit16-23、多分リードオンリー)
--bit16-22:デバイスのタイプ 0:通常のPCIデバイス 1:P...
--bit23:マルチファンクションデバイス
-BISTレジスタ(0x0cのbit24-31)
-レジスタ0x10以降はデバイスのタイプ(ヘッダタイプ参照)に...
*普通のPCIデバイスの場合のコンフィグレーションレジスタ [#...
-(普通のPCIデバイスの場合=ヘッダタイプのデバイスのタイ...
-ベースアドレス0(0x10のbit0-31、リードライト可)
-ベースアドレス1(0x14のbit0-31、リードライト可)
-ベースアドレス2(0x18のbit0-31、リードライト可)
-ベースアドレス3(0x1cのbit0-31、リードライト可)
-ベースアドレス4(0x20のbit0-31、リードライト可)
-ベースアドレス5(0x24のbit0-31、リードライト可)
--I/OポートやメモリマップトI/Oのアドレスを指定します。
--bit0:空間種別(このbitはリードオンリー) 0:メモリ空...
---どちらなのかでbit構成が変わります
--メモリ空間の場合:
---bit1-2:タイプ(このbitもリードオンリー) 00:32bit...
---bit3:プリフィッチ可能(このbitもリードオンリー)
---bit4-31:ベースアドレス(リードオンリーとリードライト...
---64bitPCIの場合、ベースレジスタは次のやつを上位アドレス...
--I/O空間の場合:
---bit1:リザーブにつき0固定(このbitはリードオンリー)
---bit2-31:ベースアドレス(リードオンリーとリードライト...
--ベースアドレスは、要求する空間サイズに応じて下位bitが0...
---まず、ベースアドレスに0xffffffffを書き込み、そしてこの...
---そうなると、これはメモリ空間要求ベースアドレスで、4GB...
---このような仕様のため、PCIデバイスでは、メモリマップトI...
---設定中にアクセス用のアドレスが変わるわけで、これがまず...
--例えばベースアドレスを3本使う場合はベースアドレス0~2が...
-CardBus CIS(0x28のbit0-31)
-サブシステムベンダID(0x2cのbit0-15、多分リードオンリー)
--コードと社名の関係は多分ベンダIDと同じです。
-サブシステムID(0x2cのbit16-31、多分リードオンリー)
-拡張ROMアドレス(0x30のbit0-31)
-新機能ポインタ(0x34のbit0-7)
-リザーブ(0x34のbit8-31と0x38のbit0-31)
-インタラプトライン(0x3cのbit0-7、リードライト可能)
-インタラプトピン(0x3cのbit8-15)
--これが0なら割り込みを使わないデバイス
-最小グラント(0x3cのbit16-23)
-最大レイテンシ(0x3cのbit24-31)
-ベンダ定義(0x40~0xfcのbit0-31)
*PCIデバイスの探し方 [#uac5a005]
-まずPCIデバイスのどのスロットに何が刺さっているのかを把...
-とりあえず、バス番号0について、デバイス番号を0~31のそれ...
-PCIのルールで、何も接続されていないデバイス番号を指定し...
-0xffffのベンダIDはないので、ベンダIDが0xffffかどうかでそ...
-もし他にもバスがあるなら、そのバスも検索しましょう。
--かつて僕はバスがあるかないかを判定するのが面倒で、0~25...
-機能番号0で読み出してマルチファンクションであると書かれ...
--かつての僕はこれもサボって、マルチファンクションであっ...
* PCIデバイスの使いかた(PnPのやりかた?) [#w23c9190]
-まずデバイスを探します。探し方は上記参照。
-見付けたデバイスが何であるかは、ベンダID、デバイスID、サ...
-コマンドレジスタでメモリ空間とI/O空間をディゼーブルにし...
-対応するドライバが用意できていないデバイスについては、メ...
-IRQの割り当てはチップセット側の設定も必要のようです。PCI...
* PCI-PCIブリッジ [#h694c818]
-AGPやCardBusは、PCIからすればちょっと特別なPCI-PCIブリッ...
* こめんと欄 [#wdfdca71]
-なんかの拍子にこのページが消えてしまったらしいのを復活さ...
-デバイス -- [[名無しさん]] SIZE(10){2005-01-28 (金) 21:0...
#comment
終了行:
* PCIコンフィグレーションに関するページ [#lcc0722f]
-自作OSでPCIデバイスをコントロールしたくなる事はあるでし...
--今じゃほとんどのデバイスがPCIデバイスですしね・・・。
-それぞれのPCIデバイスは最低でも64バイト、最大では256バイ...
* コンフィグレーションレジスタにアクセスする方法 (AT互換...
-利用するI/Oポート
--CONFIG_ADDRESSレジスタ(0x0cf8、32bit、Read/Write可)
---bit0-1:0に固定
---bit2-7:レジスタアドレス
---bit8-10:機能番号
---bit11-15:デバイス番号
---bit16-23:バス番号
---bit24-30:リザーブで、0に固定
---bit31:イネーブルビットで、1に固定
--CONFIG_DATAレジスタ(0x0cfc~0x0cff、任意のサイズ、Read...
---CONFIG_ADDRESSレジスタのイネーブルビットが0の場合は、...
-PCIのコンフィグレーションレジスタにアクセスしたいときは...
-0x0cf8へのワードやバイト幅のアクセスは、CONFIG_ADDRESSレ...
-bit0-7をレジスタアドレスと考えるといいかもしれません。0x...
-機能番号は、0~7の値を取り、一つのデバイスに複数の機能が...
--デバイスが存在するなら、まず機能番号0に何らかの機能が割...
-デバイス番号は0~31です。つまり一つのPCIバスに最大で31個...
-バス番号は0~255です。0から始まります。システムは最大255...
--こう考えてください。まずバス番号0のPCIバスがあり、これ...
--したがってブリッジの設定がうまくいっていないと、バス番...
* 全デバイス共通のコンフィグレーションレジスタ [#k5f45a5b]
-ベンダID(0x00のbit0-15、多分リードオンリー)
--[[(PCI)vendor]]にベンダーIDのリストがあります
-デバイスID(0x00のbit16-31、多分リードオンリー)
-コマンドレジスタ(0x04のbit0-15、リードライト可)
--それぞれのbitについて0固定だったりするデバイスがありま...
--bit0:I/O空間イネーブル これが0だとI/Oポートへのアク...
--bit1:メモリ空間イネーブル これが0だとメモリ空間への...
--bit2:バスマスター
--bit3:スペシャルサイクル
--bit4:メモリライト&インバリデートイネーブル
--bit5:VGAパレットスヌープ
--bit6:パリティエラー応答 これが0だと仮にパリティーエ...
--bit7:ウェイトサイクル制御
--bit8:SERR#イネーブル
--bit9:高速バックツーバックイネーブル
--bit10-15:リザーブ
-ステータスレジスタ(0x04のbit16-31、リードライト可)
--ステータスなので原則としては読み込みが主になりますが、...
--これはどういうことなのかというと、ステータスレジスタは...
--でも多分bit21-23、25-26はクリアできない読み出し専用だと...
--bit16-20:リザーブ
--bit21:66MHz対応可能
--bit22:ユーザ定義機能あり
--bit23:高速バックツーバック可能
--bit24:データパリティエラー検知(バスマスター時のエラー)
--bit25-26:DEVSEL#タイミング 00:高速 01:中速 10:...
--bit27:ターゲットアボート通知
--bit28:ターゲットアボート受信
--bit29:マスタアボート受信
--bit30:システムエラー通知
--bit31:パリティエラー検知
-リビジョンID(0x08のbit0-7、多分リードオンリー)
-クラスコード(0x08のbit8-31、多分リードオンリー)
--プログラムインターフェース(bit8-15)
--サブクラス(bit16-23)
--ベースクラス(bit24-31)
--[[(PCI)class]]にクラスコードのリストがあります
-キャッシュラインサイズ(0x0cのbit0-7)
-マスタレイテンシタイマ(0x0cのbit8-15)
-ヘッダタイプ(0x0cのbit16-23、多分リードオンリー)
--bit16-22:デバイスのタイプ 0:通常のPCIデバイス 1:P...
--bit23:マルチファンクションデバイス
-BISTレジスタ(0x0cのbit24-31)
-レジスタ0x10以降はデバイスのタイプ(ヘッダタイプ参照)に...
*普通のPCIデバイスの場合のコンフィグレーションレジスタ [#...
-(普通のPCIデバイスの場合=ヘッダタイプのデバイスのタイ...
-ベースアドレス0(0x10のbit0-31、リードライト可)
-ベースアドレス1(0x14のbit0-31、リードライト可)
-ベースアドレス2(0x18のbit0-31、リードライト可)
-ベースアドレス3(0x1cのbit0-31、リードライト可)
-ベースアドレス4(0x20のbit0-31、リードライト可)
-ベースアドレス5(0x24のbit0-31、リードライト可)
--I/OポートやメモリマップトI/Oのアドレスを指定します。
--bit0:空間種別(このbitはリードオンリー) 0:メモリ空...
---どちらなのかでbit構成が変わります
--メモリ空間の場合:
---bit1-2:タイプ(このbitもリードオンリー) 00:32bit...
---bit3:プリフィッチ可能(このbitもリードオンリー)
---bit4-31:ベースアドレス(リードオンリーとリードライト...
---64bitPCIの場合、ベースレジスタは次のやつを上位アドレス...
--I/O空間の場合:
---bit1:リザーブにつき0固定(このbitはリードオンリー)
---bit2-31:ベースアドレス(リードオンリーとリードライト...
--ベースアドレスは、要求する空間サイズに応じて下位bitが0...
---まず、ベースアドレスに0xffffffffを書き込み、そしてこの...
---そうなると、これはメモリ空間要求ベースアドレスで、4GB...
---このような仕様のため、PCIデバイスでは、メモリマップトI...
---設定中にアクセス用のアドレスが変わるわけで、これがまず...
--例えばベースアドレスを3本使う場合はベースアドレス0~2が...
-CardBus CIS(0x28のbit0-31)
-サブシステムベンダID(0x2cのbit0-15、多分リードオンリー)
--コードと社名の関係は多分ベンダIDと同じです。
-サブシステムID(0x2cのbit16-31、多分リードオンリー)
-拡張ROMアドレス(0x30のbit0-31)
-新機能ポインタ(0x34のbit0-7)
-リザーブ(0x34のbit8-31と0x38のbit0-31)
-インタラプトライン(0x3cのbit0-7、リードライト可能)
-インタラプトピン(0x3cのbit8-15)
--これが0なら割り込みを使わないデバイス
-最小グラント(0x3cのbit16-23)
-最大レイテンシ(0x3cのbit24-31)
-ベンダ定義(0x40~0xfcのbit0-31)
*PCIデバイスの探し方 [#uac5a005]
-まずPCIデバイスのどのスロットに何が刺さっているのかを把...
-とりあえず、バス番号0について、デバイス番号を0~31のそれ...
-PCIのルールで、何も接続されていないデバイス番号を指定し...
-0xffffのベンダIDはないので、ベンダIDが0xffffかどうかでそ...
-もし他にもバスがあるなら、そのバスも検索しましょう。
--かつて僕はバスがあるかないかを判定するのが面倒で、0~25...
-機能番号0で読み出してマルチファンクションであると書かれ...
--かつての僕はこれもサボって、マルチファンクションであっ...
* PCIデバイスの使いかた(PnPのやりかた?) [#w23c9190]
-まずデバイスを探します。探し方は上記参照。
-見付けたデバイスが何であるかは、ベンダID、デバイスID、サ...
-コマンドレジスタでメモリ空間とI/O空間をディゼーブルにし...
-対応するドライバが用意できていないデバイスについては、メ...
-IRQの割り当てはチップセット側の設定も必要のようです。PCI...
* PCI-PCIブリッジ [#h694c818]
-AGPやCardBusは、PCIからすればちょっと特別なPCI-PCIブリッ...
* こめんと欄 [#wdfdca71]
-なんかの拍子にこのページが消えてしまったらしいのを復活さ...
-デバイス -- [[名無しさん]] SIZE(10){2005-01-28 (金) 21:0...
#comment
ページ名: