From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aW0I3-0003Lu-Nd for barebox@lists.infradead.org; Wed, 17 Feb 2016 11:29:04 +0000 From: Markus Pargmann Date: Wed, 17 Feb 2016 12:28:20 +0100 Message-Id: <1455708500-980-4-git-send-email-mpa@pengutronix.de> In-Reply-To: <1455708500-980-1-git-send-email-mpa@pengutronix.de> References: <1455708500-980-1-git-send-email-mpa@pengutronix.de> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v2 4/4] fastboot: Add a ARM Barebox filetype handler To: barebox@lists.infradead.org This will automatically call barebox_update for the transfered file if it is an ARM Barebox image and the destination file is defined by some update handler. Signed-off-by: Markus Pargmann --- common/filetype.c | 13 +++++++++++++ drivers/usb/gadget/f_fastboot.c | 29 +++++++++++++++++++++++++++++ include/filetype.h | 2 ++ 3 files changed, 44 insertions(+) diff --git a/common/filetype.c b/common/filetype.c index 8cfae88aeb35..74baf514466a 100644 --- a/common/filetype.c +++ b/common/filetype.c @@ -369,3 +369,16 @@ err_out: cdev_close(cdev); return type; } + +bool filetype_is_barebox_image(enum filetype ft) +{ + switch (ft) { + case filetype_arm_barebox: + case filetype_mips_barebox: + case filetype_ch_image: + case filetype_ch_image_be: + return true; + default: + return false; + } +} diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index bc06c58d8dcb..9a1058a9670b 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -716,6 +717,34 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req, const char *cmd goto out; } + if (filetype_is_barebox_image(filetype)) { + struct bbu_data data = { + .devicefile = filename, + .imagefile = FASTBOOT_TMPFILE, + .flags = BBU_FLAG_YES, + }; + + if (!barebox_update_handler_exists(&data)) + goto copy; + + fastboot_tx_print(f_fb, "INFOThis is an ARM Barebox image..."); + + data.image = read_file(data.imagefile, &data.len); + if (!data.image) { + fastboot_tx_print(f_fb, "FAILreading barebox"); + return; + } + + ret = barebox_update(&data); + + if (ret) { + fastboot_tx_print(f_fb, "FAILupdate barebox: %s", strerror(-ret)); + return; + } + + goto out; + } + copy: ret = copy_file(FASTBOOT_TMPFILE, filename, 1); if (ret) { diff --git a/include/filetype.h b/include/filetype.h index cde543e5b061..e87ca174a89d 100644 --- a/include/filetype.h +++ b/include/filetype.h @@ -2,6 +2,7 @@ #define __FILE_TYPE_H #include +#include /* * List of file types we know @@ -48,6 +49,7 @@ enum filetype file_name_detect_type(const char *filename); enum filetype cdev_detect_type(const char *name); enum filetype is_fat_or_mbr(const unsigned char *sector, unsigned long *bootsec); int is_fat_boot_sector(const void *_buf); +bool filetype_is_barebox_image(enum filetype ft); #define ARM_HEAD_SIZE 0x30 #define ARM_HEAD_MAGICWORD_OFFSET 0x20 -- 2.7.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox