net: share fastboot boot handle logic between transports
Introduce reboot, boot and continue commands support to TCP fastboot by moving existing UDP logic into the common module. Signed-off-by: Dmitrii Merkurev <dimorinny@google.com> Cc: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org> Cc: Simon Glass <sjg@chromium.org> Сс: Joe Hershberger <joe.hershberger@ni.com> Сс: Ramon Fried <rfried.dev@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Ramon Fried <rfried.dev@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
443d319180
commit
c8acbbbf08
4 changed files with 46 additions and 31 deletions
|
@ -15,6 +15,7 @@
|
|||
#include <command.h>
|
||||
#include <env.h>
|
||||
#include <fastboot.h>
|
||||
#include <net.h>
|
||||
|
||||
/**
|
||||
* fastboot_buf_addr - base address of the fastboot download buffer
|
||||
|
@ -155,6 +156,37 @@ void fastboot_boot(void)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fastboot_handle_boot() - Shared implementation of system reaction to
|
||||
* fastboot commands
|
||||
*
|
||||
* Making desceisions about device boot state (stay in fastboot, reboot
|
||||
* to bootloader, reboot to OS, etc).
|
||||
*/
|
||||
void fastboot_handle_boot(int command, bool success)
|
||||
{
|
||||
if (!success)
|
||||
return;
|
||||
|
||||
switch (command) {
|
||||
case FASTBOOT_COMMAND_BOOT:
|
||||
fastboot_boot();
|
||||
net_set_state(NETLOOP_SUCCESS);
|
||||
break;
|
||||
|
||||
case FASTBOOT_COMMAND_CONTINUE:
|
||||
net_set_state(NETLOOP_SUCCESS);
|
||||
break;
|
||||
|
||||
case FASTBOOT_COMMAND_REBOOT:
|
||||
case FASTBOOT_COMMAND_REBOOT_BOOTLOADER:
|
||||
case FASTBOOT_COMMAND_REBOOT_FASTBOOTD:
|
||||
case FASTBOOT_COMMAND_REBOOT_RECOVERY:
|
||||
do_reset(NULL, 0, 0, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fastboot_set_progress_callback() - set progress callback
|
||||
*
|
||||
|
|
|
@ -123,6 +123,15 @@ void fastboot_init(void *buf_addr, u32 buf_size);
|
|||
*/
|
||||
void fastboot_boot(void);
|
||||
|
||||
/**
|
||||
* fastboot_handle_boot() - Shared implementation of system reaction to
|
||||
* fastboot commands
|
||||
*
|
||||
* Making desceisions about device boot state (stay in fastboot, reboot
|
||||
* to bootloader, reboot to OS, etc).
|
||||
*/
|
||||
void fastboot_handle_boot(int command, bool success);
|
||||
|
||||
/**
|
||||
* fastboot_handle_command() - Handle fastboot command
|
||||
*
|
||||
|
|
|
@ -73,6 +73,7 @@ static void fastboot_tcp_handler_ipv4(uchar *pkt, u16 dport,
|
|||
u32 tcp_seq_num, u32 tcp_ack_num,
|
||||
u8 action, unsigned int len)
|
||||
{
|
||||
int fastboot_command_id;
|
||||
u64 command_size;
|
||||
u8 tcp_fin = action & TCP_FIN;
|
||||
u8 tcp_push = action & TCP_PUSH;
|
||||
|
@ -115,8 +116,10 @@ static void fastboot_tcp_handler_ipv4(uchar *pkt, u16 dport,
|
|||
break;
|
||||
}
|
||||
strlcpy(command, pkt, len + 1);
|
||||
fastboot_handle_command(command, response);
|
||||
fastboot_command_id = fastboot_handle_command(command, response);
|
||||
fastboot_tcp_send_message(response, strlen(response));
|
||||
fastboot_handle_boot(fastboot_command_id,
|
||||
strncmp("OKAY", response, 4) == 0);
|
||||
}
|
||||
break;
|
||||
case FASTBOOT_DISCONNECTING:
|
||||
|
|
|
@ -40,8 +40,6 @@ static int fastboot_remote_port;
|
|||
/* The UDP port at our end */
|
||||
static int fastboot_our_port;
|
||||
|
||||
static void boot_downloaded_image(void);
|
||||
|
||||
/**
|
||||
* fastboot_udp_send_info() - Send an INFO packet during long commands.
|
||||
*
|
||||
|
@ -209,39 +207,12 @@ static void fastboot_send(struct fastboot_header header, char *fastboot_data,
|
|||
net_send_udp_packet(net_server_ethaddr, fastboot_remote_ip,
|
||||
fastboot_remote_port, fastboot_our_port, len);
|
||||
|
||||
/* Continue boot process after sending response */
|
||||
if (!strncmp("OKAY", response, 4)) {
|
||||
switch (cmd) {
|
||||
case FASTBOOT_COMMAND_BOOT:
|
||||
boot_downloaded_image();
|
||||
break;
|
||||
|
||||
case FASTBOOT_COMMAND_CONTINUE:
|
||||
net_set_state(NETLOOP_SUCCESS);
|
||||
break;
|
||||
|
||||
case FASTBOOT_COMMAND_REBOOT:
|
||||
case FASTBOOT_COMMAND_REBOOT_BOOTLOADER:
|
||||
case FASTBOOT_COMMAND_REBOOT_FASTBOOTD:
|
||||
case FASTBOOT_COMMAND_REBOOT_RECOVERY:
|
||||
do_reset(NULL, 0, 0, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fastboot_handle_boot(cmd, strncmp("OKAY", response, 4) == 0);
|
||||
|
||||
if (!strncmp("OKAY", response, 4) || !strncmp("FAIL", response, 4))
|
||||
cmd = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* boot_downloaded_image() - Boots into downloaded image.
|
||||
*/
|
||||
static void boot_downloaded_image(void)
|
||||
{
|
||||
fastboot_boot();
|
||||
net_set_state(NETLOOP_SUCCESS);
|
||||
}
|
||||
|
||||
/**
|
||||
* fastboot_handler() - Incoming UDP packet handler.
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue