X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fserial%2Fserial_cs.c;h=fe4c635baaa2ed21493c99ebe222bffc3f96071f;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=8557ed1ce7f5ff64c819e41f4388e64808caaf11;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/serial/serial_cs.c b/drivers/serial/serial_cs.c index 8557ed1ce..fe4c635ba 100644 --- a/drivers/serial/serial_cs.c +++ b/drivers/serial/serial_cs.c @@ -40,8 +40,6 @@ #include #include #include -#include -#include #include #include #include @@ -59,7 +57,7 @@ #ifdef PCMCIA_DEBUG static int pc_debug = PCMCIA_DEBUG; -MODULE_PARM(pc_debug, "i"); +module_param(pc_debug, int, 0644); #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)"; #else @@ -70,18 +68,11 @@ static char *version = "serial_cs.c 1.134 2002/05/04 05:48:53 (David Hinds)"; /* Parameters that can be set with 'insmod' */ -/* Bit map of interrupts to choose from */ -static u_int irq_mask = 0xdeb8; -static int irq_list[4]; -static unsigned int irq_list_count; - /* Enable the speaker? */ static int do_sound = 1; /* Skip strict UART tests? */ static int buggy_uart; -module_param(irq_mask, uint, 0444); -module_param_array(irq_list, int, irq_list_count, 0444); module_param(do_sound, int, 0444); module_param(buggy_uart, int, 0444); @@ -148,7 +139,7 @@ static void serial_remove(dev_link_t *link) */ if (info->link.state & DEV_CONFIG) { for (i = 0; i < info->ndev; i++) - unregister_serial(info->line[i]); + serial8250_unregister_port(info->line[i]); info->link.dev = NULL; @@ -207,7 +198,7 @@ static dev_link_t *serial_attach(void) struct serial_info *info; client_reg_t client_reg; dev_link_t *link; - int i, ret; + int ret; DEBUG(0, "serial_attach()\n"); @@ -222,12 +213,7 @@ static dev_link_t *serial_attach(void) link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; link->io.NumPorts1 = 8; link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; - link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; - if (irq_list_count == 0) - link->irq.IRQInfo2 = irq_mask; - else - for (i = 0; i < irq_list_count; i++) - link->irq.IRQInfo2 |= 1 << irq_list[i]; + link->irq.IRQInfo1 = IRQ_LEVEL_ID; link->conf.Attributes = CONF_ENABLE_IRQ; if (do_sound) { link->conf.Attributes |= CONF_ENABLE_SPKR; @@ -239,7 +225,6 @@ static dev_link_t *serial_attach(void) link->next = dev_list; dev_list = link; client_reg.dev_info = &dev_info; - client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE; client_reg.EventMask = CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL | CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET | @@ -304,21 +289,22 @@ static void serial_detach(dev_link_t * link) /*====================================================================*/ -static int setup_serial(struct serial_info * info, ioaddr_t port, int irq) +static int setup_serial(struct serial_info * info, kio_addr_t iobase, int irq) { - struct serial_struct serial; + struct uart_port port; int line; - memset(&serial, 0, sizeof (serial)); - serial.port = port; - serial.irq = irq; - serial.flags = UPF_SKIP_TEST | UPF_SHARE_IRQ; + memset(&port, 0, sizeof (struct uart_port)); + port.iobase = iobase; + port.irq = irq; + port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ; + port.uartclk = 1843200; if (buggy_uart) - serial.flags |= UPF_BUGGY_UART; - line = register_serial(&serial); + port.flags |= UPF_BUGGY_UART; + line = serial8250_register_port(&port); if (line < 0) { - printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx," - " irq %d failed\n", (u_long) serial.port, serial.irq); + printk(KERN_NOTICE "serial_cs: serial8250_register_port() at " + "0x%04lx, irq %d failed\n", (u_long)iobase, irq); return -EINVAL; } @@ -365,7 +351,7 @@ next_tuple(client_handle_t handle, tuple_t * tuple, cisparse_t * parse) static int simple_config(dev_link_t *link) { - static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; + static kio_addr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 }; static int size_table[2] = { 8, 16 }; client_handle_t handle = link->handle; struct serial_info *info = link->priv; @@ -380,7 +366,7 @@ static int simple_config(dev_link_t *link) /* If the card is already configured, look up the port and irq */ i = pcmcia_get_configuration_info(handle, &config); if ((i == CS_SUCCESS) && (config.Attributes & CONF_VALID_CLIENT)) { - ioaddr_t port = 0; + kio_addr_t port = 0; if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) { port = config.BasePort2; info->slave = 1; @@ -750,10 +736,7 @@ static int __init init_serial_cs(void) static void __exit exit_serial_cs(void) { pcmcia_unregister_driver(&serial_cs_driver); - - /* XXX: this really needs to move into generic code.. */ - while (dev_list != NULL) - serial_detach(dev_list); + BUG_ON(dev_list != NULL); } module_init(init_serial_cs);