transport: dbus: Implement create_write_window

Change-Id: I85b318cae135cfe8203cb01c54ab4872fcc947c0
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/transport_dbus.c b/transport_dbus.c
index 19b71c7..7443975 100644
--- a/transport_dbus.c
+++ b/transport_dbus.c
@@ -214,10 +214,11 @@
 	return sd_bus_send(NULL, n, NULL);
 }
 
-static int transport_dbus_create_read_window(sd_bus_message *m, void *userdata,
-					     sd_bus_error *ret_error)
+static int transport_dbus_create_window(struct mbox_context *context,
+					bool ro,
+					sd_bus_message *m,
+					sd_bus_error *ret_error)
 {
-	struct mbox_context *context = userdata;
 	struct protocol_create_window io;
 	sd_bus_message *n;
 	int rc;
@@ -233,7 +234,7 @@
 		return rc;
 	}
 
-	io.req.ro = true;
+	io.req.ro = ro;
 	rc = context->protocol->create_window(context, &io);
 	if (rc < 0) {
 		return rc;
@@ -257,6 +258,22 @@
 	return sd_bus_send(NULL, n, NULL);
 }
 
+static int transport_dbus_create_read_window(sd_bus_message *m, void *userdata,
+					     sd_bus_error *ret_error)
+{
+	struct mbox_context *context = userdata;
+
+	return transport_dbus_create_window(context, true, m, ret_error);
+}
+
+static int transport_dbus_create_write_window(sd_bus_message *m, void *userdata,
+					      sd_bus_error *ret_error)
+{
+	struct mbox_context *context = userdata;
+
+	return transport_dbus_create_window(context, false, m, ret_error);
+}
+
 static int transport_dbus_ack(sd_bus_message *m, void *userdata,
 			      sd_bus_error *ret_error)
 {
@@ -339,6 +356,9 @@
 	SD_BUS_METHOD("CreateReadWindow", "qq", "qqq",
 		      &transport_dbus_create_read_window,
 		      SD_BUS_VTABLE_UNPRIVILEGED),
+	SD_BUS_METHOD("CreateWriteWindow", "qq", "qqq",
+		      &transport_dbus_create_write_window,
+		      SD_BUS_VTABLE_UNPRIVILEGED),
 	SD_BUS_METHOD("Ack", "y", NULL, &transport_dbus_ack,
 		      SD_BUS_VTABLE_UNPRIVILEGED),
 	SD_BUS_PROPERTY("FlashControlLost", "b", transport_dbus_get_property,