git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
sbus
/
char
/
flash.c
diff --git
a/drivers/sbus/char/flash.c
b/drivers/sbus/char/flash.c
index
61cf81f
..
fa2418f
100644
(file)
--- a/
drivers/sbus/char/flash.c
+++ b/
drivers/sbus/char/flash.c
@@
-4,7
+4,6
@@
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
*/
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/errno.h>
@@
-22,8
+21,9
@@
#include <asm/io.h>
#include <asm/sbus.h>
#include <asm/ebus.h>
#include <asm/io.h>
#include <asm/sbus.h>
#include <asm/ebus.h>
+#include <asm/upa.h>
-static
spinlock_t flash_lock = SPIN_LOCK_UNLOCKED
;
+static
DEFINE_SPINLOCK(flash_lock)
;
static struct {
unsigned long read_base; /* Physical read address */
unsigned long write_base; /* Physical write address */
static struct {
unsigned long read_base; /* Physical read address */
unsigned long write_base; /* Physical write address */
@@
-65,16
+65,14
@@
flash_mmap(struct file *file, struct vm_area_struct *vma)
if ((vma->vm_pgoff << PAGE_SHIFT) > size)
return -ENXIO;
if ((vma->vm_pgoff << PAGE_SHIFT) > size)
return -ENXIO;
- addr
+= (vma->vm_pgoff <<
PAGE_SHIFT);
+ addr
= vma->vm_pgoff + (addr >>
PAGE_SHIFT);
if (vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT)) > size)
size = vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT));
if (vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT)) > size)
size = vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT));
- pgprot_val(vma->vm_page_prot) &= ~(_PAGE_CACHE);
- pgprot_val(vma->vm_page_prot) |= _PAGE_E;
- vma->vm_flags |= (VM_SHM | VM_LOCKED);
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
- if (
remap_page
_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
+ if (
io_remap_pfn
_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
return -EAGAIN;
return 0;
return -EAGAIN;
return 0;
@@
-105,7
+103,7
@@
flash_llseek(struct file *file, long long offset, int origin)
}
static ssize_t
}
static ssize_t
-flash_read(struct file * file, char * buf,
+flash_read(struct file * file, char
__user
* buf,
size_t count, loff_t *ppos)
{
unsigned long p = file->f_pos;
size_t count, loff_t *ppos)
{
unsigned long p = file->f_pos;
@@
-115,7
+113,7
@@
flash_read(struct file * file, char * buf,
count = flash.read_size - p;
for (i = 0; i < count; i++) {
count = flash.read_size - p;
for (i = 0; i < count; i++) {
- u8 data = readb(flash.read_base + p + i);
+ u8 data =
upa_
readb(flash.read_base + p + i);
if (put_user(data, buf))
return -EFAULT;
buf++;
if (put_user(data, buf))
return -EFAULT;
buf++;
@@
-161,10
+159,10
@@
static struct miscdevice flash_dev = { FLASH_MINOR, "flash", &flash_fops };
static int __init flash_init(void)
{
struct sbus_bus *sbus;
static int __init flash_init(void)
{
struct sbus_bus *sbus;
- struct sbus_dev *sdev =
0
;
+ struct sbus_dev *sdev =
NULL
;
#ifdef CONFIG_PCI
struct linux_ebus *ebus;
#ifdef CONFIG_PCI
struct linux_ebus *ebus;
- struct linux_ebus_device *edev =
0
;
+ struct linux_ebus_device *edev =
NULL
;
struct linux_prom_registers regs[2];
int len, nregs;
#endif
struct linux_prom_registers regs[2];
int len, nregs;
#endif
@@
-192,9
+190,11
@@
static int __init flash_init(void)
}
if (!sdev) {
#ifdef CONFIG_PCI
}
if (!sdev) {
#ifdef CONFIG_PCI
+ struct linux_prom_registers *ebus_regs;
+
for_each_ebus(ebus) {
for_each_ebusdev(edev, ebus) {
for_each_ebus(ebus) {
for_each_ebusdev(edev, ebus) {
- if (!strcmp(edev->prom_name, "flashprom"))
+ if (!strcmp(edev->prom_n
ode->n
ame, "flashprom"))
goto ebus_done;
}
}
goto ebus_done;
}
}
@@
-202,23
+202,23
@@
static int __init flash_init(void)
if (!edev)
return -ENODEV;
if (!edev)
return -ENODEV;
-
len = prom_getproperty(edev->prom_node, "reg", (void *)regs, sizeof(regs)
);
- if ((len % sizeof(regs[0])) != 0) {
+
ebus_regs = of_get_property(edev->prom_node, "reg", &len
);
+ if (
!ebus_regs ||
(len % sizeof(regs[0])) != 0) {
printk("flash: Strange reg property size %d\n", len);
return -ENODEV;
}
printk("flash: Strange reg property size %d\n", len);
return -ENODEV;
}
- nregs = len / sizeof(regs[0]);
+ nregs = len / sizeof(
ebus_
regs[0]);
flash.read_base = edev->resource[0].start;
flash.read_base = edev->resource[0].start;
- flash.read_size = regs[0].reg_size;
+ flash.read_size =
ebus_
regs[0].reg_size;
if (nregs == 1) {
flash.write_base = edev->resource[0].start;
if (nregs == 1) {
flash.write_base = edev->resource[0].start;
- flash.write_size = regs[0].reg_size;
+ flash.write_size =
ebus_
regs[0].reg_size;
} else if (nregs == 2) {
flash.write_base = edev->resource[1].start;
} else if (nregs == 2) {
flash.write_base = edev->resource[1].start;
- flash.write_size = regs[1].reg_size;
+ flash.write_size =
ebus_
regs[1].reg_size;
} else {
printk("flash: Strange number of regs %d\n", nregs);
return -ENODEV;
} else {
printk("flash: Strange number of regs %d\n", nregs);
return -ENODEV;