All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: liguang <lig.fnst@cn.fujitsu.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	seabios@seabios.org, qemu-devel@nongnu.org,
	Anthony Liguori <anthony@codemonkey.ws>
Subject: Re: [Qemu-devel] [RFC][PATCH 2/2] hw: add Embedded Controller chip emulation
Date: Wed, 17 Apr 2013 19:54:02 +0200	[thread overview]
Message-ID: <516EE1BA.7010301@suse.de> (raw)
In-Reply-To: <1366183380-24333-2-git-send-email-lig.fnst@cn.fujitsu.com>

Am 17.04.2013 09:23, schrieb liguang:
> this work implemented Embedded Controller chip emulation
> which was defined at ACPI SEPC v5 chapter 12:
> "ACPI Embedded Controller Interface Specification"
> 
> commonly Embedded Controller will emulate keyboard,
> mouse, handle ACPI defined operations and some
> low-speed devices like SMbus.
> 
> Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
> ---
>  hw/ec.c |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

hw/misc/ec.c? hw/i386/ec.c? Not directly in hw/ anymore.

>  hw/ec.h |   20 +++++++++++
>  2 files changed, 133 insertions(+), 0 deletions(-)
>  create mode 100644 hw/ec.c
>  create mode 100644 hw/ec.h
> 
> diff --git a/hw/ec.c b/hw/ec.c
> new file mode 100644
> index 0000000..69c92cf
> --- /dev/null
> +++ b/hw/ec.c
> @@ -0,0 +1,113 @@
> +#include "ec.h"
> +#include "hw/hw.h"
> +#include "hw/isa/isa.h"
> +#include "sysemu/sysemu.h"
> +
> +#define TYPE_EC_DEV

Missing string value.

> +#define EC_DEV(obj) \
> +    OBJECT_CHECK(ECState, (obj), TYPE_EC_DEV)
> +
> +static char ec_acpi_space[EC_ACPI_SPACE_SIZE] = {0};
> +
> +typedef struct ECState {
> +    ISADevice dev;

parent_obj and white line please.

> +    char cmd;
> +    char status;
> +    char data;
> +    char irq;
> +    char buf;

char seems a bit unsafe here, since it might be signed or unsigned.
Suggest uint8_t.

> +    MemoryRegion io;
> +} ECState;
> +
> +
> +static void io62_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
> +{
> +    ECState *s = opaque;
> +    char tmp = val & 0xff;
> +
> +    if (s->status & EC_ACPI_CMD) {
> +        s->buf = tmp;
> +        s->status &= ~EC_ACPI_CMD;
> +    } else {
> +        if (tmp < EC_ACPI_SPACE_SIZE) {
> +            ec_acpi_space[s->buf] = tmp;
> +        }
> +    }
> +}
> +
> +static uint64_t io62_read(void *opaque, hwaddr addr, unsigned size)
> +{
> +    return s->data;
> +}
> +
> +static void io66_write(void *opaque, hwaddr addr, uint64_t val, unsigned size)
> +{
> +    ECState *s = opaque;
> +
> +    s->status = EC_ACPI_CMD | EC_ACPI_IBF;
> +
> +    switch (val & 0xff) {
> +    case EC_ACPI_CMD_READ:
> +    case EC_ACPI_CMD_WRITE:
> +    case EC_ACPI_CMD_BURST_EN:
> +        s->statu |= EC_ACPI_BST;

s->status

> +    case EC_ACPI_CMD_BURST_DN:
> +        s->statu &= ~EC_ACPI_BST;

s->status

> +    case EC_ACPI_CMD_QUERY:
> +        s->cmd = val & 0xff;
> +    case default:
> +        break;
> +    }
> +}
> +
> +static uint64_t io66_read(void *opaque, hwaddr addr, unsigned size)
> +{
> +    ECState *s = opaque;
> +
> +    return s->status;
> +}
> +
> +static const MemoryRegionOps io62_io_ops = {
> +    .write = io62_write,
> +    .read = io62_read,
> +    .endianness = DEVICE_NATIVE_ENDIAN,
> +    .impl = {
> +        .min_access_size = 1,
> +        .max_access_size = 1,
> +    },
> +};
> +
> +static const MemoryRegionOps io66_io_ops = {
> +    .write = io66_write,
> +    .read = io66_read,
> +    .endianness = DEVICE_NATIVE_ENDIAN,
> +    .impl = {
> +        .min_access_size = 1,
> +        .max_access_size = 1,
> +    },
> +};
> +
> +static void ec_realizefn(DeviceState *dev, Error **err)
> +{
> +    ISADevice *isadev = ISA_DEVICE(dev);
> +    ECState *s = EC_DEV(dev);
> +
> +    isa_init_irq(isadev, &s->irq, 0xb);
> +

> +    memory_region_init_io(&s->io, &io62_io_ops, NULL, "ec-acpi-data", 1);
> +    isa_register_ioport(isadev, &s->io, 0x62);
> +
> +    memory_region_init_io(&s->io, &io66_io_ops, NULL, "ec-acpi-cmd", 1);
> +    isa_register_ioport(isadev, &s->io, 0x66);

Since you are not defining any properties, all of this could go into a
.instance_init function.

But I am glad to see a realize function being used. :)

> +
> +    s->status = 0;
> +    s->data = 0;

This is probably not necessary here, since all fields get
zero-initialized. It should rather go into a reset function.

> +}
> +
> +static void ec_class_initfn(ObjectClass *klass, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(klass);
> +
> +    dc->realize = ec_realizefn;
> +    dc->no_user = 1;
> +}

This file ends with an unused static function, it's missing type
registration.

I figure this device should rather be a specific (real) model, reflected
in a particular name, similar to how we have different watchdog devices
rather than a "watchdog" device.

> diff --git a/hw/ec.h b/hw/ec.h
> new file mode 100644
> index 0000000..110ce04
> --- /dev/null
> +++ b/hw/ec.h
> @@ -0,0 +1,20 @@
> +#inndef __EC_H

#ifndef and no leading underscores, please.

> +#define __EC_H
> +
> +#define EC_ACPI_SPACE_SIZE 0x80
> +
> +#define EC_ACPI_CMD_PORT 0x66
> +#define EC_ACPI_DATA_PORT 0x62
> +
> +#define EC_ACPI_OBF 0x1
> +#define EC_ACPI_IBF 0x2
> +#define EC_ACPI_CMD 0x8
> +#define EC_ACPI_BST 0x10
> +
> +#define EC_ACPI_CMD_READ 0x80
> +#define EC_ACPI_CMD_WRITE 0x81
> +#define EC_ACPI_BURST_EN 0x82
> +#define EC_ACPI_BURST_DN 0x83
> +#define EC_ACPI_CMD_QUERY 0x84
> +
> +#endif

Regards,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

  parent reply	other threads:[~2013-04-17 17:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-17  7:22 [Qemu-devel] [RFC][SeaBIOS][PATCH 1/2] acpi: add ASL for Embedded Controller liguang
2013-04-17  7:23 ` [Qemu-devel] [RFC][PATCH 2/2] hw: add Embedded Controller chip emulation liguang
2013-04-17 10:41   ` [Qemu-devel] [SeaBIOS] " Mark Marshall
2013-04-18  1:22     ` li guang
2013-04-17 17:54   ` Andreas Färber [this message]
2013-04-18  0:23     ` [Qemu-devel] " li guang
2013-04-17 13:46 ` [Qemu-devel] [SeaBIOS] [RFC][PATCH 1/2] acpi: add ASL for Embedded Controller Marc Jones
2013-04-18  1:25   ` li guang

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=516EE1BA.7010301@suse.de \
    --to=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=lig.fnst@cn.fujitsu.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=seabios@seabios.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.