1*dbddf429SAlex Dewar /* SPDX-License-Identifier: GPL-2.0 */ 2ece67c86SAl Viro /* 3ece67c86SAl Viro * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) 4ece67c86SAl Viro * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 5ece67c86SAl Viro */ 6ece67c86SAl Viro 7ece67c86SAl Viro #ifndef __MCONSOLE_H__ 8ece67c86SAl Viro #define __MCONSOLE_H__ 9ece67c86SAl Viro 10298e20baSRichard Weinberger #ifdef __UM_HOST__ 11ece67c86SAl Viro #include <stdint.h> 12ece67c86SAl Viro #define u32 uint32_t 13ece67c86SAl Viro #endif 14ece67c86SAl Viro 1537185b33SAl Viro #include <sysdep/ptrace.h> 16ece67c86SAl Viro 17ece67c86SAl Viro #define MCONSOLE_MAGIC (0xcafebabe) 18ece67c86SAl Viro #define MCONSOLE_MAX_DATA (512) 19ece67c86SAl Viro #define MCONSOLE_VERSION 2 20ece67c86SAl Viro 21ece67c86SAl Viro struct mconsole_request { 22ece67c86SAl Viro u32 magic; 23ece67c86SAl Viro u32 version; 24ece67c86SAl Viro u32 len; 25ece67c86SAl Viro char data[MCONSOLE_MAX_DATA]; 26ece67c86SAl Viro }; 27ece67c86SAl Viro 28ece67c86SAl Viro struct mconsole_reply { 29ece67c86SAl Viro u32 err; 30ece67c86SAl Viro u32 more; 31ece67c86SAl Viro u32 len; 32ece67c86SAl Viro char data[MCONSOLE_MAX_DATA]; 33ece67c86SAl Viro }; 34ece67c86SAl Viro 35ece67c86SAl Viro struct mconsole_notify { 36ece67c86SAl Viro u32 magic; 37ece67c86SAl Viro u32 version; 38ece67c86SAl Viro enum { MCONSOLE_SOCKET, MCONSOLE_PANIC, MCONSOLE_HANG, 39ece67c86SAl Viro MCONSOLE_USER_NOTIFY } type; 40ece67c86SAl Viro u32 len; 41ece67c86SAl Viro char data[MCONSOLE_MAX_DATA]; 42ece67c86SAl Viro }; 43ece67c86SAl Viro 44ece67c86SAl Viro struct mc_request; 45ece67c86SAl Viro 46ece67c86SAl Viro enum mc_context { MCONSOLE_INTR, MCONSOLE_PROC }; 47ece67c86SAl Viro 48ece67c86SAl Viro struct mconsole_command 49ece67c86SAl Viro { 50ece67c86SAl Viro char *command; 51ece67c86SAl Viro void (*handler)(struct mc_request *req); 52ece67c86SAl Viro enum mc_context context; 53ece67c86SAl Viro }; 54ece67c86SAl Viro 55ece67c86SAl Viro struct mc_request 56ece67c86SAl Viro { 57ece67c86SAl Viro int len; 58ece67c86SAl Viro int as_interrupt; 59ece67c86SAl Viro 60ece67c86SAl Viro int originating_fd; 61ece67c86SAl Viro unsigned int originlen; 62ece67c86SAl Viro unsigned char origin[128]; /* sockaddr_un */ 63ece67c86SAl Viro 64ece67c86SAl Viro struct mconsole_request request; 65ece67c86SAl Viro struct mconsole_command *cmd; 66ece67c86SAl Viro struct uml_pt_regs regs; 67ece67c86SAl Viro }; 68ece67c86SAl Viro 69ece67c86SAl Viro extern char mconsole_socket_name[]; 70ece67c86SAl Viro 71ece67c86SAl Viro extern int mconsole_unlink_socket(void); 72ece67c86SAl Viro extern int mconsole_reply_len(struct mc_request *req, const char *reply, 73ece67c86SAl Viro int len, int err, int more); 74ece67c86SAl Viro extern int mconsole_reply(struct mc_request *req, const char *str, int err, 75ece67c86SAl Viro int more); 76ece67c86SAl Viro 77ece67c86SAl Viro extern void mconsole_version(struct mc_request *req); 78ece67c86SAl Viro extern void mconsole_help(struct mc_request *req); 79ece67c86SAl Viro extern void mconsole_halt(struct mc_request *req); 80ece67c86SAl Viro extern void mconsole_reboot(struct mc_request *req); 81ece67c86SAl Viro extern void mconsole_config(struct mc_request *req); 82ece67c86SAl Viro extern void mconsole_remove(struct mc_request *req); 83ece67c86SAl Viro extern void mconsole_sysrq(struct mc_request *req); 84ece67c86SAl Viro extern void mconsole_cad(struct mc_request *req); 85ece67c86SAl Viro extern void mconsole_stop(struct mc_request *req); 86ece67c86SAl Viro extern void mconsole_go(struct mc_request *req); 87ece67c86SAl Viro extern void mconsole_log(struct mc_request *req); 88ece67c86SAl Viro extern void mconsole_proc(struct mc_request *req); 89ece67c86SAl Viro extern void mconsole_stack(struct mc_request *req); 90ece67c86SAl Viro 91ece67c86SAl Viro extern int mconsole_get_request(int fd, struct mc_request *req); 92ece67c86SAl Viro extern int mconsole_notify(char *sock_name, int type, const void *data, 93ece67c86SAl Viro int len); 94ece67c86SAl Viro extern char *mconsole_notify_socket(void); 95ece67c86SAl Viro extern void lock_notify(void); 96ece67c86SAl Viro extern void unlock_notify(void); 97ece67c86SAl Viro 98ece67c86SAl Viro #endif 99