summaryrefslogtreecommitdiffstats
path: root/recovery/recovery_updater.c
diff options
context:
space:
mode:
authorMichael Ward <mikeward@google.com>2011-06-30 19:05:19 -0700
committerMichael Ward <mikeward@google.com>2011-07-06 16:27:14 -0700
commite03df7326702365d88caf5cc4de72259e7f22f0f (patch)
tree77f6740d8fb1275c1949eb5b0f809ef59e145d95 /recovery/recovery_updater.c
parent8bd4bb233333fcafe76ed3c19b73440128b9832f (diff)
downloaddevice_samsung_tuna-e03df7326702365d88caf5cc4de72259e7f22f0f.zip
device_samsung_tuna-e03df7326702365d88caf5cc4de72259e7f22f0f.tar.gz
device_samsung_tuna-e03df7326702365d88caf5cc4de72259e7f22f0f.tar.bz2
Support bootloader and radio OTAs for Prime.
For bootloader figure out the correct xloader location in bootloader.img and write to /xloader. The sbl is always in the same place, and can be written to /sbl. For radio the radio.img just needs to be written to /radio. Change-Id: I7b3b82b5c093331287ada24ba8ebce31a79f74bf
Diffstat (limited to 'recovery/recovery_updater.c')
-rw-r--r--recovery/recovery_updater.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/recovery/recovery_updater.c b/recovery/recovery_updater.c
new file mode 100644
index 0000000..02963f5
--- /dev/null
+++ b/recovery/recovery_updater.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "edify/expr.h"
+#include "bootloader.h"
+
+Value* WriteBootloaderFn(const char* name, State* state, int argc, Expr* argv[])
+{
+ int result = -1;
+ Value* img;
+ Value* xloader_loc;
+ Value* sbl_loc;
+
+ if (argc != 3) {
+ return ErrorAbort(state, "%s() expects 3 args, got %d", name, argc);
+ }
+
+ if (ReadValueArgs(state, argv, 3, &img, &xloader_loc, &sbl_loc) < 0) {
+ return NULL;
+ }
+
+ if(img->type != VAL_BLOB ||
+ xloader_loc->type != VAL_STRING ||
+ sbl_loc->type != VAL_STRING) {
+ FreeValue(img);
+ FreeValue(xloader_loc);
+ FreeValue(sbl_loc);
+ return ErrorAbort(state, "%s(): argument types are incorrect", name);
+ }
+
+ result = update_bootloader(img->data, img->size,
+ xloader_loc->data, sbl_loc->data);
+ FreeValue(img);
+ FreeValue(xloader_loc);
+ FreeValue(sbl_loc);
+ return StringValue(strdup(result == 0 ? "t" : ""));
+}
+
+void Register_librecovery_updater_tuna() {
+ fprintf(stderr, "installing samsung updater extensions\n");
+
+ RegisterFunction("samsung.write_bootloader", WriteBootloaderFn);
+}