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: Simon Glass <sjg@chromium.org>master
parent
30354978ff
commit
0098e179e1
@ -0,0 +1,59 @@ |
|||||||
|
/*
|
||||||
|
* (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; |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
/*
|
||||||
|
* (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 |
Loading…
Reference in new issue