Linux device driver 8255x端口寄存器中的Linux e100.c驱动程序内存地址?

Linux device driver 8255x端口寄存器中的Linux e100.c驱动程序内存地址?,linux-device-driver,Linux Device Driver,iowrite32(自检| dma|addr,&nic->csr->port) 语句写入8255x端口寄存器,控制器进行自检,并将结果写入内存地址(自检| dma|u addr),内存对齐方式为16字节。这或操作和指令如何导致8255x控制器写入nic->mem->selftest.result,读取测试结果。如果我完全错了,请纠正 我指的代码如下: static int e100_self_test(struct nic *nic) { u32 dma_addr = nic->d

iowrite32(自检| dma|addr,&nic->csr->port)

语句写入8255x端口寄存器,控制器进行自检,并将结果写入内存地址(自检| dma|u addr),内存对齐方式为16字节。这或操作和指令如何导致8255x控制器写入nic->mem->selftest.result,读取测试结果。如果我完全错了,请纠正

我指的代码如下:

static int e100_self_test(struct nic *nic)
{
    u32 dma_addr = nic->dma_addr + offsetof(struct mem, selftest);
    /* Passing the self-test is a pretty good indication
     * that the device can DMA to/from host memory */
    nic->mem->selftest.signature = 0;
    nic->mem->selftest.result = 0xFFFFFFFF;
    iowrite32(selftest | dma_addr, &nic->csr->port);
    e100_write_flush(nic);
    /* Wait 10 msec for self-test to complete */
    msleep(10);
    /* Interrupts are enabled after self-test */
    e100_disable_irq(nic);
    /* Check results of self-test */
    if (nic->mem->selftest.result != 0) {
        netif_err(nic, hw, nic->netdev,
              "Self-test failed: result=0x%08X\n",
              nic->mem->selftest.result);
        return -ETIMEDOUT;
    }
    if (nic->mem->selftest.signature == 0) {
        netif_err(nic, hw, nic->netdev, "Self-test failed: timed out\n");
        return -ETIMEDOUT;
    }

selftest
值在此处定义。阅读数据表了解其余内容。