Re: [PATCH] x86/acpi: calling mp_config_acpi_gsi in mp_register_gsi

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

 



it seems it still have some problem. will have -v2.

YH

Yinghai Lu wrote:
> it seems that change about calling mp_config_acpi_gsi in acpi_pci_irq_enable()
> never get into mainline.
> 
> actually we could call that in mp_register_gsi with struct device...
> also could make mp_config_acpi_gsi to be static
> 
> [Impact: make update_mptable working]
> 
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> 
> ---
>  arch/x86/include/asm/mpspec.h |    9 ------
>  arch/x86/kernel/acpi/boot.c   |   62 ++++++++++++++++++++++++------------------
>  2 files changed, 36 insertions(+), 35 deletions(-)
> 
> Index: linux-2.6/arch/x86/include/asm/mpspec.h
> ===================================================================
> --- linux-2.6.orig/arch/x86/include/asm/mpspec.h
> +++ linux-2.6/arch/x86/include/asm/mpspec.h
> @@ -77,17 +77,8 @@ extern int mp_register_gsi(struct device
>  				 int active_high_low);
>  extern int acpi_probe_gsi(void);
>  #ifdef CONFIG_X86_IO_APIC
> -extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
> -				u32 gsi, int triggering, int polarity);
>  extern int mp_find_ioapic(int gsi);
>  extern int mp_find_ioapic_pin(int ioapic, int gsi);
> -#else
> -static inline int
> -mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
> -		   u32 gsi, int triggering, int polarity)
> -{
> -	return 0;
> -}
>  #endif
>  #else /* !CONFIG_ACPI: */
>  static inline int acpi_probe_gsi(void)
> Index: linux-2.6/arch/x86/kernel/acpi/boot.c
> ===================================================================
> --- linux-2.6.orig/arch/x86/kernel/acpi/boot.c
> +++ linux-2.6/arch/x86/kernel/acpi/boot.c
> @@ -33,6 +33,7 @@
>  #include <linux/irq.h>
>  #include <linux/bootmem.h>
>  #include <linux/ioport.h>
> +#include <linux/pci.h>
>  
>  #include <asm/pgtable.h>
>  #include <asm/io_apic.h>
> @@ -1158,6 +1159,40 @@ void __init mp_config_acpi_legacy_irqs(v
>  	}
>  }
>  
> +static int mp_config_acpi_gsi(struct device *dev, u32 gsi, int triggering,
> +			int polarity)
> +{
> +#ifdef CONFIG_X86_MPPARSE
> +	struct mpc_intsrc mp_irq;
> +	struct pci_dev *pdev;
> +	unsigned char number;
> +	unsigned int devfn;
> +	int ioapic;
> +	u8 pin;
> +
> +	if (!acpi_ioapic)
> +		return 0;
> +
> +	pdev = to_pci_dev(dev);
> +	number = pdev->bus->number;
> +	devfn = pdev->devfn;
> +	pin = pdev->pin;
> +	/* print the entry should happen on mptable identically */
> +	mp_irq.type = MP_INTSRC;
> +	mp_irq.irqtype = mp_INT;
> +	mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) |
> +				(polarity == ACPI_ACTIVE_HIGH ? 1 : 3);
> +	mp_irq.srcbus = number;
> +	mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3);
> +	ioapic = mp_find_ioapic(gsi);
> +	mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id;
> +	mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi);
> +
> +	save_mp_irq(&mp_irq);
> +#endif
> +	return 0;
> +}
> +
>  int mp_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity)
>  {
>  	int ioapic;
> @@ -1189,6 +1224,7 @@ int mp_register_gsi(struct device *dev,
>  		       ioapic_pin);
>  		return gsi;
>  	}
> +	mp_config_acpi_gsi(dev, gsi, triggering, polarity);
>  
>  	/*
>  	 * Avoid pin reprogramming.  PRTs typically include entries
> @@ -1208,32 +1244,6 @@ int mp_register_gsi(struct device *dev,
>  	return gsi;
>  }
>  
> -int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
> -			u32 gsi, int triggering, int polarity)
> -{
> -#ifdef CONFIG_X86_MPPARSE
> -	struct mpc_intsrc mp_irq;
> -	int ioapic;
> -
> -	if (!acpi_ioapic)
> -		return 0;
> -
> -	/* print the entry should happen on mptable identically */
> -	mp_irq.type = MP_INTSRC;
> -	mp_irq.irqtype = mp_INT;
> -	mp_irq.irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) |
> -				(polarity == ACPI_ACTIVE_HIGH ? 1 : 3);
> -	mp_irq.srcbus = number;
> -	mp_irq.srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3);
> -	ioapic = mp_find_ioapic(gsi);
> -	mp_irq.dstapic = mp_ioapic_routing[ioapic].apic_id;
> -	mp_irq.dstirq = mp_find_ioapic_pin(ioapic, gsi);
> -
> -	save_mp_irq(&mp_irq);
> -#endif
> -	return 0;
> -}
> -
>  /*
>   * Parse IOAPIC related entries in MADT
>   * returns 0 on success, < 0 on error
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux