[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/21] qom-devices: add a Pin class
From: |
Anthony Liguori |
Subject: |
[Qemu-devel] [PATCH 16/21] qom-devices: add a Pin class |
Date: |
Sun, 24 Jul 2011 20:44:48 -0500 |
Signed-off-by: Anthony Liguori <address@hidden>
---
devices/Makefile | 2 +-
devices/pin.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++
include/qemu/pin.h | 28 +++++++++++++++++++++
3 files changed, 98 insertions(+), 1 deletions(-)
create mode 100644 devices/pin.c
create mode 100644 include/qemu/pin.h
diff --git a/devices/Makefile b/devices/Makefile
index fbb0b82..fa52689 100644
--- a/devices/Makefile
+++ b/devices/Makefile
@@ -1 +1 @@
-devices-obj-$(CONFIG_DEVICE) := device.o
+devices-obj-$(CONFIG_DEVICE) := device.o pin.o
diff --git a/devices/pin.c b/devices/pin.c
new file mode 100644
index 0000000..27812d8
--- /dev/null
+++ b/devices/pin.c
@@ -0,0 +1,69 @@
+#include "qemu/pin.h"
+
+void pin_initialize(Pin *pin, const char *id)
+{
+ type_initialize(pin, TYPE_PIN, id);
+}
+
+void pin_finalize(Pin *pin)
+{
+ type_finalize(pin);
+}
+
+void pin_visit(Pin *obj, Visitor *v, const char *name, Error **errp)
+{
+ visit_start_struct(v, (void **)&obj, "Pin", name, sizeof(Pin), errp);
+ device_visit(DEVICE(obj), v, "super", errp);
+ visit_type_bool(v, &obj->level, "level", errp);
+ visit_end_struct(v, errp);
+}
+
+void pin_set_level(Pin *pin, bool value, Error **errp)
+{
+ bool old_level = pin->level;
+
+ pin->level = value;
+
+ if (old_level != value) {
+ notifier_list_notify(&pin->level_changed, NULL);
+ }
+}
+
+bool pin_get_level(Pin *pin, Error **errp)
+{
+ return pin->level;
+}
+
+static void pin_initfn(TypeInstance *inst)
+{
+ Pin *obj = PIN(inst);
+
+ notifier_list_init(&obj->level_changed);
+
+ plug_add_property_bool(PLUG(obj), "level",
+ (PlugPropertyGetterBool *)pin_get_level,
+ (PlugPropertySetterBool *)pin_set_level,
+ PROP_F_READWRITE);
+}
+
+static void pin_class_initfn(TypeClass *class)
+{
+ DeviceClass *device_class = DEVICE_CLASS(class);
+
+ device_class->visit = (DeviceVisitor *)pin_visit;
+}
+
+static const TypeInfo pin_type_info = {
+ .name = TYPE_PIN,
+ .parent = TYPE_DEVICE,
+ .instance_size = sizeof(Pin),
+ .instance_init = pin_initfn,
+ .class_init = pin_class_initfn,
+};
+
+static void register_devices(void)
+{
+ type_register_static(&pin_type_info);
+}
+
+device_init(register_devices);
diff --git a/include/qemu/pin.h b/include/qemu/pin.h
new file mode 100644
index 0000000..e8f2582
--- /dev/null
+++ b/include/qemu/pin.h
@@ -0,0 +1,28 @@
+#ifndef PIN_H
+#define PIN_H
+
+#include "qemu/device.h"
+#include "notify.h"
+
+typedef struct Pin
+{
+ Device parent;
+
+ /* private */
+ bool level;
+
+ /* FIXME */
+ NotifierList level_changed;
+} Pin;
+
+#define TYPE_PIN "pin"
+#define PIN(obj) TYPE_CHECK(Pin, obj, TYPE_PIN)
+
+void pin_initialize(Pin *pin, const char *id);
+void pin_finalize(Pin *pin);
+void pin_visit(Pin *pin, Visitor *v, const char *name, Error **errp);
+
+void pin_set_level(Pin *pin, bool value, Error **errp);
+bool pin_get_level(Pin *pin, Error **errp);
+
+#endif
--
1.7.4.1
- [Qemu-devel] [PATCH 04/21] qom: add Plug class, (continued)
- [Qemu-devel] [PATCH 04/21] qom: add Plug class, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 06/21] plug: add socket property type, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 01/21] qom: add make infrastructure, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 07/21] plug: add generated property types, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 03/21] qom: Add core type system, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 05/21] plug: add Plug property type, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 10/21] qom: add plug_get QMP command, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 11/21] qom: add plug_set QMP command, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 08/21] qom: add plug_create QMP command, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 13/21] qom: add plug_destroy command, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 16/21] qom-devices: add a Pin class,
Anthony Liguori <=
- [Qemu-devel] [PATCH 17/21] qom: add CharDriver class, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 12/21] qom: add plug_list_props QMP command, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 15/21] qom: add Device class, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 21/21] qom-chrdrv: add UnixServer, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 19/21] qom-chrdrv: add Socket base class, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 18/21] qom-chrdrv: add memory character driver, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 20/21] qom-chrdrv: add TCPServer class, Anthony Liguori, 2011/07/24
- [Qemu-devel] [PATCH 14/21] qom: add example qsh command, Anthony Liguori, 2011/07/24