Hi,
this is a patch to add more data from the PCI configuration space to the device struct. It is needed for example to create a device tree in Open Firmware from the LB device tree.
There is one patch vor v2 and another one for v3.
Bye, Jens
On Tue, Sep 11, 2007 at 11:29:38PM +0200, Jens Freimann wrote:
this is a patch to add more data from the PCI configuration space to the device struct. It is needed for example to create a device tree in Open Firmware from the LB device tree.
There is one patch vor v2 and another one for v3.
Bye, Jens
Add more information to the device structure, so an Open Firmware device tree can be created from data in struct device.
Signed-off-by: Jens Freimann jens@freimann.org
Index: src/devices/pci_device.c
--- src/devices/pci_device.c (revision 2770) +++ src/devices/pci_device.c (working copy) @@ -972,7 +972,34 @@ /* Read the rest of the pci configuration information */ hdr_type = pci_read_config8(dev, PCI_HEADER_TYPE); class = pci_read_config32(dev, PCI_CLASS_REVISION);
- u16 status = pci_read_config16(dev, PCI_STATUS);
- dev->status = status;
- u8 revision = pci_read_config8(dev, PCI_REVISION_ID);
- dev->revision = revision;
- u8 cache_line = pci_read_config8(dev, PCI_CACHE_LINE_SIZE);
- dev->cache_line = cache_line;
- u8 irq_line = pci_read_config8(dev, PCI_INTERRUPT_LINE);
- dev->irq_line = irq_line;
- u8 irq_pin = pci_read_config8(dev, PCI_INTERRUPT_PIN);
- dev->irq_pin = irq_pin;
- u8 min_gnt = pci_read_config8(dev, PCI_MIN_GNT);
- dev->min_gnt = min_gnt;
- u8 max_lat = pci_read_config8(dev, PCI_MAX_LAT);
- dev->max_lat = max_lat;
- u16 subsystem_vendor = pci_read_config16(dev, PCI_SUBSYSTEM_VENDOR_ID);
- dev->subsystem_vendor = subsystem_vendor;
- u16 subsystem_device = pci_read_config16(dev, PCI_SUBSYSTEM_ID);
- dev->subsystem_device = subsystem_device;
Is there a reaons why this wouldn't work?
dev->status = pci_read_config16(dev, PCI_STATUS); dev->revision = pci_read_config8(dev, PCI_REVISION_ID); dev->cache_line = pci_read_config8(dev, PCI_CACHE_LINE_SIZE); dev->irq_line = pci_read_config8(dev, PCI_INTERRUPT_LINE); dev->irq_pin = pci_read_config8(dev, PCI_INTERRUPT_PIN); dev->min_gnt = pci_read_config8(dev, PCI_MIN_GNT); dev->max_lat = pci_read_config8(dev, PCI_MAX_LAT); dev->subsystem_vendor = pci_read_config16(dev, PCI_SUBSYSTEM_VENDOR_ID); dev->subsystem_device = pci_read_config16(dev, PCI_SUBSYSTEM_ID);
(much shorter)
- /* Store the interesting information in the device structure */ dev->vendor = id & 0xffff; dev->device = (id >> 16) & 0xffff;
Index: src/include/device/device.h
--- src/include/device/device.h (revision 2770) +++ src/include/device/device.h (working copy) @@ -68,9 +68,19 @@ device_t sibling; /* next device on this bus */ device_t next; /* chain of all devices */
- char dtsname[64]; struct device_path path; unsigned vendor; unsigned device;
- u16 status;
- u8 revision;
- u8 cache_line;
- u8 irq_line;
- u8 irq_pin;
- u8 min_gnt;
- u8 max_lat;
- u16 subsystem_vendor;
- u16 subsystem_device;
Use TABs for indentation as per coding guidelines, please.
The patch looks good to me otherwise, but someone with more OFW knowledge should probably look over it, too.
Uwe.
Hi,
attached is a fixed version of my patch. So far only for v3, because I ran into another problem with v2 that needs to be fixed first.
Am Donnerstag, den 13.09.2007, 03:27 +0200 schrieb Uwe Hermann:
Index: src/devices/pci_device.c
--- src/devices/pci_device.c (revision 2770) +++ src/devices/pci_device.c (working copy) @@ -972,7 +972,34 @@ /* Read the rest of the pci configuration information */ hdr_type = pci_read_config8(dev, PCI_HEADER_TYPE); class = pci_read_config32(dev, PCI_CLASS_REVISION);
- u16 status = pci_read_config16(dev, PCI_STATUS);
- dev->status = status;
Is there a reaons why this wouldn't work?
dev->status = pci_read_config16(dev, PCI_STATUS); (much shorter)
No, there used to be a reason for this, but not anymore. Changed it to the shorter version.
/* Store the interesting information in the device structure */ dev->vendor = id & 0xffff; dev->device = (id >> 16) & 0xffff; Index: src/include/device/device.h =================================================================== --- src/include/device/device.h (revision 2770) +++ src/include/device/device.h (working copy) @@ -68,9 +68,19 @@ device_t sibling; /* next device on this bus */ device_t next; /* chain of all devices */
- char dtsname[64];
struct device_path path; unsigned vendor; unsigned device;
- u16 status;
Use TABs for indentation as per coding guidelines, please.
Done.
The patch looks good to me otherwise, but someone with more OFW knowledge should probably look over it, too.
I think Stefan already looked at it. (?)
Jens
On Thu, Sep 13, 2007 at 09:58:19PM +0200, Jens Freimann wrote:
Add more information to the device structure, so an Open Firmware device tree can be created from data in struct device.
Signed-off-by: Jens Freimann jens@freimann.org
r499, thanks.
Uwe.