/* * @OSF_FREE_FREE_COPYRIGHT@ * */ /* * HISTORY * $Log: parent_osf1.c,v $ * Revision 1.1.2.1 1996/09/09 17:18:46 barbou * Created. * [1996/08/30 17:06:11 barbou] * * $EndLog$ */ #include <mach/exception.h> #include <osfmach3/mach3_debug.h> #include <osfmach3/parent_server.h> #include <linux/unistd.h> #include <linux/signal.h> #include <linux/kernel.h> extern int errno; extern int parent_osf1_sigaction(int, struct sigaction *, struct sigaction *); void parent_osf1_sig_handler( int sig) { printk("** SERVER RECEIVED SIGNAL %d. Calling Debugger...\n", sig); Debugger("signal"); } void parent_osf1_catchall_signals(void) { struct sigaction sa; int sig; sa.sa_handler = parent_osf1_sig_handler; sa.sa_mask = 0; sa.sa_flags = 0; for (sig = 1; sig < NSIG; sig++) { (void) parent_osf1_sigaction(sig, &sa, (struct sigaction *) 0); } } typedef unsigned int tcflag_t; typedef unsigned char cc_t; typedef unsigned int speed_t; #define NCCS 20 struct termios { tcflag_t c_iflag; /* input flags */ tcflag_t c_oflag; /* output flags */ tcflag_t c_cflag; /* control flags */ tcflag_t c_lflag; /* local flags */ cc_t c_cc[NCCS]; /* control chars */ speed_t c_ispeed; /* input speed */ speed_t c_ospeed; /* output speed */ }; #define IGNBRK 0x00000001 /* ignore BREAK condition */ #define CS8 0x00000300 /* 8 bits */ #define CREAD 0x00000800 /* enable receiver */ #define PARENB 0x00001000 /* parity enable */ #define VMIN 16 /* !ICANON */ #define VTIME 17 /* !ICANON */ #define IOCPARM_MASK 0x1fffU /* parameter length, at most 13 bits */ #define IOC_IN 0x80000000U /* copy in parameters */ #define IOC_OUT 0x40000000 /* copy out parameters */ #define _IOC(inout,group,num,len) \ (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) #define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), (unsigned int)sizeof(t)) #define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), (unsigned int)sizeof(t)) #define TIOCGETA _IOR('t', 19, struct termios) /* get termios struct */ #define TIOCSETAF _IOW('t', 22, struct termios) /* drn out, fls in, set */ struct termios parent_osf1_console_termios; int parent_osf1_grab_console(void) { struct termios termios; if (parent_server_ioctl(0, TIOCGETA, (char *) &parent_osf1_console_termios) < 0) { printk("parent_osf1_grab_console: ioctl(GETA) -> %d\n", parent_server_errno); } termios = parent_osf1_console_termios; termios.c_iflag = IGNBRK; termios.c_oflag = 0; termios.c_cflag = CS8|CREAD|PARENB; termios.c_lflag = 0; termios.c_cc[VMIN] = 1; termios.c_cc[VTIME] = 0; if (parent_server_ioctl(0, TIOCSETAF, (char *) &termios) < 0) { printk("parent_osf1_grab_console: ioctl(SETAF) -> %d\n", parent_server_errno); } return 0; } int parent_osf1_release_console(void) { if (parent_server_ioctl(0, TIOCSETAF, (char *) &parent_osf1_console_termios) < 0) { printk("parent_osf1_release_console: ioctl(SETAF) -> %d\n", parent_server_errno); } return 0; } exception_mask_t parent_osf1_syscall_exc_mask(void) { return EXC_MASK_SYSCALL; } int parent_osf1_get_mach_privilege(void) { return 0; }