|
ataConfigSetting
このフィールドは、一般的なデバイスの設定情報を指定するために使用します。一般に、このフィールドはデバイス設定可能
(device configurable) ではあっても、ATA ドライバレベルでだけ知られているものに使用されます。ATA
Manager の以前のバージョンで定義されていた一部のビットは現在では使用されなくなりました。ATA
Manager 4.0 の現在のインプリメンテーションでは、1 つのビットだけが使用されます。
Bits 5-0 |
予約されています |
0 であることが望ましい |
Bit 6 |
ATAPIPacketDRQ |
1= ATAPI コマンド DRQ に対する割り込み DRQ をチェックする
0= デフォルト − コマンドパケット DRQ のアサーションのみをチェックする |
Bits 31-7 |
予約されています |
0 であることが必須 |
ataPIOSpeedMode
PIO (Polled I/O) モードでのデバイスアクセス速度です。
atapcValid
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
ataRWMultipleCount
将来使用するために予約されています (現在はまだサポートされていません)。
ataSectorsPerCylinder
将来使用するために予約されています (現在はまだサポートされていません)。
ataHeads
将来使用するために予約されています (現在はまだサポートされていません)。
ataSectorsPerTrack
将来使用するために予約されています (現在はまだサポートされていません)。
ataSocketNumber
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
ataSocketType
この ATA バスが位置するソケットのタイプを指定します。次に、現在のソケットタイプを示します。
|
1
|
(kATASocketInternal) |
|
2
|
(kATASocketMB) |
|
3
|
(kATASocketPCMCIA) |
ataDeviceType
この ATA バスにあるデバイスのタイプを指定します。ATA Manager 4.0 以降、このフィールドは次のデバイスタイプのみを返します。
|
0
|
(kATADeviceUnknown) |
|
1
|
(kATADeviceATA) |
|
2
|
(kATADeviceATAPI) |
ATA Manager の以前のバージョンには、PCMCIA デバイスに対応するデバイスタイプが用意されていました。この古いデバイスタイプ
(0x03) は ATA Manager 4 ではもはや返されません。この値は将来使用するために予約されたままになります。このため古いドライバが混乱することもありません。ドライバまたはその他のクライアントで、あるデバイスが
PC カードデバイスであるかどうかを知りたい場合は、このフィールドの代わりに ataSocketType
フィールドをチェックするようにしてください。
atapcAccessMode
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、PC カードデバイスに対するアクセスモードのタイプをサポートするために使用されていました。このモードはインプリメントされず、現在サポートされていません。
atapcVcc
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcVpp1
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcVpp2
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcStatus
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcPin
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcCopy
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
atapcConfigIndex
このフィールドは ATA Manager 4.0 ではもはや使用されません。このフィールドは ATA Manager
の以前のバージョンで、ATA Manager が PC カードのソケット設定を行うときに使用されていました。この機能は現在、他のソフトウェアによって処理されています。
ataSingleDMASpeed
このフィールドは、シングルワード DMA アクセスに使用するタイミングモードを選択するために使用します。
ataMultiDMASpeed
このフィールドは、マルチワード DMA アクセスに使用するタイミングモードを記述します。
ataPIOCycleTime
このフィールドは、PIO (Polled I/O) アクセスに使用するサイクル時間を記述します。
ataMultiCycleTime
このフィールドは、マルチワード DMA アクセスに使用するサイクル時間を記述します。
56 ページ: ATA_MgrInquiry
ATA_MgrInquiry 呼び出し (56 ページ) では、ataPIOMaxMode、ataSingleDMAModes、および
ataMultiDMAModes の各フィールドがもはや使用されなくなりました。この機能は、ATA_BusInquiry
関数 (38 ページで説明されています) に移行されました。ATA Manager では複数のバスをサポートでき、それぞれのバスでは異なるモード設定をサポートできるため、この移行は必要なものでした。たとえば、PCMCIA
ATA カードでは PIO (Polled I/O) データ転送のみをサポートできますが、PowerBook 3400
の内部ドライブでは DMA 転送をサポートすることもできます。
ATA Manager の検出
初期の ROM の一部では、適切なハードウェアがないのに ATA Manager の存在を示す場合がありました。これはクラッシュの原因になります。このため、ATA
Manager の存在を検出する前に、ATA ハードウェアの存在をテストする必要があります。次のコード例は、ATA
Manager を正しく検出する方法を具体的に示しています。
// ----------------------------------------------
// このマシンに ATA Manager があれば true を返す
// ----------------------------------------------
Boolean ATAManagerPresent(void)
{
UInt16 configFlags;
Boolean ATAIsHere = true;
configFlags = LMGetHWCfgFlags();
if (!(configFlags & 0x0080))
ATAIsHere = false;
// (TrapAvailable については Inside Mac VI 3-8 を参照)
if (ATAIsHere && TrapAvailable(kATATrap))
ATAIsHere = true;
return ATAIsHere;
}
|
ATA Manager の履歴
ATA Manager 4.0 と ATA Manager 3.1
ATA Manager 4.0 は PowerPC ネイティブです。ATA Manager 4.0 では、AIM (ATA Interface
Module) という概念が導入されました。これは、SCSI Manager 4.3 の SIM に似たプラグインハードウェア抽象レイヤです。ATA_DeviceConfig
関数には、ATA Manager 4.0 以降使用されなくなったいくつかのフィールドがあります。
ATA Manager 3.1 と ATA Manager 3.0
バージョン 3.1 に加えられた主要な変更点は、ATA_MgrInquiry による一般的なシステムタイミング情報ではなく、バス固有の転送タイミング情報が
ATA_BusInquiry 関数に追加されたことです。インタフェースには新しい関数は追加されませんでした。
ATA Manager 3.0 の次の関数に変更が加えられました。
ATA_ManagerInquiry
ATA_BusInquiry
ATA Manager は、ATA_ManagerInquiry 関数を介して全般的なデータ転送能力をレポートします。ATA
Manager 3.1 またはそれ以上では、さらに ATA_BusInquiry 関数が個別のバスの転送能力を切り離して指定するようになりました。
ATA Manager 3.0 と ATA Manager 2.0
ATA Manager 3.0 に追加された主要な機能は、デバイスに対する DMA I/O オペレーションのサポートです。いくつかの関数が
DMA 固有の情報の取得とレポートを行うようになりましたが、インタフェースには新しい関数は追加されませんでした。
ATA Manager 3.0 で拡張された関数は次のとおりです。
ATA_ManagerInquiry
ATA_SetConfiguration
ATA_GetGonfiguration
ATA Manager 2.0 と ATA Manager 1.0
次に、ATA Manager 2.0 に追加された主な機能の概要を示します。
- ATAPI プロトコルのサポート
- PCMCIA デバイスのサポート
- Card Services を介したホットプラグ/リムーバルデバイスのサポート
- ダイナミックデバイスドライバのロードとパージ
- クライアントコールバックメッセージ/イベント通知システム
- ロケーションアイコンと文字列のサポート
これらの新機能をサポートするために新しい関数が追加され、また既存の関数が拡張されました。このため、これらの関数のさまざまな応答の結果、さまざまな
ataPBVers の値が返されるようになりました。応答における潜在的な違いについては、それぞれの関数を参照してください。
ATA Manager 2.0 に追加された新しい関数は次のとおりです。
ATA_EjectDrive
ATA_GetDevConfig
ATA_SetDevConfig
ATA_DriverLoad
ATA Manager 2.0 で拡張された関数は次のとおりです。
ATA_RegAccess
ATA_DrvrRegister
ATA_DrvrDeregister
ATA_FindRefNum
ATA_MgrInit
ATA_MgrShutDown
ATA Manager 4.0
ATA Manager 4.0 は、PowerBook 3400 の設計に合わせて以前の ATA Manager (v 3.1)
が再設計されたものです。Apple では、ATA デバイスをサポートするすべての新しい CPU
がこの新しい ATA Manager を使用することを期待しています。ATA Manager 4.0 とそのクライアント
(通常は ATA および ATAPI ディスクデバイスドライバ) との間の API は、ATA Manager 3.1
のスーパーセットです。このため、古いディスクドライバも新しい ATA Manager とともに正常に動作することが可能になります。
ATA 4.0 よりも前の ATA Manager は、特殊なタイプの ATA バスコントローラを認識していました。異なる
ATA バスコントローラを持つ新しい CPU が開発されるたびに、ATA Manager は改訂する必要がありました。ATA
4.0 の設計には、AIM (ATA Interface Module) と呼ばれるハードウェア抽象レイヤが含まれています。AIM
はネイティブドライバ (ndrv) で、デバイスマネージャを使って呼び出されません。その代わりに、AIM
は kDriverIsUnderExpertControl ドライバオプションを設定させます。つまり、AIM
がエキスパート (この場合は ATA Manager) によって完全に制御されるということです。新しい
CPU の開発プロジェクトでは、そのプロジェクトに存在する ATA バスコントローラに対応した適切な
AIM のセットを作成するだけです。ATA Manager そのものには手をつけずにそのままにしておけます。
オペレーティングシステムの Name Registry は、ATA バスコントローラに関連するハードウェア固有の情報を格納するために使用します。ATA
Manager では Name Registry を使って、AIM を見つけ出してロードします。さらに AIM は
Name Registry に格納されている CPU 固有の情報を使って初期化を行います。たとえば、ATA
レジスタのベースアドレスは OpenFirmware またはその他のシステムソフトウェアの構成要素によって計算され、ATA
バスコントローラとの間で情報をやり取りするために AIM によって使用されます。
現在、AIM を書こうとする外部のデベロッパ向けのマニュアルは用意されていません。興味のあるデベロッパは、devsupport@apple.com 宛の電子メールで Apple
のデベロッパサポート窓口にお問い合わせください。Apple には、このようなデベロッパと協力して適切なマニュアルを開発する用意があります。
ATA Manager 4.0 は PowerPC ネイティブです。このマネージャは、68K トラップを使って現在でもアクセスすることができます。Power
PC が搭載されたマシンで ATA Manager を呼び出す場合は、いくつかの Mixed Mode グルーを指定して、ataManager
トラップを呼び出す必要があります。次のコードがこのように動作します。
#include <MixedMode.h>
#include <ATA.h>
#define RESULT_OFFSET(type) \
((sizeof(type) == 1) ? 3 : ((sizeof(type) == 2) ? 1 : 0))
#define TBTrapTableAddress(trapNum) (((trapNum & 0x03FF) << 2) +
0xE00)
pascal SInt16 ataManager(ataPB *pb)
{
#ifdef applec
#if sizeof(SInt16) > 4
#error "Result types larger than 4 bytes are not supported."
#endif
#endif
long private_result;
private_result = CallUniversalProc(
*(UniversalProcPtr*)TBTrapTableAddress(0xAAF1),
kPascalStackBased
| RESULT_SIZE(SIZE_CODE(sizeof(SInt16)))
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(pb))),
pb);
return *(((SInt16*)&private_result) + RESULT_OFFSET(SInt16));
}
|
イベントのマニュアル
次のイベントは「ATA Device Software Guide」では十分に説明されていませんでした。
kATAOnlineEvent (code 1)
- このイベントは、ATA または ATAPI デバイスが使用可能になったとき、そのことをクライアントに通知します。このイベントが発生するのは、新しいデバイスがバスに接続されたとき、またはそれまで使用できなかったデバイスが再度使用可能になったときです
(システムスリープの解除によりデバイスへの電源の供給が復旧するときなど)。
デバイスが登録済みのドライバを持つ場合、そのドライバだけにイベントが通知されます。そうでない場合は、いずれかのドライバが望ましい応答を行うまで
(つまり、イベントに対して noErr を使って応答するまで)、登録済みの各デフォルトドライバに通知が行われます。なお、新しく接続されたデバイスの場合、デバイスからロードされたドライバが優先されます。
ドライバはオンラインになったデバイスが新しく接続されたデバイスなのか、それまでオフラインになっていたデバイス
(つまり、接続されてはいても使用可能でない) なのかを判断する必要があります。デバイスに対して
kATARemovedEvent が発生しないかぎり、そのデバイスは接続されていると見なされます。
kATAOfflineEvent (code 2)
- このイベントは、ATA または ATAPI デバイスの登録済みドライバに、そのデバイスが現在使用できない
(オフラインである) ことを通知します。ただし、このデバイスは現在でもバスに接続されていて、オフライン状態は一時的なものと見なされます。このイベントはシステムスリープ時に電源の供給がオフになったときに発生します。
現在、このイベントは ATA Manager が PC Card Manager から PM_SUSPEND
イベント (本質的には Power Manager のスリープ要求イベントと同じ) を受け取ったときだけに生成されます。kATAOfflineEvent
を受け取ったドライバは、通常デバイスの制御を維持しようとしますが、クライアントからそのデバイスへのアクセスは拒否するようになります。さらに、ドライバは、デバイスが再度オンラインになるとき
(このときには kATAOnlineEvent イベントが発生します) に再設定を行う必要があるかどうかにも注意を払う必要があります。
kATARemovedEvent (code 3)
- このイベントは、ATA または ATAPI デバイスの登録済みドライバに、デバイスが取り出されたことを通知します。デバイスの取り出しはソフトウェアによる制御
(たとえば、ATA Manager に対するソフトウェアイジェクトコマンド) または制御なし (たとえば、ユーザによる強制的なイジェクト)
に実行されます。なお、取り出される前に、そのデバイスがオンライン状態のこともあれば、オフライン状態のこともあります。取り出される前の状態がオンラインである場合、
kATAOfflineEvent
イベントは生成されません。というのも、デバイスの取り出しには、オフライン状態の発生が前提として含まれるためです。
kATAResetEvent (code 4)
- このイベントは、ATA または ATAPI デバイスの登録済みドライバに、デバイスがリセットされたことを通知します。デバイスを再度使用する前に、ドライバによって再設定を行わなければならないことがあります。このイベントはもともと、1
つのバスで複数のデバイスを使用するために導入されました (ATA マスタ/スレーブモード)。というのも、リセットはバス上にある特定のデバイスだけでなく、すべてのデバイスに適用されるためです。現在のところ
Apple では、ATA を使ったバス上の複数デバイスをインプリメントしていません。そのため、このイベントもインプリメントされていません。ただし、将来このイベントがインプリメントされたときに問題が発生するのを防ぐため、開発するドライバでは今からこのイベントをサポートしておくことをお勧めします。
kATAOfflineRequest (code 5)
- このイベントはもはや使用されません。このイベントは PC Card Manager の初期段階で定義され、Power
Manager のスリープイベントをクライアントに通知していました。ATA Manager もリクエストをクライアントに通知していました。このイベントはスリープリクエストイベントのようなものです。現在の
PC Card Manager ではスリープ要求イベントに似たイベントだけを許可します。クライアントがこのイベントを拒絶することは許可されません。
kATAEjectRequest (code 6)
- このイベントは、ATA または ATAPI デバイスの登録済みドライバに、デバイスをイジェクトするためのリクエストが行われたことを通知します。このリクエストに対する応答が
0 の場合、デバイスはイジェクトされ、イジェクトが正常に終了したときはその後で
kATARemovedEvent
イベントが生成されます。kATAEjectRequest はある種の保護機構として動作し、イジェクトがペンディングになっていることをドライバに警告します。イジェクトによりデバイスがバスから取り出されるため、ドライバがそのリクエストを初期化した場合を除き、通常、ドライバはこのリクエストを拒絶します。
なお、kATAResetEvent、kATAOfflineRequest、および kATAEjectRequest
イベントは現在のところ ATA Manager にはインプリメントされていません。
今後は使用されないリソース
これまで ATA Manager に関する説明はいくつかの場所で公開されてきました。しかし、これらの書類は今後使用されないものと考えてください。これらの書類は「ATA Device Software Guide」とこの Technote に取って代わられます。
「Q&A
DV 24 ATA Manager Events Clarified」では、いくつかの ATA イベントに関する補足説明が加えられていました。これらのイベントはこの書類にまとめられています。この
Q&A の内容はこの書類にまとめられています。この Q&A は今後使用されないと考えてください。
「Q&A DV
26 Calling ataManager on a Power Macintosh」では、PowerPC コードから ATA Manager
を呼び出す方法が具体的に説明されていました。この Q&A の内容はこの書類にまとめられています。この
Q&A は今後使用されないと考えてください。
「develop
issue 26」の Q&A では、いくつかの ATA イベントに関する補足説明が加えられていました。これらは「Q&A
DV 24 ATA Manager Events Clarified」で説明されているイベントと同じものです。これらのイベントはこの書類にまとめられています。「develop
Journal」の Q&A は今後使用されないと考えてください。
有効なリソース
要約
ATA Manager 4.0 は、「ATA Device Software Guide」で説明されている
ATA Manager 3.0 のスーパーセットです。この書類にはいくつかの小さな誤りがあります。Apple
では、読者のみなさんがこの書類および「ATA Device Software Guide」に追加または訂正を加えることを歓迎します。devsupport@apple.com までコメントをお寄せください。
参考文献
|
次にあげる参考文献の一部は、ftp://fission.dt.wdc.com/x3t13/x3t13.html
または ftp://ftp.symbios.com/pub/standards/io
で入手できます。
- 「ATA Device Software Guide」
- 「AT Attachment Interface for Disk Drives, ANSI X3.221-1994, Approved May 12,
1994」
- 「AT Attachment Interface with Extensions (ATA-2), ANSI ASC X3.279-1996, revision
3, proposed American National Standard 948D」
- 「AT Attachment-3 Interface (ATA-3), ANSI ASC X3.298-199x」
- 「AT Attachment-4 Interface (ATA-4), X3T13 draft」
- 「ATA packet Interface for CD-ROMs, SFF-8020, Revision 1.2, June 13 1994」
- 「Western Digital Enhanced IDE Implementation Guide, by Western Digital Corporation,
revision 5.0」
- 「Fast ATA Sourcebook, Quantum Corporation, November 1994」
- 「Enhanced Disk Drive Specification, by Phoenix Technologies Ltd., version 1.1,
January 95」
|
ダウンロード
「ATA
Device Software Guide」
|