From: Marcel Apfelbaum <marcel@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>, qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH for-2.7 v2 3/3] vl: Replace *_vga_available() functions with class_names field
Date: Thu, 14 Apr 2016 10:40:11 +0300 [thread overview]
Message-ID: <570F495B.7050304@redhat.com> (raw)
In-Reply-To: <1460595118-23127-4-git-send-email-ehabkost@redhat.com>
On 04/14/2016 03:51 AM, Eduardo Habkost wrote:
> Instead of requiring a separate function for each VGA interface,
> just enumerate the corresponding class names on struct
> VGAInterfaceInfo.
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> vl.c | 70 +++++++++++++++++++++++---------------------------------------------
> 1 file changed, 23 insertions(+), 47 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index b99f22f..36593c9 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1979,46 +1979,12 @@ static const QEMUOption qemu_options[] = {
> { NULL },
> };
>
> -static bool vga_available(void)
> -{
> - return object_class_by_name("VGA") || object_class_by_name("isa-vga");
> -}
> -
> -static bool cirrus_vga_available(void)
> -{
> - return object_class_by_name("cirrus-vga")
> - || object_class_by_name("isa-cirrus-vga");
> -}
> -
> -static bool vmware_vga_available(void)
> -{
> - return object_class_by_name("vmware-svga");
> -}
> -
> -static bool qxl_vga_available(void)
> -{
> - return object_class_by_name("qxl-vga");
> -}
> -
> -static bool tcx_vga_available(void)
> -{
> - return object_class_by_name("SUNW,tcx");
> -}
> -
> -static bool cg3_vga_available(void)
> -{
> - return object_class_by_name("cgthree");
> -}
> -
> -static bool virtio_vga_available(void)
> -{
> - return object_class_by_name("virtio-vga");
> -}
> -
> typedef struct VGAInterfaceInfo {
> const char *opt_name; /* option name */
> const char *name; /* human-readable name */
> - bool (*available)(void);
> + /* Class names indicating that support is available.
> + * If no class is specified, the interface is always available */
> + const char *class_names[2];
> } VGAInterfaceInfo;
>
> static VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
> @@ -2028,43 +1994,53 @@ static VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
> [VGA_STD] = {
> .opt_name = "std",
> .name = "standard VGA",
> - .available = vga_available,
> + .class_names = { "VGA", "isa-vga" },
> },
> [VGA_CIRRUS] = {
> .opt_name = "cirrus",
> .name = "Cirrus VGA",
> - .available = cirrus_vga_available,
> + .class_names = { "cirrus-vga", "isa-cirrus-vga" },
> },
> [VGA_VMWARE] = {
> .opt_name = "vmware",
> .name = "VMWare SVGA",
> - .available = vmware_vga_available,
> + .class_names = { "vmware-svga" },
> },
> [VGA_VIRTIO] = {
> .opt_name = "virtio",
> .name = "Virtio VGA",
> - .available = virtio_vga_available,
> + .class_names = { "virtio-vga" },
> },
> [VGA_QXL] = {
> .opt_name = "qxl",
> .name = "QXL VGA",
> - .available = qxl_vga_available,
> + .class_names = { "qxl-vga" },
> },
> [VGA_TCX] = {
> .opt_name = "tcx",
> .name = "TCX framebuffer",
> - .available = tcx_vga_available,
> + .class_names = { "SUNW,tcx" },
> },
> [VGA_CG3] = {
> .opt_name = "cg3",
> .name = "CG3 framebuffer",
> - .available = cg3_vga_available,
> + .class_names = { "cgthree" },
> },
> [VGA_XENFB] = {
> .opt_name = "xenfb",
> },
> };
>
> +static bool vga_interface_available(VGAInterfaceType t)
> +{
> + VGAInterfaceInfo *ti = &vga_interfaces[t];
> +
> + assert(t < VGA_TYPE_MAX);
> + return !ti->class_names[0] ||
> + object_class_by_name(ti->class_names[0]) ||
> + object_class_by_name(ti->class_names[1]);
> +}
> +
> static void select_vgahw(const char *p)
> {
> const char *opts;
> @@ -2074,7 +2050,7 @@ static void select_vgahw(const char *p)
> for (t = 0; t < VGA_TYPE_MAX; t++) {
> VGAInterfaceInfo *ti = &vga_interfaces[t];
> if (ti->opt_name && strstart(p, ti->opt_name, &opts)) {
> - if (ti->available && !ti->available()) {
> + if (!vga_interface_available(t)) {
> error_report("%s not available", ti->name);
> exit(1);
> }
> @@ -4492,9 +4468,9 @@ int main(int argc, char **argv, char **envp)
> if (default_vga) {
> if (machine_class->default_display) {
> vga_model = machine_class->default_display;
> - } else if (cirrus_vga_available()) {
> + } else if (vga_interface_available(VGA_CIRRUS)) {
> vga_model = "cirrus";
> - } else if (vga_available()) {
> + } else if (vga_interface_available(VGA_STD)) {
> vga_model = "std";
> }
> }
>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Thanks,
Marcel
prev parent reply other threads:[~2016-04-14 7:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-14 0:51 [Qemu-devel] [PATCH for-2.7 v2 0/3] vl: Simplify vga interface configuration code Eduardo Habkost
2016-04-14 0:51 ` [Qemu-devel] [PATCH for-2.7 v2 1/3] vl: Use exit(1) when requested VGA interface is unavailable Eduardo Habkost
2016-04-14 7:23 ` Marcel Apfelbaum
2016-04-14 0:51 ` [Qemu-devel] [PATCH for-2.7 v2 2/3] vl: Table-based select_vgahw() Eduardo Habkost
2016-04-14 7:28 ` Marcel Apfelbaum
2016-04-14 0:51 ` [Qemu-devel] [PATCH for-2.7 v2 3/3] vl: Replace *_vga_available() functions with class_names field Eduardo Habkost
2016-04-14 7:40 ` Marcel Apfelbaum [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=570F495B.7050304@redhat.com \
--to=marcel@redhat.com \
--cc=ehabkost@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.