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 <[EMAIL PROTECTED]> > > 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. -- http://www.hermann-uwe.de | http://www.holsham-traders.de http://www.crazy-hacks.org | http://www.unmaintained-free-software.org
signature.asc
Description: Digital signature
-- linuxbios mailing list [email protected] http://www.linuxbios.org/mailman/listinfo/linuxbios
