⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 patch-qemu-port-e9.diff

📁 Simple Operating Systems (简称SOS)是一个可以运行在X86平台上(包括QEMU
💻 DIFF
字号:
Patch to enable the "port 0xe9" debugging facility in qemu (version0.7.2). This input/output port is used extensively in SOS to easedebugging (the sos_bochs_printf family of functions).  -- Thomas Petazzoni and Christophe Lucasdiff -urpNX /usr/kernel/dontdiff qemu-0.7.2/hw/pc.c qemu-0.7.2-clucas/hw/pc.c--- qemu-0.7.2/hw/pc.c	2005-09-04 19:11:31.000000000 +0200+++ qemu-0.7.2-clucas/hw/pc.c	2005-09-14 11:24:51.000000000 +0200@@ -620,6 +620,12 @@ static void pc_init1(int ram_size, int v      cmos_init(ram_size, boot_device, bs_table); +	for(i=0 ; i<MAX_PORT_E9_PORTS ; i++) {+		if (port_e9_hds[i]) {+			port_e9_init(port_e9_hds[i]);+		}+	}+     /* must be done after all PCI devices are instanciated */     /* XXX: should be done in the Bochs BIOS */     if (pci_enabled) {diff -urpNX /usr/kernel/dontdiff qemu-0.7.2/Makefile.target qemu-0.7.2-clucas/Makefile.target--- qemu-0.7.2/Makefile.target	2005-09-04 19:11:31.000000000 +0200+++ qemu-0.7.2-clucas/Makefile.target	2005-09-14 11:24:50.000000000 +0200@@ -286,7 +286,7 @@ endif ifeq ($(TARGET_BASE_ARCH), i386) # Hardware support VL_OBJS+= ide.o ne2000.o pckbd.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)-VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o+VL_OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o port_e9.o VL_OBJS+= cirrus_vga.o mixeng.o apic.o parallel.o endif ifeq ($(TARGET_BASE_ARCH), ppc)diff -urpNX /usr/kernel/dontdiff qemu-0.7.2/port_e9.c qemu-0.7.2-clucas/port_e9.c--- qemu-0.7.2/port_e9.c	1970-01-01 01:00:00.000000000 +0100+++ qemu-0.7.2-clucas/port_e9.c	2005-09-14 11:24:51.000000000 +0200@@ -0,0 +1,51 @@+/*+ * QEMU Port 0xe9 hack+ *+ * Copyright (c) 2000-2004 E. Marty, the bochs team, D.Decotigny+ *+ * Permission is hereby granted, free of charge, to any person obtaining a copy+ * of this software and associated documentation files (the "Software"), to deal+ * in the Software without restriction, including without limitation the rights+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+ * copies of the Software, and to permit persons to whom the Software is+ * furnished to do so, subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be included in+ * all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+ * THE SOFTWARE.+ */++#include <stdio.h>+#include <unistd.h>+#include <inttypes.h>++#include "vl.h"++static void port_e9_write(void *opaque, uint32_t address, uint32_t data)+{+	CharDriverState *chr;+	chr = opaque;++	qemu_chr_write(chr, & data, 1);+}++static uint32_t port_e9_read(void *opaque, uint32_t address)+{+	return 0xE9;+}++CharDriverState *port_e9_init (CharDriverState *chr)+{+	register_ioport_write(0xe9, 1, 1, port_e9_write, chr);+	register_ioport_read (0xe9, 1, 1, port_e9_read,  chr);++	return chr;+}+diff -urpNX /usr/kernel/dontdiff qemu-0.7.2/vl.c qemu-0.7.2-clucas/vl.c--- qemu-0.7.2/vl.c	2005-09-04 19:11:31.000000000 +0200+++ qemu-0.7.2-clucas/vl.c	2005-09-14 11:24:51.000000000 +0200@@ -146,6 +146,7 @@ int graphic_depth = 15; int full_screen = 0; TextConsole *vga_console; CharDriverState *serial_hds[MAX_SERIAL_PORTS];+CharDriverState *port_e9_hds[MAX_PORT_E9_PORTS]; CharDriverState *parallel_hds[MAX_PARALLEL_PORTS]; #ifdef TARGET_I386 int win2k_install_hack = 0;@@ -2969,6 +2970,7 @@ enum {     QEMU_OPTION_monitor,     QEMU_OPTION_serial,     QEMU_OPTION_parallel,+    QEMU_OPTION_port_e9,     QEMU_OPTION_loadvm,     QEMU_OPTION_full_screen,     QEMU_OPTION_pidfile,@@ -3040,6 +3042,7 @@ const QEMUOption qemu_options[] = {     { "monitor", 1, QEMU_OPTION_monitor },     { "serial", 1, QEMU_OPTION_serial },     { "parallel", 1, QEMU_OPTION_parallel },+    { "port-e9", 1, QEMU_OPTION_port_e9 },     { "loadvm", HAS_ARG, QEMU_OPTION_loadvm },     { "full-screen", 0, QEMU_OPTION_full_screen },     { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },@@ -3143,6 +3146,8 @@ int main(int argc, char **argv)     char monitor_device[128];     char serial_devices[MAX_SERIAL_PORTS][128];     int serial_device_index;+    char port_e9_devices[MAX_PORT_E9_PORTS][128];+    int port_e9_device_index;     char parallel_devices[MAX_PARALLEL_PORTS][128];     int parallel_device_index;     const char *loadvm = NULL;@@ -3184,12 +3189,17 @@ int main(int argc, char **argv)     for(i = 1; i < MAX_SERIAL_PORTS; i++)         serial_devices[i][0] = '\0';     serial_device_index = 0;-    +     pstrcpy(parallel_devices[0], sizeof(parallel_devices[0]), "vc");     for(i = 1; i < MAX_PARALLEL_PORTS; i++)         parallel_devices[i][0] = '\0';     parallel_device_index = 0;-    ++	pstrcpy(port_e9_devices[0], sizeof(port_e9_devices[0]), "vc");+	for(i = 1; i < MAX_PORT_E9_PORTS; i++)+		port_e9_devices[i][0] = '\0';+	port_e9_device_index = 0;+     nb_tun_fds = 0;     net_if_type = -1;     nb_nics = 1;@@ -3526,6 +3536,15 @@ int main(int argc, char **argv)                         sizeof(parallel_devices[0]), optarg);                 parallel_device_index++;                 break;+			case QEMU_OPTION_port_e9:+				if (port_e9_device_index >= MAX_PORT_E9_PORTS) {+					fprintf(stderr, "qemu: too many port e9 ports\n");+					exit(1);+				}+				pstrcpy(port_e9_devices[port_e9_device_index],+							sizeof(port_e9_devices[0]), optarg);+				port_e9_device_index++;+				break; 	    case QEMU_OPTION_loadvm: 		loadvm = optarg; 		break;@@ -3771,6 +3790,19 @@ int main(int argc, char **argv)         }     } +	for (i=0 ; i<MAX_PORT_E9_PORTS ; i++) {+		if (port_e9_devices[i][0] != '\0') {+			port_e9_hds[i] = qemu_chr_open(port_e9_devices[i]);+			if (!port_e9_hds[i]) {+				fprintf(stderr, "qemu: could not open port e9 device '%s'\n", +												port_e9_devices[i]);+				exit(1);+			}+			if (!strcmp(port_e9_devices[i], "vc"))+				qemu_chr_printf(port_e9_hds[i], "port_e9_%d console\n", i);+		}+	}+     /* setup cpu signal handlers for MMU / self modifying code handling */ #if !defined(CONFIG_SOFTMMU)     diff -urpNX /usr/kernel/dontdiff qemu-0.7.2/vl.h qemu-0.7.2-clucas/vl.h--- qemu-0.7.2/vl.h	2005-09-04 19:11:31.000000000 +0200+++ qemu-0.7.2-clucas/vl.h	2005-09-14 11:24:51.000000000 +0200@@ -242,6 +242,15 @@ extern CharDriverState *serial_hds[MAX_S  extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS]; +/* port E9 ports */+#define MAX_PORT_E9_PORTS 1++#if (MAX_PORT_E9_PORTS != 1)+ #error "No more than one port E9 is supported"+#endif++extern CharDriverState *port_e9_hds[MAX_PORT_E9_PORTS];+ /* network redirectors support */  #define MAX_NICS 8@@ -688,6 +697,9 @@ SerialState *serial_init(int base, int i typedef struct ParallelState ParallelState; ParallelState *parallel_init(int base, int irq, CharDriverState *chr); +/* port-e9.c */+CharDriverState *port_e9_init(CharDriverState *chr);+ /* i8259.c */  typedef struct PicState2 PicState2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -