[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] ns16550: PCI initialization adjustments
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1347371733 -7200 # Node ID ee12dc357fbecbb0517798f395d14bf1764c6766 # Parent 5fb5b3b70e34ef278d06aff27878b4b8e6d9145f ns16550: PCI initialization adjustments 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> Acked-by: Keir Fraser <keir@xxxxxxx> --- diff -r 5fb5b3b70e34 -r ee12dc357fbe xen/drivers/char/ns16550.c --- a/xen/drivers/char/ns16550.c Tue Sep 11 15:52:36 2012 +0200 +++ b/xen/drivers/char/ns16550.c Tue Sep 11 15:55:33 2012 +0200 @@ -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,8 @@ 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; return 0; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |