summaryrefslogtreecommitdiff
path: root/rwhandler.h
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2010-01-14 16:00:14 +0200
committerMichael S. Tsirkin <mst@redhat.com>2010-02-14 16:10:53 +0200
commit049f7adbd547969ba013fed13c0a26c1f62a4a71 (patch)
tree0c173dc801f22831a061199887c2ee0135691e89 /rwhandler.h
parente73d6e3a028c777e642c687d433db914d8be8679 (diff)
downloadqemu-049f7adbd547969ba013fed13c0a26c1f62a4a71.tar.gz
rwhandler: simplified way to register for mem/io
Some users prefer a single callback with length passed as parameter to using b/w/l callbacks. It would maybe be cleaner to just pass length to existing callbacks but that's a lot of churn. So for now add a wrapper. For convenience use pcibus_t for address so a single callback can be used for pci io and pci memory. I did have to resort to preprocessor to reduce code duplication. It is however slightly more straightforward, and better contained than what we had with pci_host_template.h. Again, it would go away if we just passed len to existing callbacks. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'rwhandler.h')
-rw-r--r--rwhandler.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/rwhandler.h b/rwhandler.h
new file mode 100644
index 0000000000..bc11849572
--- /dev/null
+++ b/rwhandler.h
@@ -0,0 +1,27 @@
+#ifndef READ_WRITE_HANDLER_H
+#define READ_WRITE_HANDLER_H
+
+#include "qemu-common.h"
+#include "ioport.h"
+
+typedef struct ReadWriteHandler ReadWriteHandler;
+
+/* len is guaranteed to be one of 1, 2 or 4, addr is guaranteed to fit in an
+ * appropriate type (io/memory/etc). They do not need to be range checked. */
+typedef void WriteHandlerFunc(ReadWriteHandler *, pcibus_t addr,
+ uint32_t value, int len);
+typedef uint32_t ReadHandlerFunc(ReadWriteHandler *, pcibus_t addr, int len);
+
+struct ReadWriteHandler {
+ WriteHandlerFunc *write;
+ ReadHandlerFunc *read;
+};
+
+/* Helpers for when we want to use a single routine with length. */
+/* CPU memory handler: both read and write must be present. */
+int cpu_register_io_memory_simple(ReadWriteHandler *);
+/* io port handler: can supply only read or write handlers. */
+int register_ioport_simple(ReadWriteHandler *,
+ pio_addr_t start, int length, int size);
+
+#endif