Re: [PATCH] serial: add ADDI-DATA GmbH Communication cards in 8250_pci.c and pci_ids.h.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 332, 11 28, 2007 at 10:57:02AM +0100, Krauth.Julien wrote:
> From: Krauth Julien <[email protected]>
> 
> Add ADDI-DATA GmbH communication cards to 8250_pci driver.
> Supported cards are:
> 
> APCI-7300, APCI-7420, APCI-7500, APCI-7800
> APCI-7300-2, APCI-7420-2, APCI-7500-2
> APCI-7300-3, APCI-7420-3, APCI-7500-3, APCI-7800-3
> 
> 8250_pci.c.patch
> ================
> Add ADDI-DATA GmbH communication cards to 8250_pci.c.
> 
> pci_ids.h.patch
> ===============
> Add ADDI-DATA GmbH communication cards Vendor and Device IDs to
> pci_ids.h.
> 
> WARNING:
> ========
> 8250_pci.c.patch depend on pci_ids.h.patch.
> 8250_pci.c is using Vendor and Device ID defined in pci_ids.h.
> 
> 
> Signed-off-by: Krauth J. <[email protected]>
> ---
> 
> This patch applies to kernel 2.6.23.9.
> 
> --- linux-2.6.23.9-vanilla/include/linux/pci_ids.h	2007-11-26
> 18:51:43.000000000 +0100
> +++ linux-2.6.23.9/include/linux/pci_ids.h	2007-11-27
> 10:55:12.000000000 +0100
> @@ -2019,6 +2019,23 @@
>  #define PCI_VENDOR_ID_QUICKNET		0x15e2
>  #define PCI_DEVICE_ID_QUICKNET_XJ	0x0500
>  
> +/*
> + * ADDI-DATA GmbH communication cards <[email protected]>
> + */
> +#define PCI_VENDOR_ID_ADDIDATA_OLD             0x10E8
> +#define PCI_VENDOR_ID_ADDIDATA                 0x15B8
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7500        0x7000
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7420        0x7001
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7300        0x7002
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7800        0x818E
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7500_2      0x7009
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7420_2      0x700A
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7300_2      0x700B
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7500_3      0x700C
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7420_3      0x700D
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7300_3      0x700E
> +#define PCI_DEVICE_ID_ADDIDATA_APCI7800_3      0x700F
> +
>  #define PCI_VENDOR_ID_PDC		0x15e9
>  
>  #define PCI_VENDOR_ID_FARSITE           0x1619
> 
> --- linux-2.6.23.9-vanilla/drivers/serial/8250_pci.c	2007-11-26
> 18:51:43.000000000 +0100
> +++ linux-2.6.23.9/drivers/serial/8250_pci.c	2007-11-27
> 10:53:09.000000000 +0100
> @@ -106,6 +106,51 @@ setup_port(struct serial_private *priv, 
>  }
>  
>  /*
> + * ADDI-DATA GmbH communication cards <[email protected]>
> + */
> +static int
> +addidata_setup(struct serial_private *priv, struct pciserial_board
> *board,
> +               struct uart_port *port, int idx)
> +{
> +       unsigned int bar = 0, offset = board->first_offset;
> +       bar = FL_GET_BASE(board->flags);
> +
> +       switch (priv->dev->device) {
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7500:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7420:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7300:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7500_2:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7420_2:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7300_2:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7500_3:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7420_3:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7300_3:
> +       case PCI_DEVICE_ID_ADDIDATA_APCI7800_3:
> +               offset += idx * board->uart_offset;
> +               break;

Why do you need this ? Looks like you can use pci_default_setup()
for all cards except PCI_DEVICE_ID_ADDIDATA_APCI7800.

> +       case PCI_DEVICE_ID_ADDIDATA_APCI7800:
> +               if (idx < 2 ) {
> +                       bar += 0;

Ughmm, this line looks especially useful :)

> +                       offset += idx * board->uart_offset;
> +               } else if ((idx >= 2) && (idx < 4)) {
> +                       bar += 1;
> +                       offset += ((idx - 2) * board->uart_offset);
> +               } else if ((idx >= 4) && (idx < 6 )) {
> +                       bar += 2;
> +                       offset += ((idx - 4) * board->uart_offset);
> +               } else if (idx >= 6) {
> +                       bar += 3;
> +                       offset += ((idx - 6) * board->uart_offset);
> +               }
> +
> +               break;
> +       }
> +
> +       return setup_port(priv, port, bar, offset, board->reg_shift);
> +}
> +
> +/*
>   * AFAVLAB uses a different mixture of BARs and offsets
>   * Not that ugly ;) -- HW
>   */
> @@ -752,6 +797,86 @@ pci_default_setup(struct serial_private 
>   */
>  static struct pci_serial_quirk pci_serial_quirks[] = {
>  	/*
> +	* ADDI-DATA GmbH communication cards <[email protected]>
> +	*/
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7500,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7420,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7300,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA_OLD,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7800,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},
> +	{
> +		.vendor         = PCI_VENDOR_ID_ADDIDATA,
> +		.device         = PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
> +		.subvendor      = PCI_ANY_ID,
> +		.subdevice      = PCI_ANY_ID,
> +		.setup          = addidata_setup,
> +	},

All these entries except PCI_DEVICE_ID_ADDIDATA_APCI7800 are unnecessary too.

> +	/*
>  	 * AFAVLAB cards - these may be called via parport_serial
>  	 *  It is not clear whether this applies to all products.
>  	 */
> @@ -2574,6 +2699,97 @@ static struct pci_device_id serial_pci_t
>  		pbn_pasemi_1682M },
>  
>  	/*
> +	* ADDI-DATA GmbH communication cards <[email protected]>
> +	*/
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7500,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_4_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7420,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_2_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7300,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_1_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA_OLD,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7800,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b1_8_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7500_2,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_4_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7420_2,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_2_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7300_2,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_1_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7500_3,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_4_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7420_3,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_2_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7300_3,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_1_115200 },
> +
> +	{	PCI_VENDOR_ID_ADDIDATA,
> +		PCI_DEVICE_ID_ADDIDATA_APCI7800_3,
> +		PCI_ANY_ID,
> +		PCI_ANY_ID,
> +		0,
> +		0,
> +		pbn_b0_bt_8_115200 },
> +
> +	/*
>  	 * These entries match devices with class COMMUNICATION_SERIAL,
>  	 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
>  	 */

Otherwise patch looks good.

-- 
Andrey Panin		| Linux and UNIX system administrator
[email protected]		| PGP key: wwwkeys.pgp.net

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux