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

Re: [Xen-devel] [PATCH 6/8] ns16550: PCI initialization adjustments



On Tue, Sep 11, 2012 at 11:19:32AM +0100, Jan Beulich wrote:
> Besides single-port serial cards, also accept multi-port ones and such
> providing mixed functionality (e.g. also having a parallel port).
> 
> Reading PCI_INTERRUPT_PIN before ACPI gets enabled generally produces
> an incorrect IRQ (below 16, whereas after enabling ACPI it frequently
> would end up at a higher one), so this is useful (almost) only when a
> system already boots in ACPI mode.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> 
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -468,7 +468,6 @@ static int __init check_existence(struct
>  static int
>  pci_uart_config (struct ns16550 *uart, int skip_amt, int bar_idx)
>  {
> -    uint16_t class;
>      uint32_t bar, len;
>      int b, d, f;
>  
> @@ -479,9 +478,15 @@ pci_uart_config (struct ns16550 *uart, i
>          {
>              for ( f = 0; f < 0x8; f++ )
>              {
> -                class = pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE);
> -                if ( class != 0x700 )
> +                switch ( pci_conf_read16(0, b, d, f, PCI_CLASS_DEVICE) )
> +                {
> +                case 0x0700: /* single port serial */
> +                case 0x0702: /* multi port serial */
> +                case 0x0780: /* other (e.g serial+parallel) */
> +                    break;
> +                default:
>                      continue;
> +                }
>  
>                  bar = pci_conf_read32(0, b, d, f,
>                                        PCI_BASE_ADDRESS_0 + bar_idx*4);
> @@ -504,7 +509,9 @@ pci_uart_config (struct ns16550 *uart, i
>                  uart->bar = bar;
>                  uart->bar_idx = bar_idx;
>                  uart->io_base = bar & ~PCI_BASE_ADDRESS_SPACE_IO;
> -                uart->irq = 0;
> +                uart->irq = pci_conf_read8(0, b, d, f, PCI_INTERRUPT_PIN) ?
> +                    pci_conf_read8(0, b, d, f, PCI_INTERRUPT_LINE) : 0;
> +printk("COM%d: BAR=%04x IRQ=%d\n", bar_idx + 1, bar, uart->irq);//temp

printk ?

>  
>                  return 0;
>              }
> 
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.