SOLO6x10 readl() and writel() usage

From: Krzysztof HaÅasa
Date: Mon Feb 14 2011 - 08:47:34 EST


Hi,

BTW why are you using this instead of simple register readl/writel()?
Does the hardware needs something like this?

static inline u32 solo_reg_read(struct solo_dev *solo_dev, int reg)
{
unsigned long flags;
u32 ret;
u16 val;

spin_lock_irqsave(&solo_dev->reg_io_lock, flags);

ret = readl(solo_dev->reg_base + reg);
rmb();
pci_read_config_word(solo_dev->pdev, PCI_STATUS, &val);
rmb();

spin_unlock_irqrestore(&solo_dev->reg_io_lock, flags);

return ret;
}

static inline void solo_reg_write(struct solo_dev *solo_dev, int reg, u32 data)
{
unsigned long flags;
u16 val;

spin_lock_irqsave(&solo_dev->reg_io_lock, flags);

writel(data, solo_dev->reg_base + reg);
wmb();
pci_read_config_word(solo_dev->pdev, PCI_STATUS, &val);
rmb();

spin_unlock_irqrestore(&solo_dev->reg_io_lock, flags);
}
--
Krzysztof Halasa

Research Institute for Automation and Measurements
Al. Jerozolimskie 202, 02-486 Warsaw, Poland
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/