2009年6月29日月曜日

query_ist

main関数で「query_mca」の次にあるのは「query_voyager」ですが、NUMAシステム用なのでパスします。
その次の「query_ist」を見ていきます。
ISTとは「Intel Speedstep Technology」の略で、省電力機能です。
BIOSを使ってその辺の情報を拾ってくるんだろうな、と。。

同関数はmain.cの中にあります。
======
static void query_ist(void)
{
/* 古いBIOSでこの問い合わせするとクラッシュする */
if (cpu.level < 6)
return;

asm("int $0x15"
    : "=a" (boot_params.ist_info.signature),
      "=b" (boot_params.ist_info.command),
      "=c" (boot_params.ist_info.event),
      "=d" (boot_params.ist_info.perf_level)
    : "a" (0x0000e980),  /* IST Support */
      "d" (0x47534943)); /* Request value */
}

======
徐々にパターンが見えてきた気がしませんか。
問い合わせたい情報をレジスタにセットして0x15でソフトウェア割り込み。
とれた値を構造体に格納。
でもネットで調べてみてもISTを取得するためのBIOS機能なんて見つからず。
きっとここではそうやって取っているんだろうな、という解釈で進めますか、、、

0 件のコメント:

コメントを投稿