From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1ManmT-0000Gk-MU for qemu-devel@nongnu.org; Tue, 11 Aug 2009 05:36:33 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1ManmE-0008Qe-Bw for qemu-devel@nongnu.org; Tue, 11 Aug 2009 05:36:24 -0400 Received: from [199.232.76.173] (port=33773 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ManmE-0008QI-6T for qemu-devel@nongnu.org; Tue, 11 Aug 2009 05:36:18 -0400 Received: from mx2.redhat.com ([66.187.237.31]:39847) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1ManmD-0007iO-Lz for qemu-devel@nongnu.org; Tue, 11 Aug 2009 05:36:17 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7B9KZvr010395 for ; Tue, 11 Aug 2009 05:20:35 -0400 From: Gerd Hoffmann Date: Tue, 11 Aug 2009 11:20:24 +0200 Message-Id: <1249982427-14481-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 1/4] qdev: device capabilities List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann This patch adds device capabilities to qdev devices. This is the core code, following patches will add the individual capabilities and tag drivers. The capabilities will be printed by '-device ?' and 'info qdm", so users and management apps can use it. Future plans: I plan to use them to get rid off some hard-coded lists in qemu by using capabilities instead: pci nic list, watchdog list, maybe more. Signed-off-by: Gerd Hoffmann --- hw/qdev.c | 19 ++++++++++++++++++- hw/qdev.h | 5 +++++ 2 files changed, 23 insertions(+), 1 deletions(-) diff --git a/hw/qdev.c b/hw/qdev.c index c1a7779..568d249 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -107,8 +107,11 @@ DeviceState *qdev_create(BusState *bus, const char *name) static int qdev_print_devinfo(DeviceInfo *info, char *dest, int len) { + static const char *capname[] = { + }; + const char *sep; int pos = 0; - int ret; + int ret,i; ret = snprintf(dest+pos, len-pos, "name \"%s\", bus %s", info->name, info->bus_info->name); @@ -125,6 +128,20 @@ static int qdev_print_devinfo(DeviceInfo *info, char *dest, int len) ret = snprintf(dest+pos, len-pos, ", no-user"); pos += MIN(len-pos,ret); } + if (info->caps) { + ret = snprintf(dest+pos, len-pos, ", caps \""); + pos += MIN(len-pos,ret); + sep = ""; + for (i = 0; i < ARRAY_SIZE(capname); i++) { + if (!(info->caps & (1 << i))) + continue; + ret = snprintf(dest+pos, len-pos, "%s%s", sep, capname[i]); + pos += MIN(len-pos,ret); + sep = ","; + } + ret = snprintf(dest+pos, len-pos, "\""); + pos += MIN(len-pos,ret); + } return pos; } diff --git a/hw/qdev.h b/hw/qdev.h index 204c4e5..7beb756 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -102,6 +102,10 @@ typedef void (*qdev_initfn)(DeviceState *dev, DeviceInfo *info); typedef void (*SCSIAttachFn)(DeviceState *host, BlockDriverState *bdrv, int unit); +enum DeviceCapBits { + dummy +}; + struct DeviceInfo { const char *name; const char *alias; @@ -109,6 +113,7 @@ struct DeviceInfo { size_t size; Property *props; int no_user; + uint32_t caps; /* Private to qdev / bus. */ qdev_initfn init; -- 1.6.2.5