CPUCTL(4) | FreeBSD Kernel Interfaces Manual | CPUCTL(4) |
名称
cpuctl — cpuctl 疑似デバイス書式
このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:
device cpuctl
もう一つの方法として、ブート時にモジュールとしてドライバをロードするためには、次の行を loader.conf(5) に置きます:
cpuctl_load="YES"
解説
特別なデバイス /dev/cpuctl は、システム CPU へのインタフェースを提供します。それは、CPUID 情報を検索して、マシンの特定のレジスタ (MSR) に読み込み/書き込みし、CPU ファームウェアの更新を実行する機能を提供します。システムに存在する各 CPU に関しては、適切なインデックスがある特別なデバイス /dev/cpuctl%d が作成されます。複数のコアがある CPU に関しては、特別なデバイスは、コア毎に作成されます。
現在、i386 と amd64 プロセッサだけがサポートされています。
IOCTL インタフェース
サポートされてる操作のすべては、 ioctl(2) システムコールを使用して呼び出されます。現在、次の ioctl が定義されています:- CPUCTL_RDMSR cpuctl_msr_args_t *args
- CPUCTL_WRMSR cpuctl_msr_args_t *args
-
CPU のマシンの特定のレジスタを読み書きします。
cpuctl_msr_args_t 構造体は、次の
< sys/cpuctl.h> で定義されています:
typedef struct { int msr; /* 読み込む MSR */ uint64_t data; } cpuctl_msr_args_t;
- CPUCTL_MSRSBIT cpuctl_msr_args_t *args
- CPUCTL_MSRCBIT cpuctl_msr_args_t *args
- data フィールドで与えられたマスクに従って、MSR ビットを設定するか、またはクリアします。
- CPUCTL_CPUID cpuctl_cpuid_args_t *args
-
CPUID 情報を検索します。引数は、次の struct で供給されます:
typedef struct { int level; /* CPUID レベル */ uint32_t data[4]; } cpuctl_cpuid_args_t;
level フィールドは、情報を検索する CPUID レベルを示しますが、一方 data フィールドは、受信された CPUID データを格納するために使用されます。
- CPUCTL_UPDATE cpuctl_update_args_t *args
-
CPU ファームウェア (マイクロコード) を更新します。構造体は、次の
< sys/cpuctl.h> で定義されています:
typedef struct { void *data; size_t size; } cpuctl_update_args_t;
data フィールドは、サイズ size のファームウェアイメージを指すべきです。
追加情報については、 cpuctl.h を参照してください。
戻り値
- [ ENXIO]
- 要求された操作が、デバイスで、サポートされていません (例えば、サポートされないアーキテクチャ、または CPU が無効にされています)。
- [ EINVAL]
- 不正な要求が、提供されたか、またはマイクロコードイメージが、正しくありません。
- [ ENOMEM]
- 物理的なメモリが、要求を終了するために利用可能ではありませんでした。
- [ EFAULT]
- ファームウェアイメージのアドレスが、プロセスのアドレス空間の外を指しています。
関連ファイル
- /dev/cpuctl
歴史
cpuctl ドライバは、 FreeBSD 7.2 ではじめて登場しました。作者
cpuctl モジュールとこのマニュアルページは、 <stas@FreeBSD.org>によって書かれました。バグ
たぶん、あります、もしあれば報告してください。June 30, 2009 | FreeBSD |