summaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/f_fastboot.c
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2015-10-15 14:34:13 +0200
committerTom Rini <trini@konsulko.com>2015-11-12 13:17:31 -0500
commit3c8f98f5fed5c6f03bb185b79191477885748b14 (patch)
tree95759f3960b187fa22606e939bd37f35c0ca76d6 /drivers/usb/gadget/f_fastboot.c
parent40aeeda396024913835dc67fa17041693af97bd1 (diff)
downloadtalos-obmc-uboot-3c8f98f5fed5c6f03bb185b79191477885748b14.tar.gz
talos-obmc-uboot-3c8f98f5fed5c6f03bb185b79191477885748b14.zip
fastboot: Move fastboot response functions to fastboot core
The functions and a few define to generate a fastboot message to be sent back to the host were so far duplicated among the users. Move them all to a common place. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'drivers/usb/gadget/f_fastboot.c')
-rw-r--r--drivers/usb/gadget/f_fastboot.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index ece48e668c..05fb77302b 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -13,6 +13,7 @@
#include <config.h>
#include <common.h>
#include <errno.h>
+#include <fastboot.h>
#include <malloc.h>
#include <linux/usb/ch9.h>
#include <linux/usb/gadget.h>
@@ -34,9 +35,6 @@
#define RX_ENDPOINT_MAXIMUM_PACKET_SIZE_1_1 (0x0040)
#define TX_ENDPOINT_MAXIMUM_PACKET_SIZE (0x0040)
-/* The 64 defined bytes plus \0 */
-#define RESPONSE_LEN (64 + 1)
-
#define EP_BUFFER_SIZE 4096
struct f_fastboot {
@@ -125,6 +123,19 @@ static struct usb_gadget_strings *fastboot_strings[] = {
static void rx_handler_command(struct usb_ep *ep, struct usb_request *req);
static int strcmp_l1(const char *s1, const char *s2);
+
+void fastboot_fail(char *response, const char *reason)
+{
+ strncpy(response, "FAIL\0", 5);
+ strncat(response, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
+}
+
+void fastboot_okay(char *response, const char *reason)
+{
+ strncpy(response, "OKAY\0", 5);
+ strncat(response, reason, FASTBOOT_RESPONSE_LEN - 4 - 1);
+}
+
static void fastboot_complete(struct usb_ep *ep, struct usb_request *req)
{
int status = req->status;
@@ -358,7 +369,7 @@ static int strcmp_l1(const char *s1, const char *s2)
static void cb_getvar(struct usb_ep *ep, struct usb_request *req)
{
char *cmd = req->buf;
- char response[RESPONSE_LEN];
+ char response[FASTBOOT_RESPONSE_LEN];
const char *s;
size_t chars_left;
@@ -415,7 +426,7 @@ static unsigned int rx_bytes_expected(unsigned int maxpacket)
#define BYTES_PER_DOT 0x20000
static void rx_handler_dl_image(struct usb_ep *ep, struct usb_request *req)
{
- char response[RESPONSE_LEN];
+ char response[FASTBOOT_RESPONSE_LEN];
unsigned int transfer_size = download_size - download_bytes;
const unsigned char *buffer = req->buf;
unsigned int buffer_size = req->actual;
@@ -472,7 +483,7 @@ static void rx_handler_dl_image(struct usb_ep *ep, struct usb_request *req)
static void cb_download(struct usb_ep *ep, struct usb_request *req)
{
char *cmd = req->buf;
- char response[RESPONSE_LEN];
+ char response[FASTBOOT_RESPONSE_LEN];
unsigned int max;
strsep(&cmd, ":");
@@ -533,7 +544,7 @@ static void cb_continue(struct usb_ep *ep, struct usb_request *req)
static void cb_flash(struct usb_ep *ep, struct usb_request *req)
{
char *cmd = req->buf;
- char response[RESPONSE_LEN];
+ char response[FASTBOOT_RESPONSE_LEN];
strsep(&cmd, ":");
if (!cmd) {
@@ -577,7 +588,7 @@ static void cb_oem(struct usb_ep *ep, struct usb_request *req)
static void cb_erase(struct usb_ep *ep, struct usb_request *req)
{
char *cmd = req->buf;
- char response[RESPONSE_LEN];
+ char response[FASTBOOT_RESPONSE_LEN];
strsep(&cmd, ":");
if (!cmd) {
OpenPOWER on IntegriCloud