Here's a new version of the patch according to our discussion.
This allows the platform to add its own platform files to the
sysfs PCI device node through a "pcibios_add_platform_entries()"
call.
I added an empty pcibios_add_platform_entries() inline to all
archs that apparently have PCI and implemented the OF stuff for
ppc and ppc64. The name is still "devspec" for now, I doubt
it will conflict and that's consistent with our use of the
"devspec" name in other places.
prom_add_property(find_path_device("/"), of_prop);
}
}
+
+static ssize_t pci_show_devspec(struct device *dev, char *buf)
+{
+ struct pci_dev *pdev;
+ struct device_node *np;
+
+ pdev = to_pci_dev (dev);
+ np = pci_device_to_OF_node(pdev);
+ if (np == NULL || np->full_name == NULL)
+ return 0;
+ return sprintf(buf, "%s", np->full_name);
+}
+static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
+
#endif /* CONFIG_PPC_OF */
+/* Add sysfs properties */
+void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+#ifdef CONFIG_PPC_OF
+ device_create_file(&pdev->dev, &dev_attr_devspec);
+#endif /* CONFIG_PPC_OF */
+}
+
+
#ifdef CONFIG_PPC_PMAC
/*
* This set of routines checks for PCI<->PCI bridges that have closed
return ret;
}
+
+#ifdef CONFIG_PPC_PSERIES
+static ssize_t pci_show_devspec(struct device *dev, char *buf)
+{
+ struct pci_dev *pdev;
+ struct device_node *np;
+
+ pdev = to_pci_dev (dev);
+ np = pci_device_to_OF_node(pdev);
+ if (np == NULL || np->full_name == NULL)
+ return 0;
+ return sprintf(buf, "%s", np->full_name);
+}
+static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL);
+#endif /* CONFIG_PPC_PSERIES */
+
+void pcibios_add_platform_entries(struct pci_dev *pdev)
+{
+#ifdef CONFIG_PPC_PSERIES
+ device_create_file(&pdev->dev, &dev_attr_devspec);
+#endif /* CONFIG_PPC_PSERIES */
+}
device_create_file (dev, &dev_attr_irq);
device_create_file (dev, &dev_attr_resource);
sysfs_create_bin_file(&dev->kobj, &pci_config_attr);
+
+ /* add platform-specific attributes */
+ pcibios_add_platform_entries(pdev);
}
return 0;
}
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* Values for the `which' argument to sys_pciconfig_iobase. */
pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res);
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
#endif
#define PCI_DMA_BUS_IS_PHYS (1)
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* _ASM_H8300_PCI_H */
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state, int write_combine);
+
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* implement the pci_ DMA API in terms of the generic device dma_ one */
return 0;
}
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
/* generic pci stuff */
#include <asm-generic/pci.h>
*/
#define PCI_DMA_BUS_IS_PHYS (1)
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* _ASM_M68K_PCI_H */
*/
#define pci_dac_dma_supported(pci_dev, mask) (0)
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* CONFIG_COMEMPCI */
#endif /* M68KNOMMU_PCI_H */
dma_cache_wback_inv(addr, len);
}
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* implement the pci_ DMA API in terms of the generic device dma_ one */
pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res);
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __ASM_PARISC_PCI_H */
pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res);
+extern void pcibios_add_platform_entries(struct pci_dev *dev);
+
#endif /* __KERNEL__ */
#endif /* __PPC_PCI_H */
extern int pci_read_irq_line(struct pci_dev *dev);
+extern void pcibios_add_platform_entries(struct pci_dev *dev);
+
#endif /* __KERNEL__ */
#endif /* __PPC64_PCI_H */
extern int pciauto_assign_resources(int busno, struct pci_channel *hose);
#endif
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* generic pci stuff */
#define pci_dac_dma_supported(dev, mask) (0)
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* generic pci stuff */
pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region);
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
#endif /* __SPARC64_PCI_H */
pci_free_consistent (struct pci_dev *pdev, size_t size, void *cpu_addr,
dma_addr_t dma_addr);
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __V850_PCI_H__ */
extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state, int write_combine);
+static inline void pcibios_add_platform_entries(struct pci_dev *dev)
+{
+}
+
#endif /* __KERNEL__ */
/* generic pci stuff */