seperated flash download
diff --git a/Makefile b/Makefile
index fc288bd..156fd8e 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,8 @@
OBJS = objects/pflash/progress.o objects/pflash/ast-sf-ctrl.o
OBJS += objects/pflash/libflash/libflash.o objects/pflash/libflash/libffs.o
OBJS += objects/pflash/arm_io.o
+OBJS2 = progress.o ast-sf-ctrl.o libflash.o libffs.o arm_io.o
+OBJS3 = obj/progress.o obj/ast-sf-ctrl.o obj/libflash.o obj/libffs.o obj/arm_io.o
LIBS = ./bin
OFLAGS =-L$(LIBS) -lopenbmc_intf
HOME = .
@@ -18,9 +20,13 @@
$(CC) -c -o obj/$@ $< -L$(LIBS) -I$(HOME) -I$(HOME)/includes -I$(HOME)/objects/pflash $(CFLAGS)
%.o: objects/pflash/%.c
- $(CC) -c -o obj/$@ $< -I$(HOME) -I$(HOME)/objects/pflash $(CFLAGS)
+ $(CC) -c -o obj/$@ $< -I$(HOME) -I$(HOME)/objects/pflash $(CFLAGS)
+%.o: objects/pflash/libflash/%.c
+ $(CC) -c -o obj/$@ $< -I$(HOME) -I$(HOME)/objects/pflash $(CFLAGS)
+setup:
+ mkdir obj
libopenbmc_intf: openbmc_intf.o
$(CC) -shared -o bin/$@.so obj/openbmc_intf.o $(CFLAGS)
@@ -43,8 +49,8 @@
control_host: control_host_obj.o gpio.o
$(CC) -o bin/$@.exe obj/gpio.o obj/control_host_obj.o $(OFLAGS) $(CFLAGS)
-flash_bios: pflash.o flash_bios_obj.o
- $(CC) -o bin/$@.exe obj/flash_bios_obj.o $(OFLAGS) $(OBJS) $(CFLAGS)
+flash_bios: $(OBJS2) pflash.o flash_bios_obj.o
+ $(CC) -o bin/$@.exe obj/flash_bios_obj.o $(OFLAGS) $(OBJS3) $(CFLAGS)
fan: fan_generic_obj.o gpio.o
$(CC) -o bin/$@.exe obj/gpio.o obj/fan_generic_obj.o $(OFLAGS) $(CFLAGS)
@@ -65,4 +71,4 @@
$(CC) -o bin/$@.exe obj/pcie_slot_present_obj.o obj/gpio.o $(OFLAGS) $(CFLAGS)
-all: libopenbmc_intf power_control chassis_identify sensor_ambient button_power sensor_host_status control_host fan host_watchdog control_bmc sensor_occ board_vpd
+all: setup libopenbmc_intf power_control chassis_identify sensor_ambient button_power sensor_host_status control_host fan host_watchdog control_bmc sensor_occ board_vpd
diff --git a/bin/Palmetto.py b/bin/Palmetto.py
index 80dccf0..2786723 100644
--- a/bin/Palmetto.py
+++ b/bin/Palmetto.py
@@ -167,13 +167,13 @@
'instances' : [ { 'name' : 'Bios_0' } ]
}
-SYSTEM_CONFIG['org.openbmc.manager.Flash'] = {
+SYSTEM_CONFIG['org.openbmc.manager.Download'] = {
'system_state' : 'STANDBY',
'start_process' : True,
'monitor_process' : True,
- 'process_name' : 'flash_manager.py',
+ 'process_name' : 'download_manager.py',
'heartbeat' : 'no',
- 'instances' : [ { 'name' : 'FlashManager_0' } ]
+ 'instances' : [ { 'name' : 'DownloadManager_0' } ]
}
SYSTEM_CONFIG['org.openbmc.control.Host'] = {
diff --git a/bin/download_manager.py b/bin/download_manager.py
new file mode 100644
index 0000000..842b45e
--- /dev/null
+++ b/bin/download_manager.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+import sys
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import tftpy
+
+
+
+DBUS_NAME = 'org.openbmc.managers.Download'
+OBJ_NAME = '/org/openbmc/managers/Download'
+TFTP_PORT = 69
+DOWNLOAD_DIR = '/tmp'
+
+class DownloadManagerObject(dbus.service.Object):
+ def __init__(self,bus,name):
+ dbus.service.Object.__init__(self,bus,name)
+ bus = dbus.SessionBus()
+ bus.add_signal_receiver(self.DownloadHandler,
+ dbus_interface = "org.openbmc.Flash", signal_name = "Download")
+
+ @dbus.service.signal(DBUS_NAME,signature='s')
+ def DownloadComplete(self,outfile):
+ print "Download Complete: "+outfile
+ return outfile
+
+ @dbus.service.signal(DBUS_NAME)
+ def DownloadError(self):
+ pass
+
+ def DownloadHandler(self,url,filename):
+ try:
+ filename = str(filename)
+ client = tftpy.TftpClient(url, TFTP_PORT)
+ print "Downloading: "+filename+" from "+url
+ outfile = DOWNLOAD_DIR+"/"+filename
+ client.download(filename,outfile)
+ self.DownloadComplete(outfile)
+
+ except Exception as e:
+ print "ERROR DownloadManager: "+str(e)
+ self.DownloadError()
+
+
+
+if __name__ == '__main__':
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+ bus = dbus.SessionBus()
+ name = dbus.service.BusName(DBUS_NAME, bus)
+ obj = DownloadManagerObject(bus, OBJ_NAME)
+ mainloop = gobject.MainLoop()
+
+ print "Running Download Manager"
+ mainloop.run()
+
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
index 7fb6a86..fc9123b 100644
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -89,8 +89,9 @@
for k in data[i].keys():
print k+" = "+str(data[i][k])
elif (cmd == "updatefw"):
- intf = Openbmc.getManagerInterface(bus,"Flash")
- intf.updateFromTftp("bios","bakerstreet.aus.stglabs.ibm.com","firmware.bin")
+ obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
+ intf = dbus.Interface(obj,"org.openbmc.Flash")
+ intf.updateViaTftp("bakerstreet.aus.stglabs.ibm.com","firmware.bin")
elif (cmd == "fwstatus"):
intf = Openbmc.getManagerInterface(bus,"Flash")
status = intf.getStatus()
diff --git a/interfaces/openbmc_intf.c b/interfaces/openbmc_intf.c
index a0ff159..fe97149 100644
--- a/interfaces/openbmc_intf.c
+++ b/interfaces/openbmc_intf.c
@@ -18652,6 +18652,48 @@
FALSE
};
+static const _ExtendedGDBusArgInfo _flash_method_info_update_via_tftp_IN_ARG_url =
+{
+ {
+ -1,
+ (gchar *) "url",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _flash_method_info_update_via_tftp_IN_ARG_filename =
+{
+ {
+ -1,
+ (gchar *) "filename",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _flash_method_info_update_via_tftp_IN_ARG_pointers[] =
+{
+ &_flash_method_info_update_via_tftp_IN_ARG_url,
+ &_flash_method_info_update_via_tftp_IN_ARG_filename,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _flash_method_info_update_via_tftp =
+{
+ {
+ -1,
+ (gchar *) "updateViaTftp",
+ (GDBusArgInfo **) &_flash_method_info_update_via_tftp_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-update-via-tftp",
+ FALSE
+};
+
static const _ExtendedGDBusMethodInfo _flash_method_info_init =
{
{
@@ -18668,6 +18710,7 @@
static const _ExtendedGDBusMethodInfo * const _flash_method_info_pointers[] =
{
&_flash_method_info_update,
+ &_flash_method_info_update_via_tftp,
&_flash_method_info_init,
NULL
};
@@ -18683,9 +18726,50 @@
"updated"
};
+static const _ExtendedGDBusArgInfo _flash_signal_info_download_ARG_url =
+{
+ {
+ -1,
+ (gchar *) "url",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _flash_signal_info_download_ARG_filename =
+{
+ {
+ -1,
+ (gchar *) "filename",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _flash_signal_info_download_ARG_pointers[] =
+{
+ &_flash_signal_info_download_ARG_url,
+ &_flash_signal_info_download_ARG_filename,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _flash_signal_info_download =
+{
+ {
+ -1,
+ (gchar *) "Download",
+ (GDBusArgInfo **) &_flash_signal_info_download_ARG_pointers,
+ NULL
+ },
+ "download"
+};
+
static const _ExtendedGDBusSignalInfo * const _flash_signal_info_pointers[] =
{
&_flash_signal_info_updated,
+ &_flash_signal_info_download,
NULL
};
@@ -18745,6 +18829,8 @@
* @parent_iface: The parent interface.
* @handle_init: Handler for the #Flash::handle-init signal.
* @handle_update: Handler for the #Flash::handle-update signal.
+ * @handle_update_via_tftp: Handler for the #Flash::handle-update-via-tftp signal.
+ * @download: Handler for the #Flash::download signal.
* @updated: Handler for the #Flash::updated signal.
*
* Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>.
@@ -18781,6 +18867,30 @@
G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
/**
+ * Flash::handle-update-via-tftp:
+ * @object: A #Flash.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_url: Argument passed by remote caller.
+ * @arg_filename: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call flash_complete_update_via_tftp() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-update-via-tftp",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (FlashIface, handle_update_via_tftp),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING);
+
+ /**
* Flash::handle-init:
* @object: A #Flash.
* @invocation: A #GDBusMethodInvocation.
@@ -18821,6 +18931,26 @@
G_TYPE_NONE,
0);
+ /**
+ * Flash::download:
+ * @object: A #Flash.
+ * @arg_url: Argument.
+ * @arg_filename: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Flash.Download">"Download"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("download",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (FlashIface, download),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2, G_TYPE_STRING, G_TYPE_STRING);
+
}
/**
@@ -18837,6 +18967,23 @@
}
/**
+ * flash_emit_download:
+ * @object: A #Flash.
+ * @arg_url: Argument to pass with the signal.
+ * @arg_filename: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-openbmc-Flash.Download">"Download"</link> D-Bus signal.
+ */
+void
+flash_emit_download (
+ Flash *object,
+ const gchar *arg_url,
+ const gchar *arg_filename)
+{
+ g_signal_emit_by_name (object, "download", arg_url, arg_filename);
+}
+
+/**
* flash_call_update:
* @proxy: A #FlashProxy.
* @arg_filename: Argument to pass with the method invocation.
@@ -18935,6 +19082,110 @@
}
/**
+ * flash_call_update_via_tftp:
+ * @proxy: A #FlashProxy.
+ * @arg_url: Argument to pass with the method invocation.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call flash_call_update_via_tftp_finish() to get the result of the operation.
+ *
+ * See flash_call_update_via_tftp_sync() for the synchronous, blocking version of this method.
+ */
+void
+flash_call_update_via_tftp (
+ Flash *proxy,
+ const gchar *arg_url,
+ const gchar *arg_filename,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "updateViaTftp",
+ g_variant_new ("(ss)",
+ arg_url,
+ arg_filename),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * flash_call_update_via_tftp_finish:
+ * @proxy: A #FlashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_update_via_tftp().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with flash_call_update_via_tftp().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_update_via_tftp_finish (
+ Flash *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * flash_call_update_via_tftp_sync:
+ * @proxy: A #FlashProxy.
+ * @arg_url: Argument to pass with the method invocation.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See flash_call_update_via_tftp() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+flash_call_update_via_tftp_sync (
+ Flash *proxy,
+ const gchar *arg_url,
+ const gchar *arg_filename,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "updateViaTftp",
+ g_variant_new ("(ss)",
+ arg_url,
+ arg_filename),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
* flash_call_init:
* @proxy: A #FlashProxy.
* @cancellable: (allow-none): A #GCancellable or %NULL.
@@ -19045,6 +19296,24 @@
}
/**
+ * flash_complete_update_via_tftp:
+ * @object: A #Flash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+flash_complete_update_via_tftp (
+ Flash *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
* flash_complete_init:
* @object: A #Flash.
* @invocation: (transfer full): A #GDBusMethodInvocation.
@@ -19639,6 +19908,32 @@
g_list_free_full (connections, g_object_unref);
}
+static void
+_flash_on_signal_download (
+ Flash *object,
+ const gchar *arg_url,
+ const gchar *arg_filename)
+{
+ FlashSkeleton *skeleton = FLASH_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(ss)",
+ arg_url,
+ arg_filename));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Flash", "Download",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
static void flash_skeleton_iface_init (FlashIface *iface);
#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
G_DEFINE_TYPE_WITH_CODE (FlashSkeleton, flash_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
@@ -19699,6 +19994,7 @@
flash_skeleton_iface_init (FlashIface *iface)
{
iface->updated = _flash_on_signal_updated;
+ iface->download = _flash_on_signal_download;
}
/**
diff --git a/interfaces/openbmc_intf.h b/interfaces/openbmc_intf.h
index bdddcf1..5b174b8 100644
--- a/interfaces/openbmc_intf.h
+++ b/interfaces/openbmc_intf.h
@@ -2518,6 +2518,17 @@
GDBusMethodInvocation *invocation,
const gchar *arg_filename);
+ gboolean (*handle_update_via_tftp) (
+ Flash *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *arg_url,
+ const gchar *arg_filename);
+
+ void (*download) (
+ Flash *object,
+ const gchar *arg_url,
+ const gchar *arg_filename);
+
void (*updated) (
Flash *object);
@@ -2534,6 +2545,10 @@
Flash *object,
GDBusMethodInvocation *invocation);
+void flash_complete_update_via_tftp (
+ Flash *object,
+ GDBusMethodInvocation *invocation);
+
void flash_complete_init (
Flash *object,
GDBusMethodInvocation *invocation);
@@ -2544,6 +2559,11 @@
void flash_emit_updated (
Flash *object);
+void flash_emit_download (
+ Flash *object,
+ const gchar *arg_url,
+ const gchar *arg_filename);
+
/* D-Bus method calls: */
@@ -2565,6 +2585,26 @@
GCancellable *cancellable,
GError **error);
+void flash_call_update_via_tftp (
+ Flash *proxy,
+ const gchar *arg_url,
+ const gchar *arg_filename,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean flash_call_update_via_tftp_finish (
+ Flash *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean flash_call_update_via_tftp_sync (
+ Flash *proxy,
+ const gchar *arg_url,
+ const gchar *arg_filename,
+ GCancellable *cancellable,
+ GError **error);
+
void flash_call_init (
Flash *proxy,
GCancellable *cancellable,
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 2a5471b..cb3f70a 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -8,6 +8,26 @@
static GDBusObjectManagerServer *manager = NULL;
+void update(Flash *flash, const gchar* write_file)
+{
+ printf("Flashing: %s\n",write_file);
+ // get size from file
+ struct stat stbuf;
+ uint32_t address = 0, read_size = 0, write_size = 0;
+
+#ifdef __arm__
+ if (stat(write_file, &stbuf))
+ {
+ printf("ERROR: Invalid flash file: %s\n",write_file);
+ }
+ write_size = stbuf.st_size;
+ // TODO: need to change pflash to return error instead of exit
+ erase_chip();
+ program_file(write_file, address, write_size);
+#endif
+ flash_emit_updated(flash);
+}
+
static gboolean
on_init (Flash *f,
GDBusMethodInvocation *invocation,
@@ -24,32 +44,51 @@
}
static gboolean
-on_update (Flash *f,
+on_update_via_tftp (Flash *flash,
+ GDBusMethodInvocation *invocation,
+ gchar* url,
+ gchar* write_file,
+ gpointer user_data)
+{
+ printf("Flashing BIOS from TFTP: %s,%s\n",url,write_file);
+ flash_emit_download(flash,url,write_file);
+ flash_complete_update_via_tftp(flash,invocation);
+ return TRUE;
+}
+
+static gboolean
+on_update (Flash *flash,
GDBusMethodInvocation *invocation,
gchar* write_file,
gpointer user_data)
{
printf("Flashing BIOS from file\n");
- flash_complete_update(f,invocation);
- // get size from file
- struct stat stbuf;
- uint32_t address = 0, read_size = 0, write_size = 0;
-
-#ifdef __arm__
- if (stat(write_file, &stbuf))
- {
- printf("ERROR: Invalid flash file: %s\n",write_file);
- }
- write_size = stbuf.st_size;
- // TODO: need to change pflash to return error instead of exit
- erase_chip();
- program_file(write_file, address, write_size);
-#endif
-
- flash_emit_updated(f);
+ flash_complete_update(flash,invocation);
+ update(flash,write_file);
+ flash_emit_updated(flash);
return TRUE;
}
+static void
+on_download_complete (GDBusConnection* connection,
+ const gchar* sender_name,
+ const gchar* object_path,
+ const gchar* interface_name,
+ const gchar* signal_name,
+ GVariant* parameters,
+ gpointer user_data)
+{
+ Flash *flash = object_get_flash((Object*)user_data);
+
+ GVariantIter *iter = g_variant_iter_new(parameters);
+ GVariant* value = g_variant_iter_next_value(iter);
+ const gchar* write_file;
+ gsize size;
+ write_file = g_variant_get_string(value,&size);
+ update(flash,write_file);
+
+}
+
static void
on_bus_acquired (GDBusConnection *connection,
const gchar *name,
@@ -81,12 +120,27 @@
"handle-update",
G_CALLBACK (on_update),
NULL); /* user_data */
-
+ g_signal_connect (flash,
+ "handle-update-via-tftp",
+ G_CALLBACK (on_update_via_tftp),
+ NULL); /* user_data */
+
g_signal_connect (flash,
"handle-init",
G_CALLBACK (on_init),
NULL); /* user_data */
+ g_dbus_connection_signal_subscribe(connection,
+ "org.openbmc.managers.Download",
+ "org.openbmc.managers.Download",
+ "DownloadComplete",
+ "/org/openbmc/managers/Download",
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ (GDBusSignalCallback) on_download_complete,
+ object,
+ NULL );
+
/* Export the object (@manager takes its own reference to @object) */
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
diff --git a/objects/pflash/arm_io.o b/objects/pflash/arm_io.o
deleted file mode 100644
index c570abe..0000000
--- a/objects/pflash/arm_io.o
+++ /dev/null
Binary files differ
diff --git a/objects/pflash/ast-sf-ctrl.o b/objects/pflash/ast-sf-ctrl.o
deleted file mode 100644
index 556dc22..0000000
--- a/objects/pflash/ast-sf-ctrl.o
+++ /dev/null
Binary files differ
diff --git a/objects/pflash/libflash/libffs.o b/objects/pflash/libflash/libffs.o
deleted file mode 100644
index 4ecdc98..0000000
--- a/objects/pflash/libflash/libffs.o
+++ /dev/null
Binary files differ
diff --git a/objects/pflash/libflash/libflash.o b/objects/pflash/libflash/libflash.o
deleted file mode 100644
index 4da0d03..0000000
--- a/objects/pflash/libflash/libflash.o
+++ /dev/null
Binary files differ
diff --git a/objects/pflash/pflash.o b/objects/pflash/pflash.o
deleted file mode 100644
index bd5d1a9..0000000
--- a/objects/pflash/pflash.o
+++ /dev/null
Binary files differ
diff --git a/objects/pflash/progress.o b/objects/pflash/progress.o
index 154d605..5153ecb 100644
--- a/objects/pflash/progress.o
+++ b/objects/pflash/progress.o
Binary files differ
diff --git a/xml/openbmc_intf.xml b/xml/openbmc_intf.xml
index d4c72d0..ed022ac 100644
--- a/xml/openbmc_intf.xml
+++ b/xml/openbmc_intf.xml
@@ -135,8 +135,16 @@
<method name="update">
<arg name="filename" type="s" direction="in"/>
</method>
+ <method name="updateViaTftp">
+ <arg name="url" type="s" direction="in"/>
+ <arg name="filename" type="s" direction="in"/>
+ </method>
<method name="init"/>
<signal name="Updated"/>
+ <signal name="Download">
+ <arg name="url" type="s"/>
+ <arg name="filename" type="s"/>
+ </signal>
</interface>
<interface name="org.openbmc.Button">
<method name="isOn">