static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val) { unsigned long addr; unsigned long flags; spin_lock_irqsave(&v3_lock, flags); addr = v3_open_config_window(bus, devfn, where); switch (size) { case 1: __raw_writeb((u8)val, addr); __raw_readb(addr); break; case 2: __raw_writew((u16)val, addr); __raw_readw(addr); break; case 4: __raw_writel(val, addr); __raw_readl(addr); break; } v3_close_config_window(); spin_unlock_irqrestore(&v3_lock, flags); return PCIBIOS_SUCCESSFUL; }
static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val) { unsigned long addr; unsigned long flags; u32 v; spin_lock_irqsave(&v3_lock, flags); addr = v3_open_config_window(bus, devfn, where); switch (size) { case 1: v = __raw_readb(addr); break; case 2: v = __raw_readw(addr); break; default: v = __raw_readl(addr); break; } v3_close_config_window(); spin_unlock_irqrestore(&v3_lock, flags); *val = v; return PCIBIOS_SUCCESSFUL; }
static int v3_write_config_dword(struct pci_dev *dev, int where, u32 val) { unsigned long addr; unsigned long flags; spin_lock_irqsave(&v3_lock, flags); addr = v3_open_config_window(dev, where); __raw_writel(val, addr); __raw_readl(addr); v3_close_config_window(); spin_unlock_irqrestore(&v3_lock, flags); return PCIBIOS_SUCCESSFUL; }
static int v3_read_config_word(struct pci_dev *dev, int where, u16 *val) { unsigned long addr; unsigned long flags; u16 v; spin_lock_irqsave(&v3_lock, flags); addr = v3_open_config_window(dev, where); v = __raw_readw(addr); v3_close_config_window(); spin_unlock_irqrestore(&v3_lock, flags); *val = v; return PCIBIOS_SUCCESSFUL; }