PCIについてメモ

CONFIG_ADDRESSを読んでみた

  • こんな感じでコード書いてみた
    int io;
    int s[20];
    io = io_in32(0x0cf8);
    sprintf(s, "0x%x", io);
    適当に表示する。
  • すると、こんなのが返ってきた
    0x80000058
    (2進数に直して) 1000 0000 0000 0000 0000 0000 0101 1000
  • ビットの意味はこんな感じらしい
    bit0-1  :0に固定
    bit2-7  :レジスタアドレス
    bit8-10 :機能番号
    bit11-15:デバイス番号
    bit16-23:バス番号
    bit24-30:リザーブで、0に固定
    bit31   :イネーブルビットで、1に固定
    機能番号とかデバイス番号あたりがない?と思ったら、MonaのWikiでqemuでは返さない見たいな事が書いてました。うむむ。
  • 実機(ぺんぎん)ではこんなのが返ってきた。
    0x80008840
    (2進数に直して) 1000 0000 0000 0000 1000 1000 0100 0000
  • で……、ビットって右から読むのでいいんだよね?(ぉ
  • なんだかよくわからず、VMwareServerでも試してみる
    0x8000005c
    (2進数に直して) 1000 0000 0000 0000 0000 0000 0101 1100
  • (´・ω・`)

コメント覧

最新の10件を表示しています。 コメントページを参照

  • CF8はPCIコンフィグレーションレジスタのレジスタ番号を指定するだけのポートなのでサンプルコードだと直前に書いた値が読み出せるだけ。本来はCF8とCFCを組み合わせて使うのよ -- neri 2007-10-09 (火) 03:59:06
  • CFCを使うんですか〜。ふむふむ、ありがとうございます。 -- あっきぃ 2007-10-09 (火) 10:45:20
  • 「PCIバス&PCI‐Xバスの徹底研究」という本がとても参考になりますよ。 -- ひよひよ 2007-10-09 (火) 19:56:39
  • neriさんの指摘で十分なんだけど、一応補足。(1)「PCIコンフィグのメモリ」っていうのがあると勝手に想像する。(2)メモリというからには、番地がいっぱいあって、それぞれにデータがある。(3)CF8はこれから読み書きしたい"番地"を書き込むところ。だから基本的にここは読まない。代わりに書く!(4)番地を書いたらCFCを読んでみよう!番地を変えていくといろいろ読めるよー。 -- K 2007-10-11 (木) 01:27:17
  • 確かに言葉足りなかったかなーと少し思った -- neri 2007-10-12 (金) 03:18:08
お名前:

Wikiの [ 一覧一覧 最終更新最終更新 ヘルプヘルプ   RSSRSS]