[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Configuring onboard devices
From: |
Markus Armbruster |
Subject: |
Re: Configuring onboard devices |
Date: |
Sat, 02 May 2020 07:47:16 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) |
Mark Cave-Ayland <address@hidden> writes:
> On 30/04/2020 16:20, Markus Armbruster wrote:
>
>>> Ah I see now, these aliases are for individual properties rather than
>>> objects. What I
>>> was trying to ask was if it were possible to have something like this:
>>>
>>> /machine (SS-5-machine)
>>> /builtin
>>> /nic0 -> link to "lance" device
>>>
>>> Here nic0 is an alias "published" by the maintainer of the SS-5 machine
>>> which is
>>> configured in the machine init() function using object_property_add_link()
>>> or a
>>> suitable wrapper. Users can then configure these builtin devices from the
>>> command
>>> line using your -machine nic0.netdev=my-netdev-id syntax or similar.
>>
>> Got it now, thanks!
>>
>>> Having the default devices under /builtin or other known QOM path would
>>> enable
>>> builtin devices to be easily enumerated programatically and/or from the
>>> command line
>>> as required.
>>
>> There are three standard containers under /machine/:
>>
>> * /machine/peripheral/
>>
>> Devices with a user-specified ID go here, as /machine/peripheral/ID.
>> User-specified means -device or device_add.
>>
>> /machine/peripheral/ID is effectively a stable interface. It's just
>> underdocumented (undocumented?).
>>
>> To be useful, the stuff below ID/ needed to be stable and documented,
>> too.
>>
>> * /machine/peripheral-anon/
>>
>> Same, but user elected not to give an ID.
>> /machine/peripheral-anon/device[N], where N counts up from zero in
>> creation order.
>>
>> N is obviously not stable, but this is a problem of the user's making.
>> If you want to refer to a device, give it an ID.
>>
>> * /machine/unattached/
>>
>> The orphanage. When a device has no parent when its realized, it gets
>> put here, as /machine/unattached/device[N], where N counts up from
>> zero in realization order.
>>
>> N is obviously not stable, and this time we can't blame the
>> victim^Wuser. You can search for devices of a certain type.
>> Sometimes that's good enough.
>>
>> All the onboard devices are here, and much more. We've fathered a lot
>> of unloved red-headed children, it seems...
>>
>> Some of the "much more" is due to sloppy modelling, i.e. neglecting to
>> set the proper parent.
>>
>> I figure we could put onboard devices in a nicer place, with nicer
>> names. Need a convention for the place and the names, then make board
>> code conform to it.
>
> That's good, it seems that this is already fairly close to how it works for
> -device
> at the moment.
>
> I don't think that it is possible to come up a single place for on-board
> devices to
> live directly though. Going back to one of my first examples: wiring up a
> chardev to
> a serial port on the macio device. To me it makes sense for that to exist in
> QOM
> under /machine/pci-bus/mac-io/escc. In contrast an in-built NIC could live
> under
> /machine/pci-bus/in-built/nic, and placing one or both of these devices
> directly
> under /machine/foo doesn't feel intuitive.
I'm not familiar with this machine. You make me suspect the serial
thingy is a component of a larger device.
Properly modelled, a composite device has its components as children.
These appear below their parent in the QOM composition tree.
Example: a "serial-isa" device has a "serial" component. When the
former is at /machine/unattached/device[28]/, the latter is at
/machine/unattached/device[28]/serial/.
I guess that's what you want for macio's serial port.
Counter-example: a "isa-super-io" device has compoenents of type
"isa-parallel", "isa-serial", "isa-fdc", "i8042", "isa-ide".
Nevertheless, these appear next to their parent in /machine/unattached/.
I'm still too much of a QOM ignoramus to explain why that's so. Paolo,
can you?
> AFAIK as per your ARM virt example I believe it is only possible to register
> an alias
> for a property rather than for an Object? The ultimate aim would be for
> object_resolve_path("/machine/builtin/nic0") and
> object_resolve_path("/machine/pci-bus/in-built/nic") to return the same
> Object, and
> for the aliases on built-in devices to be children of /machine/builtin to
> allow easy
> iteration and introspection.
Paolo, could link properties achieve that?
Mark, I guess you want the alias / link from builtin/nic0 to the actual
place to simplify configuration: the user then needs to know less about
the board. Correct?
- Re: Configuring onboard devices,
Markus Armbruster <=