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

Reply via email to