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

Attachment: signature.asc
Description: Digital signature

-- 
linuxbios mailing list
[email protected]
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to