From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56429) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYwxa-0001GQ-51 for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYwxZ-000849-Dv for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:06 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:35132) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYwxZ-00083o-3y for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:05 -0500 Received: by mail-wm0-x243.google.com with SMTP id g62so3803733wme.2 for ; Thu, 25 Feb 2016 06:32:04 -0800 (PST) From: Jiri Pirko Date: Thu, 25 Feb 2016 15:31:58 +0100 Message-Id: <1456410718-24506-5-git-send-email-jiri@resnulli.us> In-Reply-To: <1456410718-24506-1-git-send-email-jiri@resnulli.us> References: <1456410718-24506-1-git-send-email-jiri@resnulli.us> Subject: [Qemu-devel] [patch qemu v2 4/4] rocker: allow user to specify rocker world by property List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: prem@barefootnetworks.com, daniel@iogearbox.net, stefanha@gmail.com, jasowang@redhat.com, parag.bhide@barefootnetworks.com, idosch@mellanox.com, sfeldma@gmail.com, eladr@mellanox.com, pbonzini@redhat.com, alexei.starovoitov@gmail.com From: Jiri Pirko Add property to specify rocker world. All ports will be assigned to this world. Signed-off-by: Jiri Pirko --- v1->v2: - goto error path in case world type is not found for name - move worlds alloc check right after worlds alloc --- hw/net/rocker/rocker.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index 104c097..30f2ce4 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -43,6 +43,7 @@ struct rocker { /* switch configuration */ char *name; /* switch name */ + char *world_name; /* world name */ uint32_t fp_ports; /* front-panel port count */ NICPeers *fp_ports_peers; MACAddr fp_start_macaddr; /* front-panel port 0 mac addr */ @@ -1286,6 +1287,18 @@ static void rocker_msix_uninit(Rocker *r) rocker_msix_vectors_unuse(r, ROCKER_MSIX_VEC_COUNT(r->fp_ports)); } +static World *rocker_world_type_by_name(Rocker *r, const char *name) +{ + int i; + + for (i = 0; i < ROCKER_WORLD_TYPE_MAX; i++) { + if (strcmp(name, world_name(r->worlds[i])) == 0) { + return r->worlds[i]; + } + } + return NULL; +} + static int pci_rocker_init(PCIDevice *dev) { Rocker *r = to_rocker(dev); @@ -1297,7 +1310,6 @@ static int pci_rocker_init(PCIDevice *dev) /* allocate worlds */ r->worlds[ROCKER_WORLD_TYPE_OF_DPA] = of_dpa_world_alloc(r); - r->world_dflt = r->worlds[ROCKER_WORLD_TYPE_OF_DPA]; for (i = 0; i < ROCKER_WORLD_TYPE_MAX; i++) { if (!r->worlds[i]) { @@ -1306,6 +1318,19 @@ static int pci_rocker_init(PCIDevice *dev) } } + if (!r->world_name) { + r->world_name = g_strdup(world_name(r->worlds[ROCKER_WORLD_TYPE_OF_DPA])); + } + + r->world_dflt = rocker_world_type_by_name(r, r->world_name); + if (!r->world_dflt) { + fprintf(stderr, + "rocker: requested world \"%s\" does not exist\n", + r->world_name); + err = -EINVAL; + goto err_world_type_by_name; + } + /* set up memory-mapped region at BAR0 */ memory_region_init_io(&r->mmio, OBJECT(r), &rocker_mmio_ops, r, @@ -1439,6 +1464,7 @@ err_duplicate: err_msix_init: object_unparent(OBJECT(&r->msix_bar)); object_unparent(OBJECT(&r->mmio)); +err_world_type_by_name: err_world_alloc: for (i = 0; i < ROCKER_WORLD_TYPE_MAX; i++) { if (r->worlds[i]) { @@ -1510,6 +1536,7 @@ static void rocker_reset(DeviceState *dev) static Property rocker_properties[] = { DEFINE_PROP_STRING("name", Rocker, name), + DEFINE_PROP_STRING("world", Rocker, world_name), DEFINE_PROP_MACADDR("fp_start_macaddr", Rocker, fp_start_macaddr), DEFINE_PROP_UINT64("switch_id", Rocker, -- 2.4.3