[LinuxBIOS] [PATCH] Add more PCI config data to device structure

Uwe Hermann uwe at hermann-uwe.de
Thu Sep 13 03:27:18 CEST 2007


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 at 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.
-- 
http://www.hermann-uwe.de  | http://www.holsham-traders.de
http://www.crazy-hacks.org | http://www.unmaintained-free-software.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20070913/f254052c/attachment.sig>


More information about the coreboot mailing list