Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6:
  PCI: Run k8t_sound_hostbridge quirk only when needed
  PCI: disable MSI on RX790
  PCI: disable MSI on RD580
  PCI: disable MSI on RS690
  PCI: make pcie_get_readrq visible in pci.h
  PCI: lets kill the 'PCI hidden behind bridge' message
  pci/hotplug/cpqphp_ctrl.c: remove stale BKL use
  PCI: Document pci_iomap()
  PCI: quirk_e100_interrupt() called too early
  PCI: Move prototypes for pci_bus_find_capability to include/linux/pci.h
This commit is contained in:
Linus Torvalds 2007-08-23 21:35:45 -07:00
Родитель 9e1a3e31cb 18166c1a50
Коммит 2b56fec64f
9 изменённых файлов: 42 добавлений и 23 удалений

Просмотреть файл

@ -316,7 +316,8 @@ CPU B: spin_unlock_irqrestore(&dev_lock, flags)
<chapter id="pubfunctions"> <chapter id="pubfunctions">
<title>Public Functions Provided</title> <title>Public Functions Provided</title>
!Einclude/asm-i386/io.h !Iinclude/asm-i386/io.h
!Elib/iomap.c
</chapter> </chapter>
</book> </book>

Просмотреть файл

@ -1746,10 +1746,8 @@ static void pushbutton_helper_thread(unsigned long data)
static int event_thread(void* data) static int event_thread(void* data)
{ {
struct controller *ctrl; struct controller *ctrl;
lock_kernel();
daemonize("phpd_event"); daemonize("phpd_event");
unlock_kernel();
while (1) { while (1) {
dbg("!!!!event_thread sleeping\n"); dbg("!!!!event_thread sleeping\n");

Просмотреть файл

@ -5,12 +5,7 @@ extern int pci_uevent(struct device *dev, char **envp, int num_envp,
extern int pci_create_sysfs_dev_files(struct pci_dev *pdev); extern int pci_create_sysfs_dev_files(struct pci_dev *pdev);
extern void pci_remove_sysfs_dev_files(struct pci_dev *pdev); extern void pci_remove_sysfs_dev_files(struct pci_dev *pdev);
extern void pci_cleanup_rom(struct pci_dev *dev); extern void pci_cleanup_rom(struct pci_dev *dev);
extern int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
resource_size_t size, resource_size_t align,
resource_size_t min, unsigned int type_mask,
void (*alignf)(void *, struct resource *,
resource_size_t, resource_size_t),
void *alignf_data);
/* Firmware callbacks */ /* Firmware callbacks */
extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state); extern pci_power_t (*platform_pci_choose_state)(struct pci_dev *dev, pm_message_t state);
extern int (*platform_pci_set_power_state)(struct pci_dev *dev, pci_power_t state); extern int (*platform_pci_set_power_state)(struct pci_dev *dev, pci_power_t state);
@ -35,7 +30,6 @@ static inline int pci_proc_detach_bus(struct pci_bus *bus) { return 0; }
/* Functions for PCI Hotplug drivers to use */ /* Functions for PCI Hotplug drivers to use */
extern unsigned int pci_do_scan_bus(struct pci_bus *bus); extern unsigned int pci_do_scan_bus(struct pci_bus *bus);
extern int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
extern void pci_remove_legacy_files(struct pci_bus *bus); extern void pci_remove_legacy_files(struct pci_bus *bus);

Просмотреть файл

@ -653,20 +653,20 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass
sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number);
/* Has only triggered on CardBus, fixup is in yenta_socket */
while (bus->parent) { while (bus->parent) {
if ((child->subordinate > bus->subordinate) || if ((child->subordinate > bus->subordinate) ||
(child->number > bus->subordinate) || (child->number > bus->subordinate) ||
(child->number < bus->number) || (child->number < bus->number) ||
(child->subordinate < bus->number)) { (child->subordinate < bus->number)) {
printk(KERN_WARNING "PCI: Bus #%02x (-#%02x) is " pr_debug("PCI: Bus #%02x (-#%02x) is %s"
"hidden behind%s bridge #%02x (-#%02x)%s\n", "hidden behind%s bridge #%02x (-#%02x)\n",
child->number, child->subordinate, child->number, child->subordinate,
bus->self->transparent ? " transparent" : " ", (bus->number > child->subordinate &&
bus->number, bus->subordinate, bus->subordinate < child->number) ?
pcibios_assign_all_busses() ? " " : "wholly " : " partially",
" (try 'pci=assign-busses')"); bus->self->transparent ? " transparent" : " ",
printk(KERN_WARNING "Please report the result to " bus->number, bus->subordinate);
"<bk@suse.de> to fix this permanently\n");
} }
bus = bus->parent; bus = bus->parent;
} }

Просмотреть файл

@ -947,7 +947,7 @@ static void k8t_sound_hostbridge(struct pci_dev *dev)
unsigned char val; unsigned char val;
pci_read_config_byte(dev, 0x50, &val); pci_read_config_byte(dev, 0x50, &val);
if (val == 0x88 || val == 0xc8) { if (val == 0xc8) {
/* Assume it's probably a MSI-K8T-Neo2Fir */ /* Assume it's probably a MSI-K8T-Neo2Fir */
printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, attempting to turn soundcard ON\n"); printk(KERN_INFO "PCI: MSI-K8T-Neo2Fir, attempting to turn soundcard ON\n");
pci_write_config_byte(dev, 0x50, val & (~0x40)); pci_write_config_byte(dev, 0x50, val & (~0x40));
@ -1485,7 +1485,7 @@ static void __devinit quirk_e100_interrupt(struct pci_dev *dev)
iounmap(csr); iounmap(csr);
} }
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_e100_interrupt);
static void __devinit fixup_rev1_53c810(struct pci_dev* dev) static void __devinit fixup_rev1_53c810(struct pci_dev* dev)
{ {
@ -1650,6 +1650,9 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCN
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RD580, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RX790, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS690, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
/* Disable MSI on chipsets that are known to not support it */ /* Disable MSI on chipsets that are known to not support it */

Просмотреть файл

@ -112,6 +112,9 @@ extern void __iomem * __ioremap(unsigned long offset, unsigned long size, unsign
* writew/writel functions and the other mmio helpers. The returned * writew/writel functions and the other mmio helpers. The returned
* address is not guaranteed to be usable directly as a virtual * address is not guaranteed to be usable directly as a virtual
* address. * address.
*
* If the area you are trying to map is a PCI BAR you should have a
* look at pci_iomap().
*/ */
static inline void __iomem * ioremap(unsigned long offset, unsigned long size) static inline void __iomem * ioremap(unsigned long offset, unsigned long size)

Просмотреть файл

@ -557,6 +557,7 @@ int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
int pcix_get_max_mmrbc(struct pci_dev *dev); int pcix_get_max_mmrbc(struct pci_dev *dev);
int pcix_get_mmrbc(struct pci_dev *dev); int pcix_get_mmrbc(struct pci_dev *dev);
int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
int pcie_get_readrq(struct pci_dev *dev);
int pcie_set_readrq(struct pci_dev *dev, int rq); int pcie_set_readrq(struct pci_dev *dev, int rq);
void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
int __must_check pci_assign_resource(struct pci_dev *dev, int i); int __must_check pci_assign_resource(struct pci_dev *dev, int i);
@ -578,6 +579,9 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable);
/* Functions for PCI Hotplug drivers to use */
int pci_bus_find_capability (struct pci_bus *bus, unsigned int devfn, int cap);
/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ /* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */
void pci_bus_assign_resources(struct pci_bus *bus); void pci_bus_assign_resources(struct pci_bus *bus);
void pci_bus_size_bridges(struct pci_bus *bus); void pci_bus_size_bridges(struct pci_bus *bus);

Просмотреть файл

@ -360,6 +360,9 @@
#define PCI_DEVICE_ID_ATI_RS400_166 0x5a32 #define PCI_DEVICE_ID_ATI_RS400_166 0x5a32
#define PCI_DEVICE_ID_ATI_RS400_200 0x5a33 #define PCI_DEVICE_ID_ATI_RS400_200 0x5a33
#define PCI_DEVICE_ID_ATI_RS480 0x5950 #define PCI_DEVICE_ID_ATI_RS480 0x5950
#define PCI_DEVICE_ID_ATI_RD580 0x5952
#define PCI_DEVICE_ID_ATI_RX790 0x5957
#define PCI_DEVICE_ID_ATI_RS690 0x7910
/* ATI IXP Chipset */ /* ATI IXP Chipset */
#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 #define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349
#define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353 #define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353

Просмотреть файл

@ -240,7 +240,20 @@ void ioport_unmap(void __iomem *addr)
EXPORT_SYMBOL(ioport_map); EXPORT_SYMBOL(ioport_map);
EXPORT_SYMBOL(ioport_unmap); EXPORT_SYMBOL(ioport_unmap);
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ /**
* pci_iomap - create a virtual mapping cookie for a PCI BAR
* @dev: PCI device that owns the BAR
* @bar: BAR number
* @maxlen: length of the memory to map
*
* Using this function you will get a __iomem address to your device BAR.
* You can access it using ioread*() and iowrite*(). These functions hide
* the details if this is a MMIO or PIO address space and will just do what
* you expect from them in the correct way.
*
* @maxlen specifies the maximum length to map. If you want to get access to
* the complete BAR without checking for its length first, pass %0 here.
* */
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
{ {
unsigned long start = pci_resource_start(dev, bar); unsigned long start = pci_resource_start(dev, bar);