Commit 0098e179 authored by Simon Glass's avatar Simon Glass Committed by Tom Rini

Move bootretry code into bootretry.c and clean up

This code is only used by one board, so it seems a shame to clutter up
the readline code with it. Move it into its own file.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 30354978
......@@ -8,6 +8,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <mpc8260.h>
#include <mpc8260_irq.h>
......
......@@ -6,6 +6,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
int
......
......@@ -29,6 +29,11 @@ ifdef CONFIG_BOOTDELAY
obj-y += autoboot.o
endif
# This option is not just y/n - it can have a numeric value
ifdef CONFIG_BOOT_RETRY_TIME
obj-y += bootretry.o
endif
# boards
obj-$(CONFIG_SYS_GENERIC_BOARD) += board_f.o
obj-$(CONFIG_SYS_GENERIC_BOARD) += board_r.o
......
......@@ -6,6 +6,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <fdtdec.h>
#include <menu.h>
......
/*
* (C) Copyright 2000
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <errno.h>
#include <watchdog.h>
#ifndef CONFIG_BOOT_RETRY_MIN
#define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME
#endif
static uint64_t endtime; /* must be set, default is instant timeout */
static int retry_time = -1; /* -1 so can call readline before main_loop */
/***************************************************************************
* initialize command line timeout
*/
void init_cmd_timeout(void)
{
char *s = getenv("bootretry");
if (s != NULL)
retry_time = (int)simple_strtol(s, NULL, 10);
else
retry_time = CONFIG_BOOT_RETRY_TIME;
if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN)
retry_time = CONFIG_BOOT_RETRY_MIN;
}
/***************************************************************************
* reset command line timeout to retry_time seconds
*/
void reset_cmd_timeout(void)
{
endtime = endtick(retry_time);
}
int bootretry_tstc_timeout(void)
{
while (!tstc()) { /* while no incoming data */
if (retry_time >= 0 && get_ticks() > endtime)
return -ETIMEDOUT;
WATCHDOG_RESET();
}
return 0;
}
void bootretry_dont_retry(void)
{
retry_time = -1;
}
......@@ -79,6 +79,7 @@
#include <malloc.h> /* malloc, free, realloc*/
#include <linux/ctype.h> /* isalpha, isdigit */
#include <common.h> /* readline */
#include <bootretry.h>
#include <cli.h>
#include <cli_hush.h>
#include <command.h> /* find_cmd */
......
......@@ -10,6 +10,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <watchdog.h>
......@@ -18,17 +19,8 @@ DECLARE_GLOBAL_DATA_PTR;
static const char erase_seq[] = "\b \b"; /* erase sequence */
static const char tab_seq[] = " "; /* used to expand TABs */
#ifdef CONFIG_BOOT_RETRY_TIME
static uint64_t endtime; /* must be set, default is instant timeout */
static int retry_time = -1; /* -1 so can call readline before main_loop */
#endif
char console_buffer[CONFIG_SYS_CBSIZE + 1]; /* console I/O buffer */
#ifndef CONFIG_BOOT_RETRY_MIN
#define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME
#endif
static char *delete_char (char *buffer, char *p, int *colp, int *np, int plen)
{
char *s;
......@@ -267,13 +259,8 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len);
while (1) {
#ifdef CONFIG_BOOT_RETRY_TIME
while (!tstc()) { /* while no incoming data */
if (retry_time >= 0 && get_ticks() > endtime)
return -2; /* timed out */
WATCHDOG_RESET();
}
#endif
if (bootretry_tstc_timeout())
return -2; /* timed out */
if (first && timeout) {
uint64_t etime = endtick(timeout);
......@@ -539,13 +526,8 @@ int cli_readline_into_buffer(const char *const prompt, char *buffer,
col = plen;
for (;;) {
#ifdef CONFIG_BOOT_RETRY_TIME
while (!tstc()) { /* while no incoming data */
if (retry_time >= 0 && get_ticks() > endtime)
return -2; /* timed out */
WATCHDOG_RESET();
}
#endif
if (bootretry_tstc_timeout())
return -2; /* timed out */
WATCHDOG_RESET(); /* Trigger watchdog, if needed */
#ifdef CONFIG_SHOW_ACTIVITY
......@@ -637,35 +619,3 @@ int cli_readline_into_buffer(const char *const prompt, char *buffer,
}
#endif
}
#ifdef CONFIG_BOOT_RETRY_TIME
/***************************************************************************
* initialize command line timeout
*/
void init_cmd_timeout(void)
{
char *s = getenv("bootretry");
if (s != NULL)
retry_time = (int)simple_strtol(s, NULL, 10);
else
retry_time = CONFIG_BOOT_RETRY_TIME;
if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN)
retry_time = CONFIG_BOOT_RETRY_MIN;
}
/***************************************************************************
* reset command line timeout to retry_time seconds
*/
void reset_cmd_timeout(void)
{
endtime = endtick(retry_time);
}
void bootretry_dont_retry(void)
{
retry_time = -1;
}
#endif
......@@ -10,6 +10,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <linux/ctype.h>
......
......@@ -66,6 +66,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <command.h>
#include <edid.h>
......
......@@ -12,6 +12,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <command.h>
#ifdef CONFIG_HAS_DATAFLASH
......
......@@ -14,6 +14,7 @@
*/
#include <common.h>
#include <bootretry.h>
#include <cli.h>
#include <command.h>
#include <asm/processor.h>
......
/*
* (C) Copyright 2000
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __bootretry_h
#define __bootretry_h
#ifdef CONFIG_BOOT_RETRY_TIME
/**
* bootretry_tstc_timeout() - ensure we get a keypress before timeout
*
* Check for a keypress repeatedly, resetting the watchdog each time. If a
* keypress is not received within the command timeout, return an error.
*
* @return 0 if a key is received in time, -ETIMEDOUT if not
*/
int bootretry_tstc_timeout(void);
#else
static inline int bootretry_tstc_timeout(void)
{
return 0;
}
#endif
void init_cmd_timeout(void);
void reset_cmd_timeout(void);
#endif
......@@ -286,8 +286,6 @@ int run_command(const char *cmd, int flag);
* @return 0 on success, or != 0 on error.
*/
int run_command_list(const char *cmd, int len, int flag);
void init_cmd_timeout(void);
void reset_cmd_timeout(void);
extern char console_buffer[];
/* arch/$(ARCH)/lib/board.c */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment