mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-08 00:24:59 +00:00
ppc: remove video.x
Only Mac-on-Linux stuff used video.x, OpenBIOS does not need it. Remove video.x MoL hacks. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
f3f5b86725
commit
ae0bfb79aa
3
Makefile
3
Makefile
@ -176,7 +176,7 @@ common de-ch es fo fr-ca hu ja mk nl-be pt sl tr
|
|||||||
|
|
||||||
ifdef INSTALL_BLOBS
|
ifdef INSTALL_BLOBS
|
||||||
BLOBS=bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
|
BLOBS=bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
|
||||||
video.x openbios-sparc32 openbios-sparc64 openbios-ppc \
|
openbios-sparc32 openbios-sparc64 openbios-ppc \
|
||||||
gpxe-eepro100-80861209.rom \
|
gpxe-eepro100-80861209.rom \
|
||||||
gpxe-eepro100-80861229.rom \
|
gpxe-eepro100-80861229.rom \
|
||||||
pxe-e1000.bin \
|
pxe-e1000.bin \
|
||||||
@ -323,7 +323,6 @@ tarbin:
|
|||||||
$(datadir)/vgabios.bin \
|
$(datadir)/vgabios.bin \
|
||||||
$(datadir)/vgabios-cirrus.bin \
|
$(datadir)/vgabios-cirrus.bin \
|
||||||
$(datadir)/ppc_rom.bin \
|
$(datadir)/ppc_rom.bin \
|
||||||
$(datadir)/video.x \
|
|
||||||
$(datadir)/openbios-sparc32 \
|
$(datadir)/openbios-sparc32 \
|
||||||
$(datadir)/openbios-sparc64 \
|
$(datadir)/openbios-sparc64 \
|
||||||
$(datadir)/openbios-ppc \
|
$(datadir)/openbios-ppc \
|
||||||
|
2
configure
vendored
2
configure
vendored
@ -3084,7 +3084,7 @@ if test "$source_path_used" = "yes" ; then
|
|||||||
FILES="Makefile tests/Makefile"
|
FILES="Makefile tests/Makefile"
|
||||||
FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
|
FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
|
||||||
FILES="$FILES tests/test-mmap.c"
|
FILES="$FILES tests/test-mmap.c"
|
||||||
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps pc-bios/video.x"
|
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
|
||||||
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
|
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
|
||||||
for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do
|
for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do
|
||||||
FILES="$FILES pc-bios/`basename $bios_file`"
|
FILES="$FILES pc-bios/`basename $bios_file`"
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
|
|
||||||
#define BIOS_SIZE (1024 * 1024)
|
#define BIOS_SIZE (1024 * 1024)
|
||||||
#define BIOS_FILENAME "ppc_rom.bin"
|
#define BIOS_FILENAME "ppc_rom.bin"
|
||||||
#define VGABIOS_FILENAME "video.x"
|
|
||||||
#define NVRAM_SIZE 0x2000
|
#define NVRAM_SIZE 0x2000
|
||||||
#define PROM_FILENAME "openbios-ppc"
|
#define PROM_FILENAME "openbios-ppc"
|
||||||
#define PROM_ADDR 0xfff00000
|
#define PROM_ADDR 0xfff00000
|
||||||
|
@ -69,7 +69,6 @@
|
|||||||
#include "blockdev.h"
|
#include "blockdev.h"
|
||||||
|
|
||||||
#define MAX_IDE_BUS 2
|
#define MAX_IDE_BUS 2
|
||||||
#define VGA_BIOS_SIZE 65536
|
|
||||||
#define CFG_ADDR 0xf0000510
|
#define CFG_ADDR 0xf0000510
|
||||||
|
|
||||||
/* debug UniNorth */
|
/* debug UniNorth */
|
||||||
@ -134,20 +133,19 @@ static void ppc_core99_init (ram_addr_t ram_size,
|
|||||||
qemu_irq *pic, **openpic_irqs;
|
qemu_irq *pic, **openpic_irqs;
|
||||||
int unin_memory;
|
int unin_memory;
|
||||||
int linux_boot, i;
|
int linux_boot, i;
|
||||||
ram_addr_t ram_offset, bios_offset, vga_bios_offset;
|
ram_addr_t ram_offset, bios_offset;
|
||||||
uint32_t kernel_base, initrd_base;
|
uint32_t kernel_base, initrd_base;
|
||||||
long kernel_size, initrd_size;
|
long kernel_size, initrd_size;
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
MacIONVRAMState *nvr;
|
MacIONVRAMState *nvr;
|
||||||
int nvram_mem_index;
|
int nvram_mem_index;
|
||||||
int vga_bios_size, bios_size;
|
int bios_size;
|
||||||
int pic_mem_index, dbdma_mem_index, cuda_mem_index, escc_mem_index;
|
int pic_mem_index, dbdma_mem_index, cuda_mem_index, escc_mem_index;
|
||||||
int ide_mem_index[3];
|
int ide_mem_index[3];
|
||||||
int ppc_boot_device;
|
int ppc_boot_device;
|
||||||
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
||||||
void *fw_cfg;
|
void *fw_cfg;
|
||||||
void *dbdma;
|
void *dbdma;
|
||||||
uint8_t *vga_bios_ptr;
|
|
||||||
int machine_arch;
|
int machine_arch;
|
||||||
|
|
||||||
linux_boot = (kernel_filename != NULL);
|
linux_boot = (kernel_filename != NULL);
|
||||||
@ -167,9 +165,6 @@ static void ppc_core99_init (ram_addr_t ram_size,
|
|||||||
}
|
}
|
||||||
/* Set time-base frequency to 100 Mhz */
|
/* Set time-base frequency to 100 Mhz */
|
||||||
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
cpu_ppc_tb_init(env, 100UL * 1000UL * 1000UL);
|
||||||
#if 0
|
|
||||||
env->osi_call = vga_osi_call;
|
|
||||||
#endif
|
|
||||||
qemu_register_reset((QEMUResetHandler*)&cpu_reset, env);
|
qemu_register_reset((QEMUResetHandler*)&cpu_reset, env);
|
||||||
envs[i] = env;
|
envs[i] = env;
|
||||||
}
|
}
|
||||||
@ -199,36 +194,6 @@ static void ppc_core99_init (ram_addr_t ram_size,
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate and load VGA BIOS */
|
|
||||||
vga_bios_offset = qemu_ram_alloc(NULL, "ppc_core99.vbios", VGA_BIOS_SIZE);
|
|
||||||
vga_bios_ptr = qemu_get_ram_ptr(vga_bios_offset);
|
|
||||||
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, VGABIOS_FILENAME);
|
|
||||||
if (filename) {
|
|
||||||
vga_bios_size = load_image(filename, vga_bios_ptr + 8);
|
|
||||||
qemu_free(filename);
|
|
||||||
} else {
|
|
||||||
vga_bios_size = -1;
|
|
||||||
}
|
|
||||||
if (vga_bios_size < 0) {
|
|
||||||
/* if no bios is present, we can still work */
|
|
||||||
fprintf(stderr, "qemu: warning: could not load VGA bios '%s'\n",
|
|
||||||
VGABIOS_FILENAME);
|
|
||||||
vga_bios_size = 0;
|
|
||||||
} else {
|
|
||||||
/* set a specific header (XXX: find real Apple format for NDRV
|
|
||||||
drivers) */
|
|
||||||
vga_bios_ptr[0] = 'N';
|
|
||||||
vga_bios_ptr[1] = 'D';
|
|
||||||
vga_bios_ptr[2] = 'R';
|
|
||||||
vga_bios_ptr[3] = 'V';
|
|
||||||
cpu_to_be32w((uint32_t *)(vga_bios_ptr + 4), vga_bios_size);
|
|
||||||
vga_bios_size += 8;
|
|
||||||
|
|
||||||
/* Round to page boundary */
|
|
||||||
vga_bios_size = (vga_bios_size + TARGET_PAGE_SIZE - 1) &
|
|
||||||
TARGET_PAGE_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (linux_boot) {
|
if (linux_boot) {
|
||||||
uint64_t lowaddr = 0;
|
uint64_t lowaddr = 0;
|
||||||
int bswap_needed;
|
int bswap_needed;
|
||||||
@ -352,7 +317,7 @@ static void ppc_core99_init (ram_addr_t ram_size,
|
|||||||
machine_arch = ARCH_MAC99;
|
machine_arch = ARCH_MAC99;
|
||||||
}
|
}
|
||||||
/* init basic PC hardware */
|
/* init basic PC hardware */
|
||||||
pci_vga_init(pci_bus, vga_bios_offset, vga_bios_size);
|
pci_vga_init(pci_bus, 0, 0);
|
||||||
|
|
||||||
escc_mem_index = escc_init(0x80013000, pic[0x25], pic[0x24],
|
escc_mem_index = escc_init(0x80013000, pic[0x25], pic[0x24],
|
||||||
serial_hds[0], serial_hds[1], ESCC_CLOCK, 4);
|
serial_hds[0], serial_hds[1], ESCC_CLOCK, 4);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* QEMU OldWorld PowerMac (currently ~G3 Beige) hardware System Emulator
|
* QEMU OldWorld PowerMac (currently ~G3 Beige) hardware System Emulator
|
||||||
*
|
*
|
||||||
@ -44,79 +45,8 @@
|
|||||||
#include "blockdev.h"
|
#include "blockdev.h"
|
||||||
|
|
||||||
#define MAX_IDE_BUS 2
|
#define MAX_IDE_BUS 2
|
||||||
#define VGA_BIOS_SIZE 65536
|
|
||||||
#define CFG_ADDR 0xf0000510
|
#define CFG_ADDR 0xf0000510
|
||||||
|
|
||||||
/* temporary frame buffer OSI calls for the video.x driver. The right
|
|
||||||
solution is to modify the driver to use VGA PCI I/Os */
|
|
||||||
/* XXX: to be removed. This is no way related to emulation */
|
|
||||||
static int vga_osi_call (CPUState *env)
|
|
||||||
{
|
|
||||||
static int vga_vbl_enabled;
|
|
||||||
int linesize;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
printf("osi_call R5=%016" PRIx64 "\n", ppc_dump_gpr(env, 5));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* same handler as PearPC, coming from the original MOL video
|
|
||||||
driver. */
|
|
||||||
switch(env->gpr[5]) {
|
|
||||||
case 4:
|
|
||||||
break;
|
|
||||||
case 28: /* set_vmode */
|
|
||||||
if (env->gpr[6] != 1 || env->gpr[7] != 0)
|
|
||||||
env->gpr[3] = 1;
|
|
||||||
else
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
break;
|
|
||||||
case 29: /* get_vmode_info */
|
|
||||||
if (env->gpr[6] != 0) {
|
|
||||||
if (env->gpr[6] != 1 || env->gpr[7] != 0) {
|
|
||||||
env->gpr[3] = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
env->gpr[4] = (1 << 16) | 1; /* num_vmodes, cur_vmode */
|
|
||||||
env->gpr[5] = (1 << 16) | 0; /* num_depths, cur_depth_mode */
|
|
||||||
env->gpr[6] = (graphic_width << 16) | graphic_height; /* w, h */
|
|
||||||
env->gpr[7] = 85 << 16; /* refresh rate */
|
|
||||||
env->gpr[8] = (graphic_depth + 7) & ~7; /* depth (round to byte) */
|
|
||||||
linesize = ((graphic_depth + 7) >> 3) * graphic_width;
|
|
||||||
linesize = (linesize + 3) & ~3;
|
|
||||||
env->gpr[9] = (linesize << 16) | 0; /* row_bytes, offset */
|
|
||||||
break;
|
|
||||||
case 31: /* set_video power */
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
break;
|
|
||||||
case 39: /* video_ctrl */
|
|
||||||
if (env->gpr[6] == 0 || env->gpr[6] == 1)
|
|
||||||
vga_vbl_enabled = env->gpr[6];
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
break;
|
|
||||||
case 47:
|
|
||||||
break;
|
|
||||||
case 59: /* set_color */
|
|
||||||
/* R6 = index, R7 = RGB */
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
break;
|
|
||||||
case 64: /* get color */
|
|
||||||
/* R6 = index */
|
|
||||||
env->gpr[3] = 0;
|
|
||||||
break;
|
|
||||||
case 116: /* set hwcursor */
|
|
||||||
/* R6 = x, R7 = y, R8 = visible, R9 = data */
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "unsupported OSI call R5=%016" PRIx64 "\n",
|
|
||||||
ppc_dump_gpr(env, 5));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1; /* osi_call handled */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fw_cfg_boot_set(void *opaque, const char *boot_device)
|
static int fw_cfg_boot_set(void *opaque, const char *boot_device)
|
||||||
{
|
{
|
||||||
fw_cfg_add_i16(opaque, FW_CFG_BOOT_DEVICE, boot_device[0]);
|
fw_cfg_add_i16(opaque, FW_CFG_BOOT_DEVICE, boot_device[0]);
|
||||||
@ -140,19 +70,18 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
|
|||||||
char *filename;
|
char *filename;
|
||||||
qemu_irq *pic, **heathrow_irqs;
|
qemu_irq *pic, **heathrow_irqs;
|
||||||
int linux_boot, i;
|
int linux_boot, i;
|
||||||
ram_addr_t ram_offset, bios_offset, vga_bios_offset;
|
ram_addr_t ram_offset, bios_offset;
|
||||||
uint32_t kernel_base, initrd_base;
|
uint32_t kernel_base, initrd_base;
|
||||||
int32_t kernel_size, initrd_size;
|
int32_t kernel_size, initrd_size;
|
||||||
PCIBus *pci_bus;
|
PCIBus *pci_bus;
|
||||||
MacIONVRAMState *nvr;
|
MacIONVRAMState *nvr;
|
||||||
int vga_bios_size, bios_size;
|
int bios_size;
|
||||||
int pic_mem_index, nvram_mem_index, dbdma_mem_index, cuda_mem_index;
|
int pic_mem_index, nvram_mem_index, dbdma_mem_index, cuda_mem_index;
|
||||||
int escc_mem_index, ide_mem_index[2];
|
int escc_mem_index, ide_mem_index[2];
|
||||||
uint16_t ppc_boot_device;
|
uint16_t ppc_boot_device;
|
||||||
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
|
||||||
void *fw_cfg;
|
void *fw_cfg;
|
||||||
void *dbdma;
|
void *dbdma;
|
||||||
uint8_t *vga_bios_ptr;
|
|
||||||
|
|
||||||
linux_boot = (kernel_filename != NULL);
|
linux_boot = (kernel_filename != NULL);
|
||||||
|
|
||||||
@ -167,7 +96,6 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
|
|||||||
}
|
}
|
||||||
/* Set time-base frequency to 16.6 Mhz */
|
/* Set time-base frequency to 16.6 Mhz */
|
||||||
cpu_ppc_tb_init(env, 16600000UL);
|
cpu_ppc_tb_init(env, 16600000UL);
|
||||||
env->osi_call = vga_osi_call;
|
|
||||||
qemu_register_reset((QEMUResetHandler*)&cpu_reset, env);
|
qemu_register_reset((QEMUResetHandler*)&cpu_reset, env);
|
||||||
envs[i] = env;
|
envs[i] = env;
|
||||||
}
|
}
|
||||||
@ -203,36 +131,6 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate and load VGA BIOS */
|
|
||||||
vga_bios_offset = qemu_ram_alloc(NULL, "ppc_heathrow.vbios", VGA_BIOS_SIZE);
|
|
||||||
vga_bios_ptr = qemu_get_ram_ptr(vga_bios_offset);
|
|
||||||
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, VGABIOS_FILENAME);
|
|
||||||
if (filename) {
|
|
||||||
vga_bios_size = load_image(filename, vga_bios_ptr + 8);
|
|
||||||
qemu_free(filename);
|
|
||||||
} else {
|
|
||||||
vga_bios_size = -1;
|
|
||||||
}
|
|
||||||
if (vga_bios_size < 0) {
|
|
||||||
/* if no bios is present, we can still work */
|
|
||||||
fprintf(stderr, "qemu: warning: could not load VGA bios '%s'\n",
|
|
||||||
VGABIOS_FILENAME);
|
|
||||||
vga_bios_size = 0;
|
|
||||||
} else {
|
|
||||||
/* set a specific header (XXX: find real Apple format for NDRV
|
|
||||||
drivers) */
|
|
||||||
vga_bios_ptr[0] = 'N';
|
|
||||||
vga_bios_ptr[1] = 'D';
|
|
||||||
vga_bios_ptr[2] = 'R';
|
|
||||||
vga_bios_ptr[3] = 'V';
|
|
||||||
cpu_to_be32w((uint32_t *)(vga_bios_ptr + 4), vga_bios_size);
|
|
||||||
vga_bios_size += 8;
|
|
||||||
|
|
||||||
/* Round to page boundary */
|
|
||||||
vga_bios_size = (vga_bios_size + TARGET_PAGE_SIZE - 1) &
|
|
||||||
TARGET_PAGE_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (linux_boot) {
|
if (linux_boot) {
|
||||||
uint64_t lowaddr = 0;
|
uint64_t lowaddr = 0;
|
||||||
int bswap_needed;
|
int bswap_needed;
|
||||||
@ -330,7 +228,7 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
|
|||||||
}
|
}
|
||||||
pic = heathrow_pic_init(&pic_mem_index, 1, heathrow_irqs);
|
pic = heathrow_pic_init(&pic_mem_index, 1, heathrow_irqs);
|
||||||
pci_bus = pci_grackle_init(0xfec00000, pic);
|
pci_bus = pci_grackle_init(0xfec00000, pic);
|
||||||
pci_vga_init(pci_bus, vga_bios_offset, vga_bios_size);
|
pci_vga_init(pci_bus, 0, 0);
|
||||||
|
|
||||||
escc_mem_index = escc_init(0x80013000, pic[0x0f], pic[0x10], serial_hds[0],
|
escc_mem_index = escc_init(0x80013000, pic[0x0f], pic[0x10], serial_hds[0],
|
||||||
serial_hds[1], ESCC_CLOCK, 4);
|
serial_hds[1], ESCC_CLOCK, 4);
|
||||||
|
@ -7,10 +7,6 @@
|
|||||||
- The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is
|
- The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is
|
||||||
available at http://perso.magic.fr/l_indien/OpenHackWare/index.htm.
|
available at http://perso.magic.fr/l_indien/OpenHackWare/index.htm.
|
||||||
|
|
||||||
- video.x is a PowerMac NDRV compatible driver for a VGA frame
|
|
||||||
buffer. It comes from the Mac-on-Linux project
|
|
||||||
(http://www.maconlinux.org/).
|
|
||||||
|
|
||||||
- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable
|
- OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable
|
||||||
firmware implementation. The goal is to implement a 100% IEEE
|
firmware implementation. The goal is to implement a 100% IEEE
|
||||||
1275-1994 (referred to as Open Firmware) compliant firmware.
|
1275-1994 (referred to as Open Firmware) compliant firmware.
|
||||||
|
BIN
pc-bios/video.x
BIN
pc-bios/video.x
Binary file not shown.
@ -700,9 +700,6 @@ struct CPUPPCState {
|
|||||||
int power_mode;
|
int power_mode;
|
||||||
int (*check_pow)(CPUPPCState *env);
|
int (*check_pow)(CPUPPCState *env);
|
||||||
|
|
||||||
/* temporary hack to handle OSI calls (only used if non NULL) */
|
|
||||||
int (*osi_call)(struct CPUPPCState *env);
|
|
||||||
|
|
||||||
#if !defined(CONFIG_USER_ONLY)
|
#if !defined(CONFIG_USER_ONLY)
|
||||||
void *load_info; /* Holds boot loading state. */
|
void *load_info; /* Holds boot loading state. */
|
||||||
#endif
|
#endif
|
||||||
|
@ -2226,17 +2226,6 @@ static inline void powerpc_excp(CPUState *env, int excp_model, int excp)
|
|||||||
new_msr |= (target_ulong)MSR_HVB;
|
new_msr |= (target_ulong)MSR_HVB;
|
||||||
goto store_current;
|
goto store_current;
|
||||||
case POWERPC_EXCP_SYSCALL: /* System call exception */
|
case POWERPC_EXCP_SYSCALL: /* System call exception */
|
||||||
/* NOTE: this is a temporary hack to support graphics OSI
|
|
||||||
calls from the MOL driver */
|
|
||||||
/* XXX: To be removed */
|
|
||||||
if (env->gpr[3] == 0x113724fa && env->gpr[4] == 0x77810f9b &&
|
|
||||||
env->osi_call) {
|
|
||||||
if (env->osi_call(env) != 0) {
|
|
||||||
env->exception_index = POWERPC_EXCP_NONE;
|
|
||||||
env->error_code = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dump_syscall(env);
|
dump_syscall(env);
|
||||||
lev = env->error_code;
|
lev = env->error_code;
|
||||||
if (lev == 1 || (lpes0 == 0 && lpes1 == 0))
|
if (lev == 1 || (lpes0 == 0 && lpes1 == 0))
|
||||||
|
Loading…
Reference in New Issue
Block a user