0

私は、単純なディスク ドライバを開発するという 4 分の 1 に及ぶプロジェクトの一環として、ドキュメンテーションを大量に作成してきました。現在、Intel 82801EB IO コントローラー内に実装されているさまざまな atapi および IDE コントローラー レジスターをマップしようとしています。

まず、参照しているドキュメント: www.intel.com/assets/pdf/datasheet/252516.pdf

415 ページの表 154 は、さまざまな構成レジスタのオフセットを示しています。これはばかげた質問のように思えるかもしれませんが、どこからオフセットされているかを見つけるにはどうすればよいですか? これらのレジスター用に予約された何らかの固定ベースアドレスが見つかることを期待していました。そこから、このテーブルを使用してドライバーを構築できます。

たとえば、テーブル 154 では、PCI コマンド レジスタはオフセット 04 ~ 05h に配置されています。レジスターは 417 ページに詳述されており、私はそれを理解していると信じています。しかし、このレジスタが 4 バイト離れたベース アドレスはどこにあるのでしょうか。

更新: 今、使用している D865PERL ボードの固定 IO マップを振り返ってみると、0000-00ffh は B865PERL によって予約されており、動的アドレス情報については ICH5 データシートを参照する必要があることがわかります。上記のテーブル 154 の IDE コントローラ レジスタに使用できると思われます。この時点で、私は教授に電子メールを送信しましたが、これらがどこにあるかをまだ把握しようとしています.

ご覧いただきありがとうございます。

4

2 に答える 2

1

82801EB は、ハードウェアのアドレス空間にマップされます。これはハードウェアに固有であるため、ハードウェアのマニュアルから開始アドレスを見つける必要があります。

Step-1: Get IEB_START_ADDRESS from you manual
For each of the registers in the IDE controller
Step-2: Add offset to IEB_START_ADDRESS (For example, if you want offset 04)
You will have to do dereference the address something like (*(IEB_START_ADDRESS + 4))

ここで、レジスタのサイズに注意してください。

16 ビットの場合は、「unsigned short」を使用します。

32 ビットの場合は、「unsigned int」を使用します。

于 2009-04-22T01:35:18.473 に答える
0

実際のアドレスを見つける必要はなく、IDE コントローラーのバス/デバイス/機能番号を見つける必要がありませんでした。

  1. 可能なすべての PCI バス/デバイス/機能の組み合わせを列挙して、IDE コントローラのベンダーとデバイス ID を検索します
  2. 見つかったら、CONFIG_ADDRESS ポートを書き込み、CONFIG_DATA から情報を読み戻します。

基本的に、バス、デバイス、および関数 (レジスタ オフセットと共に) を取得したら、その情報を PCI CONFIG_ADDRESS レジスタ (cf8h) に書き込み、CONFIG_DATA (cfch) からレジスタの内容を読み取ることができます。

于 2009-05-16T04:49:49.967 に答える