mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6: sparc: Support show_unhandled_signals. sparc: use __ratelimit sunxvr500: Additional PCI id for sunxvr500 driver sparc: use asm-generic/scatterlist.h sparc64: If 'slot-names' property exist, create sysfs PCI slot information. sparc: remove trailing space in messages sparc: remove redundant return statements
This commit is contained in:
commit
b7f3a209e9
23 changed files with 176 additions and 100 deletions
|
@ -1095,3 +1095,78 @@ static int __init pcibios_init(void)
|
|||
return 0;
|
||||
}
|
||||
subsys_initcall(pcibios_init);
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
static void __devinit pci_bus_slot_names(struct device_node *node,
|
||||
struct pci_bus *bus)
|
||||
{
|
||||
const struct pci_slot_names {
|
||||
u32 slot_mask;
|
||||
char names[0];
|
||||
} *prop;
|
||||
const char *sp;
|
||||
int len, i;
|
||||
u32 mask;
|
||||
|
||||
prop = of_get_property(node, "slot-names", &len);
|
||||
if (!prop)
|
||||
return;
|
||||
|
||||
mask = prop->slot_mask;
|
||||
sp = prop->names;
|
||||
|
||||
if (ofpci_verbose)
|
||||
printk("PCI: Making slots for [%s] mask[0x%02x]\n",
|
||||
node->full_name, mask);
|
||||
|
||||
i = 0;
|
||||
while (mask) {
|
||||
struct pci_slot *pci_slot;
|
||||
u32 this_bit = 1 << i;
|
||||
|
||||
if (!(mask & this_bit)) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ofpci_verbose)
|
||||
printk("PCI: Making slot [%s]\n", sp);
|
||||
|
||||
pci_slot = pci_create_slot(bus, i, sp, NULL);
|
||||
if (IS_ERR(pci_slot))
|
||||
printk(KERN_ERR "PCI: pci_create_slot returned %ld\n",
|
||||
PTR_ERR(pci_slot));
|
||||
|
||||
sp += strlen(sp) + 1;
|
||||
mask &= ~this_bit;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
static int __init of_pci_slot_init(void)
|
||||
{
|
||||
struct pci_bus *pbus = NULL;
|
||||
|
||||
while ((pbus = pci_find_next_bus(pbus)) != NULL) {
|
||||
struct device_node *node;
|
||||
|
||||
if (pbus->self) {
|
||||
struct dev_archdata *sd = pbus->self->sysdata;
|
||||
|
||||
/* PCI->PCI bridge */
|
||||
node = sd->prom_node;
|
||||
} else {
|
||||
struct pci_pbm_info *pbm = pbus->sysdata;
|
||||
|
||||
/* Host PCI controller */
|
||||
node = pbm->op->node;
|
||||
}
|
||||
|
||||
pci_bus_slot_names(node, pbus);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(of_pci_slot_init);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue