Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

Oracle Solaris DDI/DKI サービスのサマリー

この付録では、Oracle Solaris DDI/DKI によって提供されるインタフェースについて説明します。これらの説明を、完全または最終的なものとは見なさないでください。また、使用法を網羅したガイドが提供されるわけでもありません。これらの説明は、関数が実行する内容を一般的に記述することを目的としています。詳細は、physio (9F) を参照してください。カテゴリは次のとおりです。

モジュール関数

モジュール関数には次のものがあります。

mod_info

ロード可能なモジュールをクエリーする

mod_install

ロード可能なモジュールを追加する

mod_remove

ロード可能なモジュールを削除する

デバイス情報ツリーノード (dev_info_t) 関数

デバイス情報ツリーノード関数には次のものがあります。

ddi_binding_name()

ドライバのバインディング名を返す

ddi_dev_is_sid()

デバイスが自身を識別できるかどうかを指示する

ddi_driver_major()

ドライバのメジャーデバイス番号を返す

ddi_driver_name()

正規化されたドライバ名を返す

ddi_node_name()

devinfo ノード名を返す

ddi_get_devstate()

デバイスの状態をチェックする

ddi_get_instance()

デバイスインスタンス番号を取得する

ddi_get_name()

ドライバのバインディング名を返す

ddi_get_parent()

デバイス情報構造の親を検索する

ddi_root_node()

dev_info ツリーのルートを取得する

デバイス (dev_t) 関数

デバイス関数には次のものがあります。

ddi_create _minor_node()

デバイスのマイナーノードを作成する

ddi_getiminor()

外部の dev_t からカーネル内部のマイナー番号を取得する

ddi_remove _minor_node()

デバイスのマイナーモードを削除する

getmajor()

メジャーデバイス番号を取得する

getminor()

マイナーデバイス番号を取得する

makedevice()

メジャー番号とマイナー番号からデバイス番号を作成する

プロパティー関数

プロパティー関数には次のものがあります。

ddi_prop_exists()

プロパティーの存在をチェックする

ddi_prop_free()

プロパティー検索で消費されたリソースを解放する

ddi_prop_get_int()

整数プロパティーを検索する

ddi_prop_get_int64()

64 ビットの整数プロパティーを検索する

ddi_prop_lookup _byte_array()

バイト配列プロパティーを検索する

ddi_prop_lookup _int_array()

整数配列プロパティーを検索する

ddi_prop_lookup _int64_array()

64 ビットの整数配列プロパティーを検索する

ddi_prop_lookup _string()

文字列プロパティーを検索する

ddi_prop_lookup _string_array()

文字列配列プロパティーを検索する

ddi_prop_remove()

デバイスのプロパティーを削除する

ddi_prop_remove_all()

デバイスのすべてのプロパティーを削除する

ddi_prop_undefine()

デバイスのプロパティーを非表示にする

ddi_prop_update _byte_array()

バイト配列プロパティーを作成または更新する

ddi_prop_update _int()

整数プロパティーを作成または更新する

ddi_prop_update _int64()

64 ビットの整数プロパティーを作成または更新する

ddi_prop_update _int_array()

整数配列プロパティーを作成または更新する

ddi_prop_update _int64_array()

64 ビットの整数配列プロパティーを作成または更新する

ddi_prop_update _string()

文字列プロパティーを作成または更新する

ddi_prop_update _string_array()

文字列配列プロパティーを作成または更新する

表 B-1  非推奨のプロパティー関数
非推奨の関数
代わりの関数
ddi_getlongprop()
ddi_prop_lookup() を参照
ddi_getlongprop_buf()
ddi_prop_lookup()
ddi_getprop()
ddi_prop_get_int()
ddi_getproplen()
ddi_prop_lookup()
ddi_prop_create()
ddi_prop_lookup()
ddi_prop_modify()
ddi_prop_lookup()
ddi_prop_op()
ddi_prop_lookup()

デバイスソフトウェア状態関数

デバイスソフトウェア状態関数には次のものがあります。

ddi_get_driver _private()

デバイスの非公開データ領域のアドレスを取得する

ddi_get_soft _state()

インスタンスのソフト状態構造体へのポインタを取得する

ddi_set_driver _private()

デバイスの非公開データ領域のアドレスを設定する

ddi_soft_state_fini()

ドライバのソフト状態構造体を破棄する

ddi_soft_state_free()

インスタンスのソフト状態構造体を解放する

ddi_soft_state_init()

ドライバのソフト状態構造体を初期化する

ddi_soft_state _zalloc()

インスタンスのソフト状態構造体を割り当てる

メモリー割り当ておよび解放関数

メモリー割り当ておよび解放関数には次のものがあります。

kmem_alloc()

カーネルメモリーを割り当てる

kmem_free()

カーネルメモリーを解放する

kmem_zalloc()

ゼロに初期化されたカーネルメモリーを割り当てる

次の関数は、DMA に使用されるメモリーを割り当ておよび解放します。Direct Memory Access (DMA) Functionsを参照してください。

ddi_dma_mem_alloc()

DMA 転送のためのメモリーを割り当てる

ddi_dma_mem_free()

以前に割り当てられた DMA メモリーを解放する

次の関数は、ユーザー空間にエクスポートされるメモリーを割り当ておよび解放します。User Space Access Functionsを参照してください。

ddi_umem_alloc()

ページ境界割り当てされたカーネルメモリーを割り当てる

ddi_umem_free()

ページ境界割り当てされたカーネルメモリーを解放する

表 B-2  非推奨のメモリー割り当ておよび解放関数
非推奨の関数
代わりの関数
ddi_iopb_alloc()
ddi_dma_mem_alloc()
ddi_iopb_free()
ddi_dma_mem_free()
ddi_mem_alloc()
ddi_dma_mem_alloc()
ddi_mem_free()
ddi_dma_mem_free()

カーネルスレッド制御および同期関数

カーネルスレッド制御および同期関数には次のものがあります。

cv_broadcast()

すべての待機スレッドを呼び起こす

cv_destroy()

割り当てられた条件変数を解放する

cv_init()

条件変数を割り当てる

cv_signal()

1 つの待機スレッドを呼び起こす

cv_timedwait()

タイムアウトを使用してイベントを待機する

cv_timedwait_sig()

タイムアウトを使用してイベントまたはシグナルを待機する

cv_wait()

イベントを待機する

cv_wait_sig()

イベントまたはシグナルを待機する

ddi_can_receive_sig()

現在のスレッドがシグナルを受信できるかどうかを判定する

ddi_enter_critical()

制御のクリティカルリージョンに入る

ddi_exit_critical()

制御のクリティカルリージョンを出る

mutex_destroy()

相互排他ロックを破棄する

mutex_enter()

相互排他ロックを取得する

mutex_exit()

相互排他ロックを解放する

mutex_init()

相互排他ロックを初期化する

mutex_owned()

現在のスレッドが相互排他ロックを保持しているかどうかを判定する

mutex_tryenter()

待機することなく相互排他ロックの取得を試みる

rw_destroy()

読み取り/書き込みロックを破棄する

rw_downgrade()

読み取り/書き込みロックの保持を書き込みから読み取りに降格する

rw_enter()

読み取り/書き込みロックを取得する

rw_exit()

読み取り/書き込みロックを解放する

rw_init()

読み取り/書き込みロックを初期化する

rw_read_locked()

読み取り/書き込みロックが読み取りと書き込みのどちらの目的で保持されているかを調べる

rw_tryenter()

待機することなく読み取り/書き込みロックの取得を試みる

rw_tryupgrade()

読み取り/書き込みロックを保持の読み取りから書き込みに昇格しようと試みる

sema_destroy()

セマフォーを破棄する

sema_init()

セマフォーの初期化

sema_p()

セマフォーを 1 減らし、ブロックする可能性がある

sema_p_sig()

セマフォーを 1 減らすが、シグナルが保留中の場合はブロックしない

sema_tryp()

セマフォーを 1 減らそうと試みるが、ブロックしない

sema_v()

セマフォーを 1 増やし、待機中スレッドをブロック解除する可能性がある

タスクキュー管理関数

タスクキュー管理関数には次のものがあります。これらのインタフェースの詳細については、taskq (9F) のマニュアルページを参照してください。

ddi_taskq_create()

タスクキューを作成する

ddi_taskq_destroy()

タスクキューを破棄する

ddi_taskq_dispatch()

タスクキューにタスクを追加する

ddi_taskq_wait()

保留中のタスクが完了するまで待つ

ddi_taskq_suspend()

タスクキューを一時停止する

ddi_taskq_suspended()

タスクキューが一時停止されているかどうかをチェックする

ddi_taskq_resume()

一時停止されたタスクキューを再開する

割り込み関数

割り込み関数には次のものがあります。

ddi_intr_add _handler(9F)

割り込みハンドラを追加します。

ddi_intr_add _softint(9F)

ソフト割り込みハンドラを追加します。

ddi_intr_alloc(9F)

指定したタイプの割り込みのシステムリソースと割り込みベクターを割り当てます。

ddi_intr_block _disable(9F)

指定した範囲の割り込みを無効にします。MSI の場合のみ。

ddi_intr_block _enable(9F)

指定した範囲の割り込みを有効にします。MSI の場合のみ。

ddi_intr_clr _mask(9F)

指定した割り込みが有効になっている場合に、割り込みマスクをクリアします。

ddi_intr_disable (9F)

指定した割り込みを無効にします。

ddi_intr_dup _handler(9F)

MSI-X とともにのみ使用します。割り当てられた割り込みベクターのアドレスとデータのペアを、同じデバイスの未使用の割り込みベクターにコピーします。

ddi_intr_enable(9F)

指定した割り込みを有効にします。

ddi_intr_free(9F)

指定した割り込みハンドルのシステムリソースと割り込みベクターを解放します。

ddi_intr _get_cap(9F)

指定した割り込みの割り込み許可フラグを返します。

ddi_intr _get_hilevel_pri(9F)

高レベルの割り込みの最小優先順位レベルを返します。

ddi_intr _get_navail(9F)

特定のハードウェアデバイスと指定された割り込みタイプで使用できる割り込みの数を返します。

ddi_intr _get_nintrs(9F)

指定した割り込みタイプでデバイスがサポートしている割り込みの数を取得します。

ddi_intr _get_pending(9F)

割り込み中断ビットがホストブリッジまたはデバイスでサポートされている場合に、そのビットを読み取ります。

ddi_intr _get_pri(9F)

指定した割り込みの現在のソフトウェア優先順位設定を返します。

ddi_intr_get _softint_pri(9F)

指定した割り込みのソフト割り込み優先順位を返します。

ddi_intr_get _supported_types(9F)

デバイスとホストの両方でサポートされているハードウェア割り込みのタイプを返します。

ddi_intr_remove _handler(9F)

指定した割り込みハンドラを削除します。

ddi_intr_remove _softint(9F)

指定したソフト割り込みハンドラを削除します。

ddi_intr _set_cap(9F)

指定した割り込みの DDI_INTR_FLAG_LEVEL または DDI_INTR_FLAG_EDGE フラグを設定します。

ddi_intr _set_mask(9F)

指定した割り込みが有効になっている場合に、割り込みマスクを設定します。

ddi_intr_set _pri(9F)

指定した割り込みの割り込み優先順位レベルを設定します。

ddi_intr_set _softint_pri(9F)

指定したソフト割り込みの相対ソフト割り込み優先順位を変更します。

ddi_intr_trigger _softint(9F)

指定したソフト割り込みをトリガーします。

新しいフレームワークの機能を利用するには、上のインタフェースを使用してください。次の表に示されている非推奨のインタフェースを使用しないでください。これらの非推奨のインタフェースは、互換性のためにのみ保持されています。

表 B-3  非推奨の割り込み関数
非推奨の割り込み関数
代わりの関数
ddi_add_intr(9F)
3 段階の処理:
ddi_add_softintr(9F)
ddi_dev_nintrs(9F)
ddi_get_iblock_cookie(9F)
3 段階の処理:
ddi_get_soft_iblock_cookie(9F)
3 段階の処理:
ddi_intr_hilevel(9F)
3 段階の処理:
ddi_remove_intr(9F)
3 段階の処理:
ddi_remove_softintr(9F)
ddi_trigger_softintr(9F)

プログラム式入出力関数

プログラム式入出力関数には次のものがあります。

ddi_dev_nregs()

デバイスが備えているレジスタセットの数を返す

ddi_dev_regsize()

デバイスのレジスタのサイズを返す

ddi_regs_map_setup()

レジスタアドレス空間のマッピングを設定する

ddi_regs_map_free()

以前にマップされたレジスタアドレス空間を解放する

ddi_device_copy()

あるデバイスレジスタのデータを別のデバイスレジスタにコピーする

ddi_device_zero()

デバイスをゼロに初期化する

ddi_check_acc _handle()

データアクセスハンドルをチェックする

ddi_get8()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから 8 ビットデータを読み取る

ddi_get16()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから 16 ビットデータを読み取る

ddi_get32()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから 32 ビットデータを読み取る

ddi_get64()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから 64 ビットデータを読み取る

ddi_put8()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに 8 ビットデータを書き込む

ddi_put16()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに 16 ビットデータを書き込む

ddi_put32()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに 32 ビットデータを書き込む

ddi_put64()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに 64 ビットデータを書き込む

ddi_rep_get8()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから複数の 8 ビットデータを読み取る

ddi_rep_get16()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから複数の 16 ビットデータを読み取る

ddi_rep_get32()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから複数の 32 ビットデータを読み取る

ddi_rep_get64()

マップされたメモリー、デバイスレジスタ、または DMA メモリーから複数の 64 ビットデータを読み取る

ddi_rep_put8()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに複数の 8 ビットデータを書き込む

ddi_rep_put16()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに複数の 16 ビットデータを書き込む

ddi_rep_put32()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに複数の 32 ビットデータを書き込む

ddi_rep_put64()

マップされたメモリー、デバイスレジスタ、または DMA メモリーに複数の 64 ビットデータを書き込む

ddi_peek8()

ある場所から 8 ビット値を慎重に読み取る

ddi_peek16()

ある場所から 16 ビット値を慎重に読み取る

ddi_peek32()

ある場所から 32 ビット値を慎重に読み取る

ddi_peek64()

ある場所から 64 ビット値を慎重に読み取る

ddi_poke8()

ある場所に 8 ビット値を慎重に書き込む

ddi_poke16()

ある場所に 16 ビット値を慎重に書き込む

ddi_poke32()

ある場所に 32 ビット値を慎重に書き込む

ddi_poke64()

ある場所に 64 ビット値を慎重に書き込む

上に示した一般的なプログラム式入出力関数は常に、次に示す memio、および pci_config 関数の代わりに使用できます。ただし、コンパイル時にアクセスのタイプがわかっている場合は、次の関数を代わりに使用できます。

ddi_io_get8()

入出力空間内のマップされたデバイスレジスタから 8 ビットデータを読み取る

ddi_io_get16()

入出力空間内のマップされたデバイスレジスタから 16 ビットデータを読み取る

ddi_io_get32()

入出力空間内のマップされたデバイスレジスタから 32 ビットデータを読み取る

ddi_io_put8()

入出力空間内のマップされたデバイスレジスタに 8 ビットデータを書き込む

ddi_io_put16()

入出力空間内のマップされたデバイスレジスタに 16 ビットデータを書き込む

ddi_io_put32()

入出力空間内のマップされたデバイスレジスタに 32 ビットデータを書き込む

ddi_io_rep_get8()

入出力空間内のマップされたデバイスレジスタから複数の 8 ビットデータを読み取る

ddi_io_rep_get16()

入出力空間内のマップされたデバイスレジスタから複数の 16 ビットデータを読み取る

ddi_io_rep_get32()

入出力空間内のマップされたデバイスレジスタから複数の 32 ビットデータを読み取る

ddi_io_rep_put8()

入出力空間内のマップされたデバイスレジスタに複数の 8 ビットデータを書き込む

ddi_io_rep_put16()

入出力空間内のマップされたデバイスレジスタに複数の 16 ビットデータを書き込む

ddi_io_rep_put32()

入出力空間内のマップされたデバイスレジスタに複数の 32 ビットデータを書き込む

ddi_mem_get8()

メモリー空間または DMA メモリー内のマップされたデバイスから 8 ビットデータを読み取る

ddi_mem_get16()

メモリー空間または DMA メモリー内のマップされたデバイスから 16 ビットデータを読み取る

ddi_mem_get32()

メモリー空間または DMA メモリー内のマップされたデバイスから 32 ビットデータを読み取る

ddi_mem_get64()

メモリー空間または DMA メモリー内のマップされたデバイスから 64 ビットデータを読み取る

ddi_mem_put8()

メモリー空間または DMA メモリー内のマップされたデバイスに 8 ビットデータを書き込む

ddi_mem_put16()

メモリー空間または DMA メモリー内のマップされたデバイスに 16 ビットデータを書き込む

ddi_mem_put32()

メモリー空間または DMA メモリー内のマップされたデバイスに 32 ビットデータを書き込む

ddi_mem_put64()

メモリー空間または DMA メモリー内のマップされたデバイスに 64 ビットデータを書き込む

ddi_mem_rep_get8()

メモリー空間または DMA メモリー内のマップされたデバイスから複数の 8 ビットデータを読み取る

ddi_mem_rep_get16()

メモリー空間または DMA メモリー内のマップされたデバイスから複数の 16 ビットデータを読み取る

ddi_mem_rep_get32()

メモリー空間または DMA メモリー内のマップされたデバイスから複数の 32 ビットデータを読み取る

ddi_mem_rep_get64()

メモリー空間または DMA メモリー内のマップされたデバイスから複数の 64 ビットデータを読み取る

ddi_mem_rep_put8()

メモリー空間または DMA メモリー内のマップされたデバイスに複数の 8 ビットデータを書き込む

ddi_mem_rep_put16()

メモリー空間または DMA メモリー内のマップされたデバイスに複数の 16 ビットデータを書き込む

ddi_mem_rep_put32()

メモリー空間または DMA メモリー内のマップされたデバイスに複数の 32 ビットデータを書き込む

ddi_mem_rep_put64()

メモリー空間または DMA メモリー内のマップされたデバイスに複数の 64 ビットデータを書き込む

pci_config_setup()

PCI ローカルバス構成スペースへのアクセスを設定する

pci_config_teardown()

PCI ローカルバス構成スペースへのアクセスを破棄する

pci_config_get8()

PCI ローカルバス構成スペースから 8 ビットデータを読み取る

pci_config_get16()

PCI ローカルバス構成スペースから 16 ビットデータを読み取る

pci_config_get32()

PCI ローカルバス構成スペースから 32 ビットデータを読み取る

pci_config_get64()

PCI ローカルバス構成スペースから 64 ビットデータを読み取る

pci_config_put8()

PCI ローカルバス構成スペースに 8 ビットデータを書き込む

pci_config_put16()

PCI ローカルバス構成スペースに 16 ビットデータを書き込む

pci_config_put32()

PCI ローカルバス構成スペースに 32 ビットデータを書き込む

pci_config_put64()

PCI ローカルバス構成スペースに 64 ビットデータを書き込む

表 B-4  非推奨のプログラム式入出力関数
非推奨の関数
代わりの関数
ddi_getb()
ddi_get8()
ddi_getl()
ddi_get32()
ddi_getll()
ddi_get64()
ddi_getw()
ddi_get16()
ddi_io_getb()
ddi_io_get8()
ddi_io_getl()
ddi_io_get32()
ddi_io_getw()
ddi_io_get16()
ddi_io_putb()
ddi_io_put8()
ddi_io_putl()
ddi_io_put32()
ddi_io_putw()
ddi_io_put16()
ddi_io_rep_getb()
ddi_io_rep_get8()
ddi_io_rep_getl()
ddi_io_rep_get32()
ddi_io_rep_getw()
ddi_io_rep_get16()
ddi_io_rep_putb()
ddi_io_rep_put8()
ddi_io_rep_putl()
ddi_io_rep_put32()
ddi_io_rep_putw()
ddi_io_rep_put16()
ddi_map_regs()
ddi_regs_map_setup()
ddi_mem_getb()
ddi_mem_get8()
ddi_mem_getl()
ddi_mem_get32()
ddi_mem_getll()
ddi_mem_get64()
ddi_mem_getw()
ddi_mem_get16()
ddi_mem_putb()
ddi_mem_put8()
ddi_mem_putl()
ddi_mem_put32()
ddi_mem_putll()
ddi_mem_put64()
ddi_mem_putw()
ddi_mem_put16()
ddi_mem_rep_getb()
ddi_mem_rep_get8()
ddi_mem_rep_getl()
ddi_mem_rep_get32()
ddi_mem_rep_getll()
ddi_mem_rep_get64()
ddi_mem_rep_getw()
ddi_mem_rep_get16()
ddi_mem_rep_putb()
ddi_mem_rep_put8()
ddi_mem_rep_putl()
ddi_mem_rep_put32()
ddi_mem_rep_putll()
ddi_mem_rep_put64()
ddi_mem_rep_putw()
ddi_mem_rep_put16()
ddi_peekc()
ddi_peek8()
ddi_peekd()
ddi_peek64()
ddi_peekl()
ddi_peek32()
ddi_peeks()
ddi_peek16()
ddi_pokec()
ddi_poke8()
ddi_poked()
ddi_poke64()
ddi_pokel()
ddi_poke32()
ddi_pokes()
ddi_poke16()
ddi_putb()
ddi_put8()
ddi_putl()
ddi_put32()
ddi_putll()
ddi_put64()
ddi_putw()
ddi_put16()
ddi_rep_getb()
ddi_rep_get8()
ddi_rep_getl()
ddi_rep_get32()
ddi_rep_getll()
ddi_rep_get64()
ddi_rep_getw()
ddi_rep_get16()
ddi_rep_putb()
ddi_rep_put8()
ddi_rep_putl()
ddi_rep_put32()
ddi_rep_putll()
ddi_rep_put64()
ddi_rep_putw()
ddi_rep_put16()
ddi_unmap_regs()
ddi_regs_map_free()
inb()
ddi_io_get8()
inl()
ddi_io_get32()
inw()
ddi_io_get16()
outb()
ddi_io_put8()
outl()
ddi_io_put32()
outw()
ddi_io_put16()
pci_config_getb()
pci_config_get8()
pci_config_getl()
pci_config_get32()
pci_config_getll()
pci_config_get64()
pci_config_getw()
pci_config_get16()
pci_config_putb()
pci_config_put8()
pci_config_putl()
pci_config_put32()
pci_config_putll()
pci_config_put64()
pci_config_putw()
pci_config_put16()
repinsb()
ddi_io_rep_get8()
repinsd()
ddi_io_rep_get32()
repinsw()
ddi_io_rep_get16()
repoutsb()
ddi_io_rep_put8()
repoutsd()
ddi_io_rep_put32()
repoutsw()
ddi_io_rep_put16()

ダイレクトメモリーアクセス (DMA) 関数

DMA 関数には次のものがあります。

ddi_dma_alloc_handle()

DMA ハンドルを割り当てる

ddi_dma_free_handle()

DMA ハンドルを解放する

ddi_dma_mem_alloc()

DMA 転送のためのメモリーを割り当てる

ddi_dma_mem_free()

以前に割り当てられた DMA メモリーを解放する

ddi_dma_addr_bind _handle()

アドレスを DMA ハンドルにバインドする

ddi_dma_buf_bind _handle()

システムバッファーを DMA ハンドルにバインドする

ddi_dma_unbind _handle()

DMA ハンドル内のアドレスをバインド解除する

ddi_dma_nextcookie()

以降の DMA cookie を取得する

ddi_dma_getwin()

新しい DMA ウィンドウをアクティブにする

ddi_dma_numwin()

DMA ウィンドウの数を取得する

ddi_dma_sync()

メモリーの CPU と入出力のビューの同期をとる

ddi_check_dma _handle()

DMA ハンドルをチェックする

ddi_dma_set_sbus64()

SBus 上の 64 ビット転送を許可する

ddi_slaveonly()

デバイスが、スレーブのみがアクセスできる場所にインストールされているかどうかを報告する

ddi_iomin()

DMA の最小の整列および転送サイズを検索する

ddi_dma_burstsizes()

DMA マッピングに対して許可されているバーストサイズを検索する

ddi_dma_devalign()

DMA のマッピング整列および最小の転送サイズを検索する

ddi_dmae_alloc()

DMA チャネルを取得する

ddi_dmae_release()

DMA チャネルを解放する

ddi_dmae_getattr()

DMA エンジンの属性を取得する

ddi_dmae_prog()

DMA チャネルをプログラムする

ddi_dmae_stop()

DMA エンジンの操作を終了する

ddi_dmae_disable()

DMA チャネルを無効にする

ddi_dmae_enable()

DMA チャネルを有効にする

ddi_dmae_getcnt()

残りの DMA エンジン数を取得する

ddi_dmae_1stparty()

DMA チャネルのカスケードモードを構成する

ddi_dma_coff()

DMA cookie を DMA ハンドル内のオフセットに変換する

表 B-5  非推奨のダイレクトメモリーアクセス (DMA) 関数
非推奨の関数
代わりの関数
ddi_dma_addr_setup()
ddi_dma_alloc_handle()ddi_dma_addr_bind_handle()
ddi_dma_buf_setup()
ddi_dma_alloc_handle()ddi_dma_buf_bind_handle()
ddi_dma_curwin()
ddi_dma_getwin()
ddi_dma_free()
ddi_dma_free_handle()
ddi_dma_htoc()
ddi_dma_addr_bind_handle()ddi_dma_buf_bind_handle()
ddi_dma_movwin()
ddi_dma_getwin()
ddi_dma_nextseg()
ddi_dma_nextcookie()
ddi_dma_segtocookie()
ddi_dma_nextcookie()
ddi_dma_setup()
ddi_dma_alloc_handle()ddi_dma_addr_bind_handle()ddi_dma_buf_bind_handle()
ddi_dmae_getlim()
ddi_dmae_getattr()
ddi_iopb_alloc()
ddi_dma_mem_alloc()
ddi_iopb_free()
ddi_dma_mem_free()
ddi_mem_alloc()
ddi_dma_mem_alloc()
ddi_mem_free()
ddi_dma_mem_free()
hat_getkpfnum()
ddi_dma_addr_bind_handle()ddi_dma_buf_bind_handle()ddi_dma_nextcookie()

ユーザー空間アクセス関数

ユーザー空間アクセス関数には次のものがあります。

ddi_copyin()

データをドライババッファーにコピーする

ddi_copyout()

ドライバからデータをコピーする

uiomove()

uio 構造体を使用してカーネルデータをコピーする

ureadc()

文字を uio 構造体に追加する

uwritec()

uio 構造体から文字を削除する

getminor()

マイナーデバイス番号を取得する

ddi_model_convert _from()

データモデルタイプの不一致を判定する

IOC_CONVERT_FROM()

M_IOCTL の内容を変換する必要があるかどうかを判定する

STRUCT_DECL()

異なる可能性のあるデータモデル内のアプリケーションデータへのハンドルを確立する

STRUCT_HANDLE()

異なる可能性のあるデータモデル内のアプリケーションデータへのハンドルを確立する

STRUCT_INIT()

異なる可能性のあるデータモデル内のアプリケーションデータへのハンドルを確立する

STRUCT_SET_HANDLE()

異なる可能性のあるデータモデル内のアプリケーションデータへのハンドルを確立する

SIZEOF_PTR()

指定されたデータモデル内のポインタのサイズを返す

SIZEOF_STRUCT()

指定されたデータモデル内の構造体のサイズを返す

STRUCT_SIZE()

アプリケーションデータモデル内の構造体のサイズを返す

STRUCT_BUF()

構造体のネイティブモードインスタンスへのポインタを返す

STRUCT_FADDR()

構造体の指定されたフィールドへのポインタを返す

STRUCT_FGET()

アプリケーションデータモデル内の構造体の指定されたフィールドを返す

STRUCT_FGETP()

アプリケーションデータモデル内の構造体の指定されたポインタフィールドを返す

STRUCT_FSET()

アプリケーションデータモデル内の構造体の指定されたフィールドを設定する

STRUCT_FSETP()

アプリケーションデータモデル内の構造体の指定されたポインタフィールドを設定する

表 B-6  非推奨のユーザー空間アクセス関数
非推奨の関数
代わりの関数
copyin()
ddi_copyin()
copyout()
ddi_copyout()
ddi_getminor()
getminor()

ユーザープロセスイベント関数

ユーザープロセスイベント関数には次のものがあります。

pollwakeup()

イベントが発生したことをプロセスに通知する

proc_ref()

シグナルへのプロセス上のハンドルを取得する

proc_unref()

シグナルへのプロセス上のハンドルを解放する

proc_signal()

シグナルをプロセスに送信する

ユーザープロセス情報関数

ユーザープロセス情報関数には次のものがあります。

ddi_get_cred()

呼び出し元の資格構造体へのポインタを返す

drv_priv()

プロセスの資格特権を判定する

ddi_get_pid()

プロセス ID を返す

表 B-7  非推奨のユーザープロセス情報関数
非推奨の関数
代わりの関数
drv_getparm()
ddi_get_pid()ddi_get_cred()

ユーザーアプリケーションカーネルおよびデバイスアクセス関数

ユーザーアプリケーションカーネルおよびデバイスアクセス関数には次のものがあります。

ddi_dev_nregs()

デバイスが備えているレジスタセットの数を返す

ddi_dev_regsize()

デバイスのレジスタのサイズを返す

ddi_devmap_segmap()devmap_setup()

devmap フレームワークを使用して、デバイスメモリーへのユーザーマッピングを設定する

devmap_devmem_setup()

デバイスメモリーをユーザー空間にエクスポートする

devmap_load()

メモリーアドレス変換を検証する

devmap_unload()

メモリーアドレス変換を無効にする

devmap_do_ctxmgt()

マッピング上のデバイスコンテキストの切り替えを実行する

devmap_set_ctx _timeout()

コンテキスト管理コールバックのタイムアウト値を設定する

devmap_default _access()

デフォルトのドライバメモリーアクセス関数

ddi_umem_alloc()

ページ境界割り当てされたカーネルメモリーを割り当てる

ddi_umem_free()

ページ境界割り当てされたカーネルメモリーを解放する

ddi_umem_lock()

メモリーページをロックする

ddi_umem_unlock()

メモリーページをロック解除する

ddi_umem_iosetup()

アプリケーションメモリーへの入出力要求を設定する

devmap_umem_setup()

カーネルメモリーをユーザー空間にエクスポートする

ddi_model_convert _from()

データモデルタイプの不一致を判定する

表 B-8  非推奨のユーザーアプリケーションカーネルおよびデバイスアクセス関数
非推奨の関数
代わりの関数
ddi_mapdev()
devmap_setup()
ddi_mapdev_intercept()
devmap_load()
ddi_mapdev_nointercept()
devmap_unload()
ddi_mapdev_set_device_acc_attr()
devmap()
ddi_segmap()
devmap()
ddi_segmap_setup()
devmap_setup()
hat_getkpfnum()
devmap()
ddi_mmap_get_model()
devmap()

時間関連関数

時間関連関数には次のものがあります。

ddi_get_lbolt()

リブート以降のクロック刻みの数を返す

ddi_get_time()

現在の時間 (秒単位) を返す

ddi_periodic_add()

ナノ秒周期のタイムアウト要求を発行する

ddi_periodic_delete()

ナノ秒周期のタイムアウト要求を取り消す

delay()

指定されたクロック刻みの数だけ実行を遅延させる

drv_hztousec()

クロック刻みをマイクロ秒に変換する

drv_usectohz()

マイクロ秒をクロック刻みに変換する

drv_usecwait()

指定された期間、ビジー状態で待機する

gethrtime()

高精度の時間を取得する

gethrvtime()

高精度の LWP 仮想時間を取得する

timeout()

指定された時間の長さのあとに関数を実行する

untimeout()

以前のタイムアウト関数呼び出しを取り消す

drv_getparm()

ddi_get_lbolt()ddi_get_time()

表 B-9  非推奨の時間関連関数
非推奨の関数
代わりの関数
drv_getparm()
ddi_get_lbolt()ddi_get_time()

電源管理関数

電源管理関数には次のものがあります。

ddi_removing_power()

DDI_SUSPEND でデバイスの電源が切れているかどうかをチェックする

pci_report_pmcap()

PCI デバイスの電源管理機能を報告する

pm_busy_component()

コンポーネントをビジー状態としてマークする

pm_idle_component()

コンポーネントをアイドル状態としてマークする

pm_raise_power()

コンポーネントの電源レベルを上げる

pm_lower_power()

コンポーネントの電源レベルを下げる

pm_power_has _changed()

電源管理フレームワークに自律的な電源レベルの変更を通知する

pm_trans_check()

デバイスの電源再投入のアドバイザリチェック

表 B-10  非推奨の電源管理関数
関数名
説明
ddi_dev_is_needed()
システムにデバイスのコンポーネントが必要なことを通知する
pm_create_components()
電源管理可能なコンポーネントを作成する
pm_destroy_components()
電源管理可能なコンポーネントを破棄する
pm_get_normal_power()
デバイスコンポーネントの通常の電源レベルを取得する
pm_set_normal_power()
デバイスコンポーネントの通常の電源レベルを設定する

障害管理関数

障害管理関数には次のものがあります。

ddi_fm_init()

宣言された障害管理機能に基づいてリソースを割り当て、初期化する

ddi_fm_fini()

ddi_fm_init() に対して宣言された障害管理機能をサポートするために、このデバイスインスタンスに割り当てられたリソースをクリーンアップする

ddi_fm_capable()

現在このデバイスインスタンスに対して設定されている機能ビットマスクを返す

ddi_fm_handler _register()

IO 障害管理フレームワークにエラーハンドラコールバックルーチンを登録する

ddi_fm_handler _unregister()

ddi_fm_handler_register() で登録されたエラーハンドラコールバックルーチンを削除する

ddi_fm_acc_err_get()

アクセスハンドルのエラーステータスを返す

ddi_fm_dma_err_get()

DMA ハンドルのエラーステータスを返す

ddi_fm_acc_err _clear()

アクセスハンドルのエラーステータスをクリアする

ddi_fm_dma_err _clear()

DMA ハンドルのエラーステータスをクリアする

ddi_fm_ereport_post()

Fault Manager デーモン fmd(1M) に提供するためのエンコードされた障害管理エラー報告の名前と値のペアのリストをキューに入れる

ddi_fm_service _impact()

エラーの影響を報告する

pci_ereport_setup()

エラー報告作成のサポートを初期化し、PCI、PCI/X、または PCI Express 構成スペースへの以降のアクセスのためのリソースを設定する

pci_ereport _teardown()

このデバイスインスタンスに対して pci_ereport_setup() によって割り当ておよび設定されたリソースをすべて解放する

pci_ereport_post()

PCI、PCI/X、または PCI Express のバスエラーをすべてスキャンして送信する

カーネル統計関数

カーネル統計 (kstats) 関数には次のものがあります。

kstat_create()

新しい kstat を作成して初期化する

kstat_delete()

システムから kstat を削除する

kstat_install()

完全に初期化された kstat をシステムに追加する

kstat_named_init()

名前付きの kstat を初期化する

kstat_runq_back _to_waitq()

実行キューから待機キューへのトランザクション移行を記録する

kstat_runq_enter()

実行キューへのトランザクション追加を記録する

kstat_runq_exit()

実行キューからのトランザクション削除を記録する

kstat_waitq_enter()

待機キューへのトランザクション追加を記録する

kstat_waitq_exit()

待機キューからのトランザクション削除を記録する

kstat_waitq_to_runq()

待機キューから実行キューへのトランザクション移行を記録する

カーネルロギングおよび印刷関数

カーネルロギングおよび印刷関数には次のものがあります。

cmn_err()vcmn_err()

エラーメッセージを表示する

ddi_report_dev()

デバイスを通知する

strlog()

ログドライバにメッセージを送信する

ddi_dev_report_fault()

ハードウェア障害を報告する

scsi_errmsg()

SCSI 要求検知メッセージを表示する

scsi_log()

SCSI デバイス関連のメッセージを表示する

scsi_vu_errmsg()

SCSI 要求検知メッセージを表示する

バッファリングされた入出力関数

バッファリングされた入出力関数には次のものがあります。

physio()

物理入出力を実行する

aphysio()

非同期物理入出力を実行する

anocancel()

非同期入出力要求の取り消しを回避する

minphys()

physio() のバッファーサイズを制限する

biowait()

ブロック入出力の完了を保留しているプロセスを中断する

biodone()

バッファー入出力転送のあとにバッファーを解放し、ブロックされたスレッドに通知する

bioerror()

バッファーのヘッダー内のエラーを示す

geterror()

入出力エラーを返す

bp_mapin()

仮想アドレス空間を割り当てる

bp_mapout()

仮想アドレス空間を解放する

disksort()

バッファーをソートするために単方向エレベータシークの方針を使用する

getrbuf()

raw バッファーのヘッダーを取得する

freerbuf()

raw バッファーのヘッダーを解放する

biosize()

バッファー構造体のサイズを返す

bioinit()

バッファー構造体を初期化する

biofini()

バッファー構造体の初期化を解除する

bioreset()

入出力が完了したあとに非公開のバッファーのヘッダーを再利用する

bioclone()

別のバッファーを複製する

biomodified()

バッファーが変更されているかどうかをチェックする

clrbuf()

バッファーの内容を消去する

仮想メモリー関数

仮想メモリー関数には次のものがあります。

ddi_btop()

デバイスのバイト数をページ数に変換する (切り捨て)

ddi_btopr()

デバイスのバイト数をページ数に変換する (切り上げ)

ddi_ptob()

デバイスのページ数をバイト数に変換する

btop()

バイト単位のサイズをページ単位のサイズに変換する (切り捨て)

btopr()

バイト単位のサイズをページ単位のサイズに変換する (切り上げ)

ptob()

ページ単位のサイズをバイト単位のサイズに変換する

表 B-11  非推奨の仮想メモリー関数
非推奨の関数
代わりの関数
hat_getkpfnum()
devmap()ddi_dma_*_bind_handle()ddi_dma_nextcookie()

デバイス ID 関数

デバイス ID 関数には次のものがあります。

ddi_devid_init()

デバイス ID 構造体を割り当てる

ddi_devid_free()

デバイス ID 構造体を解放する

ddi_devid_register()

デバイス ID を登録する

ddi_devid _unregister()

デバイス ID の登録を解除する

ddi_devid_compare()

2 つのデバイス ID を比較する

ddi_devid_sizeof()

デバイス ID のサイズを返す

ddi_devid_valid()

デバイス ID を検証する

ddi_devid_str _encode()

デバイス ID と minor_name を NULL で終わる ASCII 文字列にエンコードし、その文字列へのポインタを返す

ddi_devid_str _decode()

以前にエンコードされた文字列からデバイス ID と minor_name をデコードし、抽出された部分へのポインタを割り当てて返す

ddi_devid_str_free()

ddi_devid_* 関数によって返されたすべての文字列を解放する

SCSI 関数

SCSI 関数には次のものがあります。

scsi_probe()

SCSI デバイスをプローブする

scsi_unprobe()

最初のプローブ中に割り当てられたリソースを解放する

scsi_alloc _consistent_buf()

SCSI DMA のための入出力バッファーを割り当てる

scsi_free _consistent_buf()

以前に割り当てられた SCSI DMA 入出力バッファーを解放する

scsi_init_pkt()

完全な SCSI パケットを準備する

scsi_destroy_pkt()

割り当てられた SCSI パケットとその DMA リソースを解放する

scsi_setup_cdb()

SCSI コマンド記述子ブロック (CDB) を設定する

scsi_transport()

SCSI コマンドを開始する

scsi_poll()

ポーリングされた SCSI コマンドを実行する

scsi_ifgetcap()

SCSI トランスポート機能を取得する

scsi_ifsetcap()

SCSI トランスポート機能を設定する

scsi_sync_pkt()

メモリーの CPU と入出力のビューの同期をとる

scsi_abort()

SCSI コマンドを中止する

scsi_reset()

SCSI バスまたはターゲットをリセットする

scsi_reset_notify()

ターゲットドライバにバスのリセットを通知する

scsi_cname()

SCSI コマンドをデコードする

scsi_dname()

SCSI 周辺デバイスのタイプをデコードする

scsi_mname()

SCSI メッセージをデコードする

scsi_rname()

SCSI パケットの完了の理由をデコードする

scsi_sname()

SCSI 検知キーをデコードする

scsi_errmsg()

SCSI 要求検知メッセージを表示する

scsi_log()

SCSI デバイス関連のメッセージを表示する

scsi_vu_errmsg()

SCSI 要求検知メッセージを表示する

scsi_hba_init()

SCSI HBA システムの初期化ルーチン

scsi_hba_fini()

SCSI HBA システムの完了ルーチン

scsi_hba_attach _setup()

SCSI HBA の接続ルーチン

scsi_hba_detach()

SCSI HBA の切り離しルーチン

scsi_hba_probe()

デフォルトの SCSI HBA プローブ関数

scsi_hba_tran_alloc()

トランスポート構造体を割り当てる

scsi_hba_tran_free()

トランスポート構造体を解放する

scsi_hba_pkt_alloc()

scsi_pkt 構造体を割り当てる

scsi_hba_pkt_free()

scsi_pkt 構造体を解放する

scsi_hba_lookup _capstr()

インデックスマッチング機能文字列を返す

表 B-12  非推奨の SCSI 関数
非推奨の関数
代わりの関数
free_pktiopb()
scsi_free_consistent_buf()
get_pktiopbs()
scsi_alloc_consistent_buf()
makecom_g0()
scsi_setup_cdb()
makecom_g0_s()
scsi_setup_cdb()
makecom_g1()
scsi_setup_cdb()
makecom_g5()
scsi_setup_cdb()
scsi_dmafree()
scsi_destroy_pkt()
scsi_dmaget()
scsi_init_pkt()
scsi_hba_attach()
scsi_hba_attach_setup()
scsi_pktalloc()
scsi_init_pkt()
scsi_pktfree()
scsi_destroy_pkt()
scsi_resalloc()
scsi_init_pkt()
scsi_resfree()
scsi_destroy_pkt()
scsi_slave()
scsi_probe()
scsi_unslave()
scsi_unprobe()

リソースマップ管理関数

リソースマップ管理関数には次のものがあります。

rmallocmap()

リソースマップを割り当てる

rmallocmap_wait()

リソースマップを割り当て、必要に応じて待機する

rmfreemap()

リソースマップを解放する

rmalloc()

リソースマップから領域を割り当てる

rmalloc_wait()

リソースマップから領域を割り当て、必要に応じて待機する

rmfree()

領域を元のリソースマップに解放する

システムのグローバル状態

ddi_in_panic()

システムがパニック状態にあるかどうかを判定する

ユーティリティー関数

次の一覧は、使用可能なユーティリティー関数のサブセットを示したものです。

nulldev()

0 を返す関数

nodev()

エラー戻り関数

nochpoll()

ポーリングできないデバイスのためのエラー戻り関数

ASSERT()

式の検証

bcopy()

カーネル内のアドレスの場所間でデータをコピーする

bzero()

指定されたバイト数のメモリーをクリアする

bcmp()

2 つのバイト配列を比較する

ddi_ffs()

ロング整数内に設定された最初のビットを検索する

ddi_fls()

ロング整数内に設定された最後のビットを検索する

swab()

バイトを 16 ビットハーフワード単位でスワップする

strcat()

2 つの文字列を連結する

strncat()

2 つの文字列を連結する (長さ制限あり)

strlcat()

2 つの文字列を連結する (長さとバッファーの制限あり)

strcmp()

NULL で終わる 2 つの文字列を比較する

strncmp()

NULL で終わる 2 つの文字列を比較する (長さ制限あり)

strlen()

文字列内の NULL 以外のバイト数を判定する

strnlen()

文字列内の NULL 以外のバイト数を判定する (長さ制限あり)

strcpy()

文字列をある場所から別の場所にコピーする

strncpy()

文字列をある場所から別の場所にコピーする (長さ制限あり)

strlcpy()

文字列をある場所から別の場所にコピーする (長さとバッファーの制限あり)

strcasecmp()

strcmp() の、大文字と小文字の区別がないバージョン

strncasecmp()

strncmp() の、大文字と小文字の区別がないバージョン

strchr()

文字列内の文字を検索する

strstr()

ある文字列内での別の文字列の最初の出現箇所を検索する

strcasestr()

strstr() の、大文字と小文字の区別がないバージョン

strfree()

文字列に関連付けられたメモリーを解放する

sprintf()vsprintf()

メモリー内の文字を書式設定する

snprintf()

バッファーサイズを指定してメモリー内の文字を書式設定する

numtos()

整数を 10 進数文字列に変換する

stoi()

10 進数文字列を整数に変換する

max()

2 つの整数のうちの大きい方を返す

min()

2 つの整数のうちの小さい方を返す

va_arg()

変数引数リスト内の次の値を検索する

va_copy()

変数引数リストの状態をコピーする

va_end()

変数引数リストへのポインタを削除する

va_start()

変数引数リストの先頭へのポインタを検索する

ユーティリティー関数の詳細については、man pages section 9: DDI and DKI Kernel Functionsを参照してください。