mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-28 08:16:54 +00:00
HV:Remove i/o session sw interface from hypervisor shell
to remove it as no requirement of bounding i/o handlers dynamically in hypervisor shell - update source code related with i/o session - move shell command definitions from shell_pulic.c to shell_internal.c - remove shell_public.c Signed-off-by: Yonghua Huang <yonghua.huang@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
a8e9d83e59
commit
3b06282187
@ -43,7 +43,7 @@ static void console_handler(void)
|
||||
/* serial Console Tx operation */
|
||||
vuart_console_tx_chars(vu);
|
||||
} else {
|
||||
shell_kick_session();
|
||||
shell_kick();
|
||||
}
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,15 +11,6 @@
|
||||
|
||||
struct shell;
|
||||
|
||||
/* Structure to hold the details about shell input and output */
|
||||
struct shell_io {
|
||||
void (*io_init)(struct shell *);
|
||||
void (*io_deinit)(struct shell *);
|
||||
void (*io_puts)(struct shell *, const char *);
|
||||
char (*io_getc)(struct shell *);
|
||||
void (*io_special)(struct shell *, uint8_t);
|
||||
bool io_echo_on;
|
||||
};
|
||||
|
||||
#define SHELL_CMD_MAX_LEN 100U
|
||||
#define SHELL_NAME_MAX_LEN 50
|
||||
@ -30,7 +21,6 @@ struct shell_io {
|
||||
/* Shell Control Block */
|
||||
struct shell_cmd;
|
||||
struct shell {
|
||||
struct shell_io session_io; /* Session I/O information */
|
||||
char input_line[2][SHELL_CMD_MAX_LEN + 1U]; /* current & last */
|
||||
char name[SHELL_NAME_MAX_LEN]; /* Session name */
|
||||
uint32_t input_line_len; /* Length of current input line */
|
||||
@ -40,7 +30,7 @@ struct shell {
|
||||
};
|
||||
|
||||
/* Shell Command Function */
|
||||
typedef int (*shell_cmd_fn_t)(struct shell *, int, char **);
|
||||
typedef int (*shell_cmd_fn_t)(int, char **);
|
||||
|
||||
/* Shell Command */
|
||||
struct shell_cmd {
|
||||
@ -137,36 +127,28 @@ struct shell_cmd {
|
||||
#define SHELL_CMD_TRIGGER_CRASH_HELP "trigger crash"
|
||||
|
||||
/* Global function prototypes */
|
||||
int shell_show_req_info(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_cmd_help(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_list_vm(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_list_vcpu(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_pause_vcpu(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_resume_vcpu(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_vcpu_dumpreg(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_vcpu_dumpmem(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_to_sos_console(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_cpu_int(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_ptdev_info(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_reboot(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_vioapic_info(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_ioapic_info(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_vmexit_profile(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_dump_logbuf(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_get_loglevel(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_set_loglevel(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_cpuid(struct shell *p_shell, int argc, char **argv);
|
||||
struct shell_cmd *shell_find_cmd(struct shell *p_shell, const char *cmd);
|
||||
int shell_process_cmd(struct shell *p_shell, char *p_input_line);
|
||||
void shell_terminate_serial(struct shell *p_shell);
|
||||
void shell_init_serial(struct shell *p_shell);
|
||||
void shell_puts_serial(struct shell *p_shell, const char *string_ptr);
|
||||
char shell_getc_serial(struct shell *p_shell);
|
||||
void shell_special_serial(struct shell *p_shell, uint8_t ch);
|
||||
void kick_shell(struct shell *p_shell);
|
||||
|
||||
void shell_puts(struct shell *p_shell, const char *str_ptr);
|
||||
void shell_set_name(struct shell *p_shell, const char *name);
|
||||
int shell_trigger_crash(struct shell *p_shell, int argc, char **argv);
|
||||
int shell_show_req_info(int argc, char **argv);
|
||||
int shell_cmd_help(int argc, char **argv);
|
||||
int shell_list_vm(int argc, char **argv);
|
||||
int shell_list_vcpu(int argc, char **argv);
|
||||
int shell_pause_vcpu(int argc, char **argv);
|
||||
int shell_resume_vcpu(int argc, char **argv);
|
||||
int shell_vcpu_dumpreg(int argc, char **argv);
|
||||
int shell_vcpu_dumpmem(int argc, char **argv);
|
||||
int shell_to_sos_console(int argc, char **argv);
|
||||
int shell_show_cpu_int(int argc, char **argv);
|
||||
int shell_show_ptdev_info(int argc, char **argv);
|
||||
int shell_reboot(int argc, char **argv);
|
||||
int shell_show_vioapic_info(int argc, char **argv);
|
||||
int shell_show_ioapic_info(int argc, char **argv);
|
||||
int shell_show_vmexit_profile(int argc, char **argv);
|
||||
int shell_dump_logbuf(int argc, char **argv);
|
||||
int shell_get_loglevel(int argc, char **argv);
|
||||
int shell_set_loglevel(int argc, char **argv);
|
||||
int shell_cpuid(int argc, char **argv);
|
||||
struct shell_cmd *shell_find_cmd(const char *cmd);
|
||||
int shell_process_cmd(char *p_input_line);
|
||||
void shell_puts(const char *str_ptr);
|
||||
int shell_trigger_crash(int argc, char **argv);
|
||||
|
||||
#endif /* SHELL_INTER_H */
|
||||
|
@ -1,197 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <hypervisor.h>
|
||||
#include "shell_internal.h"
|
||||
|
||||
/* Shell that uses serial I/O */
|
||||
static struct shell serial_session;
|
||||
|
||||
static struct shell_cmd acrn_cmd[] = {
|
||||
{
|
||||
.str = SHELL_CMD_HELP,
|
||||
.cmd_param = SHELL_CMD_HELP_PARAM,
|
||||
.help_str = SHELL_CMD_HELP_HELP,
|
||||
.fcn = shell_cmd_help,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VM_LIST,
|
||||
.cmd_param = SHELL_CMD_VM_LIST_PARAM,
|
||||
.help_str = SHELL_CMD_VM_LIST_HELP,
|
||||
.fcn = shell_list_vm,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VCPU_LIST,
|
||||
.cmd_param = SHELL_CMD_VCPU_LIST_PARAM,
|
||||
.help_str = SHELL_CMD_VCPU_LIST_HELP,
|
||||
.fcn = shell_list_vcpu,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VCPU_PAUSE,
|
||||
.cmd_param = SHELL_CMD_VCPU_PAUSE_PARAM,
|
||||
.help_str = SHELL_CMD_VCPU_PAUSE_HELP,
|
||||
.fcn = shell_pause_vcpu,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VCPU_RESUME,
|
||||
.cmd_param = SHELL_CMD_VCPU_RESUME_PARAM,
|
||||
.help_str = SHELL_CMD_VCPU_RESUME_HELP,
|
||||
.fcn = shell_resume_vcpu,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VCPU_DUMPREG,
|
||||
.cmd_param = SHELL_CMD_VCPU_DUMPREG_PARAM,
|
||||
.help_str = SHELL_CMD_VCPU_DUMPREG_HELP,
|
||||
.fcn = shell_vcpu_dumpreg,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VCPU_DUMPMEM,
|
||||
.cmd_param = SHELL_CMD_VCPU_DUMPMEM_PARAM,
|
||||
.help_str = SHELL_CMD_VCPU_DUMPMEM_HELP,
|
||||
.fcn = shell_vcpu_dumpmem,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VM_CONSOLE,
|
||||
.cmd_param = SHELL_CMD_VM_CONSOLE_PARAM,
|
||||
.help_str = SHELL_CMD_VM_CONSOLE_HELP,
|
||||
.fcn = shell_to_sos_console,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_INTERRUPT,
|
||||
.cmd_param = SHELL_CMD_INTERRUPT_PARAM,
|
||||
.help_str = SHELL_CMD_INTERRUPT_HELP,
|
||||
.fcn = shell_show_cpu_int,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_PTDEV,
|
||||
.cmd_param = SHELL_CMD_PTDEV_PARAM,
|
||||
.help_str = SHELL_CMD_PTDEV_HELP,
|
||||
.fcn = shell_show_ptdev_info,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_REQ,
|
||||
.cmd_param = SHELL_CMD_REQ_PARAM,
|
||||
.help_str = SHELL_CMD_REQ_HELP,
|
||||
.fcn = shell_show_req_info,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VIOAPIC,
|
||||
.cmd_param = SHELL_CMD_VIOAPIC_PARAM,
|
||||
.help_str = SHELL_CMD_VIOAPIC_HELP,
|
||||
.fcn = shell_show_vioapic_info,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_IOAPIC,
|
||||
.cmd_param = SHELL_CMD_IOAPIC_PARAM,
|
||||
.help_str = SHELL_CMD_IOAPIC_HELP,
|
||||
.fcn = shell_show_ioapic_info,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_VMEXIT,
|
||||
.cmd_param = SHELL_CMD_VMEXIT_PARAM,
|
||||
.help_str = SHELL_CMD_VMEXIT_HELP,
|
||||
.fcn = shell_show_vmexit_profile,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_LOGDUMP,
|
||||
.cmd_param = SHELL_CMD_LOGDUMP_PARAM,
|
||||
.help_str = SHELL_CMD_LOGDUMP_HELP,
|
||||
.fcn = shell_dump_logbuf,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_GET_LOG_LVL,
|
||||
.cmd_param = SHELL_CMD_GET_LOG_LVL_PARAM,
|
||||
.help_str = SHELL_CMD_GET_LOG_LVL_HELP,
|
||||
.fcn = shell_get_loglevel,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_SET_LOG_LVL,
|
||||
.cmd_param = SHELL_CMD_SET_LOG_LVL_PARAM,
|
||||
.help_str = SHELL_CMD_SET_LOG_LVL_HELP,
|
||||
.fcn = shell_set_loglevel,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_CPUID,
|
||||
.cmd_param = SHELL_CMD_CPUID_PARAM,
|
||||
.help_str = SHELL_CMD_CPUID_HELP,
|
||||
.fcn = shell_cpuid,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_REBOOT,
|
||||
.cmd_param = SHELL_CMD_REBOOT_PARAM,
|
||||
.help_str = SHELL_CMD_REBOOT_HELP,
|
||||
.fcn = shell_reboot,
|
||||
},
|
||||
{
|
||||
.str = SHELL_CMD_TRIGGER_CRASH,
|
||||
.cmd_param = SHELL_CMD_TRIGGER_CRASH_PARAM,
|
||||
.help_str = SHELL_CMD_TRIGGER_CRASH_HELP,
|
||||
.fcn = shell_trigger_crash,
|
||||
},
|
||||
};
|
||||
|
||||
void shell_init(void)
|
||||
{
|
||||
/* Set the function pointers for the shell i/p and o/p functions */
|
||||
serial_session.session_io.io_init = shell_init_serial;
|
||||
serial_session.session_io.io_deinit = shell_terminate_serial;
|
||||
serial_session.session_io.io_puts = shell_puts_serial;
|
||||
serial_session.session_io.io_getc = shell_getc_serial;
|
||||
serial_session.session_io.io_special = shell_special_serial;
|
||||
serial_session.session_io.io_echo_on = (bool)true;
|
||||
|
||||
serial_session.shell_cmd = acrn_cmd;
|
||||
serial_session.cmd_count = ARRAY_SIZE(acrn_cmd);
|
||||
/* Initialize the handler for the serial port that will be used
|
||||
* for shell i/p and o/p
|
||||
*/
|
||||
serial_session.session_io.io_init(&serial_session);
|
||||
}
|
||||
|
||||
/**
|
||||
* @pre p_shell != NULL
|
||||
* @pre p_shell->session_io.io_puts != NULL
|
||||
* @pre str_ptr != NULL
|
||||
*/
|
||||
void shell_puts(struct shell *p_shell, const char *str_ptr)
|
||||
{
|
||||
/* Transmit data using this shell session's 'puts' function */
|
||||
p_shell->session_io.io_puts(p_shell, str_ptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @pre p_shell != NULL
|
||||
* @pre name != NULL
|
||||
*/
|
||||
void shell_set_name(struct shell *p_shell, const char *name)
|
||||
{
|
||||
(void)strncpy_s((void *) p_shell->name, SHELL_NAME_MAX_LEN,
|
||||
(void *) name, SHELL_NAME_MAX_LEN - 1);
|
||||
/* Ensure null terminated string */
|
||||
p_shell->name[SHELL_NAME_MAX_LEN - 1] = 0;
|
||||
}
|
||||
|
||||
void shell_kick_session(void)
|
||||
{
|
||||
/* Kick the shell */
|
||||
kick_shell(&serial_session);
|
||||
}
|
||||
|
||||
int shell_switch_console(void)
|
||||
{
|
||||
struct vuart *vuart;
|
||||
|
||||
vuart = vuart_console_active();
|
||||
if (vuart == NULL) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vuart->active = false;
|
||||
/* Output that switching to ACRN shell */
|
||||
shell_puts(&serial_session,
|
||||
"\r\n\r\n----- Entering ACRN Shell -----\r\n");
|
||||
return 0;
|
||||
}
|
@ -330,7 +330,8 @@ void vuart_console_rx_chars(struct vuart *vu)
|
||||
|
||||
if (ch == GUEST_CONSOLE_TO_HV_SWITCH_KEY) {
|
||||
/* Switch the console */
|
||||
shell_switch_console();
|
||||
vu->active = false;
|
||||
printf("\r\n\r\n ---Entering ACRN SHELL---\r\n");
|
||||
}
|
||||
if (ch != -1) {
|
||||
fifo_putchar(&vu->rxfifo, ch);
|
||||
|
@ -12,12 +12,10 @@
|
||||
|
||||
#ifdef HV_DEBUG
|
||||
void shell_init(void);
|
||||
void shell_kick_session(void);
|
||||
int shell_switch_console(void);
|
||||
void shell_kick(void);
|
||||
#else
|
||||
static inline void shell_init(void) {}
|
||||
static inline void shell_kick_session(void) {}
|
||||
static inline int shell_switch_console(void) { return 0; }
|
||||
static inline void shell_kick(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* SHELL_H */
|
||||
|
Loading…
Reference in New Issue
Block a user