8250: Let arch provide the list of leagacy ports dynamically
PATCH 1/1 8250: Let arch provide the list of leagacy ports dynamically
Hi !
This patch adds an optional callback for the 8250 driver to request the list of legacy port via a function call instead of relying on a #define of an array. This finally allows to fix the problem of platforms like ppc and ppc64 for which the same kernel can boot machines with and without a 8250, and is necessary to properly deal with a new platform coming to ppc64 which has a 8250 but with different irq numbers.
include/linux/8250.h new file +75 -0
@@ -0,0 +1,75 @@ +/* +* linux/drivers/char/8250.h +* +* Driver for 8250/16550-type serial ports +* +* Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. +* +* Copyright (C) 2001 Russell King. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* $Id: 8250.h,v 1.8 2002/07/21 21:32:30 rmk Exp $ +*/ + +#include <linux/config.h> + +int serial8250_register_port (struct uart_port *); +void serial8250_unregister_port (int line); +void serial8250_get_irq_map (unsigned int *map); +void serial8250_suspend_port (int line); +void serial8250_resume_port (int line); + +struct old_serial_port { +unsigned int uart; +unsigned int baud_base; +unsigned int port; +unsigned int irq; +unsigned int flags; +unsigned char hub6; +unsigned char io_type; +unsigned char *iomem_base; +unsigned short iomem_reg_shift; +}; + +/* +* This replaces serial_uart_config in include/linux/serial.h +*/ +struct serial8250_config { +const char *name; +unsigned short fifo_size; +unsigned short tx_loadsz; +unsigned char fcr; +unsigned int flags; +}; + +#define UART_CAP_FIFO (1 << 8)/* UART has FIFO */ +#define UART_CAP_EFR (1 << 9)/* UART has EFR */ +#define UART_CAP_SLEEP (1 << 10)/* UART has IER sleep */ +#define UART_CAP_AFE (1 << 11)/* MCR-based hw flow control */ + +#undef SERIAL_DEBUG_PCI + +#if defined(__i386__) && (defined(CONFIG_M386 ) || defined(CONFIG_M486 )) +#define SERIAL_INLINE +#endif + +#ifdef SERIAL_INLINE +#define _INLINE_ inline +#else +#define _INLINE_ +#endif + +#define PROBE_RSA (1 << 0) +#define PROBE_ANY (~0) + +#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8) + +#ifdef CONFIG_SERIAL_8250_SHARE_IRQ +#define SERIAL8250_SHARE_IRQS 1 +#else +#define SERIAL8250_SHARE_IRQS 0 +#endif
dev/null1970-01-01 00:00:00.000000000 +0000 renamed from drivers/serial/8250.h +0 -75
75 lines not on this page · raw message
drivers/serial/au1x00_uart.c +1 -1
@@ -29,6 +29,7 @@#include <linux/serial.h> #include <linux/serialP.h> #include <linux/delay.h> +#include <linux/8250.h> #include <asm/serial.h> #include <asm/io.h>
@@ -40,7 +41,6 @@#endif #include <linux/serial_core.h> -#include "8250.h" /* * Debugging.
drivers/serial/serial_cs.c +1 -2
@@ -44,6 +44,7 @@#include <linux/serial.h> #include <linux/serial_core.h> #include <linux/major.h> +#include <linux/8250.h> #include <asm/io.h> #include <asm/system.h>
@@ -55,8 +56,6 @@#include <pcmcia/ds.h> #include <pcmcia/cisreg.h> -#include "8250.h" -#ifdef PCMCIA_DEBUG static int pc_debug =PCMCIA_DEBUG ;MODULE_PARM (pc_debug,"i" );
drivers/serial/8250_pnp.c +1 -2
@@ -26,12 +26,11 @@#include <linux/serialP.h> #include <linux/serial_core.h> #include <linux/bitops.h> +#include <linux/8250.h> #include <asm/byteorder.h> #include <asm/serial.h> -#include "8250.h" -#define UNKNOWN_DEV 0x3000
drivers/serial/8250_pci.c +2 -2
@@ -23,13 +23,13 @@#include <linux/delay.h> #include <linux/tty.h> #include <linux/serial_core.h> -#include <linux/8250_pci.h> #include <linux/bitops.h> +#include <linux/8250.h> +#include <linux/8250_pci.h> #include <asm/byteorder.h> #include <asm/io.h> -#include "8250.h" /* * Definitions for PCI support.
drivers/serial/8250.c +30 -12
82 lines not on this page · raw message
Quoted 4 lines · Benjamin Herrenschmidt
a #define of an array. This finally allows to fix the problem of platforms like ppc and ppc64 for which the same kernel can boot machines with and without a 8250, and is necessary to properly deal
That sounds great because we're seeing the same problem with i8042 on ppc/ppc64. Do you have any plans for that driver?
Thanks,
Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txtQuoted 8 lines · Herbert Xu
Quoted 4 lines · Benjamin Herrenschmidt
a #define of an array. This finally allows to fix the problem of platforms like ppc and ppc64 for which the same kernel can boot machines with and without a 8250, and is necessary to properly deal
That sounds great because we're seeing the same problem with i8042 on ppc/ppc64. Do you have any plans for that driver?
There is a different patch "[PATCH] ppc64: Add mecanism to check existence of legacy ISA devices" that I posted today that does that for ppc64, however, Linus seem to prefer something different involving porting the pnp core to ppc64 and adapting those drivers to rely on it, which I don't have time to do at the moment.
Ben.