vserver 1.9.5.x5
[linux-2.6.git] / drivers / serial / serial_cs.c
index 8557ed1..fe4c635 100644 (file)
@@ -40,8 +40,6 @@
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/timer.h>
-#include <linux/tty.h>
-#include <linux/serial.h>
 #include <linux/serial_core.h>
 #include <linux/major.h>
 #include <asm/io.h>
@@ -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);