I/Oポートアクセスサポート機能は、入出力デバイスへのアクセスや操作をサポートするための機能である。アドレスを指定したI/Oポートに対して、バイト単位やワード単位で読込みや書込みを行う機能、入出力デバイスの操作時などに使う短い時間の待ち(微小待ち)を実現する機能が含まれる。
I/Oポートアクセスサポート機能は、ライブラリ関数またはC言語のマクロで提供され、これらはタスク独立部およびディスパッチ禁止・割込み禁止の状態から呼び出すことができる。
I/O空間とメモリ空間が独立しているシステムでは、I/Oポートアクセス関数はI/O空間のアクセスとなる。メモリマップドI/Oのみのシステムでは、I/Oポートアクセス関数はメモリ空間のアクセスとなる。メモリマップドI/Oのシステムにおいても、これらの関数を利用することにより、ソフトウェアの移植性や可読性が向上する。
なし
port
のアドレスで示されるI/Oポートに、バイト(8ビット)単位で data
を書き込む。
なし
port
のアドレスで示されるI/Oポートに、ハーフワード(16ビット)単位で data
を書き込む。
なし
port
のアドレスで示されるI/Oポートに、ワード(32ビット)単位で data
を書き込む。
なし
以下のすべてのサービスプロファイルが有効に設定されている場合に限り、本APIはサポートされる。
port
のアドレスで示されるI/Oポートに、ダブルワード(64ビット)の data
を書き込む。
なお、ハードウェアの制約により、ダブルワード(64ビット)単位でI/0ポートを一括アクセスできないシステムにおいては、ダブルワード(64ビット)よりも短い単位に分割されて処理される。
I/O用のデータバスが32ビット以下の場合など、ハードウェア構成の制約により、ダブルワード(64ビット)単位でのI/0ポートアクセスができないシステムも多く存在する。このようなシステム上には、指定のビット幅のデータを一括して処理するという意味での厳密な out_d や in_d の仕様は実装できないことになり、このAPIの本来の目的から言えば、out_d や in_d を未実装とするか、実行時にエラーを返すのが望ましい。しかしながら、実行時にバス構成等を判断してエラーを検出するのは現実的ではないし、64ビットのデータの書込みを32ビット以下の単位に分割して処理しても、問題にならないケースも多い。
このような状況から、out_d や in_d の仕様においては、64ビットのデータを一括して処理できないケースについても許容している。したがって、out_d や in_d で64ビットI/Oポートの一括アクセスが保証できるかどうかは実装依存である。64ビットI/Oポートの一括アクセスが必要であれば、システムのハードウェア構成および out_d や in_d の処理方法の確認が必要である。
なし
port
のアドレスで示されるI/Oポートから、バイト(8ビット)単位で読み込んだデータを、リターンパラメータ data
として返す。
なし
port
のアドレスで示されるI/Oポートから、ハーフワード(16ビット)単位で読み込んだデータを、リターンパラメータ data
として返す。
なし
port
のアドレスで示されるI/Oポートから、ワード(32ビット)単位で読み込んだデータを、リターンパラメータ data
として返す。
なし
以下のサービスプロファイルがすべて有効に設定されている場合に限り、本APIはサポートされる。
port
のアドレスで示されるI/Oポートから、ダブルワード(64ビット)のデータを読み込み、リターンパラメータ data
として返す。
なお、ハードウェアの制約により、ダブルワード(64ビット)単位でI/0ポートを一括アクセスできないシステムにおいては、ダブルワード(64ビット)よりも短い単位に分割されて処理される。
「out_d - I/Oポート書込み(ダブルワード)項」を参照のこと。
なし
指定された時間分(マイクロ秒)の微小待ちを行う。
この待ちは通常ビジーループで実装される。すなわちカーネルの待ち状態ではなく、実行状態のまま微小待ちは行われる。
RAM上で実行する場合、ROM上で実行する場合、メモリキャッシュがオンの場合、オフの場合など、実行環境の影響を受けやすい。したがって、これらの待ち時間はあまり正確ではない。
なし
指定された時間分(ナノ秒)の微小待ちを行う。
この待ちは通常ビジーループで実装される。すなわちカーネルの待ち状態ではなく、実行状態のまま微小待ちは行われる。
RAM上で実行する場合、ROM上で実行する場合、メモリキャッシュがオンの場合、オフの場合など、実行環境の影響を受けやすい。したがって、これらの待ち時間はあまり正確ではない。