ioaddr?
例えば 8139too.c にある RTL_W8 マクロの定義が以下。
#define RTL_W8(reg, val8) iowrite8 ((val8), ioaddr + (reg))
ioaddr ってどこで定義されてるんだろ、と思いつつよくよく見てみたら例えば rtl8139_chip_reset 手続きだと引数だったり
static void rtl8139_chip_reset (void __iomem *ioaddr)
ってコトでこのマクロを使う時は void __iomem *ioaddr の定義と値のセットが前提になっている模様。なんとなく微妙。
もう少し確認
例えば rtl8139_init_board 手続きだと以下。
void __iomem *ioaddr;
定義されてるのは良いのですが値のセットはどこかというと結構下だったり。
/* enable PCI bus-mastering */ pci_set_master (pdev); if (use_io) { ioaddr = pci_iomap(pdev, 0, 0); if (!ioaddr) { dev_err(&pdev->dev, "cannot map PIO, aborting\n"); rc = -EIO; goto err_out; } dev->base_addr = pio_start; tp->regs_len = pio_len; } else { /* ioremap MMIO region */ ioaddr = pci_iomap(pdev, 1, 0); if (ioaddr == NULL) { dev_err(&pdev->dev, "cannot remap MMIO, trying PIO\n"); pci_release_regions(pdev); use_io = 1; goto retry; } dev->base_addr = (long) ioaddr; tp->regs_len = mmio_len; } tp->mmio_addr = ioaddr;
このあたり、条件分岐の意図とか全然分からんな。別途調べます。