我应该如何读取或写入APIC寄存器“APIC_ICR”?

时间:2012-07-06 08:56:25

标签: c linux linux-kernel hardware driver

以下是代码:

static int __init test3_init(void)
{
   uint64_t v,i;
   for (i=0;i<10;i++)
   {
       v= native_x2apic_icr_read();
       printk("v=%llx\n",v);
   }
   return 0;
}

结果如下:

[ 6658.458919] v=9a557fd8
[ 6658.458925] v=1d
[ 6658.458928] v=17
[ 6658.458930] v=17
[ 6658.458932] v=17
[ 6658.458935] v=17
[ 6658.458937] v=17
[ 6658.458939] v=17
[ 6658.458942] v=17
[ 6658.458944] v=17

为什么连续读取该寄存器的值如下所示。前两个是不同的,但遗骸是相同的。

我的最终目标是重置此寄存器中的APIC_DM_NMI(0x00400),但如果该值不一致,重置该位的重点是什么?有人告诉我重置这个位APIC_DM_NMI可以启用APIC的NMI,我不知道,我完全是个新手。如果有人可以提供有关此MSR的任何信息,并且如何正确操作它将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

不知何故,我觉得稳定值(即0x17)似乎是一个更“正常”的值。这些输出可以重复吗?我的意思是,前两个总是不同,从3开始稳定开始?

以下是来自Pentium Processor System Architecture (page 395)的ICR寄存器的说明,我没有看到关于阅读此reagister的任何注意事项。 enter image description here

仅供参考,这是我从lecture notes找到的ICR寄存器位规范: ICR Higher 32 Bits ICR Lower 32 Bits