1 /**
2  * Copyright (C) 2018-2022 Intel Corporation.
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef _ACRNCTL_H_
7 #define _ACRNCTL_H_
8 
9 #include <sys/queue.h>
10 #include "acrn_mngr.h"
11 
12 enum vm_state {
13 	VM_STATE_UNKNOWN = 0,
14 	VM_CREATED,		/* VM created / awaiting start (boot) */
15 	VM_STARTED,		/* VM started (booted) */
16 	VM_PAUSED,		/* VM paused */
17 	VM_SUSPENDED,		/* VM suspended */
18 	VM_UNTRACKED,		/* VM not created by acrnctl, or its launch script can change vm name */
19 };
20 
21 extern const char *state_str[];
22 
23 /**
24  * @brief search vm indentified by vm from vmmngr_head
25  *
26  * @return vmmngr_struct * if find, NULL not find
27  */
28 struct vmmngr_struct *vmmngr_find(const char *vmname);
29 
30 /* Per-vm vm managerment struct */
31 struct vmmngr_struct {
32 	char name[MAX_VM_NAME_LEN];
33 	unsigned long state;
34 	unsigned long state_tmp;
35 	unsigned long update;   /* update count, remove a vm if no update for it */
36 	LIST_ENTRY(vmmngr_struct) list;
37 };
38 
39 int shell_cmd(const char *cmd, char *outbuf, int len);
40 
41 /* update names and states of VMs in Service VM
42  * before you stop, start, pause, resume, suspend continue a VM
43  * use a name, it is better to run vmmngr_update() first
44  * and use vmngr_find() to check is this VM is still available
45  */
46 void vmmngr_update(void);
47 
48 struct vmmngr_list_struct {
49 	struct vmmngr_struct *lh_first;
50 };
51 extern struct vmmngr_list_struct vmmngr_head;
52 
53 /* vm life cycle ops */
54 int list_vm(void);
55 int stop_vm(const char *vmname, int force);
56 int start_vm(const char *vmname);
57 int pause_vm(const char *vmname);
58 int continue_vm(const char *vmname);
59 int resume_vm(const char *vmname, unsigned reason);
60 int blkrescan_vm(const char *vmname, char *devargs);
61 
62 #endif				/* _ACRNCTL_H_ */
63