代码之家  ›  专栏  ›  技术社区  ›  Twifty Andy

AMD X470 SMBus规范

  •  1
  • Twifty Andy  · 技术社区  · 6 年前

    我们已经设计了一个windows系统驱动程序。为了与SMBus交互,代码使用基于系统芯片组的硬编码端口地址。在我的例子中,我使用的是基址为0xB20的amdx470。

    每个SMBus事务都会通过调用以下函数终止:

    BOOL f_10CB0 (BYTE arg1) {
        BYTE val;
    
        for (int i = 0; i < 0x8000; ++i) {
            val = ReadPort(this->wPort);
    
            // Break on any error (bits 1:4) or bit 7 (bit 7 is reserved???)
            if (val & 0x9E)
                break;
    
            // Why is this port being read?
            ReadPort(0xED);
        }
    
        if ((val & 0x82) == 0) // 0x80 == unknown, 0x02 == Bus Interrupt
            return (val & 0x1C) == 0; // 0x04 (DeviceError) | 0x08 (BusCollision) | 0x10 (Killed)
    
        ReadPort(this->wPort);
        return FALSE;
    }
    

    注意,以上是伪代码,这个问题是语言无关的。

    我对代码有两个问题。

    1. 0xB20 . 这个 docs 保留状态位5:7。我是不是看错了文件?有人知道这是什么意思吗?
    2. 0xED 我找不到任何文件。呼叫总是返回 0xFF

    关于问题2,我发现在 chromium-os mailing list 它使用它来防止IO延迟写入端口0x80。0xED是任何类型的保留地址吗?

    0 回复  |  直到 6 年前