Merge bk://oe-devel.bkbits.net/openembedded
authornslu2-linux.adm@bkbits.net <nslu2-linux.adm@bkbits.net>
Tue, 29 Mar 2005 14:41:34 +0000 (14:41 +0000)
committernslu2-linux.adm@bkbits.net <nslu2-linux.adm@bkbits.net>
Tue, 29 Mar 2005 14:41:34 +0000 (14:41 +0000)
into bkbits.net:/repos/n/nslu2-linux/openembedded

2005/03/29 16:09:43+02:00 uni-frankfurt.de!mickeyl
Merge bk://oe-devel@oe-devel.bkbits.net/openembedded
into r2d2.tm.informatik.uni-frankfurt.de:/local/pkg/oe/packages

2005/03/29 16:09:27+02:00 uni-frankfurt.de!mickeyl
wlan-ng: fix S

2005/03/29 14:03:30+02:00 mn-solutions.de!schurig
add serial_cs & bluez to MNCI "Ramses" kernel

BKrev: 4249691eWc46O2knhl17RCokRw2zRw

packages/linux/mnci-ramses-2.4.21-rmk2-pxa1/mnci-combined.patch
packages/linux/mnci-ramses_2.4.21-rmk2-pxa1.bb
packages/wlan-ng/wlan-ng-modules_0.2.1-pre23.bb

index 8299c9d..2f80d09 100644 (file)
  
 --- /dev/null
 +++ linux-2.4.21/arch/arm/def-configs/ramses
-@@ -0,0 +1,1159 @@
+@@ -0,0 +1,1174 @@
 +#
 +# Automatically generated by make menuconfig: don't edit
 +#
 +CONFIG_USB_SL811HS_ALT=m
 +CONFIG_USB_AUDIO=m
 +CONFIG_USB_EMI26=m
-+# CONFIG_USB_BLUETOOTH is not set
 +CONFIG_USB_MIDI=m
 +CONFIG_USB_STORAGE=m
 +CONFIG_USB_STORAGE_DEBUG=y
 +#
 +# Bluetooth support
 +#
-+CONFIG_BLUEZ=y
++CONFIG_BLUEZ=m
 +CONFIG_BLUEZ_L2CAP=m
 +CONFIG_BLUEZ_SCO=m
 +CONFIG_BLUEZ_RFCOMM=m
-+CONFIG_BLUEZ_RFCOMM_TTY=y
++# CONFIG_BLUEZ_RFCOMM_TTY is not set
 +CONFIG_BLUEZ_BNEP=m
-+# CONFIG_BLUEZ_BNEP_MC_FILTER is not set
++CONFIG_BLUEZ_BNEP_MC_FILTER=y
 +# CONFIG_BLUEZ_BNEP_PROTO_FILTER is not set
 +
 +#
++# Bluetooth device drivers
++#
++CONFIG_BLUEZ_HCIUSB=m
++CONFIG_BLUEZ_USB_SCO=y
++CONFIG_BLUEZ_USB_ZERO_PACKET=y
++CONFIG_BLUEZ_HCIUART=m
++CONFIG_BLUEZ_HCIUART_H4=y
++CONFIG_BLUEZ_HCIUART_BCSP=y
++CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
++CONFIG_BLUEZ_HCIDTL1=m
++CONFIG_BLUEZ_HCIBT3C=m
++CONFIG_BLUEZ_HCIBLUECARD=m
++CONFIG_BLUEZ_HCIBTUART=m
++# CONFIG_BLUEZ_HCIVHCI is not set
++
++#
 +# Kernel hacking
 +#
 +CONFIG_FRAME_POINTER=y
 +#endif
 +#define USE_UCB
 +//#define PFI_LED
-+#define PFI_TURNOFF
++//#define PFI_TURNOFF
 +
 +#include <asm/types.h>
 +#include <asm/setup.h>
  static void change_speed(struct async_struct *info, struct termios *old);
  static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
  
-@@ -325,46 +165,74 @@
+@@ -325,46 +165,82 @@
        { 0, 0}
  };
  
 +              io_type:                SERIAL_IO_MEM,
 +              irq:                    IRQ_GPIO(26),
 +              flags:                  ASYNC_SKIP_TEST,
++      }, {
++              type:                   PORT_UNKNOWN,
++      }, {
++              type:                   PORT_UNKNOWN,
++      }, {
++              type:                   PORT_UNKNOWN,
++      }, {
++              type:                   PORT_UNKNOWN,
 +      }
  };
  
  
  #ifndef PREPARE_FUNC
  #define PREPARE_FUNC(dev)  (dev->prepare)
-@@ -403,39 +271,21 @@
+@@ -403,39 +279,21 @@
  #endif
  
  
                return readl((unsigned long) info->iomem_base +
                             (offset<<info->iomem_reg_shift));
        default:
-@@ -447,17 +297,14 @@
+@@ -447,17 +305,14 @@
                                int value)
  {
        switch (info->io_type) {
                writel(value, (unsigned long) info->iomem_base +
                              (offset<<info->iomem_reg_shift));
                break;
-@@ -509,9 +356,6 @@
+@@ -509,9 +364,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
  
        save_flags(flags); cli();
        if (info->IER & UART_IER_THRI) {
                info->IER &= ~UART_IER_THRI;
-@@ -529,9 +373,6 @@
+@@ -529,9 +381,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
        
        save_flags(flags); cli();
        if (info->xmit.head != info->xmit.tail
            && info->xmit.buf
-@@ -689,11 +530,7 @@
+@@ -689,11 +538,7 @@
  #endif
                *status = serial_inp(info, UART_LSR);
        } while ((*status & UART_LSR_DR) && (max_count-- > 0));
  }
  
  static _INLINE_ void transmit_chars(struct async_struct *info, int *intr_done)
-@@ -758,11 +595,6 @@
+@@ -758,11 +603,6 @@
                        icount->dsr++;
                if (status & UART_MSR_DDCD) {
                        icount->dcd++;
                }
                if (status & UART_MSR_DCTS)
                        icount->cts++;
-@@ -810,120 +642,23 @@
+@@ -810,120 +650,23 @@
        }
  }
  
        do {
                status = serial_inp(info, UART_LSR);
  #ifdef SERIAL_DEBUG_INTR
-@@ -932,120 +667,23 @@
+@@ -932,120 +675,23 @@
                if (status & UART_LSR_DR)
                        receive_chars(info, &status, regs);
                check_modem_status(info);
  
  /*
   * -------------------------------------------------------------------
-@@ -1107,22 +745,6 @@
+@@ -1107,22 +753,6 @@
                        if (!info)
                                continue;
                        save_flags(flags); cli();
                                rs_interrupt_single(i, NULL, NULL);
                        restore_flags(flags);
                }
-@@ -1132,11 +754,7 @@
+@@ -1132,11 +762,7 @@
  
        if (IRQ_ports[0]) {
                save_flags(flags); cli();
                restore_flags(flags);
  
                mod_timer(&serial_timer, jiffies + IRQ_timeout[0]);
-@@ -1177,50 +795,6 @@
+@@ -1177,50 +803,6 @@
        IRQ_timeout[irq] = (timeout > 3) ? timeout-2 : 1;
  }
  
  static int startup(struct async_struct * info)
  {
        unsigned long flags;
-@@ -1228,9 +802,6 @@
+@@ -1228,9 +810,6 @@
        void (*handler)(int, void *, struct pt_regs *);
        struct serial_state *state= info->state;
        unsigned long page;
  
        page = get_zeroed_page(GFP_KERNEL);
        if (!page)
-@@ -1258,6 +829,22 @@
+@@ -1258,6 +837,22 @@
        printk("starting up ttys%d (irq %d)...", info->line, state->irq);
  #endif
  
        if (uart_config[state->type].flags & UART_STARTECH) {
                /* Wake up UART */
                serial_outp(info, UART_LCR, 0xBF);
-@@ -1305,25 +892,12 @@
+@@ -1305,25 +900,12 @@
                serial_outp(info, UART_LCR, 0);
        }
  
                        case (long)&STUART: CKEN |= CKEN5_STUART; break;
                }
        }
-@@ -1344,6 +918,7 @@
+@@ -1344,6 +926,7 @@
        /*
         * Clear the interrupt registers.
         */
        (void) serial_inp(info, UART_LSR);
        (void) serial_inp(info, UART_RX);
        (void) serial_inp(info, UART_IIR);
-@@ -1371,18 +946,8 @@
+@@ -1371,18 +954,8 @@
        if (state->irq && (!IRQ_ports[state->irq] ||
                          !IRQ_ports[state->irq]->next_port)) {
                if (IRQ_ports[state->irq]) {
                } else 
                        handler = rs_interrupt_single;
  
-@@ -1417,12 +982,6 @@
+@@ -1417,12 +990,6 @@
        info->MCR = 0;
        if (info->tty->termios->c_cflag & CBAUD)
                info->MCR = UART_MCR_DTR | UART_MCR_RTS;
        {
                if (state->irq != 0)
                        info->MCR |= UART_MCR_OUT2;
-@@ -1437,18 +996,9 @@
+@@ -1437,18 +1004,9 @@
         */
        info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI;
        if (pxa_port(state->type))
        /*
         * And clear the interrupt registers again for luck.
         */
-@@ -1469,7 +1019,6 @@
+@@ -1469,7 +1027,6 @@
        /*
         * Set up the tty->alt_speed kludge
         */
        if (info->tty) {
                if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
                        info->tty->alt_speed = 57600;
-@@ -1480,7 +1029,6 @@
+@@ -1480,7 +1037,6 @@
                if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
                        info->tty->alt_speed = 460800;
        }
        
        /*
         * and set the speed of the serial port
-@@ -1516,6 +1064,30 @@
+@@ -1516,6 +1072,30 @@
               state->irq);
  #endif
        
        save_flags(flags); cli(); /* Disable interrupts */
  
        /*
-@@ -1561,13 +1133,6 @@
+@@ -1561,13 +1141,6 @@
  
        info->IER = 0;
        serial_outp(info, UART_IER, 0x00);      /* disable all intrs */
                info->MCR &= ~UART_MCR_OUT2;
                if (pxa_buggy_port(state->type))
                        info->MCR ^= UART_MCR_OUT2;
-@@ -1586,16 +1151,6 @@
+@@ -1586,16 +1159,6 @@
                                     UART_FCR_CLEAR_XMIT));
        serial_outp(info, UART_FCR, 0);
  
  #ifdef CONFIG_ARCH_PXA
        if (state->type == PORT_PXA
  #ifdef CONFIG_SERIAL_CONSOLE
-@@ -1634,37 +1189,6 @@
+@@ -1634,37 +1197,6 @@
        restore_flags(flags);
  }
  
  /*
   * This routine is called to set the UART divisor registers to match
   * the specified baud rate for a serial port.
-@@ -1711,12 +1235,6 @@
+@@ -1711,12 +1243,6 @@
        baud = tty_get_baud_rate(info->tty);
        if (!baud)
                baud = 9600;    /* B0 transition handled in rs_set_termios */
        baud_base = info->state->baud_base;
        if (info->state->type == PORT_16C950) {
                if (baud <= baud_base)
-@@ -1778,10 +1296,6 @@
+@@ -1778,10 +1304,6 @@
        if (uart_config[info->state->type].flags & UART_USE_FIFO) {
                if ((info->state->baud_base / quot) < 2400)
                        fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
                else
                        fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_8;
        }
-@@ -1864,9 +1378,6 @@
+@@ -1864,9 +1386,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
  
        if (!tty || !info->xmit.buf)
                return;
  
-@@ -1888,9 +1399,6 @@
+@@ -1888,9 +1407,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
                                
        if (info->xmit.head == info->xmit.tail
            || tty->stopped
            || tty->hw_stopped
-@@ -1900,8 +1408,6 @@
+@@ -1900,8 +1416,6 @@
        save_flags(flags); cli();
        info->IER |= UART_IER_THRI;
        serial_out(info, UART_IER, info->IER);
        restore_flags(flags);
  }
  
-@@ -1912,9 +1418,6 @@
+@@ -1912,9 +1426,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
                                
        if (!tty || !info->xmit.buf || !tmp_buf)
                return 0;
  
-@@ -1978,11 +1481,6 @@
+@@ -1978,11 +1489,6 @@
            && !(info->IER & UART_IER_THRI)) {
                info->IER |= UART_IER_THRI;
                serial_out(info, UART_IER, info->IER);
        }
        return ret;
  }
-@@ -1991,8 +1489,6 @@
+@@ -1991,8 +1497,6 @@
  {
        struct async_struct *info = (struct async_struct *)tty->driver_data;
  
        return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  }
  
-@@ -2000,8 +1496,6 @@
+@@ -2000,8 +1504,6 @@
  {
        struct async_struct *info = (struct async_struct *)tty->driver_data;
                                
        return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
  }
  
-@@ -2010,8 +1504,6 @@
+@@ -2010,8 +1512,6 @@
        struct async_struct *info = (struct async_struct *)tty->driver_data;
        unsigned long flags;
        
        save_flags(flags); cli();
        info->xmit.head = info->xmit.tail = 0;
        restore_flags(flags);
-@@ -2032,16 +1524,11 @@
+@@ -2032,16 +1532,11 @@
  {
        struct async_struct *info = (struct async_struct *)tty->driver_data;
  
        }
  }
  
-@@ -2064,9 +1551,6 @@
+@@ -2064,9 +1559,6 @@
               tty->ldisc.chars_in_buffer(tty));
  #endif
  
        if (I_IXOFF(tty))
                rs_send_xchar(tty, STOP_CHAR(tty));
  
-@@ -2089,9 +1573,6 @@
+@@ -2089,9 +1581,6 @@
               tty->ldisc.chars_in_buffer(tty));
  #endif
  
        if (I_IXOFF(tty)) {
                if (info->x_char)
                        info->x_char = 0;
-@@ -2134,7 +1615,6 @@
+@@ -2134,7 +1623,6 @@
        tmp.close_delay = state->close_delay;
        tmp.closing_wait = state->closing_wait;
        tmp.custom_divisor = state->custom_divisor;
        tmp.io_type = state->io_type;
        if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))
                return -EFAULT;
-@@ -2160,8 +1640,7 @@
+@@ -2160,8 +1648,7 @@
                new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
  
        change_irq = new_serial.irq != state->irq;
    
        if (!capable(CAP_SYS_ADMIN)) {
                if (change_irq || change_port ||
-@@ -2198,7 +1677,6 @@
+@@ -2198,7 +1685,6 @@
        if (new_serial.type) {
                for (i = 0 ; i < NR_PORTS; i++)
                        if ((state != &rs_table[i]) &&
                            (rs_table[i].port == new_port) &&
                            rs_table[i].type)
                                return -EADDRINUSE;
-@@ -2220,18 +1698,11 @@
+@@ -2220,18 +1706,11 @@
        state->custom_divisor = new_serial.custom_divisor;
        state->close_delay = new_serial.close_delay * HZ/100;
        state->closing_wait = new_serial.closing_wait * HZ/100;
                release_region(state->port,8);
        }
        state->type = new_serial.type;
-@@ -2243,31 +1714,19 @@
+@@ -2243,31 +1722,19 @@
                shutdown(info);
                state->irq = new_serial.irq;
                info->port = state->port = new_port;
                        if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
                                info->tty->alt_speed = 57600;
                        if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
-@@ -2276,7 +1735,6 @@
+@@ -2276,7 +1743,6 @@
                                info->tty->alt_speed = 230400;
                        if ((state->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
                                info->tty->alt_speed = 460800;
                        change_speed(info, 0);
                }
        } else
-@@ -2414,60 +1872,14 @@
+@@ -2414,60 +1880,14 @@
        return 0;
  }
  
        if (!CONFIGURED_SERIAL_PORT(info))
                return;
        save_flags(flags); cli();
-@@ -2478,121 +1890,6 @@
+@@ -2478,121 +1898,6 @@
        serial_out(info, UART_LCR, info->LCR);
        restore_flags(flags);
  }
  
  static int rs_ioctl(struct tty_struct *tty, struct file * file,
                    unsigned int cmd, unsigned long arg)
-@@ -2601,12 +1898,6 @@
+@@ -2601,12 +1906,6 @@
        struct async_icount cprev, cnow;        /* kernel counter temps */
        struct serial_icounter_struct icount;
        unsigned long flags;
  
        if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
            (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
-@@ -2616,45 +1907,6 @@
+@@ -2616,45 +1915,6 @@
        }
        
        switch (cmd) {
                case TIOCMGET:
                        return get_modem_info(info, (unsigned int *) arg);
                case TIOCMBIS:
-@@ -2667,9 +1919,6 @@
+@@ -2667,9 +1927,6 @@
                case TIOCSSERIAL:
                        return set_serial_info(info,
                                               (struct serial_struct *) arg);
                case TIOCSERGETLSR: /* Get line status register */
                        return get_lsr_info(info, (unsigned int *) arg);
  
-@@ -2679,15 +1928,6 @@
+@@ -2679,15 +1936,6 @@
                                return -EFAULT;
                        return 0;
                                
                /*
                 * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
                 * - mask passed in arg for lines of interest
-@@ -2754,6 +1994,39 @@
+@@ -2754,6 +2002,39 @@
                        printk ("TIOCSER?WILD ioctl obsolete, ignored.\n");
                        return 0;
  
                default:
                        return -ENOIOCTLCMD;
                }
-@@ -2801,18 +2074,6 @@
+@@ -2801,18 +2082,6 @@
                tty->hw_stopped = 0;
                rs_start(tty);
        }
  }
  
  /*
-@@ -2831,9 +2092,6 @@
+@@ -2831,9 +2100,6 @@
        struct serial_state *state;
        unsigned long flags;
  
        state = info->state;
        
        save_flags(flags); cli();
-@@ -2933,10 +2191,7 @@
+@@ -2933,10 +2199,7 @@
  {
        struct async_struct * info = (struct async_struct *)tty->driver_data;
        unsigned long orig_jiffies, char_time;
  
        if (info->state->type == PORT_UNKNOWN)
                return;
-@@ -2974,9 +2229,11 @@
+@@ -2974,9 +2237,11 @@
        printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time);
        printk("jiff=%lu...", jiffies);
  #endif
  #endif
                set_current_state(TASK_INTERRUPTIBLE);
                schedule_timeout(char_time);
-@@ -2986,8 +2243,9 @@
+@@ -2986,8 +2251,9 @@
                        break;
        }
  #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
  }
  
  /*
-@@ -2998,9 +2256,6 @@
+@@ -2998,9 +2264,6 @@
        struct async_struct * info = (struct async_struct *)tty->driver_data;
        struct serial_state *state = info->state;
        
        state = info->state;
        
        rs_flush_buffer(tty);
-@@ -3036,12 +2291,8 @@
+@@ -3036,12 +2299,8 @@
            (info->flags & ASYNC_CLOSING)) {
                if (info->flags & ASYNC_CLOSING)
                        interruptible_sleep_on(&info->close_wait);
        }
  
        /*
-@@ -3114,14 +2365,10 @@
+@@ -3114,14 +2373,10 @@
                set_current_state(TASK_INTERRUPTIBLE);
                if (tty_hung_up_p(filp) ||
                    !(info->flags & ASYNC_INITIALIZED)) {
                        break;
                }
                if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
-@@ -3223,16 +2470,12 @@
+@@ -3223,16 +2478,12 @@
        }
        tty->driver_data = info;
        info->tty = tty;
  
        /*
         *      This relies on lock_kernel() stuff so wants tidying for 2.5
-@@ -3254,12 +2497,8 @@
+@@ -3254,12 +2505,8 @@
            (info->flags & ASYNC_CLOSING)) {
                if (info->flags & ASYNC_CLOSING)
                        interruptible_sleep_on(&info->close_wait);
        }
  
        /*
-@@ -3313,17 +2552,14 @@
+@@ -3313,17 +2560,14 @@
        int     ret;
        unsigned long flags;
  
  
        /*
         * Figure out the current RS-232 lines
-@@ -3334,7 +2570,6 @@
+@@ -3334,7 +2578,6 @@
                info->magic = SERIAL_MAGIC;
                info->port = state->port;
                info->flags = state->flags;
                info->io_type = state->io_type;
                info->iomem_base = state->iomem_base;
                info->iomem_reg_shift = state->iomem_reg_shift;
-@@ -3389,13 +2624,13 @@
+@@ -3389,13 +2632,13 @@
  }
  
  static int rs_read_proc(char *page, char **start, off_t off, int count,
        for (i = 0; i < NR_PORTS && len < 4000; i++) {
                l = line_info(page + len, &rs_table[i]);
                len += l;
-@@ -3423,2038 +2658,63 @@
+@@ -3423,125 +2666,212 @@
   */
  
  /*
 - * This routine prints out the appropriate serial driver version
 - * number, and identifies which options were configured into this
 - * driver.
-- */
++ * The serial driver boot-time initialization code!
+  */
 -static char serial_options[] __initdata =
 -#ifdef CONFIG_HUB6
 -       " HUB-6"
 -#ifdef ENABLE_SERIAL_PNP
 -       " ISAPNP"
 -#define SERIAL_OPT
--#endif
++static int __init rs_init(void)
++{
++      int     i;
++      struct serial_state * state;
++      
++      printk("pxa & ti16c754b serial driver\n");
++      set_GPIO_IRQ_edge(7, GPIO_RISING_EDGE);
++      set_GPIO_IRQ_edge(24, GPIO_RISING_EDGE);
++      set_GPIO_IRQ_edge(25, GPIO_RISING_EDGE);
++      set_GPIO_IRQ_edge(26, GPIO_RISING_EDGE);
++
++        if (!request_mem_region(RAMSES_UARTA_PHYS, 16*4, "Ramses UART A"))
++                printk(KERN_ERR "unable to reserve region\n");
++        else {
++                ramses_uarta = ioremap_nocache(RAMSES_UARTA_PHYS, 16*4);
++                if (!ramses_uarta)
++                        printk(KERN_ERR "unable to map region\n");
++                else {
++                      //printk("ramses_uarta cookie is: %08x\n", (unsigned int) ramses_uarta);
++                      rs_table[3].iomem_base = ramses_uarta;
++      }
++      }
++        if (!request_mem_region(RAMSES_UARTB_PHYS, 16*4, "Ramses UART B"))
++                printk(KERN_ERR "unable to reserve region\n");
++        else {
++                ramses_uartb = ioremap_nocache(RAMSES_UARTB_PHYS, 16*4);
++                if (!ramses_uartb)
++                        printk(KERN_ERR "unable to map region\n");
++                else {
++                      //printk("ramses_uartb cookie is: %08x\n", (unsigned int) ramses_uartb);
++                      rs_table[4].iomem_base = ramses_uartb;
++      }
++      }
++        if (!request_mem_region(RAMSES_UARTC_PHYS, 16*4, "Ramses UART C"))
++                printk(KERN_ERR "unable to reserve region\n");
++        else {
++                ramses_uartc = ioremap_nocache(RAMSES_UARTC_PHYS, 16*4);
++                if (!ramses_uartc)
++                        printk(KERN_ERR "unable to map region\n");
++                else {
++                      //printk("ramses_uartc cookie is: %08x\n", (unsigned int) ramses_uartc);
++                      rs_table[5].iomem_base = ramses_uartc;
++       }
++       }
++        if (!request_mem_region(RAMSES_UARTD_PHYS, 16*4, "Ramses UART D"))
++                printk(KERN_ERR "unable to reserve region\n");
++        else {
++                ramses_uartd = ioremap_nocache(RAMSES_UARTD_PHYS, 16*4);
++                if (!ramses_uartd)
++                        printk(KERN_ERR "unable to map region\n");
++                else {
++                      //printk("ramses_uartd cookie is: %08x\n", (unsigned int) ramses_uartd);
++                      rs_table[6].iomem_base = ramses_uartd;
++       }
++             }
++      init_bh(SERIAL_BH, do_serial_bh);
++      init_timer(&serial_timer);
++      serial_timer.function = rs_timer;
++      mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
++
++      for (i = 0; i < NR_IRQS; i++) {
++              IRQ_ports[i] = 0;
++              IRQ_timeout[i] = 0;
++      }
++#ifdef CONFIG_SERIAL_CONSOLE
++      /*
++       *      The interrupt of the serial console port
++       *      can't be shared.
++       */
++      if (sercons.flags & CON_CONSDEV) {
++              for(i = 0; i < NR_PORTS; i++)
++                      if (i != sercons.index &&
++                          rs_table[i].irq == rs_table[sercons.index].irq)
++                              rs_table[i].irq = 0;
++      }
+ #endif
 -#ifdef ENABLE_SERIAL_ACPI
 -       " SERIAL_ACPI"
 -#define SERIAL_OPT
--#endif
++      /* Initialize the tty_driver structure */
++      
++      memset(&serial_driver, 0, sizeof(struct tty_driver));
++      serial_driver.magic = TTY_DRIVER_MAGIC;
++      serial_driver.driver_name = "serial";
++#if defined(CONFIG_DEVFS_FS)
++      serial_driver.name = "tts/%d";
++#else
++      serial_driver.name = "ttyS";
+ #endif
 -#ifdef SERIAL_OPT
 -       " enabled\n";
--#else
++      serial_driver.major = TTY_MAJOR;
++      serial_driver.minor_start = 64;
++      serial_driver.name_base = 0;
++      serial_driver.num = NR_PORTS;
++      serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
++      serial_driver.subtype = SERIAL_TYPE_NORMAL;
++      serial_driver.init_termios = tty_std_termios;
++      serial_driver.init_termios.c_cflag =
++              B115200 | CS8 | CREAD | HUPCL | CLOCAL;
++      serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
++      serial_driver.refcount = &serial_refcount;
++      serial_driver.table = serial_table;
++      serial_driver.termios = serial_termios;
++      serial_driver.termios_locked = serial_termios_locked;
++
++      serial_driver.open = rs_open;
++      serial_driver.close = rs_close;
++      serial_driver.write = rs_write;
++      serial_driver.put_char = rs_put_char;
++      serial_driver.flush_chars = rs_flush_chars;
++      serial_driver.write_room = rs_write_room;
++      serial_driver.chars_in_buffer = rs_chars_in_buffer;
++      serial_driver.flush_buffer = rs_flush_buffer;
++      serial_driver.ioctl = rs_ioctl;
++      serial_driver.throttle = rs_throttle;
++      serial_driver.unthrottle = rs_unthrottle;
++      serial_driver.set_termios = rs_set_termios;
++      serial_driver.stop = rs_stop;
++      serial_driver.start = rs_start;
++      serial_driver.hangup = rs_hangup;
++      serial_driver.break_ctl = rs_break;
++      serial_driver.send_xchar = rs_send_xchar;
++      serial_driver.wait_until_sent = rs_wait_until_sent;
++      serial_driver.read_proc = rs_read_proc;
++      
++      /*
++       * The callout device is just like normal device except for
++       * major number and the subtype code.
++       */
++      callout_driver = serial_driver;
++#if defined(CONFIG_DEVFS_FS)
++      callout_driver.name = "cua/%d";
+ #else
 -       " no serial options enabled\n";
--#endif
++      callout_driver.name = "cua";
+ #endif
 -#undef SERIAL_OPT
--
++      callout_driver.major = TTYAUX_MAJOR;
++      callout_driver.subtype = SERIAL_TYPE_CALLOUT;
++      callout_driver.read_proc = 0;
++      callout_driver.proc_entry = 0;
 -static _INLINE_ void show_serial_version(void)
 -{
 -      printk(KERN_INFO "%s version %s%s (%s) with%s", serial_name,
 -             serial_version, LOCAL_VERSTRING, serial_revdate,
 -             serial_options);
--}
--
--/*
++      if (tty_register_driver(&serial_driver))
++              panic("Couldn't register serial driver\n");
++      if (tty_register_driver(&callout_driver))
++              panic("Couldn't register callout driver\n");
++      
++      for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
++              state->magic = SSTATE_MAGIC;
++              state->line = i;
++              state->custom_divisor = 0;
++              state->close_delay = 5*HZ/10;
++              state->closing_wait = 30*HZ;
++              state->callout_termios = callout_driver.init_termios;
++              state->normal_termios = serial_driver.init_termios;
++              state->icount.cts = state->icount.dsr = 
++                      state->icount.rng = state->icount.dcd = 0;
++              state->icount.rx = state->icount.tx = 0;
++              state->icount.frame = state->icount.parity = 0;
++              state->icount.overrun = state->icount.brk = 0;
++              state->irq = irq_cannonicalize(state->irq);
++              if (state->port && check_region(state->port,8)) {
++                      state->type = PORT_UNKNOWN;
++                      continue;
++              }
++      }
++      for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
++              if (state->type == PORT_UNKNOWN)
++                      continue;
++              printk(KERN_INFO"tts/%d at irq %d is a %s\n",
++                     state->line,
++                     state->irq,
++                             uart_config[state->type].name);
++              tty_register_devfs(&serial_driver, 0,
++                                 serial_driver.minor_start + state->line);
++              tty_register_devfs(&callout_driver, 0,
++                                 callout_driver.minor_start + state->line);
++      }
++      return 0;
+ }
+ /*
 - * This routine detect the IRQ of a serial port by clearing OUT2 when
 - * no UART interrupt are requested (IER = 0) (*GPL*). This seems to work at
 - * each time, as long as no other device permanently request the IRQ.
 - * If no IRQ is detected, or multiple IRQ appear, this function returns 0.
 - * The variable "state" and the field "state->port" should not be null.
-- */
++ * This is for use by architectures that know their serial console 
++ * attributes only at run time. Not to be invoked after rs_init().
+  */
 -static unsigned detect_uart_irq (struct serial_state * state)
--{
++int __init early_serial_setup(struct serial_struct *req)
+ {
 -      int irq;
 -      unsigned long irqs;
 -      unsigned char save_mcr, save_ier;
 -      scr_info.io_type = state->io_type;
 -      scr_info.iomem_base = state->iomem_base;
 -      scr_info.iomem_reg_shift = state->iomem_reg_shift;
--
++      int i = req->line;
 -      /* forget possible initially masked and pending IRQ */
 -      probe_irq_off(probe_irq_on());
 -      save_mcr = serial_inp(&scr_info, UART_MCR);
 -      serial_outp(&scr_info, UART_TX, 0xFF);
 -      udelay (20);
 -      irq = probe_irq_off(irqs);
--
++      printk("%s\n", __FUNCTION__);
 -      serial_outp(&scr_info, UART_MCR, save_mcr);
 -      serial_outp(&scr_info, UART_IER, save_ier);
 -#ifdef CONFIG_SERIAL_MANY_PORTS
 -              outb_p(save_ICP, ICP);
 -#endif
 -      return (irq > 0)? irq : 0;
--}
--
--/*
-- * This is a quickie test to see how big the FIFO is.
-- * It doesn't work at all the time, more's the pity.
-- */
--static int size_fifo(struct async_struct *info)
--{
--      unsigned char old_fcr, old_mcr, old_dll, old_dlm;
--      int count;
--
--      old_fcr = serial_inp(info, UART_FCR);
--      old_mcr = serial_inp(info, UART_MCR);
--      serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO |
--                  UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
--      serial_outp(info, UART_MCR, UART_MCR_LOOP);
--      serial_outp(info, UART_LCR, UART_LCR_DLAB);
--      old_dll = serial_inp(info, UART_DLL);
--      old_dlm = serial_inp(info, UART_DLM);
--      serial_outp(info, UART_DLL, 0x01);
--      serial_outp(info, UART_DLM, 0x00);
--      serial_outp(info, UART_LCR, 0x03);
--      for (count = 0; count < 256; count++)
--              serial_outp(info, UART_TX, count);
--      mdelay(20);
--      for (count = 0; (serial_inp(info, UART_LSR) & UART_LSR_DR) &&
--           (count < 256); count++)
--              serial_inp(info, UART_RX);
--      serial_outp(info, UART_FCR, old_fcr);
--      serial_outp(info, UART_MCR, old_mcr);
--      serial_outp(info, UART_LCR, UART_LCR_DLAB);
--      serial_outp(info, UART_DLL, old_dll);
--      serial_outp(info, UART_DLM, old_dlm);
--
--      return count;
--}
--
--/*
-- * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
-- * When this function is called we know it is at least a StarTech
-- * 16650 V2, but it might be one of several StarTech UARTs, or one of
-- * its clones.  (We treat the broken original StarTech 16650 V1 as a
-- * 16550, and why not?  Startech doesn't seem to even acknowledge its
-- * existence.)
-- * 
-- * What evil have men's minds wrought...
-- */
--static void autoconfig_startech_uarts(struct async_struct *info,
--                                    struct serial_state *state,
--                                    unsigned long flags)
--{
--      unsigned char scratch, scratch2, scratch3, scratch4;
--
--      /*
--       * First we check to see if it's an Oxford Semiconductor UART.
--       *
--       * If we have to do this here because some non-National
--       * Semiconductor clone chips lock up if you try writing to the
--       * LSR register (which serial_icr_read does)
--       */
--      if (state->type == PORT_16550A) {
--              /*
--               * EFR [4] must be set else this test fails
--               *
--               * This shouldn't be necessary, but Mike Hudson
--               * (Exoray@isys.ca) claims that it's needed for 952
--               * dual UART's (which are not recommended for new designs).
--               */
--              info->ACR = 0;
--              serial_out(info, UART_LCR, 0xBF);
--              serial_out(info, UART_EFR, 0x10);
--              serial_out(info, UART_LCR, 0x00);
--              /* Check for Oxford Semiconductor 16C950 */
--              scratch = serial_icr_read(info, UART_ID1);
--              scratch2 = serial_icr_read(info, UART_ID2);
--              scratch3 = serial_icr_read(info, UART_ID3);
--              
--              if (scratch == 0x16 && scratch2 == 0xC9 &&
--                  (scratch3 == 0x50 || scratch3 == 0x52 ||
--                   scratch3 == 0x54)) {
--                      state->type = PORT_16C950;
--                      state->revision = serial_icr_read(info, UART_REV) |
--                              (scratch3 << 8);
--                      return;
--              }
--      }
--      
--      /*
--       * We check for a XR16C850 by setting DLL and DLM to 0, and
--       * then reading back DLL and DLM.  If DLM reads back 0x10,
--       * then the UART is a XR16C850 and the DLL contains the chip
--       * revision.  If DLM reads back 0x14, then the UART is a
--       * XR16C854.
--       * 
--       */
--
--      /* Save the DLL and DLM */
--
--      serial_outp(info, UART_LCR, UART_LCR_DLAB);
--      scratch3 = serial_inp(info, UART_DLL);
--      scratch4 = serial_inp(info, UART_DLM);
--
--      serial_outp(info, UART_DLL, 0);
--      serial_outp(info, UART_DLM, 0);
--      scratch2 = serial_inp(info, UART_DLL);
--      scratch = serial_inp(info, UART_DLM);
--      serial_outp(info, UART_LCR, 0);
--
--      if (scratch == 0x10 || scratch == 0x14) {
--              if (scratch == 0x10)
--                      state->revision = scratch2;
--              state->type = PORT_16850;
--              return;
--      }
--
--      /* Restore the DLL and DLM */
--
--      serial_outp(info, UART_LCR, UART_LCR_DLAB);
--      serial_outp(info, UART_DLL, scratch3);
--      serial_outp(info, UART_DLM, scratch4);
--      serial_outp(info, UART_LCR, 0);
--      /*
--       * We distinguish between the '654 and the '650 by counting
--       * how many bytes are in the FIFO.  I'm using this for now,
--       * since that's the technique that was sent to me in the
--       * serial driver update, but I'm not convinced this works.
--       * I've had problems doing this in the past.  -TYT
--       */
--      if (size_fifo(info) == 64)
--              state->type = PORT_16654;
--      else
--              state->type = PORT_16650V2;
--}
--
--/*
-- * This routine is called by rs_init() to initialize a specific serial
-- * port.  It determines what type of UART chip this serial port is
-- * using: 8250, 16450, 16550, 16550A.  The important question is
-- * whether or not this UART is a 16550A or not, since this will
-- * determine whether or not we can use its FIFO features or not.
-- */
--static void autoconfig(struct serial_state * state)
--{
--      unsigned char status1, status2, scratch, scratch2, scratch3;
--      unsigned char save_lcr, save_mcr;
--      struct async_struct *info, scr_info;
--      unsigned long flags;
--
--      state->type = PORT_UNKNOWN;
--
--#ifdef SERIAL_DEBUG_AUTOCONF
--      printk("Testing ttyS%d (0x%04lx, 0x%04x)...\n", state->line,
--             state->port, (unsigned) state->iomem_base);
--#endif
--      
--      if (!CONFIGURED_SERIAL_PORT(state))
--              return;
--              
--      info = &scr_info;       /* This is just for serial_{in,out} */
--
--      info->magic = SERIAL_MAGIC;
--      info->state = state;
--      info->port = state->port;
--      info->flags = state->flags;
--#ifdef CONFIG_HUB6
--      info->hub6 = state->hub6;
--#endif
--      info->io_type = state->io_type;
--      info->iomem_base = state->iomem_base;
--      info->iomem_reg_shift = state->iomem_reg_shift;
--
--      save_flags(flags); cli();
--      
--      if (!(state->flags & ASYNC_BUGGY_UART) &&
--          !state->iomem_base) {
--              /*
--               * Do a simple existence test first; if we fail this,
--               * there's no point trying anything else.
--               * 
--               * 0x80 is used as a nonsense port to prevent against
--               * false positives due to ISA bus float.  The
--               * assumption is that 0x80 is a non-existent port;
--               * which should be safe since include/asm/io.h also
--               * makes this assumption.
--               */
--              scratch = serial_inp(info, UART_IER);
--              serial_outp(info, UART_IER, 0);
--#ifdef __i386__
--              outb(0xff, 0x080);
--#endif
--              scratch2 = serial_inp(info, UART_IER);
--              serial_outp(info, UART_IER, 0x0F);
--#ifdef __i386__
--              outb(0, 0x080);
--#endif
--              scratch3 = serial_inp(info, UART_IER);
--              serial_outp(info, UART_IER, scratch);
--              if (scratch2 || scratch3 != 0x0F) {
--#ifdef SERIAL_DEBUG_AUTOCONF
--                      printk("serial: ttyS%d: simple autoconfig failed "
--                             "(%02x, %02x)\n", state->line, 
--                             scratch2, scratch3);
--#endif
--                      restore_flags(flags);
--                      return;         /* We failed; there's nothing here */
--              }
--      }
--
--      save_mcr = serial_in(info, UART_MCR);
--      save_lcr = serial_in(info, UART_LCR);
--
--      /* 
--       * Check to see if a UART is really there.  Certain broken
--       * internal modems based on the Rockwell chipset fail this
--       * test, because they apparently don't implement the loopback
--       * test mode.  So this test is skipped on the COM 1 through
--       * COM 4 ports.  This *should* be safe, since no board
--       * manufacturer would be stupid enough to design a board
--       * that conflicts with COM 1-4 --- we hope!
--       */
--      if (!(state->flags & ASYNC_SKIP_TEST)) {
--              serial_outp(info, UART_MCR, UART_MCR_LOOP | 0x0A);
--              status1 = serial_inp(info, UART_MSR) & 0xF0;
--              serial_outp(info, UART_MCR, save_mcr);
--              if (status1 != 0x90) {
--#ifdef SERIAL_DEBUG_AUTOCONF
--                      printk("serial: ttyS%d: no UART loopback failed\n",
--                             state->line);
--#endif
--                      restore_flags(flags);
--                      return;
--              }
--      }
--      serial_outp(info, UART_LCR, 0xBF); /* set up for StarTech test */
--      serial_outp(info, UART_EFR, 0); /* EFR is the same as FCR */
--      serial_outp(info, UART_LCR, 0);
--      serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
--      scratch = serial_in(info, UART_IIR) >> 6;
--      switch (scratch) {
--              case 0:
--                      state->type = PORT_16450;
--                      break;
--              case 1:
--                      state->type = PORT_UNKNOWN;
--                      break;
--              case 2:
--                      state->type = PORT_16550;
--                      break;
--              case 3:
--                      state->type = PORT_16550A;
--                      break;
--      }
--      if (state->type == PORT_16550A) {
--              /* Check for Startech UART's */
--              serial_outp(info, UART_LCR, UART_LCR_DLAB);
--              if (serial_in(info, UART_EFR) == 0) {
--                      state->type = PORT_16650;
--              } else {
--                      serial_outp(info, UART_LCR, 0xBF);
--                      if (serial_in(info, UART_EFR) == 0)
--                              autoconfig_startech_uarts(info, state, flags);
--              }
--      }
--      if (state->type == PORT_16550A) {
--              /* Check for TI 16750 */
--              serial_outp(info, UART_LCR, save_lcr | UART_LCR_DLAB);
--              serial_outp(info, UART_FCR,
--                          UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
--              scratch = serial_in(info, UART_IIR) >> 5;
--              if (scratch == 7) {
--                      /*
--                       * If this is a 16750, and not a cheap UART
--                       * clone, then it should only go into 64 byte
--                       * mode if the UART_FCR7_64BYTE bit was set
--                       * while UART_LCR_DLAB was latched.
--                       */
--                      serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
--                      serial_outp(info, UART_LCR, 0);
--                      serial_outp(info, UART_FCR,
--                                  UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
--                      scratch = serial_in(info, UART_IIR) >> 5;
--                      if (scratch == 6)
--                              state->type = PORT_16750;
--              }
--              serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
--      }
--#if defined(CONFIG_SERIAL_RSA) && defined(MODULE)
--      if (state->type == PORT_16550A) {
--              int i;
--
--              for (i = 0 ; i < PORT_RSA_MAX ; ++i) {
--                      if (!probe_rsa[i] && !force_rsa[i])
--                              break;
--                      if (((probe_rsa[i] != state->port) ||
--                           check_region(state->port + UART_RSA_BASE, 16)) &&
--                          (force_rsa[i] != state->port))
--                              continue;
--                      if (!enable_rsa(info))
--                              continue;
--                      state->type = PORT_RSA;
--                      state->baud_base = SERIAL_RSA_BAUD_BASE;
--                      break;
--              }
--      }
--#endif
--      serial_outp(info, UART_LCR, save_lcr);
--      if (state->type == PORT_16450) {
--              scratch = serial_in(info, UART_SCR);
--              serial_outp(info, UART_SCR, 0xa5);
--              status1 = serial_in(info, UART_SCR);
--              serial_outp(info, UART_SCR, 0x5a);
--              status2 = serial_in(info, UART_SCR);
--              serial_outp(info, UART_SCR, scratch);
--
--              if ((status1 != 0xa5) || (status2 != 0x5a))
--                      state->type = PORT_8250;
--      }
--      state->xmit_fifo_size = uart_config[state->type].dfl_xmit_fifo_size;
--
--      if (state->type == PORT_UNKNOWN) {
--              restore_flags(flags);
--              return;
--      }
--
--      if (info->port) {
--#ifdef CONFIG_SERIAL_RSA
--              if (state->type == PORT_RSA)
--                      request_region(info->port + UART_RSA_BASE, 16,
--                                     "serial_rsa(auto)");
--              else
--#endif
--                      request_region(info->port,8,"serial(auto)");
--      }
--
--      /*
--       * Reset the UART.
--       */
--#ifdef CONFIG_SERIAL_RSA
--      if (state->type == PORT_RSA)
--              serial_outp(info, UART_RSA_FRR, 0);
--#endif
--      serial_outp(info, UART_MCR, save_mcr);
--      serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
--                                   UART_FCR_CLEAR_RCVR |
--                                   UART_FCR_CLEAR_XMIT));
--      serial_outp(info, UART_FCR, 0);
--      (void)serial_in(info, UART_RX);
--      serial_outp(info, UART_IER, 0);
--      
--      restore_flags(flags);
--}
--
++      if (i >= NR_IRQS)
++              return(-ENOENT);
++      rs_table[i].magic = 0;
++      rs_table[i].baud_base = req->baud_base;
++      rs_table[i].port = req->port;
++      if (HIGH_BITS_OFFSET)
++              rs_table[i].port += (unsigned long) req->port_high << 
++                                                      HIGH_BITS_OFFSET;
++      rs_table[i].irq = req->irq;
++      rs_table[i].flags = req->flags;
++      rs_table[i].close_delay = req->close_delay;
++      rs_table[i].io_type = req->io_type;
++      rs_table[i].iomem_base = req->iomem_base;
++      rs_table[i].iomem_reg_shift = req->iomem_reg_shift;
++      rs_table[i].type = req->type;
++      rs_table[i].xmit_fifo_size = req->xmit_fifo_size;
++      rs_table[i].custom_divisor = req->custom_divisor;
++      rs_table[i].closing_wait = req->closing_wait;
++      return(0);
+ }
+ /*
+@@ -3894,1760 +3224,8 @@
+       restore_flags(flags);
+ }
 -int register_serial(struct serial_struct *req);
 -void unregister_serial(int line);
 -
 -#endif
 -      { SPCI_FL_BASE0, 1, 115200,                       /* pbn_xircom_combo */
 -              0, 0, pci_xircom_fn },
--
 -      { SPCI_FL_BASE2, 1, 460800,                        /* pbn_siig10x_0 */
 -              0, 0, pci_siig10x_fn },
 -      { SPCI_FL_BASE2, 1, 921600,                        /* pbn_siig10x_1 */
 -              0, 0, pci_siig20x_fn },
 -      { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 4, 921600,   /* pbn_siix20x_4 */
 -              0, 0, pci_siig20x_fn },
--
 -      { SPCI_FL_BASE0, 4, 921600, /* IOMEM */            /* pbn_computone_4 */
 -              0x40, 2, NULL, 0x200 },
 -      { SPCI_FL_BASE0, 6, 921600, /* IOMEM */            /* pbn_computone_6 */
 - * Given a complete unknown PCI device, try to use some heuristics to
 - * guess what the configuration might be, based on the pitiful PCI
 - * serial specs.  Returns 0 on success, 1 on failure.
-+ * The serial driver boot-time initialization code!
-  */
+- */
 -static int __devinit serial_pci_guess_board(struct pci_dev *dev,
 -                                         struct pci_board *board)
-+static int __init rs_init(void)
- {
+-{
 -      int     num_iomem = 0, num_port = 0, first_port = -1;
-       int     i;
-+      struct serial_state * state;
-       
+-      int     i;
+-      
 -      /*
 -       * If it is not a communications device or the programming
 -       * interface is greater than 6, give up.
 -              if (IS_PCI_REGION_IOMEM(dev, i))
 -                      num_iomem++;
 -      }
-+      printk("pxa & ti16c754b serial driver\n");
-+      set_GPIO_IRQ_edge(7, GPIO_RISING_EDGE);
-+      set_GPIO_IRQ_edge(24, GPIO_RISING_EDGE);
-+      set_GPIO_IRQ_edge(25, GPIO_RISING_EDGE);
-+      set_GPIO_IRQ_edge(26, GPIO_RISING_EDGE);
+-
 -      /*
 -       * If there is exactly one port of 8 bytes, use it.
 -       */
 -      if (num_port == 1 && pci_resource_len(dev, first_port) == 8) {
 -              board->flags = first_port;
 -              return 0;
-+        if (!request_mem_region(RAMSES_UARTA_PHYS, 16*4, "Ramses UART A"))
-+                printk(KERN_ERR "unable to reserve region\n");
-+        else {
-+                ramses_uarta = ioremap_nocache(RAMSES_UARTA_PHYS, 16*4);
-+                if (!ramses_uarta)
-+                        printk(KERN_ERR "unable to map region\n");
-+                else {
-+                      //printk("ramses_uarta cookie is: %08x\n", (unsigned int) ramses_uarta);
-+                      rs_table[3].iomem_base = ramses_uarta;
-       }
+-      }
 -
 -      /*
 -       * If there is 1 or 0 iomem regions, and exactly one port, use
 -      if (num_iomem <= 1 && num_port == 1) {
 -              board->flags = first_port;
 -              return 0;
-       }
+-      }
 -      return 1;
 -}
 -
 -                      continue;
 -              unregister_serial(i);
 -              rs_table[i].dev = 0;
-+        if (!request_mem_region(RAMSES_UARTB_PHYS, 16*4, "Ramses UART B"))
-+                printk(KERN_ERR "unable to reserve region\n");
-+        else {
-+                ramses_uartb = ioremap_nocache(RAMSES_UARTB_PHYS, 16*4);
-+                if (!ramses_uartb)
-+                        printk(KERN_ERR "unable to map region\n");
-+                else {
-+                      //printk("ramses_uartb cookie is: %08x\n", (unsigned int) ramses_uartb);
-+                      rs_table[4].iomem_base = ramses_uartb;
-       }
+-      }
 -      /*
 -       * Now execute any board-specific shutdown procedure
 -       */
 -              if (DEACTIVATE_FUNC(brd->dev))
 -                      (DEACTIVATE_FUNC(brd->dev))(brd->dev);
 -              serial_pci_board[i].dev = 0;
-       }
+-      }
 -}
 -
 -
 -               if (strstr(name, *tmp))
 -                       return 1;
 -               tmp++;
-+        if (!request_mem_region(RAMSES_UARTC_PHYS, 16*4, "Ramses UART C"))
-+                printk(KERN_ERR "unable to reserve region\n");
-+        else {
-+                ramses_uartc = ioremap_nocache(RAMSES_UARTC_PHYS, 16*4);
-+                if (!ramses_uartc)
-+                        printk(KERN_ERR "unable to map region\n");
-+                else {
-+                      //printk("ramses_uartc cookie is: %08x\n", (unsigned int) ramses_uartc);
-+                      rs_table[5].iomem_base = ramses_uartc;
-        }
+-       }
 -       return 0;
 -}
 -
 -                          (port->min == 0x2e8) ||
 -                          (port->min == 0x3e8)))
 -                             return 0;
-        }
+-       }
 -
 -       return 1;
 -}
 -               printk("Leaving probe_serial_pnp() (no isapnp)\n");
 -#endif
 -               return;
-+        if (!request_mem_region(RAMSES_UARTD_PHYS, 16*4, "Ramses UART D"))
-+                printk(KERN_ERR "unable to reserve region\n");
-+        else {
-+                ramses_uartd = ioremap_nocache(RAMSES_UARTD_PHYS, 16*4);
-+                if (!ramses_uartd)
-+                        printk(KERN_ERR "unable to map region\n");
-+                else {
-+                      //printk("ramses_uartd cookie is: %08x\n", (unsigned int) ramses_uartd);
-+                      rs_table[6].iomem_base = ramses_uartd;
-        }
+-       }
 -
 -       isapnp_for_each_dev(dev) {
 -             if (dev->active)
 -             } else {
 -                     if (serial_pnp_guess_board(dev, &board))
 -                             continue;
-              }
+-             }
 -             
 -             if (board.flags & SPCI_FL_NO_SHIRQ)
 -                     avoid_irq_share(dev);
 -      int i;
 -      struct serial_state * state;
 -
-       init_bh(SERIAL_BH, do_serial_bh);
-       init_timer(&serial_timer);
-       serial_timer.function = rs_timer;
-@@ -5463,10 +2723,6 @@
-       for (i = 0; i < NR_IRQS; i++) {
-               IRQ_ports[i] = 0;
-               IRQ_timeout[i] = 0;
+-      init_bh(SERIAL_BH, do_serial_bh);
+-      init_timer(&serial_timer);
+-      serial_timer.function = rs_timer;
+-      mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
+-
+-      for (i = 0; i < NR_IRQS; i++) {
+-              IRQ_ports[i] = 0;
+-              IRQ_timeout[i] = 0;
 -#ifdef CONFIG_SERIAL_MULTIPORT
 -              memset(&rs_multiport[i], 0,
 -                     sizeof(struct rs_multiport_struct));
 -#endif
-       }
- #ifdef CONFIG_SERIAL_CONSOLE
-       /*
-@@ -5480,29 +2736,25 @@
-                               rs_table[i].irq = 0;
-       }
- #endif
+-      }
+-#ifdef CONFIG_SERIAL_CONSOLE
+-      /*
+-       *      The interrupt of the serial console port
+-       *      can't be shared.
+-       */
+-      if (sercons.flags & CON_CONSDEV) {
+-              for(i = 0; i < NR_PORTS; i++)
+-                      if (i != sercons.index &&
+-                          rs_table[i].irq == rs_table[sercons.index].irq)
+-                              rs_table[i].irq = 0;
+-      }
+-#endif
 -      show_serial_version();
 -
-       /* Initialize the tty_driver structure */
-       
-       memset(&serial_driver, 0, sizeof(struct tty_driver));
-       serial_driver.magic = TTY_DRIVER_MAGIC;
+-      /* Initialize the tty_driver structure */
+-      
+-      memset(&serial_driver, 0, sizeof(struct tty_driver));
+-      serial_driver.magic = TTY_DRIVER_MAGIC;
 -#if (LINUX_VERSION_CODE > 0x20100)
-       serial_driver.driver_name = "serial";
+-      serial_driver.driver_name = "serial";
 -#endif
 -#if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
-+#if defined(CONFIG_DEVFS_FS)
-       serial_driver.name = "tts/%d";
- #else
-       serial_driver.name = "ttyS";
- #endif
-       serial_driver.major = TTY_MAJOR;
+-      serial_driver.name = "tts/%d";
+-#else
+-      serial_driver.name = "ttyS";
+-#endif
+-      serial_driver.major = TTY_MAJOR;
 -      serial_driver.minor_start = 64 + SERIAL_DEV_OFFSET;
 -      serial_driver.name_base = SERIAL_DEV_OFFSET;
-+      serial_driver.minor_start = 64;
-+      serial_driver.name_base = 0;
-       serial_driver.num = NR_PORTS;
-       serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
-       serial_driver.subtype = SERIAL_TYPE_NORMAL;
-       serial_driver.init_termios = tty_std_termios;
-       serial_driver.init_termios.c_cflag =
+-      serial_driver.num = NR_PORTS;
+-      serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
+-      serial_driver.subtype = SERIAL_TYPE_NORMAL;
+-      serial_driver.init_termios = tty_std_termios;
+-      serial_driver.init_termios.c_cflag =
 -              B9600 | CS8 | CREAD | HUPCL | CLOCAL;
-+              B115200 | CS8 | CREAD | HUPCL | CLOCAL;
-       serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
-       serial_driver.refcount = &serial_refcount;
-       serial_driver.table = serial_table;
-@@ -5524,31 +2776,25 @@
-       serial_driver.stop = rs_stop;
-       serial_driver.start = rs_start;
-       serial_driver.hangup = rs_hangup;
+-      serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
+-      serial_driver.refcount = &serial_refcount;
+-      serial_driver.table = serial_table;
+-      serial_driver.termios = serial_termios;
+-      serial_driver.termios_locked = serial_termios_locked;
+-
+-      serial_driver.open = rs_open;
+-      serial_driver.close = rs_close;
+-      serial_driver.write = rs_write;
+-      serial_driver.put_char = rs_put_char;
+-      serial_driver.flush_chars = rs_flush_chars;
+-      serial_driver.write_room = rs_write_room;
+-      serial_driver.chars_in_buffer = rs_chars_in_buffer;
+-      serial_driver.flush_buffer = rs_flush_buffer;
+-      serial_driver.ioctl = rs_ioctl;
+-      serial_driver.throttle = rs_throttle;
+-      serial_driver.unthrottle = rs_unthrottle;
+-      serial_driver.set_termios = rs_set_termios;
+-      serial_driver.stop = rs_stop;
+-      serial_driver.start = rs_start;
+-      serial_driver.hangup = rs_hangup;
 -#if (LINUX_VERSION_CODE >= 131394) /* Linux 2.1.66 */
-       serial_driver.break_ctl = rs_break;
+-      serial_driver.break_ctl = rs_break;
 -#endif
 -#if (LINUX_VERSION_CODE >= 131343)
-       serial_driver.send_xchar = rs_send_xchar;
-       serial_driver.wait_until_sent = rs_wait_until_sent;
-       serial_driver.read_proc = rs_read_proc;
+-      serial_driver.send_xchar = rs_send_xchar;
+-      serial_driver.wait_until_sent = rs_wait_until_sent;
+-      serial_driver.read_proc = rs_read_proc;
 -#endif
-       
-       /*
-        * The callout device is just like normal device except for
-        * major number and the subtype code.
-        */
-       callout_driver = serial_driver;
+-      
+-      /*
+-       * The callout device is just like normal device except for
+-       * major number and the subtype code.
+-       */
+-      callout_driver = serial_driver;
 -#if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
-+#if defined(CONFIG_DEVFS_FS)
-       callout_driver.name = "cua/%d";
- #else
-       callout_driver.name = "cua";
- #endif
-       callout_driver.major = TTYAUX_MAJOR;
-       callout_driver.subtype = SERIAL_TYPE_CALLOUT;
+-      callout_driver.name = "cua/%d";
+-#else
+-      callout_driver.name = "cua";
+-#endif
+-      callout_driver.major = TTYAUX_MAJOR;
+-      callout_driver.subtype = SERIAL_TYPE_CALLOUT;
 -#if (LINUX_VERSION_CODE >= 131343)
-       callout_driver.read_proc = 0;
-       callout_driver.proc_entry = 0;
+-      callout_driver.read_proc = 0;
+-      callout_driver.proc_entry = 0;
 -#endif
-       if (tty_register_driver(&serial_driver))
-               panic("Couldn't register serial driver\n");
-@@ -5569,53 +2815,23 @@
-               state->icount.frame = state->icount.parity = 0;
-               state->icount.overrun = state->icount.brk = 0;
-               state->irq = irq_cannonicalize(state->irq);
+-
+-      if (tty_register_driver(&serial_driver))
+-              panic("Couldn't register serial driver\n");
+-      if (tty_register_driver(&callout_driver))
+-              panic("Couldn't register callout driver\n");
+-      
+-      for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
+-              state->magic = SSTATE_MAGIC;
+-              state->line = i;
+-              state->custom_divisor = 0;
+-              state->close_delay = 5*HZ/10;
+-              state->closing_wait = 30*HZ;
+-              state->callout_termios = callout_driver.init_termios;
+-              state->normal_termios = serial_driver.init_termios;
+-              state->icount.cts = state->icount.dsr = 
+-                      state->icount.rng = state->icount.dcd = 0;
+-              state->icount.rx = state->icount.tx = 0;
+-              state->icount.frame = state->icount.parity = 0;
+-              state->icount.overrun = state->icount.brk = 0;
+-              state->irq = irq_cannonicalize(state->irq);
 -              if (state->hub6)
 -                      state->io_type = SERIAL_IO_HUB6;
-               if (state->port && check_region(state->port,8)) {
-                       state->type = PORT_UNKNOWN;
-                       continue;
-               }
+-              if (state->port && check_region(state->port,8)) {
+-                      state->type = PORT_UNKNOWN;
+-                      continue;
+-              }
 -#ifdef CONFIG_MCA                     
 -              if ((state->flags & ASYNC_BOOT_ONLYMCA) && !MCA_bus)
 -                      continue;
 -                      state->type = PORT_UNKNOWN;
 -                      autoconfig(state);
 -              }
-       }
-       for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
-               if (state->type == PORT_UNKNOWN)
-                       continue;
+-      }
+-      for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
+-              if (state->type == PORT_UNKNOWN)
+-                      continue;
 -              if (   (state->flags & ASYNC_BOOT_AUTOCONF)
 -                  && (state->flags & ASYNC_AUTO_IRQ)
 -                  && (state->port != 0 || state->iomem_base != 0))
 -                             state->line + SERIAL_DEV_OFFSET,
 -                             (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
 -                             state->port, state->irq,
-+              printk(KERN_INFO"tts/%d at irq %d is a %s\n",
-+                     state->line,
-+                     state->irq,
-                              uart_config[state->type].name);
+-                             uart_config[state->type].name);
 -              }
-               tty_register_devfs(&serial_driver, 0,
-                                  serial_driver.minor_start + state->line);
-               tty_register_devfs(&callout_driver, 0,
-                                  callout_driver.minor_start + state->line);
-       }
+-              tty_register_devfs(&serial_driver, 0,
+-                                 serial_driver.minor_start + state->line);
+-              tty_register_devfs(&callout_driver, 0,
+-                                 callout_driver.minor_start + state->line);
+-      }
 -#ifdef ENABLE_SERIAL_PCI
 -      probe_serial_pci();
 -#endif
 -#ifdef ENABLE_SERIAL_PNP
 -       probe_serial_pnp();
 -#endif
-       return 0;
- }
-@@ -5627,6 +2843,8 @@
- {
-       int i = req->line;
-+      printk("%s\n", __FUNCTION__);
-+
-       if (i >= NR_IRQS)
-               return(-ENOENT);
-       rs_table[i].magic = 0;
-@@ -5639,7 +2857,6 @@
-       rs_table[i].flags = req->flags;
-       rs_table[i].close_delay = req->close_delay;
-       rs_table[i].io_type = req->io_type;
+-      return 0;
+-}
+-
+-/*
+- * This is for use by architectures that know their serial console 
+- * attributes only at run time. Not to be invoked after rs_init().
+- */
+-int __init early_serial_setup(struct serial_struct *req)
+-{
+-      int i = req->line;
+-
+-      if (i >= NR_IRQS)
+-              return(-ENOENT);
+-      rs_table[i].magic = 0;
+-      rs_table[i].baud_base = req->baud_base;
+-      rs_table[i].port = req->port;
+-      if (HIGH_BITS_OFFSET)
+-              rs_table[i].port += (unsigned long) req->port_high << 
+-                                                      HIGH_BITS_OFFSET;
+-      rs_table[i].irq = req->irq;
+-      rs_table[i].flags = req->flags;
+-      rs_table[i].close_delay = req->close_delay;
+-      rs_table[i].io_type = req->io_type;
 -      rs_table[i].hub6 = req->hub6;
-       rs_table[i].iomem_base = req->iomem_base;
-       rs_table[i].iomem_reg_shift = req->iomem_reg_shift;
-       rs_table[i].type = req->type;
-@@ -5726,7 +2943,6 @@
-               info->iomem_base = req->iomem_base;
-               info->iomem_reg_shift = req->iomem_reg_shift;
-       }
--      autoconfig(state);
-       if (state->type == PORT_UNKNOWN) {
-               restore_flags(flags);
-               printk("register_serial(): autoconfig failed\n");
-@@ -5734,11 +2950,8 @@
+-      rs_table[i].iomem_base = req->iomem_base;
+-      rs_table[i].iomem_reg_shift = req->iomem_reg_shift;
+-      rs_table[i].type = req->type;
+-      rs_table[i].xmit_fifo_size = req->xmit_fifo_size;
+-      rs_table[i].custom_divisor = req->custom_divisor;
+-      rs_table[i].closing_wait = req->closing_wait;
+-      return(0);
+-}
+ /*
+  * register_serial and unregister_serial allows for 16x50 serial ports to be
+@@ -5734,11 +3312,8 @@
        }
        restore_flags(flags);
  
              state->iomem_base ? "iomem" : "port",
              state->iomem_base ? (unsigned long)state->iomem_base :
              state->port, state->irq, uart_config[state->type].name);
-@@ -5746,7 +2959,7 @@
+@@ -5746,7 +3321,7 @@
                           serial_driver.minor_start + state->line); 
        tty_register_devfs(&callout_driver, 0,
                           callout_driver.minor_start + state->line);
  }
  
  /**
-@@ -5785,7 +2998,6 @@
+@@ -5785,7 +3360,6 @@
        int i;
        struct async_struct *info;
  
        del_timer_sync(&serial_timer);
        save_flags(flags); cli();
          remove_bh(SERIAL_BH);
-@@ -5803,41 +3015,31 @@
+@@ -5803,41 +3377,31 @@
                        kfree(info);
                }
                if ((rs_table[i].type != PORT_UNKNOWN) && rs_table[i].port) {
  }
  
  module_init(rs_init);
-@@ -5946,7 +3148,7 @@
+@@ -5946,7 +3510,7 @@
        static struct async_struct *info;
        struct serial_state *state;
        unsigned cval;
        int     bits = 8;
        int     parity = 'n';
        int     doflow = 0;
-@@ -5954,6 +3156,8 @@
+@@ -5954,6 +3518,8 @@
        int     quot = 0;
        char    *s;
  
        if (options) {
                baud = simple_strtoul(options, NULL, 10);
                s = options;
-@@ -6028,19 +3232,12 @@
+@@ -6028,19 +3594,12 @@
        info->state = state;
        info->port = state->port;
        info->flags = state->flags;
        if (cflag & PARENB)
                cval |= UART_LCR_PARITY;
        if (!(cflag & PARODD))
-@@ -6082,10 +3279,15 @@
+@@ -6082,10 +3641,15 @@
   */
  void __init serial_console_init(void)
  {
index eaa8d64..fc249fe 100644 (file)
@@ -5,7 +5,7 @@ LICENSE = "GPL"
 KV = "2.4.21"
 RMKV = "2"
 PXAV = "1"
-PR = "r3"
+PR = "r4"
 
 SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-${KV}.tar.bz2 \
           http://lorien.handhelds.org/ftp.arm.linux.org.uk/kernel/v2.4/patch-${KV}-rmk${RMKV}.bz2;patch=1 \
index e69de29..d2d4b8c 100644 (file)
@@ -0,0 +1,79 @@
+DESCRIPTION = "linux-wlan-ng (prism2.x, prism3, pcmcia, pci, usb) driver for 11Mbps wireless lan cards"
+HOMEPAGE = "http://www.linux-wlan.org"
+SECTION = "kernel/modules"
+DEPENDS = "virtual/kernel"
+RRECOMMENDS = "wlan-ng-utils"
+MAINTAINER = "Bruno Randolf <bruno.randolf@4g-systems.biz>"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
+       file://no-compat.patch;patch=1 \
+       file://Ambit_usb.patch;patch=1 \
+       file://scripts-makefile-hostcc.diff;patch=1;pnum=0 \
+       file://pass-kernel-cross.patch;patch=1;pnum=0 \
+       file://OZ-Configure.patch;patch=1 \
+       file://wlan-ng.modutils \
+       file://wlan.agent \
+       file://config.in \
+       file://usbctl \
+       file://resume \
+       file://pre-up \
+       file://post-down"
+S = "${WORKDIR}/linux-wlan-ng-0.2.1pre23"
+
+inherit module
+
+MAKE_TARGETS = "all"
+
+do_configure() {
+       cp ${WORKDIR}/config.in ${S}
+       if grep CONFIG_PCMCIA=[ym] ${STAGING_KERNEL_DIR}/kernel-config; then
+               export PRISM2_PCMCIA=y
+               export WLAN_KERN_PCMCIA=y
+       fi
+       export PRISM2_PCI=y
+       export PRISM2_PLX=n
+       export PRISM2_USB=y
+       export TARGET_ROOT_ON_HOST=${D}
+       export RC_DIR=${sysconfdir}
+       oe_runmake LINUX_SRC=${KERNEL_SOURCE} auto_config
+}
+
+# override module_do_install in module.oeclass - dont want to set CC and
+# LD unless actually compiling the kernel modules - there are other user
+# level programs to be compiled. Note we need to use same compiler
+# that was used to build the kernel
+do_compile() {
+       unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+       oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR}   \
+                  KERNEL_SRC=${STAGING_KERNEL_DIR}    \
+                  KERNEL_VERSION=${KERNEL_VERSION}    \
+                  KERNEL_CC="${KERNEL_CC}" KERNEL_LD="${KERNEL_LD}" \
+                  ${MAKE_TARGETS}
+}
+
+do_install() {
+       oe_runmake install DESTDIR=${D} TARGET_MODDIR=
+       echo "YYYYYYYYYYYYYYYYY"
+       mkdir -p ${D}${sysconfdir}/modutils/
+       mkdir -p ${D}${sysconfdir}/hotplug/
+       mkdir -p ${D}${base_sbindir}/
+       install -m 0644 ${WORKDIR}/wlan-ng.modutils ${D}${sysconfdir}/modutils/wlan-ng.conf
+       install -m 0755 ${WORKDIR}/wlan.agent ${D}${sysconfdir}/hotplug/wlan.agent
+       install -d ${D}${sysconfdir}/network/if-pre-up.d
+       install -m 0755 ${WORKDIR}/pre-up ${D}${sysconfdir}/network/if-pre-up.d/wlan-ng
+       install -d ${D}${sysconfdir}/network/if-post-down.d
+       install -m 0755 ${WORKDIR}/post-down ${D}${sysconfdir}/network/if-post-down.d/wlan-ng
+       install -d ${D}${sysconfdir}/apm/resume.d
+       install -m 0755 ${WORKDIR}/resume ${D}${sysconfdir}/apm/resume.d/wlan-ng
+       install -m 0755 ${WORKDIR}/usbctl ${D}${base_sbindir}/usbctl
+       install -d ${D}${mandir}
+       mv ${D}/usr/local/man/* ${D}${mandir}
+       rm -r ${D}/usr/local/man
+       rm -rf ${D}/${sysconfdir}/init.d
+}
+
+PACKAGES_prepend = "wlan-ng-utils "
+FILES_wlan-ng-utils = "${sysconfdir} /sbin"
+FILES_${PN} = "/lib"