All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: minyard@acm.org
Cc: Corey Minyard <cminyard@mvista.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 5/9] IPMI: Add a PC ISA type structure
Date: Tue, 10 Jul 2012 11:33:39 +0200	[thread overview]
Message-ID: <4FFBF6F3.2090808@redhat.com> (raw)
In-Reply-To: <1341861429-6297-6-git-send-email-minyard@acm.org>

Il 09/07/2012 21:17, minyard@acm.org ha scritto:
> +
> +static Property ipmi_isa_properties[] = {
> +    DEFINE_PROP_HEX32("type", ISAIPMIState, type,  IPMI_KCS),

You can add an enum property.  There is one example called
LostTickPolicy in the tree.  Please do not use the generic "type" name;
use "interface" for example.

Start with an empty enum, and let each of the two patches 6/7 add an
item; same for the various switch statements on
IPMI_KCS/IPMI_BT/IPMI_SMIC.  (Actually if you do this the IPMI_SMIC
branches will disappear, right?)

> +    DEFINE_PROP_HEX32("iobase", ISAIPMIState, iobase,  -1),
> +    DEFINE_PROP_UINT32("irq",   ISAIPMIState, isairq,  0),
> +    DEFINE_PROP_UINT8("slave_addr", ISAIPMIState, slave_addr,  0),
> +    DEFINE_PROP_PTR("charopts",  ISAIPMIState, state.chropts),

Here, you should add a "normal" chardev property so that people can use
-chardev and -device to create the IPMI interface.  The device can be
created like this:

   -chardev ...,id=charipmi -device ipmi,interface=kcs,chardev=charipmi

If the chardev is absent, the local interface is used instead.

See docs/qdev-device-use.txt for more information.

> +    DEFINE_PROP_END_OF_LIST(),
> +};
> +
> +static const VMStateDescription vmstate_isa_ipmi = {
> +    .name = "isa-ipmi",
> +    .version_id = 3,
> +    .minimum_version_id = 3,
> +    .fields      = (VMStateField []) {
> +        VMSTATE_STRUCT(state, ISAIPMIState, 0, vmstate_isa_ipmi,
> +		       IPMIState),
> +        VMSTATE_END_OF_LIST()
> +    }
> +};
> +
> +static void ipmi_isa_class_initfn(ObjectClass *klass, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(klass);
> +    ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
> +    ic->init = ipmi_isa_initfn;
> +    dc->vmsd = &vmstate_isa_ipmi;
> +    dc->props = ipmi_isa_properties;
> +}
> +
> +static TypeInfo ipmi_isa_info = {
> +    .name          = "isa-ipmi",
> +    .parent        = TYPE_ISA_DEVICE,
> +    .instance_size = sizeof(ISAIPMIState),
> +    .class_init    = ipmi_isa_class_initfn,
> +};
> +
> +static void ipmi_register_types(void)
> +{
> +    type_register_static(&ipmi_isa_info);
> +}
> +
> +type_init(ipmi_register_types)
> diff --git a/hw/pc.c b/hw/pc.c
> index c0acb6a..965e053 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -1173,6 +1173,18 @@ void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
>          fd[i] = drive_get(IF_FLOPPY, 0, i);
>      }
>      *floppy = fdctrl_init_isa(isa_bus, fd);
> +
> +    i = 0;
> +    if (do_local_ipmi) {
> +	ipmi_isa_init(isa_bus, isa_find_free_irq(isa_bus), ipmi_types[i], NULL);
> +	i++;
> +    }
> +    for(; i < MAX_IPMI_DEVICES; i++) {
> +	if (ipmi_hds[i]) {
> +	    ipmi_isa_init(isa_bus, isa_find_free_irq(isa_bus),
> +			  ipmi_types[i], ipmi_hds[i]);
> +	}
> +    }
>  }
>  
>  void pc_pci_device_init(PCIBus *pci_bus)
> diff --git a/hw/pc.h b/hw/pc.h
> index 33ab689..5b6d947 100644
> --- a/hw/pc.h
> +++ b/hw/pc.h
> @@ -223,6 +223,24 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
>      return true;
>  }
>  
> +/* IPMI */
> +static inline bool ipmi_isa_init(ISABus *bus, int irq,
> +				 int type, QemuOpts *opts)
> +{
> +    ISADevice *dev;
> +
> +    dev = isa_try_create(bus, "isa-ipmi");
> +    if (!dev) {
> +        return false;
> +    }
> +    qdev_prop_set_uint32(&dev->qdev, "type", type);
> +    qdev_prop_set_uint32(&dev->qdev, "irq", irq);
> +    qdev_prop_set_ptr(&dev->qdev, "charopts", opts);
> +    if (qdev_init(&dev->qdev) < 0) {
> +        return false;
> +    }

  parent reply	other threads:[~2012-07-10  9:33 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-09 19:17 [Qemu-devel] First shot at adding IPMI to qemu minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 1/9] smbios: Add a function to directly add an entry minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 2/9] pc: move SMBIOS setup to after device init minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 3/9] isa: Add a way to query for a free interrupt minyard
2012-07-10  9:16   ` Paolo Bonzini
2012-07-09 19:17 ` [Qemu-devel] [PATCH 4/9] Add a base IPMI interface minyard
2012-07-10  9:17   ` Daniel P. Berrange
2012-07-10 11:12     ` Markus Armbruster
2012-07-10 16:19     ` Corey Minyard
2012-07-10  9:29   ` Paolo Bonzini
2012-07-09 19:17 ` [Qemu-devel] [PATCH 5/9] IPMI: Add a PC ISA type structure minyard
2012-07-10  9:17   ` Paolo Bonzini
2012-07-10  9:33   ` Paolo Bonzini [this message]
2012-07-10 20:00     ` Corey Minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 6/9] IPMI: Add a KCS low-level interface minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 7/9] IPMI: Add a BT " minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 8/9] IPMI: Add a local BMC simulation minyard
2012-07-09 19:17 ` [Qemu-devel] [PATCH 9/9] IPMI: Add an external connection simulation interface minyard
2012-07-10  9:35 ` [Qemu-devel] First shot at adding IPMI to qemu Paolo Bonzini
2012-07-10 15:43   ` Corey Minyard

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=4FFBF6F3.2090808@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=cminyard@mvista.com \
    --cc=minyard@acm.org \
    --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.