Linux device driver 8255x端口寄存器中的Linux e100.c驱动程序内存地址?
iowrite32(自检| dma|addr,&nic->csr->port) 语句写入8255x端口寄存器,控制器进行自检,并将结果写入内存地址(自检| dma|u addr),内存对齐方式为16字节。这或操作和指令如何导致8255x控制器写入nic->mem->selftest.result,读取测试结果。如果我完全错了,请纠正 我指的代码如下: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
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
值在此处定义。阅读数据表了解其余内容。