[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC 3/7] ec: add operations for _Qxx events
From: |
liguang |
Subject: |
[Qemu-devel] [PATCH RFC 3/7] ec: add operations for _Qxx events |
Date: |
Wed, 29 May 2013 09:47:38 +0800 |
Signed-off-by: liguang <address@hidden>
---
hw/acpi/ec.c | 32 ++++++++++++++++++++++++++++----
include/hw/acpi/ec.h | 10 ++++++++++
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/hw/acpi/ec.c b/hw/acpi/ec.c
index da8525f..fe82e9c 100644
--- a/hw/acpi/ec.c
+++ b/hw/acpi/ec.c
@@ -22,6 +22,9 @@ typedef struct ECState {
MemoryRegion io[2];
} ECState;
+static void ec_generate_sci(ECState *);
+static ECState *ecs;
+
static NotifierList ec_sci_notifiers =
NOTIFIER_LIST_INITIALIZER(ec_sci_notifiers);
void qemu_register_ec_sci_notifier(Notifier *notifier)
@@ -44,8 +47,26 @@ void ec_acpi_event(uint8_t evt)
sci_event = evt;
}
-static void ec_generate_sci(void)
+void ec_acpi_space_poke(uint8_t idx, uint8_t val)
+{
+ if (idx < EC_ACPI_SPACE_SIZE) {
+ ec_acpi_space[idx] = val;
+ ec_generate_sci(ecs);
+ }
+}
+
+uint8_t ec_acpi_space_peek(uint8_t idx)
{
+ if (idx < EC_ACPI_SPACE_SIZE) {
+ return ec_acpi_space[idx];
+ } else {
+ return 0;
+ }
+}
+
+static void ec_generate_sci(ECState *s)
+{
+ s->status |= EC_ACPI_SCI;
notifier_list_notify(&ec_sci_notifiers, NULL);
}
@@ -72,12 +93,11 @@ static void acpi_data_write(void *opaque, hwaddr addr,
uint64_t val,
}
break;
case EC_ACPI_CMD_QUERY:
- s->data = sci_event;
default:
break;
}
}
- ec_generate_sci();
+ ec_generate_sci(s);
}
static uint64_t acpi_data_read(void *opaque, hwaddr addr, unsigned size)
@@ -112,13 +132,15 @@ static void acpi_cmd_write(void *opaque, hwaddr addr,
uint64_t val,
is_cmd = true;
break;
case EC_ACPI_CMD_QUERY:
+ s->data = sci_event;
+ s->status |= EC_ACPI_OBF;
is_cmd = true;
default:
break;
}
if (is_cmd) {
s->cmd = val & 0xff;
- ec_generate_sci();
+ ec_generate_sci(s);
s->status |= EC_ACPI_SCI;
} else {
s->cmd = 0;
@@ -165,6 +187,8 @@ static int ec_dev_initfn(ISADevice *dev)
memory_region_init_io(s->io + 1, &io66_io_ops, s, "ec-acpi-cmd", 1);
isa_register_ioport(isadev, s->io + 1, 0x66);
+ ecs = s;
+
return 0;
}
diff --git a/include/hw/acpi/ec.h b/include/hw/acpi/ec.h
index 3556acd..276d62a 100644
--- a/include/hw/acpi/ec.h
+++ b/include/hw/acpi/ec.h
@@ -21,9 +21,19 @@
#define EC_ACPI_BURST_DN 0x83
#define EC_ACPI_CMD_QUERY 0x84
+/* event no. */
+#define EVENT_CPU_ONLINE 0x1
+#define EVENT_CPU_OFFLINE 0x2
+
+/* index of acpi space*/
+#define EC_ACPI_SPACE_CPUS 1
+#define EC_ACPI_SPACE_CPUN 2
+
void qemu_register_ec_sci_notifier(Notifier *notifier);
bool qemu_ec_enabled(void);
void ec_dev_init(ISABus *isabus);
void ec_acpi_event(uint8_t evt);
+void ec_acpi_space_poke(uint8_t idx, uint8_t val);
+uint8_t ec_acpi_space_peek(uint8_t idx);
#endif
--
1.7.2.5
- [Qemu-devel] [PATCH RFC 0/7] pass cpu online/offline event bewteen QEMU and linux kernel by ACPI Embedded Controller, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 7/7] pc: add EC qdev init for piix & q35, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 2/7] ich9: add notifer for ec to generate sci, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 5/7] piix4: add events for cpu hotplug, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 6/7] qmp: add 'cpu-del' command, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 3/7] ec: add operations for _Qxx events,
liguang <=
- [Qemu-devel] [PATCH RFC 1/7] acpi: add ACPI Embedded Controller support, liguang, 2013/05/28
- [Qemu-devel] [PATCH RFC 4/7] piix4: add notifer for ec to generate sci, liguang, 2013/05/28
- Re: [Qemu-devel] [PATCH RFC 0/7] pass cpu online/offline event bewteen QEMU and linux kernel by ACPI Embedded Controller, Igor Mammedov, 2013/05/30