diff options
Diffstat (limited to 'arch/powerpc/sysdev/mmio_nvram.c')
| -rw-r--r-- | arch/powerpc/sysdev/mmio_nvram.c | 32 | 
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/mmio_nvram.c b/arch/powerpc/sysdev/mmio_nvram.c index 7b49633a4bd..20732420906 100644 --- a/arch/powerpc/sysdev/mmio_nvram.c +++ b/arch/powerpc/sysdev/mmio_nvram.c @@ -53,6 +53,23 @@ static ssize_t mmio_nvram_read(char *buf, size_t count, loff_t *index)  	return count;  } +static unsigned char mmio_nvram_read_val(int addr) +{ +	unsigned long flags; +	unsigned char val; + +	if (addr >= mmio_nvram_len) +		return 0xff; + +	spin_lock_irqsave(&mmio_nvram_lock, flags); + +	val = ioread8(mmio_nvram_start + addr); + +	spin_unlock_irqrestore(&mmio_nvram_lock, flags); + +	return val; +} +  static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index)  {  	unsigned long flags; @@ -72,6 +89,19 @@ static ssize_t mmio_nvram_write(char *buf, size_t count, loff_t *index)  	return count;  } +void mmio_nvram_write_val(int addr, unsigned char val) +{ +	unsigned long flags; + +	if (addr < mmio_nvram_len) { +		spin_lock_irqsave(&mmio_nvram_lock, flags); + +		iowrite8(val, mmio_nvram_start + addr); + +		spin_unlock_irqrestore(&mmio_nvram_lock, flags); +	} +} +  static ssize_t mmio_nvram_get_size(void)  {  	return mmio_nvram_len; @@ -114,6 +144,8 @@ int __init mmio_nvram_init(void)  	printk(KERN_INFO "mmio NVRAM, %luk at 0x%lx mapped to %p\n",  	       mmio_nvram_len >> 10, nvram_addr, mmio_nvram_start); +	ppc_md.nvram_read_val	= mmio_nvram_read_val; +	ppc_md.nvram_write_val	= mmio_nvram_write_val;  	ppc_md.nvram_read	= mmio_nvram_read;  	ppc_md.nvram_write	= mmio_nvram_write;  	ppc_md.nvram_size	= mmio_nvram_get_size;  |