From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z2yXI-0007oz-Jp for qemu-devel@nongnu.org; Thu, 11 Jun 2015 05:12:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z2yXE-0005s2-Hp for qemu-devel@nongnu.org; Thu, 11 Jun 2015 05:12:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51780) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z2yXE-0005rv-AR for qemu-devel@nongnu.org; Thu, 11 Jun 2015 05:12:28 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 8509FB1FA5 for ; Thu, 11 Jun 2015 09:12:27 +0000 (UTC) Message-ID: <557950F8.8080609@redhat.com> Date: Thu, 11 Jun 2015 12:12:24 +0300 From: Marcel Apfelbaum MIME-Version: 1.0 References: <1433983083-4636-1-git-send-email-lersek@redhat.com> <1433983083-4636-6-git-send-email-lersek@redhat.com> In-Reply-To: <1433983083-4636-6-git-send-email-lersek@redhat.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 5/6] hw/core: explicit OFW unit address property for SysBusDevice List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laszlo Ersek , qemu-devel@nongnu.org Cc: Markus Armbruster , "Michael S. Tsirkin" On 06/11/2015 03:38 AM, Laszlo Ersek wrote: > The sysbus_get_fw_dev_path() function formats OpenFirmware device path > nodes ("driver-name@unit-address") for sysbus devices. The first choice > for "unit-address" is the base address of the device's first MMIO region. > The second choice is its first IO port. > > However, if two sysbus devices with the same "driver-name" lack both MMIO > and PIO resources, then there is no good way to distinguish them based on > their OFW nodes, because in this case unit-address is omitted completely > for both devices. > > For such devices, delegate a fallback property, > "explicit_ofw_unit_address", to whoever creates the device. The creator > can set the property to any appropriate value. > > Cc: Markus Armbruster > Cc: Marcel Apfelbaum > Cc: Michael S. Tsirkin > Signed-off-by: Laszlo Ersek > --- > > Notes: > v3: > - new in v3 > - new approach > > include/hw/sysbus.h | 8 ++++++++ > hw/core/sysbus.c | 11 +++++++++++ > 2 files changed, 19 insertions(+) > > diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h > index d1f3f00..de41b06 100644 > --- a/include/hw/sysbus.h > +++ b/include/hw/sysbus.h > @@ -55,6 +55,14 @@ struct SysBusDevice { > } mmio[QDEV_MAX_MMIO]; > int num_pio; > pio_addr_t pio[QDEV_MAX_PIO]; > + > + /* > + * Sometimes a SysBusDevice has neither MMIO nor PIO resources, yet it > + * would like to distinguish itself, in OpenFirmware device paths, from > + * other instances of the same class on the same sysbus. For that end we > + * expose this property. > + */ > + char *explicit_ofw_unit_address; > }; > > typedef int FindSysbusDeviceFunc(SysBusDevice *sbdev, void *opaque); > diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c > index 0ebb4e2..6e9af1c 100644 > --- a/hw/core/sysbus.c > +++ b/hw/core/sysbus.c > @@ -289,6 +289,10 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev) > if (s->num_pio) { > return g_strdup_printf("%s@i%04x", qdev_fw_name(dev), s->pio[0]); > } > + if (s->explicit_ofw_unit_address) { > + return g_strdup_printf("%s@%s", qdev_fw_name(dev), > + s->explicit_ofw_unit_address); > + } > return g_strdup(qdev_fw_name(dev)); > } > > @@ -303,11 +307,18 @@ MemoryRegion *sysbus_address_space(SysBusDevice *dev) > return get_system_memory(); > } > > +static Property sysbus_device_properties[] = { > + DEFINE_PROP_STRING("explicit_ofw_unit_address", SysBusDevice, > + explicit_ofw_unit_address), > + DEFINE_PROP_END_OF_LIST() > +}; > + > static void sysbus_device_class_init(ObjectClass *klass, void *data) > { > DeviceClass *k = DEVICE_CLASS(klass); > k->init = sysbus_device_init; > k->bus_type = TYPE_SYSTEM_BUS; > + k->props = sysbus_device_properties; > } > > static const TypeInfo sysbus_device_type_info = { > Better than previous approach. Reviewed-by: Marcel Apfelbaum