[PATCH][2.4] VIO infrastructure update - review request
Santiago Leon
santil at us.ibm.com
Fri Oct 31 02:41:02 EST 2003
Hollis...
Thanks for the extra explanations... I think I agree with you that the
irq and dma should be unconditionally set the way you explained it...
I'll make that change to the patch...
And yes, I have modified and tested this changes on veth and vscsi...
Hollis Blanchard wrote:
> On Wednesday, Oct 29, 2003, at 19:30 US/Central, Santiago Leon wrote:
>
>>
>> The attached patch is a reconstruction of the virtual I/O
>> infrastructure, along with the proper changes to the Virtual Ethernet
>> driver... The objective was to clean up the interface, structs, and
>> functions... Some of the device initialization code was moved to each
>> virtual driver (sort of what other buses like PCI do), making the
>> drivers module-friendly and ready for hotplug...
>
>
> This patch is important because the current VIO bus code in 2.4 has a
> lot of PCI-specific features which don't make sense for virtual devices.
> For example, it maintains separate global and per-bus lists of devices
> (even though logically it's hard to see how we could end up with
> multiple virtual busses), and it tries to emulate PCI's vendor/device
> identifiers with hardcoded constants. That changes the drivers' device
> tables like so:
>
>> static struct vio_device_id ibmveth_device_table[] __devinitdata= {
>> - { 0x1014, 0x0001, 0, 0, 0, 0, 0},
>> + { "network", "IBM,l-lan"},
>> { 0,}
>> };
>
> All those 0's were unused, and the vendor/device IDs were completely
> artificial. I think this patch is clearly better.
>
> Also, there was some driver-specific code in vio.c, for example
> knowledge about irq and dma properties between different types of devices.
>
> One change I'd like to see: instead of having each driver call
> vio_get_irq(), rather have vio.c set the irq for it. Something like
> this, unconditionally in vio_register_device():
>
> uint *intrs = (uint *)get_property(node, "interrupts", NULL);
> if (intrs) {
> vio_dev->interrupts = *intrs;
> } else {
> vio_dev->interrupts = -1;
> }
> In other words, if the OF node has an "interrupts" property, store the
> value into struct vio_dev. If not, store -1 (or whatever). Same for DMA,
> but not for things that really are device-specific, e.g. MAC address.
>
> Also, Santi didn't mention in the mail that he's modified and tested
> ibmveth.c and I believe VSCSI as well.
>
--
********************************************************************
Santiago A. Leon
Power Linux Development
IBM Linux Technology Center
Off: (919) 254-6048 T/L: 444-6048 Fax: (919) 543-7378
** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc64-dev
mailing list