128 |
128 |
int graphic_height = 600;
|
129 |
129 |
int graphic_depth = 15;
|
130 |
130 |
TextConsole *vga_console;
|
|
131 |
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
|
131 |
132 |
|
132 |
133 |
/***********************************************************/
|
133 |
134 |
/* x86 ISA bus support */
|
... | ... | |
1166 |
1167 |
stdio_received_byte(buf[i]);
|
1167 |
1168 |
}
|
1168 |
1169 |
|
|
1170 |
/* init terminal so that we can grab keys */
|
|
1171 |
static struct termios oldtty;
|
|
1172 |
static int old_fd0_flags;
|
|
1173 |
|
|
1174 |
static void term_exit(void)
|
|
1175 |
{
|
|
1176 |
tcsetattr (0, TCSANOW, &oldtty);
|
|
1177 |
fcntl(0, F_SETFL, old_fd0_flags);
|
|
1178 |
}
|
|
1179 |
|
|
1180 |
static void term_init(void)
|
|
1181 |
{
|
|
1182 |
struct termios tty;
|
|
1183 |
|
|
1184 |
tcgetattr (0, &tty);
|
|
1185 |
oldtty = tty;
|
|
1186 |
old_fd0_flags = fcntl(0, F_GETFL);
|
|
1187 |
|
|
1188 |
tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
|
1189 |
|INLCR|IGNCR|ICRNL|IXON);
|
|
1190 |
tty.c_oflag |= OPOST;
|
|
1191 |
tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
|
|
1192 |
/* if graphical mode, we allow Ctrl-C handling */
|
|
1193 |
if (nographic)
|
|
1194 |
tty.c_lflag &= ~ISIG;
|
|
1195 |
tty.c_cflag &= ~(CSIZE|PARENB);
|
|
1196 |
tty.c_cflag |= CS8;
|
|
1197 |
tty.c_cc[VMIN] = 1;
|
|
1198 |
tty.c_cc[VTIME] = 0;
|
|
1199 |
|
|
1200 |
tcsetattr (0, TCSANOW, &tty);
|
|
1201 |
|
|
1202 |
atexit(term_exit);
|
|
1203 |
|
|
1204 |
fcntl(0, F_SETFL, O_NONBLOCK);
|
|
1205 |
}
|
|
1206 |
|
1169 |
1207 |
CharDriverState *qemu_chr_open_stdio(void)
|
1170 |
1208 |
{
|
1171 |
1209 |
CharDriverState *chr;
|
... | ... | |
1183 |
1221 |
chr = qemu_chr_open_fd(0, 1);
|
1184 |
1222 |
}
|
1185 |
1223 |
stdio_clients[stdio_nb_clients++] = chr;
|
|
1224 |
if (stdio_nb_clients == 1) {
|
|
1225 |
/* set the terminal in raw mode */
|
|
1226 |
term_init();
|
|
1227 |
}
|
1186 |
1228 |
return chr;
|
1187 |
1229 |
}
|
1188 |
1230 |
|
... | ... | |
1449 |
1491 |
/***********************************************************/
|
1450 |
1492 |
/* dumb display */
|
1451 |
1493 |
|
1452 |
|
#ifdef _WIN32
|
1453 |
|
|
1454 |
|
static void term_exit(void)
|
1455 |
|
{
|
1456 |
|
}
|
1457 |
|
|
1458 |
|
static void term_init(void)
|
1459 |
|
{
|
1460 |
|
}
|
1461 |
|
|
1462 |
|
#else
|
1463 |
|
|
1464 |
|
/* init terminal so that we can grab keys */
|
1465 |
|
static struct termios oldtty;
|
1466 |
|
static int old_fd0_flags;
|
1467 |
|
|
1468 |
|
static void term_exit(void)
|
1469 |
|
{
|
1470 |
|
tcsetattr (0, TCSANOW, &oldtty);
|
1471 |
|
fcntl(0, F_SETFL, old_fd0_flags);
|
1472 |
|
}
|
1473 |
|
|
1474 |
|
static void term_init(void)
|
1475 |
|
{
|
1476 |
|
struct termios tty;
|
1477 |
|
|
1478 |
|
tcgetattr (0, &tty);
|
1479 |
|
oldtty = tty;
|
1480 |
|
old_fd0_flags = fcntl(0, F_GETFL);
|
1481 |
|
|
1482 |
|
tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
1483 |
|
|INLCR|IGNCR|ICRNL|IXON);
|
1484 |
|
tty.c_oflag |= OPOST;
|
1485 |
|
tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
|
1486 |
|
/* if graphical mode, we allow Ctrl-C handling */
|
1487 |
|
if (nographic)
|
1488 |
|
tty.c_lflag &= ~ISIG;
|
1489 |
|
tty.c_cflag &= ~(CSIZE|PARENB);
|
1490 |
|
tty.c_cflag |= CS8;
|
1491 |
|
tty.c_cc[VMIN] = 1;
|
1492 |
|
tty.c_cc[VTIME] = 0;
|
1493 |
|
|
1494 |
|
tcsetattr (0, TCSANOW, &tty);
|
1495 |
|
|
1496 |
|
atexit(term_exit);
|
1497 |
|
|
1498 |
|
fcntl(0, F_SETFL, O_NONBLOCK);
|
1499 |
|
}
|
1500 |
|
|
1501 |
|
#endif
|
1502 |
|
|
1503 |
1494 |
static void dumb_update(DisplayState *ds, int x, int y, int w, int h)
|
1504 |
1495 |
{
|
1505 |
1496 |
}
|
... | ... | |
1531 |
1522 |
{
|
1532 |
1523 |
if (cpu_signal_handler(host_signum, info, puc))
|
1533 |
1524 |
return;
|
1534 |
|
term_exit();
|
|
1525 |
if (stdio_nb_clients > 0)
|
|
1526 |
term_exit();
|
1535 |
1527 |
abort();
|
1536 |
1528 |
}
|
1537 |
1529 |
#endif
|
... | ... | |
2568 |
2560 |
const char *r, *optarg;
|
2569 |
2561 |
CharDriverState *monitor_hd;
|
2570 |
2562 |
char monitor_device[128];
|
2571 |
|
char serial_device[128];
|
2572 |
|
|
|
2563 |
char serial_devices[MAX_SERIAL_PORTS][128];
|
|
2564 |
int serial_device_index;
|
|
2565 |
|
2573 |
2566 |
#if !defined(CONFIG_SOFTMMU)
|
2574 |
2567 |
/* we never want that malloc() uses mmap() */
|
2575 |
2568 |
mallopt(M_MMAP_THRESHOLD, 4096 * 1024);
|
... | ... | |
2594 |
2587 |
has_cdrom = 1;
|
2595 |
2588 |
cyls = heads = secs = 0;
|
2596 |
2589 |
pstrcpy(monitor_device, sizeof(monitor_device), "vc");
|
2597 |
|
pstrcpy(serial_device, sizeof(serial_device), "vc");
|
2598 |
2590 |
|
|
2591 |
pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "vc");
|
|
2592 |
for(i = 1; i < MAX_SERIAL_PORTS; i++)
|
|
2593 |
serial_devices[i][0] = '\0';
|
|
2594 |
serial_device_index = 0;
|
|
2595 |
|
2599 |
2596 |
nb_tun_fds = 0;
|
2600 |
2597 |
net_if_type = -1;
|
2601 |
2598 |
nb_nics = 1;
|
... | ... | |
2674 |
2671 |
break;
|
2675 |
2672 |
case QEMU_OPTION_nographic:
|
2676 |
2673 |
pstrcpy(monitor_device, sizeof(monitor_device), "stdio");
|
2677 |
|
pstrcpy(serial_device, sizeof(serial_device), "stdio");
|
|
2674 |
pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "stdio");
|
2678 |
2675 |
nographic = 1;
|
2679 |
2676 |
break;
|
2680 |
2677 |
case QEMU_OPTION_kernel:
|
... | ... | |
2865 |
2862 |
pstrcpy(monitor_device, sizeof(monitor_device), optarg);
|
2866 |
2863 |
break;
|
2867 |
2864 |
case QEMU_OPTION_serial:
|
2868 |
|
pstrcpy(serial_device, sizeof(serial_device), optarg);
|
|
2865 |
if (serial_device_index >= MAX_SERIAL_PORTS) {
|
|
2866 |
fprintf(stderr, "qemu: too many serial ports\n");
|
|
2867 |
exit(1);
|
|
2868 |
}
|
|
2869 |
pstrcpy(serial_devices[serial_device_index],
|
|
2870 |
sizeof(serial_devices[0]), optarg);
|
|
2871 |
serial_device_index++;
|
2869 |
2872 |
break;
|
2870 |
2873 |
}
|
2871 |
2874 |
}
|
... | ... | |
3066 |
3069 |
}
|
3067 |
3070 |
monitor_init(monitor_hd, !nographic);
|
3068 |
3071 |
|
3069 |
|
serial_hd = qemu_chr_open(serial_device);
|
3070 |
|
if (!serial_hd) {
|
3071 |
|
fprintf(stderr, "qemu: could not open serial device '%s'\n", serial_device);
|
3072 |
|
exit(1);
|
|
3072 |
for(i = 0; i < MAX_SERIAL_PORTS; i++) {
|
|
3073 |
if (serial_devices[i][0] != '\0') {
|
|
3074 |
serial_hds[i] = qemu_chr_open(serial_devices[i]);
|
|
3075 |
if (!serial_hds[i]) {
|
|
3076 |
fprintf(stderr, "qemu: could not open serial device '%s'\n",
|
|
3077 |
serial_devices[i]);
|
|
3078 |
exit(1);
|
|
3079 |
}
|
|
3080 |
if (!strcmp(serial_devices[i], "vc"))
|
|
3081 |
qemu_chr_printf(serial_hds[i], "serial%d console\n", i);
|
|
3082 |
}
|
3073 |
3083 |
}
|
3074 |
|
if (!strcmp(serial_device, "vc"))
|
3075 |
|
qemu_chr_printf(serial_hd, "serial0 console\n");
|
3076 |
|
|
3077 |
3084 |
|
3078 |
3085 |
/* setup cpu signal handlers for MMU / self modifying code handling */
|
3079 |
3086 |
#if !defined(CONFIG_SOFTMMU)
|
... | ... | |
3142 |
3149 |
} else {
|
3143 |
3150 |
printf("Waiting gdb connection on port %d\n", gdbstub_port);
|
3144 |
3151 |
}
|
3145 |
|
term_init();
|
3146 |
3152 |
} else
|
3147 |
3153 |
#endif
|
3148 |
3154 |
{
|
3149 |
|
term_init();
|
3150 |
3155 |
/* XXX: simplify init */
|
3151 |
3156 |
read_passwords();
|
3152 |
3157 |
if (start_emulation) {
|