Commit 8e85a4d9 authored by Paul Mackerras's avatar Paul Mackerras

Merge samba.org:/home/paulus/kernel/linux-2.5

into samba.org:/home/paulus/kernel/for-linus-ppc
parents 3e2adaf6 abe68253
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 0
EXTRAVERSION = -test4
EXTRAVERSION = -test5
# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
......
......@@ -24,8 +24,10 @@ int elevator_noop_merge(request_queue_t *q, struct request **req,
struct request *__rq;
int ret;
if ((ret = elv_try_last_merge(q, bio)))
if ((ret = elv_try_last_merge(q, bio))) {
*req = q->last_merge;
return ret;
}
while ((entry = entry->prev) != &q->queue_head) {
__rq = list_entry_rq(entry);
......
......@@ -1719,9 +1719,9 @@ static void __exit exit_sdla(void)
unregister_frad(devname);
}
#endif
MODULE_LICENSE("GPL");
module_init(init_sdla);
module_exit(exit_sdla);
#endif
......@@ -398,7 +398,7 @@ static int sa1100_startup(struct uart_port *port)
* Allocate the IRQ
*/
retval = request_irq(sport->port.irq, sa1100_int, 0,
"serial_sa1100", sport);
"sa11x0-uart", sport);
if (retval)
return retval;
......@@ -568,7 +568,7 @@ static int sa1100_request_port(struct uart_port *port)
struct sa1100_port *sport = (struct sa1100_port *)port;
return request_mem_region(sport->port.mapbase, UART_PORT_SIZE,
"serial_sa1100") != NULL ? 0 : -EBUSY;
"sa11x0-uart") != NULL ? 0 : -EBUSY;
}
/*
......@@ -858,71 +858,91 @@ static struct uart_driver sa1100_reg = {
.cons = SA1100_CONSOLE,
};
static int sa1100_serial_suspend(struct device *dev, u32 state, u32 level)
static int sa1100_serial_suspend(struct device *_dev, u32 state, u32 level)
{
int i;
struct sa1100_port *sport = dev_get_drvdata(_dev);
for (i = 0; i < NR_PORTS; i++)
uart_suspend_port(&sa1100_reg, &sa1100_ports[i].port, level);
if (sport)
uart_suspend_port(&sa1100_reg, &sport->port, level);
return 0;
}
static int sa1100_serial_resume(struct device *dev, u32 level)
static int sa1100_serial_resume(struct device *_dev, u32 level)
{
struct sa1100_port *sport = dev_get_drvdata(_dev);
if (sport)
uart_resume_port(&sa1100_reg, &sport->port, level);
return 0;
}
static int sa1100_serial_probe(struct device *_dev)
{
struct platform_device *dev = to_platform_device(_dev);
struct resource *res = dev->resource;
int i;
for (i = 0; i < NR_PORTS; i++)
uart_resume_port(&sa1100_reg, &sa1100_ports[i].port, level);
for (i = 0; i < dev->num_resources; i++, res++)
if (res->flags & IORESOURCE_MEM)
break;
if (i < dev->num_resources) {
for (i = 0; i < NR_PORTS; i++) {
if (sa1100_ports[i].port.mapbase != res->start)
continue;
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
dev_set_drvdata(_dev, &sa1100_ports[i]);
break;
}
}
return 0;
}
static int sa1100_serial_remove(struct device *_dev)
{
struct sa1100_port *sport = dev_get_drvdata(_dev);
dev_set_drvdata(_dev, NULL);
if (sport)
uart_remove_one_port(&sa1100_reg, &sport->port);
return 0;
}
static struct device_driver sa11x0_serial_driver = {
.name = "sa11x0_serial",
.bus = &system_bus_type,
.name = "sa11x0-uart",
.bus = &platform_bus_type,
.probe = sa1100_serial_probe,
.remove = sa1100_serial_remove,
.suspend = sa1100_serial_suspend,
.resume = sa1100_serial_resume,
};
/*
* This "device" covers _all_ ISA 8250-compatible serial devices.
*/
static struct sys_device sa11x0_serial_devs = {
.name = "sa11x0_serial",
.id = 0,
.dev = {
.driver = &sa11x0_serial_driver,
},
};
static int __init sa1100_serial_init(void)
{
int ret;
printk(KERN_INFO "Serial: SA11x0 driver $Revision: 1.50 $\n");
driver_register(&sa11x0_serial_driver);
sys_device_register(&sa11x0_serial_devs);
sa1100_init_ports();
ret = uart_register_driver(&sa1100_reg);
if (ret == 0) {
int i;
for (i = 0; i < NR_PORTS; i++)
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
ret = driver_register(&sa11x0_serial_driver);
if (ret)
uart_unregister_driver(&sa1100_reg);
}
return ret;
}
static void __exit sa1100_serial_exit(void)
{
int i;
for (i = 0; i < NR_PORTS; i++)
uart_remove_one_port(&sa1100_reg, &sa1100_ports[i].port);
driver_unregister(&sa11x0_serial_driver);
uart_unregister_driver(&sa1100_reg);
}
......
......@@ -52,11 +52,21 @@
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
extern int __invalid_size_argument_for_IOC;
#define _IOC_TYPECHECK(t) \
((sizeof(t) == sizeof(t[1]) && \
sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
sizeof(t) : __invalid_size_argument_for_IOC)
/* used to create numbers */
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
/* used to decode ioctl numbers.. */
#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
......
......@@ -71,7 +71,8 @@ struct _snd_hdsp_firmware {
unsigned long firmware_data[24413];
};
#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, hdsp_firmware_t)
/* This ioctl is marked bad because the type is bigger than the IOCTL description */
#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW_BAD('H', 0x42, hdsp_firmware_t)
typedef struct _snd_hdsp_version hdsp_version_t;
......
......@@ -14,6 +14,8 @@ struct sscape_microcode
};
#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock)
#define SND_SSCAPE_LOAD_MCODE _IOW('P', 101, struct sscape_microcode)
/* This ioctl is marked bad because the type is bigger than the IOCTL description */
#define SND_SSCAPE_LOAD_MCODE _IOW_BAD('P', 101, struct sscape_microcode)
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment