2009-04-22 4 views
0

私は、シンプルなディスクドライバを開発するための私の四半期の長いプロジェクトの一環として、ドキュメントを流してきました。現時点では、私はインテル82801EB IOコントローラの中に実装されているさまざまなatapiとIDEコントローラのレジスタをマップしようとしています。すべてのこのIDEコントローラのアドレスマップの開始位置をメモリ上のどこに配置するかを説明できるものがありますか?

まず、私が言及していた文書:ページ415で www.intel.com/assets/pdf/datasheet/252516.pdf

は、テーブル154は、様々なコンフィギュレーション・レジスタのオフセットを示しています。これは愚かな質問のように見えるかもしれませんが、どのようにオフセットされているのかを調べるにはからへ?私は、これらのレジスタ用に予約されたある種の固定ベースアドレスを見つけることを期待していました。そこから私はこのテーブルを使用してドライバを構築することができます。

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

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

ありがとうございます!

答えて

0

私は決して実際のアドレスではなく、IDEコントローラのバス/デバイス/機能番号を見つける必要はなかった。

  1. 組み合わせが一度見出さ、単にCONFIG_ADDRESSポートを書き込み、バックCONFIG_DATA
から情報を読み取るIDEコントローラ
  • のベンダーとデバイスIDを検索すべての可能なPCIバス/デバイス/機能を列挙

    基本的には、バス、デバイス、および機能(レジスタのオフセットと共に)があれば、その情報をPCI CONFIG_ADDRESSレジスタ(cf8h)に書き込み、CONFIG_DATA(cfch)からレジスタの内容を読み出すことができます。

  • 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"を使用してください。

    +0

    私はD865PERLマザーボードのマニュアル、特に固定IOアドレスマップを見ています。 download.intel.com/support/motherboards/desktop/d865perl/sb/c3176401.pdf この固定IOマップ(54ページ)には、コマンドブロックレジスタのアドレスなどが記載されていますが、IDEコントローラのレジスタは不明です。オペレーションの開始時に私が0000h-00ffh番地に書いたテーブルは? –

    +0

    私はあなたがATAプロトコルを知っていると仮定します。私がD865PERL仕様から理解する限り、プライマリおよびセカンダリIDEポートはコマンドブロック:0170-0177、01f0-01f7にマップされています。0374 - 0377、03f4 - 03f7 ... 私はあなたが直接82801EBコントローラをプログラムする必要はないと思う。 – Alphaneo