summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/arch/i386/core
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/ipxe/src/arch/i386/core')
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/basemem_packet.c37
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/cachedhcp.c175
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/dumpregs.c23
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/gdbidt.S140
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/gdbmach.c184
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/linux/linux_syscall.S45
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/linux/linuxprefix.S28
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/nulltrap.c51
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/patch_cf.S42
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/pci_autoboot.c48
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/rdtsc_timer.c94
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/relocate.c138
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/runtime.c269
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/setjmp.S64
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/stack.S15
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/stack16.S15
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/video_subr.c113
-rw-r--r--qemu/roms/ipxe/src/arch/i386/core/virtaddr.S145
18 files changed, 0 insertions, 1626 deletions
diff --git a/qemu/roms/ipxe/src/arch/i386/core/basemem_packet.c b/qemu/roms/ipxe/src/arch/i386/core/basemem_packet.c
deleted file mode 100644
index 9f5fbf330..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/basemem_packet.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-/**
- * @file
- *
- * Packet buffer in base memory. Used by various components which
- * need to pass packets to and from external real-mode code.
- *
- */
-
-#include <basemem_packet.h>
-
-#undef basemem_packet
-char __bss16_array ( basemem_packet, [BASEMEM_PACKET_LEN] );
diff --git a/qemu/roms/ipxe/src/arch/i386/core/cachedhcp.c b/qemu/roms/ipxe/src/arch/i386/core/cachedhcp.c
deleted file mode 100644
index a5c624035..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/cachedhcp.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <ipxe/dhcppkt.h>
-#include <ipxe/init.h>
-#include <ipxe/netdevice.h>
-#include <realmode.h>
-#include <pxe_api.h>
-
-/** @file
- *
- * Cached DHCP packet
- *
- */
-
-/** Cached DHCPACK physical address
- *
- * This can be set by the prefix.
- */
-uint32_t __bss16 ( cached_dhcpack_phys );
-#define cached_dhcpack_phys __use_data16 ( cached_dhcpack_phys )
-
-/** Colour for debug messages */
-#define colour &cached_dhcpack_phys
-
-/** Cached DHCPACK */
-static struct dhcp_packet *cached_dhcpack;
-
-/**
- * Cached DHCPACK startup function
- *
- */
-static void cachedhcp_init ( void ) {
- struct dhcp_packet *dhcppkt;
- struct dhcp_packet *tmp;
- struct dhcphdr *dhcphdr;
- size_t len;
-
- /* Do nothing if no cached DHCPACK is present */
- if ( ! cached_dhcpack_phys ) {
- DBGC ( colour, "CACHEDHCP found no cached DHCPACK\n" );
- return;
- }
-
- /* No reliable way to determine length before parsing packet;
- * start by assuming maximum length permitted by PXE.
- */
- len = sizeof ( BOOTPLAYER_t );
-
- /* Allocate and populate DHCP packet */
- dhcppkt = zalloc ( sizeof ( *dhcppkt ) + len );
- if ( ! dhcppkt ) {
- DBGC ( colour, "CACHEDHCP could not allocate copy\n" );
- return;
- }
- dhcphdr = ( ( ( void * ) dhcppkt ) + sizeof ( *dhcppkt ) );
- copy_from_user ( dhcphdr, phys_to_user ( cached_dhcpack_phys ), 0,
- len );
- dhcppkt_init ( dhcppkt, dhcphdr, len );
-
- /* Resize packet to required length. If reallocation fails,
- * just continue to use the original packet.
- */
- len = dhcppkt_len ( dhcppkt );
- tmp = realloc ( dhcppkt, ( sizeof ( *dhcppkt ) + len ) );
- if ( tmp )
- dhcppkt = tmp;
-
- /* Reinitialise packet at new address */
- dhcphdr = ( ( ( void * ) dhcppkt ) + sizeof ( *dhcppkt ) );
- dhcppkt_init ( dhcppkt, dhcphdr, len );
-
- /* Store as cached DHCPACK, and mark original copy as consumed */
- DBGC ( colour, "CACHEDHCP found cached DHCPACK at %08x+%zx\n",
- cached_dhcpack_phys, len );
- cached_dhcpack = dhcppkt;
- cached_dhcpack_phys = 0;
-}
-
-/**
- * Cached DHCPACK startup function
- *
- */
-static void cachedhcp_startup ( void ) {
-
- /* If cached DHCP packet was not claimed by any network device
- * during startup, then free it.
- */
- if ( cached_dhcpack ) {
- DBGC ( colour, "CACHEDHCP freeing unclaimed cached DHCPACK\n" );
- dhcppkt_put ( cached_dhcpack );
- cached_dhcpack = NULL;
- }
-}
-
-/** Cached DHCPACK initialisation function */
-struct init_fn cachedhcp_init_fn __init_fn ( INIT_NORMAL ) = {
- .initialise = cachedhcp_init,
-};
-
-/** Cached DHCPACK startup function */
-struct startup_fn cachedhcp_startup_fn __startup_fn ( STARTUP_LATE ) = {
- .startup = cachedhcp_startup,
-};
-
-/**
- * Apply cached DHCPACK to network device, if applicable
- *
- * @v netdev Network device
- * @ret rc Return status code
- */
-static int cachedhcp_probe ( struct net_device *netdev ) {
- struct ll_protocol *ll_protocol = netdev->ll_protocol;
- int rc;
-
- /* Do nothing unless we have a cached DHCPACK */
- if ( ! cached_dhcpack )
- return 0;
-
- /* Do nothing unless cached DHCPACK's MAC address matches this
- * network device.
- */
- if ( memcmp ( netdev->ll_addr, cached_dhcpack->dhcphdr->chaddr,
- ll_protocol->ll_addr_len ) != 0 ) {
- DBGC ( colour, "CACHEDHCP cached DHCPACK does not match %s\n",
- netdev->name );
- return 0;
- }
- DBGC ( colour, "CACHEDHCP cached DHCPACK is for %s\n", netdev->name );
-
- /* Register as DHCP settings for this network device */
- if ( ( rc = register_settings ( &cached_dhcpack->settings,
- netdev_settings ( netdev ),
- DHCP_SETTINGS_NAME ) ) != 0 ) {
- DBGC ( colour, "CACHEDHCP could not register settings: %s\n",
- strerror ( rc ) );
- return rc;
- }
-
- /* Claim cached DHCPACK */
- dhcppkt_put ( cached_dhcpack );
- cached_dhcpack = NULL;
-
- return 0;
-}
-
-/** Cached DHCP packet network device driver */
-struct net_driver cachedhcp_driver __net_driver = {
- .name = "cachedhcp",
- .probe = cachedhcp_probe,
-};
diff --git a/qemu/roms/ipxe/src/arch/i386/core/dumpregs.c b/qemu/roms/ipxe/src/arch/i386/core/dumpregs.c
deleted file mode 100644
index 82dc21847..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/dumpregs.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <stdio.h>
-#include <realmode.h>
-
-void __asmcall _dump_regs ( struct i386_all_regs *ix86 ) {
-
- __asm__ __volatile__ (
- TEXT16_CODE ( ".globl dump_regs\n\t"
- "\ndump_regs:\n\t"
- "pushl $_dump_regs\n\t"
- "pushw %%cs\n\t"
- "call prot_call\n\t"
- "addr32 leal 4(%%esp), %%esp\n\t"
- "ret\n\t" ) : : );
-
- printf ( "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n"
- "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n"
- "CS=%04x SS=%04x DS=%04x ES=%04x FS=%04x GS=%04x\n",
- ix86->regs.eax, ix86->regs.ebx, ix86->regs.ecx,
- ix86->regs.edx, ix86->regs.esi, ix86->regs.edi,
- ix86->regs.ebp, ix86->regs.esp,
- ix86->segs.cs, ix86->segs.ss, ix86->segs.ds,
- ix86->segs.es, ix86->segs.fs, ix86->segs.gs );
-}
diff --git a/qemu/roms/ipxe/src/arch/i386/core/gdbidt.S b/qemu/roms/ipxe/src/arch/i386/core/gdbidt.S
deleted file mode 100644
index a1e309d7c..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/gdbidt.S
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Interrupt handlers for GDB stub
- */
-
-#define SIZEOF_I386_REGS 32
-#define SIZEOF_I386_FLAGS 4
-
-/****************************************************************************
- * Interrupt handlers
- ****************************************************************************
- */
- .section ".text", "ax", @progbits
- .code32
-
-/* POSIX signal numbers for reporting traps to GDB */
-#define SIGILL 4
-#define SIGTRAP 5
-#define SIGBUS 7
-#define SIGFPE 8
-#define SIGSEGV 11
-#define SIGSTKFLT 16
-
- .globl gdbmach_nocode_sigfpe
-gdbmach_nocode_sigfpe:
- pushl $SIGFPE
- jmp gdbmach_interrupt
-
- .globl gdbmach_nocode_sigtrap
-gdbmach_nocode_sigtrap:
- pushl $SIGTRAP
- jmp gdbmach_interrupt
-
- .globl gdbmach_nocode_sigstkflt
-gdbmach_nocode_sigstkflt:
- pushl $SIGSTKFLT
- jmp gdbmach_interrupt
-
- .globl gdbmach_nocode_sigill
-gdbmach_nocode_sigill:
- pushl $SIGILL
- jmp gdbmach_interrupt
-
- .globl gdbmach_withcode_sigbus
-gdbmach_withcode_sigbus:
- movl $SIGBUS, (%esp)
- jmp gdbmach_interrupt
-
- .globl gdbmach_withcode_sigsegv
-gdbmach_withcode_sigsegv:
- movl $SIGSEGV, (%esp)
- jmp gdbmach_interrupt
-
-/* When invoked, the stack contains: eflags, cs, eip, signo. */
-#define IH_OFFSET_GDB_REGS ( 0 )
-#define IH_OFFSET_GDB_EIP ( IH_OFFSET_GDB_REGS + SIZEOF_I386_REGS )
-#define IH_OFFSET_GDB_EFLAGS ( IH_OFFSET_GDB_EIP + 4 )
-#define IH_OFFSET_GDB_SEG_REGS ( IH_OFFSET_GDB_EFLAGS + SIZEOF_I386_FLAGS )
-#define IH_OFFSET_GDB_END ( IH_OFFSET_GDB_SEG_REGS + 6 * 4 )
-#define IH_OFFSET_SIGNO ( IH_OFFSET_GDB_END )
-#define IH_OFFSET_OLD_EIP ( IH_OFFSET_SIGNO + 4 )
-#define IH_OFFSET_OLD_CS ( IH_OFFSET_OLD_EIP + 4 )
-#define IH_OFFSET_OLD_EFLAGS ( IH_OFFSET_OLD_CS + 4 )
-#define IH_OFFSET_END ( IH_OFFSET_OLD_EFLAGS + 4 )
-
-/* We also access the stack whilst still storing or restoring
- * the register snapshot. Since ESP is in flux, we need
- * special offsets.
- */
-#define IH_OFFSET_FLUX_OLD_CS ( IH_OFFSET_OLD_CS - 44 )
-#define IH_OFFSET_FLUX_OLD_EFLAGS ( IH_OFFSET_OLD_EFLAGS - 40 )
-#define IH_OFFSET_FLUX_OLD_EIP ( IH_OFFSET_OLD_EIP - 36 )
-#define IH_OFFSET_FLUX_END ( IH_OFFSET_END - 20 )
-gdbmach_interrupt:
- /* Store CPU state in GDB register snapshot */
- pushw $0
- pushw %gs
- pushw $0
- pushw %fs
- pushw $0
- pushw %es
- pushw $0
- pushw %ds
- pushw $0
- pushw %ss
- pushw $0
- pushw IH_OFFSET_FLUX_OLD_CS + 2(%esp)
- pushl IH_OFFSET_FLUX_OLD_EFLAGS(%esp)
- pushl IH_OFFSET_FLUX_OLD_EIP(%esp)
- pushl %edi
- pushl %esi
- pushl %ebp
- leal IH_OFFSET_FLUX_END(%esp), %edi
- pushl %edi /* old ESP */
- pushl %ebx
- pushl %edx
- pushl %ecx
- pushl %eax
-
- /* Switch to virtual addressing */
- call _intr_to_virt
-
- /* Call GDB stub exception handler */
- pushl %esp
- pushl (IH_OFFSET_SIGNO + 4)(%esp)
- call gdbmach_handler
- addl $8, %esp
-
- /* Copy register snapshot to new stack and switch to new stack */
- movl %esp, %esi
- movl (IH_OFFSET_GDB_SEG_REGS + 4)(%esp), %eax
- movl %eax, %es
- movl (IH_OFFSET_GDB_REGS + 16)(%esp), %edi
- subl $IH_OFFSET_END, %edi
- movl $(IH_OFFSET_END / 4), %ecx
- pushl %edi
- ss rep movsl
- popl %edi
- movl %eax, %ss
- movl %edi, %esp
-
- /* Restore CPU state from GDB register snapshot */
- popl %eax
- popl %ecx
- popl %edx
- popl %ebx
- popl %ebp /* Skip %esp: already loaded */
- popl %ebp
- popl %esi
- popl %edi
- popl IH_OFFSET_FLUX_OLD_EIP(%esp)
- popl IH_OFFSET_FLUX_OLD_EFLAGS(%esp)
- popl IH_OFFSET_FLUX_OLD_CS(%esp)
- popl %ds /* Skip %ss: already loaded */
- popl %ds
- popl %es
- popl %fs
- popl %gs
-
- addl $4, %esp /* drop signo */
- iret
diff --git a/qemu/roms/ipxe/src/arch/i386/core/gdbmach.c b/qemu/roms/ipxe/src/arch/i386/core/gdbmach.c
deleted file mode 100644
index d92a4ac08..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/gdbmach.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2008 Stefan Hajnoczi <stefanha@gmail.com>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-#include <stddef.h>
-#include <stdio.h>
-#include <assert.h>
-#include <ipxe/uaccess.h>
-#include <ipxe/gdbstub.h>
-#include <librm.h>
-#include <gdbmach.h>
-
-/** @file
- *
- * GDB architecture-specific bits for i386
- *
- */
-
-enum {
- DR7_CLEAR = 0x00000400, /* disable hardware breakpoints */
- DR6_CLEAR = 0xffff0ff0, /* clear breakpoint status */
-};
-
-/** Hardware breakpoint, fields stored in x86 bit pattern form */
-struct hwbp {
- int type; /* type (1=write watchpoint, 3=access watchpoint) */
- unsigned long addr; /* linear address */
- size_t len; /* length (0=1-byte, 1=2-byte, 3=4-byte) */
- int enabled;
-};
-
-static struct hwbp hwbps [ 4 ];
-static gdbreg_t dr7 = DR7_CLEAR;
-
-static struct hwbp *gdbmach_find_hwbp ( int type, unsigned long addr, size_t len ) {
- struct hwbp *available = NULL;
- unsigned int i;
- for ( i = 0; i < sizeof hwbps / sizeof hwbps [ 0 ]; i++ ) {
- if ( hwbps [ i ].type == type && hwbps [ i ].addr == addr && hwbps [ i ].len == len ) {
- return &hwbps [ i ];
- }
- if ( !hwbps [ i ].enabled ) {
- available = &hwbps [ i ];
- }
- }
- return available;
-}
-
-static void gdbmach_commit_hwbp ( struct hwbp *bp ) {
- unsigned int regnum = bp - hwbps;
-
- /* Set breakpoint address */
- assert ( regnum < ( sizeof hwbps / sizeof hwbps [ 0 ] ) );
- switch ( regnum ) {
- case 0:
- __asm__ __volatile__ ( "movl %0, %%dr0\n" : : "r" ( bp->addr ) );
- break;
- case 1:
- __asm__ __volatile__ ( "movl %0, %%dr1\n" : : "r" ( bp->addr ) );
- break;
- case 2:
- __asm__ __volatile__ ( "movl %0, %%dr2\n" : : "r" ( bp->addr ) );
- break;
- case 3:
- __asm__ __volatile__ ( "movl %0, %%dr3\n" : : "r" ( bp->addr ) );
- break;
- }
-
- /* Set type */
- dr7 &= ~( 0x3 << ( 16 + 4 * regnum ) );
- dr7 |= bp->type << ( 16 + 4 * regnum );
-
- /* Set length */
- dr7 &= ~( 0x3 << ( 18 + 4 * regnum ) );
- dr7 |= bp->len << ( 18 + 4 * regnum );
-
- /* Set/clear local enable bit */
- dr7 &= ~( 0x3 << 2 * regnum );
- dr7 |= bp->enabled << 2 * regnum;
-}
-
-int gdbmach_set_breakpoint ( int type, unsigned long addr, size_t len, int enable ) {
- struct hwbp *bp;
-
- /* Check and convert breakpoint type to x86 type */
- switch ( type ) {
- case GDBMACH_WATCH:
- type = 0x1;
- break;
- case GDBMACH_AWATCH:
- type = 0x3;
- break;
- default:
- return 0; /* unsupported breakpoint type */
- }
-
- /* Only lengths 1, 2, and 4 are supported */
- if ( len != 2 && len != 4 ) {
- len = 1;
- }
- len--; /* convert to x86 breakpoint length bit pattern */
-
- /* Calculate linear address by adding segment base */
- addr += virt_offset;
-
- /* Set up the breakpoint */
- bp = gdbmach_find_hwbp ( type, addr, len );
- if ( !bp ) {
- return 0; /* ran out of hardware breakpoints */
- }
- bp->type = type;
- bp->addr = addr;
- bp->len = len;
- bp->enabled = enable;
- gdbmach_commit_hwbp ( bp );
- return 1;
-}
-
-static void gdbmach_disable_hwbps ( void ) {
- /* Store and clear hardware breakpoints */
- __asm__ __volatile__ ( "movl %0, %%dr7\n" : : "r" ( DR7_CLEAR ) );
-}
-
-static void gdbmach_enable_hwbps ( void ) {
- /* Clear breakpoint status register */
- __asm__ __volatile__ ( "movl %0, %%dr6\n" : : "r" ( DR6_CLEAR ) );
-
- /* Restore hardware breakpoints */
- __asm__ __volatile__ ( "movl %0, %%dr7\n" : : "r" ( dr7 ) );
-}
-
-__asmcall void gdbmach_handler ( int signo, gdbreg_t *regs ) {
- gdbmach_disable_hwbps();
- gdbstub_handler ( signo, regs );
- gdbmach_enable_hwbps();
-}
-
-static void * gdbmach_interrupt_vectors[] = {
- gdbmach_nocode_sigfpe, /* Divide by zero */
- gdbmach_nocode_sigtrap, /* Debug trap */
- NULL, /* Non-maskable interrupt */
- gdbmach_nocode_sigtrap, /* Breakpoint */
- gdbmach_nocode_sigstkflt, /* Overflow */
- gdbmach_nocode_sigstkflt, /* Bound range exceeded */
- gdbmach_nocode_sigill, /* Invalid opcode */
- NULL, /* Device not available */
- gdbmach_withcode_sigbus, /* Double fault */
- NULL, /* Coprocessor segment overrun */
- gdbmach_withcode_sigsegv, /* Invalid TSS */
- gdbmach_withcode_sigsegv, /* Segment not present */
- gdbmach_withcode_sigsegv, /* Stack segment fault */
- gdbmach_withcode_sigsegv, /* General protection fault */
- gdbmach_withcode_sigsegv, /* Page fault */
-};
-
-void gdbmach_init ( void ) {
- unsigned int i;
-
- for ( i = 0 ; i < ( sizeof ( gdbmach_interrupt_vectors ) /
- sizeof ( gdbmach_interrupt_vectors[0] ) ) ; i++ ) {
- set_interrupt_vector ( i, gdbmach_interrupt_vectors[i] );
- }
-}
diff --git a/qemu/roms/ipxe/src/arch/i386/core/linux/linux_syscall.S b/qemu/roms/ipxe/src/arch/i386/core/linux/linux_syscall.S
deleted file mode 100644
index 38a3e74bd..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/linux/linux_syscall.S
+++ /dev/null
@@ -1,45 +0,0 @@
-
- .section ".data"
- .globl linux_errno
-
-linux_errno: .int 0
-
- .section ".text"
- .code32
- .globl linux_syscall
- .type linux_syscall, @function
-
-linux_syscall:
- /* Save registers */
- pushl %ebx
- pushl %esi
- pushl %edi
- pushl %ebp
-
- movl 20(%esp), %eax // C arg1 -> syscall number
- movl 24(%esp), %ebx // C arg2 -> syscall arg1
- movl 28(%esp), %ecx // C arg3 -> syscall arg2
- movl 32(%esp), %edx // C arg4 -> syscall arg3
- movl 36(%esp), %esi // C arg5 -> syscall arg4
- movl 40(%esp), %edi // C arg6 -> syscall arg5
- movl 44(%esp), %ebp // C arg7 -> syscall arg6
-
- int $0x80
-
- /* Restore registers */
- popl %ebp
- popl %edi
- popl %esi
- popl %ebx
-
- cmpl $-4095, %eax
- jae 1f
- ret
-
-1:
- negl %eax
- movl %eax, linux_errno
- movl $-1, %eax
- ret
-
- .size linux_syscall, . - linux_syscall
diff --git a/qemu/roms/ipxe/src/arch/i386/core/linux/linuxprefix.S b/qemu/roms/ipxe/src/arch/i386/core/linux/linuxprefix.S
deleted file mode 100644
index 398d3cb21..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/linux/linuxprefix.S
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <linux/unistd.h>
-
- .section ".text"
- .code32
- .globl _linux_start
- .type _linux_start, @function
-
-_linux_start:
- xorl %ebp, %ebp
-
- popl %esi // save argc
- movl %esp, %edi // save argv
-
- andl $~15, %esp // 16-byte align the stack
-
- pushl %edi // argv -> C arg2
- pushl %esi // argc -> C arg1
-
- call save_args
-
- /* Our main doesn't use any arguments */
- call main
-
- movl %eax, %ebx // rc -> syscall arg1
- movl $__NR_exit, %eax
- int $0x80
-
- .size _linux_start, . - _linux_start
diff --git a/qemu/roms/ipxe/src/arch/i386/core/nulltrap.c b/qemu/roms/ipxe/src/arch/i386/core/nulltrap.c
deleted file mode 100644
index 3046fbecf..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/nulltrap.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-
-__attribute__ (( noreturn, section ( ".text.null_trap" ) ))
-void null_function_trap ( void ) {
- void *stack;
-
- /* 128 bytes of NOPs; the idea of this is that if something
- * dereferences a NULL pointer and overwrites us, we at least
- * have some chance of still getting to execute the printf()
- * statement.
- */
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
- __asm__ __volatile__ ( "nop ; nop ; nop ; nop" );
-
- __asm__ __volatile__ ( "movl %%esp, %0" : "=r" ( stack ) );
- printf ( "NULL method called from %p (stack %p)\n",
- __builtin_return_address ( 0 ), stack );
- DBG_HD ( stack, 256 );
- while ( 1 ) {}
-}
diff --git a/qemu/roms/ipxe/src/arch/i386/core/patch_cf.S b/qemu/roms/ipxe/src/arch/i386/core/patch_cf.S
deleted file mode 100644
index 4365563fe..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/patch_cf.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2009 H. Peter Anvin <hpa@zytor.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
-
- .text
- .arch i386
- .code16
-
-/****************************************************************************
- * Set/clear CF on the stack as appropriate, assumes stack is as it should
- * be immediately before IRET
- ****************************************************************************
- */
- .section ".text16", "ax", @progbits
- .globl patch_cf
-patch_cf:
- pushw %bp
- movw %sp, %bp
- setc 8(%bp) /* Set/reset CF; clears PF, AF, ZF, SF */
- popw %bp
- ret
- .size patch_cf, . - patch_cf
diff --git a/qemu/roms/ipxe/src/arch/i386/core/pci_autoboot.c b/qemu/roms/ipxe/src/arch/i386/core/pci_autoboot.c
deleted file mode 100644
index 337598091..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/pci_autoboot.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2014 Red Hat Inc.
- * Alex Williamson <alex.williamson@redhat.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-#include <stdint.h>
-#include <ipxe/device.h>
-#include <ipxe/init.h>
-#include <realmode.h>
-#include <usr/autoboot.h>
-
-uint16_t __bss16 ( autoboot_busdevfn );
-#define autoboot_busdevfn __use_data16 ( autoboot_busdevfn )
-
-/**
- * Initialise PCI autoboot device
- */
-static void pci_autoboot_init ( void ) {
-
- if ( autoboot_busdevfn )
- set_autoboot_busloc ( BUS_TYPE_PCI, autoboot_busdevfn );
-}
-
-/** PCI autoboot device initialisation function */
-struct init_fn pci_autoboot_init_fn __init_fn ( INIT_NORMAL ) = {
- .initialise = pci_autoboot_init,
-};
diff --git a/qemu/roms/ipxe/src/arch/i386/core/rdtsc_timer.c b/qemu/roms/ipxe/src/arch/i386/core/rdtsc_timer.c
deleted file mode 100644
index e720a239c..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/rdtsc_timer.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2008 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-/** @file
- *
- * RDTSC timer
- *
- */
-
-#include <assert.h>
-#include <ipxe/timer.h>
-#include <ipxe/pit8254.h>
-
-/**
- * Number of TSC ticks per microsecond
- *
- * This is calibrated on the first use of the timer.
- */
-static unsigned long rdtsc_ticks_per_usec;
-
-/**
- * Delay for a fixed number of microseconds
- *
- * @v usecs Number of microseconds for which to delay
- */
-static void rdtsc_udelay ( unsigned long usecs ) {
- unsigned long start;
- unsigned long elapsed;
-
- /* Sanity guard, since we may divide by this */
- if ( ! usecs )
- usecs = 1;
-
- start = currticks();
- if ( rdtsc_ticks_per_usec ) {
- /* Already calibrated; busy-wait until done */
- do {
- elapsed = ( currticks() - start );
- } while ( elapsed < ( usecs * rdtsc_ticks_per_usec ) );
- } else {
- /* Not yet calibrated; use 8254 PIT and calibrate
- * based on result.
- */
- pit8254_udelay ( usecs );
- elapsed = ( currticks() - start );
- rdtsc_ticks_per_usec = ( elapsed / usecs );
- DBG ( "RDTSC timer calibrated: %ld ticks in %ld usecs "
- "(%ld MHz)\n", elapsed, usecs,
- ( rdtsc_ticks_per_usec << TSC_SHIFT ) );
- }
-}
-
-/**
- * Get number of ticks per second
- *
- * @ret ticks_per_sec Number of ticks per second
- */
-static unsigned long rdtsc_ticks_per_sec ( void ) {
-
- /* Calibrate timer, if not already done */
- if ( ! rdtsc_ticks_per_usec )
- udelay ( 1 );
-
- /* Sanity check */
- assert ( rdtsc_ticks_per_usec != 0 );
-
- return ( rdtsc_ticks_per_usec * 1000 * 1000 );
-}
-
-PROVIDE_TIMER ( rdtsc, udelay, rdtsc_udelay );
-PROVIDE_TIMER_INLINE ( rdtsc, currticks );
-PROVIDE_TIMER ( rdtsc, ticks_per_sec, rdtsc_ticks_per_sec );
diff --git a/qemu/roms/ipxe/src/arch/i386/core/relocate.c b/qemu/roms/ipxe/src/arch/i386/core/relocate.c
deleted file mode 100644
index 54ad387e4..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/relocate.c
+++ /dev/null
@@ -1,138 +0,0 @@
-#include <ipxe/io.h>
-#include <registers.h>
-
-/*
- * Originally by Eric Biederman
- *
- * Heavily modified by Michael Brown
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-/*
- * The linker passes in the symbol _max_align, which is the alignment
- * that we must preserve, in bytes.
- *
- */
-extern char _max_align[];
-#define max_align ( ( unsigned int ) _max_align )
-
-/* Linker symbols */
-extern char _textdata[];
-extern char _etextdata[];
-
-/* within 1MB of 4GB is too close.
- * MAX_ADDR is the maximum address we can easily do DMA to.
- *
- * Not sure where this constraint comes from, but kept it from Eric's
- * old code - mcb30
- */
-#define MAX_ADDR (0xfff00000UL)
-
-/**
- * Relocate iPXE
- *
- * @v ebp Maximum address to use for relocation
- * @ret esi Current physical address
- * @ret edi New physical address
- * @ret ecx Length to copy
- *
- * This finds a suitable location for iPXE near the top of 32-bit
- * address space, and returns the physical address of the new location
- * to the prefix in %edi.
- */
-__asmcall void relocate ( struct i386_all_regs *ix86 ) {
- struct memory_map memmap;
- unsigned long start, end, size, padded_size, max;
- unsigned long new_start, new_end;
- unsigned i;
-
- /* Get memory map and current location */
- get_memmap ( &memmap );
- start = virt_to_phys ( _textdata );
- end = virt_to_phys ( _etextdata );
- size = ( end - start );
- padded_size = ( size + max_align - 1 );
-
- DBG ( "Relocate: currently at [%lx,%lx)\n"
- "...need %lx bytes for %d-byte alignment\n",
- start, end, padded_size, max_align );
-
- /* Determine maximum usable address */
- max = MAX_ADDR;
- if ( ix86->regs.ebp < max ) {
- max = ix86->regs.ebp;
- DBG ( "Limiting relocation to [0,%lx)\n", max );
- }
-
- /* Walk through the memory map and find the highest address
- * below 4GB that iPXE will fit into.
- */
- new_end = end;
- for ( i = 0 ; i < memmap.count ; i++ ) {
- struct memory_region *region = &memmap.regions[i];
- unsigned long r_start, r_end;
-
- DBG ( "Considering [%llx,%llx)\n", region->start, region->end);
-
- /* Truncate block to maximum address. This will be
- * less than 4GB, which means that we can get away
- * with using just 32-bit arithmetic after this stage.
- */
- if ( region->start > max ) {
- DBG ( "...starts after max=%lx\n", max );
- continue;
- }
- r_start = region->start;
- if ( region->end > max ) {
- DBG ( "...end truncated to max=%lx\n", max );
- r_end = max;
- } else {
- r_end = region->end;
- }
- DBG ( "...usable portion is [%lx,%lx)\n", r_start, r_end );
-
- /* If we have rounded down r_end below r_ start, skip
- * this block.
- */
- if ( r_end < r_start ) {
- DBG ( "...truncated to negative size\n" );
- continue;
- }
-
- /* Check that there is enough space to fit in iPXE */
- if ( ( r_end - r_start ) < size ) {
- DBG ( "...too small (need %lx bytes)\n", size );
- continue;
- }
-
- /* If the start address of the iPXE we would
- * place in this block is higher than the end address
- * of the current highest block, use this block.
- *
- * Note that this avoids overlaps with the current
- * iPXE, as well as choosing the highest of all viable
- * blocks.
- */
- if ( ( r_end - size ) > new_end ) {
- new_end = r_end;
- DBG ( "...new best block found.\n" );
- }
- }
-
- /* Calculate new location of iPXE, and align it to the
- * required alignemnt.
- */
- new_start = new_end - padded_size;
- new_start += ( start - new_start ) & ( max_align - 1 );
- new_end = new_start + size;
-
- DBG ( "Relocating from [%lx,%lx) to [%lx,%lx)\n",
- start, end, new_start, new_end );
-
- /* Let prefix know what to copy */
- ix86->regs.esi = start;
- ix86->regs.edi = new_start;
- ix86->regs.ecx = size;
-}
diff --git a/qemu/roms/ipxe/src/arch/i386/core/runtime.c b/qemu/roms/ipxe/src/arch/i386/core/runtime.c
deleted file mode 100644
index d160fee04..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/runtime.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (C) 2011 Michael Brown <mbrown@fensystems.co.uk>.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
- *
- * You can also choose to distribute this program under the terms of
- * the Unmodified Binary Distribution Licence (as given in the file
- * COPYING.UBDL), provided that you have satisfied its requirements.
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
-/** @file
- *
- * Command line and initrd passed to iPXE at runtime
- *
- */
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <assert.h>
-#include <ipxe/init.h>
-#include <ipxe/image.h>
-#include <ipxe/script.h>
-#include <ipxe/umalloc.h>
-#include <realmode.h>
-
-/** Command line physical address
- *
- * This can be set by the prefix.
- */
-uint32_t __bss16 ( cmdline_phys );
-#define cmdline_phys __use_data16 ( cmdline_phys )
-
-/** initrd physical address
- *
- * This can be set by the prefix.
- */
-uint32_t __bss16 ( initrd_phys );
-#define initrd_phys __use_data16 ( initrd_phys )
-
-/** initrd length
- *
- * This can be set by the prefix.
- */
-uint32_t __bss16 ( initrd_len );
-#define initrd_len __use_data16 ( initrd_len )
-
-/** Internal copy of the command line */
-static char *cmdline_copy;
-
-/** Free command line image */
-static void cmdline_image_free ( struct refcnt *refcnt ) {
- struct image *image = container_of ( refcnt, struct image, refcnt );
-
- DBGC ( image, "RUNTIME freeing command line\n" );
- free ( cmdline_copy );
-}
-
-/** Embedded script representing the command line */
-static struct image cmdline_image = {
- .refcnt = REF_INIT ( cmdline_image_free ),
- .name = "<CMDLINE>",
- .type = &script_image_type,
-};
-
-/** Colour for debug messages */
-#define colour &cmdline_image
-
-/**
- * Strip unwanted cruft from command line
- *
- * @v cmdline Command line
- * @v cruft Initial substring of cruft to strip
- */
-static void cmdline_strip ( char *cmdline, const char *cruft ) {
- char *strip;
- char *strip_end;
-
- /* Find unwanted cruft, if present */
- if ( ! ( strip = strstr ( cmdline, cruft ) ) )
- return;
-
- /* Strip unwanted cruft */
- strip_end = strchr ( strip, ' ' );
- if ( strip_end ) {
- *strip_end = '\0';
- DBGC ( colour, "RUNTIME stripping \"%s\"\n", strip );
- strcpy ( strip, ( strip_end + 1 ) );
- } else {
- DBGC ( colour, "RUNTIME stripping \"%s\"\n", strip );
- *strip = '\0';
- }
-}
-
-/**
- * Initialise command line
- *
- * @ret rc Return status code
- */
-static int cmdline_init ( void ) {
- userptr_t cmdline_user;
- char *cmdline;
- size_t len;
- int rc;
-
- /* Do nothing if no command line was specified */
- if ( ! cmdline_phys ) {
- DBGC ( colour, "RUNTIME found no command line\n" );
- return 0;
- }
- cmdline_user = phys_to_user ( cmdline_phys );
- len = ( strlen_user ( cmdline_user, 0 ) + 1 /* NUL */ );
-
- /* Allocate and copy command line */
- cmdline_copy = malloc ( len );
- if ( ! cmdline_copy ) {
- DBGC ( colour, "RUNTIME could not allocate %zd bytes for "
- "command line\n", len );
- rc = -ENOMEM;
- goto err_alloc_cmdline_copy;
- }
- cmdline = cmdline_copy;
- copy_from_user ( cmdline, cmdline_user, 0, len );
- DBGC ( colour, "RUNTIME found command line \"%s\" at %08x\n",
- cmdline, cmdline_phys );
-
- /* Mark command line as consumed */
- cmdline_phys = 0;
-
- /* Strip unwanted cruft from the command line */
- cmdline_strip ( cmdline, "BOOT_IMAGE=" );
- cmdline_strip ( cmdline, "initrd=" );
- while ( isspace ( *cmdline ) )
- cmdline++;
- DBGC ( colour, "RUNTIME using command line \"%s\"\n", cmdline );
-
- /* Prepare and register image */
- cmdline_image.data = virt_to_user ( cmdline );
- cmdline_image.len = strlen ( cmdline );
- if ( cmdline_image.len ) {
- if ( ( rc = register_image ( &cmdline_image ) ) != 0 ) {
- DBGC ( colour, "RUNTIME could not register command "
- "line: %s\n", strerror ( rc ) );
- goto err_register_image;
- }
- }
-
- /* Drop our reference to the image */
- image_put ( &cmdline_image );
-
- return 0;
-
- err_register_image:
- image_put ( &cmdline_image );
- err_alloc_cmdline_copy:
- return rc;
-}
-
-/**
- * Initialise initrd
- *
- * @ret rc Return status code
- */
-static int initrd_init ( void ) {
- struct image *image;
- int rc;
-
- /* Do nothing if no initrd was specified */
- if ( ! initrd_phys ) {
- DBGC ( colour, "RUNTIME found no initrd\n" );
- return 0;
- }
- if ( ! initrd_len ) {
- DBGC ( colour, "RUNTIME found empty initrd\n" );
- return 0;
- }
- DBGC ( colour, "RUNTIME found initrd at [%x,%x)\n",
- initrd_phys, ( initrd_phys + initrd_len ) );
-
- /* Allocate image */
- image = alloc_image ( NULL );
- if ( ! image ) {
- DBGC ( colour, "RUNTIME could not allocate image for "
- "initrd\n" );
- rc = -ENOMEM;
- goto err_alloc_image;
- }
- if ( ( rc = image_set_name ( image, "<INITRD>" ) ) != 0 ) {
- DBGC ( colour, "RUNTIME could not set image name: %s\n",
- strerror ( rc ) );
- goto err_set_name;
- }
-
- /* Allocate and copy initrd content */
- image->data = umalloc ( initrd_len );
- if ( ! image->data ) {
- DBGC ( colour, "RUNTIME could not allocate %d bytes for "
- "initrd\n", initrd_len );
- rc = -ENOMEM;
- goto err_umalloc;
- }
- image->len = initrd_len;
- memcpy_user ( image->data, 0, phys_to_user ( initrd_phys ), 0,
- initrd_len );
-
- /* Mark initrd as consumed */
- initrd_phys = 0;
-
- /* Register image */
- if ( ( rc = register_image ( image ) ) != 0 ) {
- DBGC ( colour, "RUNTIME could not register initrd: %s\n",
- strerror ( rc ) );
- goto err_register_image;
- }
-
- /* Drop our reference to the image */
- image_put ( image );
-
- return 0;
-
- err_register_image:
- err_umalloc:
- err_set_name:
- image_put ( image );
- err_alloc_image:
- return rc;
-}
-
-/**
- * Initialise command line and initrd
- *
- */
-static void runtime_init ( void ) {
- int rc;
-
- /* Initialise command line */
- if ( ( rc = cmdline_init() ) != 0 ) {
- /* No way to report failure */
- return;
- }
-
- /* Initialise initrd */
- if ( ( rc = initrd_init() ) != 0 ) {
- /* No way to report failure */
- return;
- }
-}
-
-/** Command line and initrd initialisation function */
-struct startup_fn runtime_startup_fn __startup_fn ( STARTUP_NORMAL ) = {
- .startup = runtime_init,
-};
diff --git a/qemu/roms/ipxe/src/arch/i386/core/setjmp.S b/qemu/roms/ipxe/src/arch/i386/core/setjmp.S
deleted file mode 100644
index 81d3b4911..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/setjmp.S
+++ /dev/null
@@ -1,64 +0,0 @@
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
-
- .text
- .arch i386
- .code32
-
- /* Must match jmp_buf structure layout */
- .struct 0
-env_retaddr: .long 0
-env_stack: .long 0
-env_ebx: .long 0
-env_esi: .long 0
-env_edi: .long 0
-env_ebp: .long 0
- .previous
-
-/*
- * Save stack context for non-local goto
- */
- .globl setjmp
-setjmp:
- /* Get jmp_buf pointer in %edx */
- movl 4(%esp),%edx
- /* Save return address */
- movl 0(%esp),%eax
- movl %eax, env_retaddr(%edx)
- /* Save stack pointer */
- movl %esp, env_stack(%edx)
- /* Save other registers */
- movl %ebx, env_ebx(%edx)
- movl %esi, env_esi(%edx)
- movl %edi, env_edi(%edx)
- movl %ebp, env_ebp(%edx)
- /* Return 0 when returning as setjmp() */
- xorl %eax, %eax
- ret
- .size setjmp, . - setjmp
-
-/*
- * Non-local jump to a saved stack context
- */
- .globl longjmp
-longjmp:
- /* Get jmp_buf pointer in %edx */
- movl 4(%esp),%edx
- /* Get result in %eax */
- movl 8(%esp),%eax
- /* Force result to non-zero */
- testl %eax, %eax
- jnz 1f
- incl %eax
-1: /* Restore stack pointer */
- movl env_stack(%edx), %esp
- /* Restore other registers */
- movl env_ebx(%edx), %ebx
- movl env_esi(%edx), %esi
- movl env_edi(%edx), %edi
- movl env_ebp(%edx), %ebp
- /* Replace return address on the new stack */
- popl %ecx /* discard */
- pushl env_retaddr(%edx)
- /* Return to setjmp() caller */
- ret
- .size longjmp, . - longjmp
diff --git a/qemu/roms/ipxe/src/arch/i386/core/stack.S b/qemu/roms/ipxe/src/arch/i386/core/stack.S
deleted file mode 100644
index 98f1cd9b9..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/stack.S
+++ /dev/null
@@ -1,15 +0,0 @@
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
-
- .arch i386
-
-/****************************************************************************
- * Internal stack
- ****************************************************************************
- */
- .section ".stack", "aw", @nobits
- .align 8
- .globl _stack
-_stack:
- .space 4096
- .globl _estack
-_estack:
diff --git a/qemu/roms/ipxe/src/arch/i386/core/stack16.S b/qemu/roms/ipxe/src/arch/i386/core/stack16.S
deleted file mode 100644
index 4bc6f081a..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/stack16.S
+++ /dev/null
@@ -1,15 +0,0 @@
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
-
- .arch i386
-
-/****************************************************************************
- * Internal stack
- ****************************************************************************
- */
- .section ".stack16", "aw", @nobits
- .align 8
- .globl _stack16
-_stack16:
- .space 4096
- .globl _estack16
-_estack16:
diff --git a/qemu/roms/ipxe/src/arch/i386/core/video_subr.c b/qemu/roms/ipxe/src/arch/i386/core/video_subr.c
deleted file mode 100644
index 3f701bd96..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/video_subr.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *
- * modified from linuxbios code
- * by Cai Qiang <rimy2000@hotmail.com>
- *
- */
-
-#include "stddef.h"
-#include "string.h"
-#include <ipxe/io.h>
-#include <ipxe/console.h>
-#include <ipxe/init.h>
-#include "vga.h"
-#include <config/console.h>
-
-/* Set default console usage if applicable */
-#if ! ( defined ( CONSOLE_DIRECT_VGA ) && \
- CONSOLE_EXPLICIT ( CONSOLE_DIRECT_VGA ) )
-#undef CONSOLE_DIRECT_VGA
-#define CONSOLE_DIRECT_VGA ( CONSOLE_USAGE_ALL & ~CONSOLE_USAGE_LOG )
-#endif
-
-struct console_driver vga_console __console_driver;
-
-static char *vidmem; /* The video buffer */
-static int video_line, video_col;
-
-#define VIDBUFFER 0xB8000
-
-static void memsetw(void *s, int c, unsigned int n)
-{
- unsigned int i;
- u16 *ss = (u16 *) s;
-
- for (i = 0; i < n; i++) {
- ss[i] = ( u16 ) c;
- }
-}
-
-static void video_init(void)
-{
- static int inited=0;
-
- vidmem = (char *)phys_to_virt(VIDBUFFER);
-
- if (!inited) {
- video_line = 0;
- video_col = 0;
-
- memsetw(vidmem, VGA_ATTR_CLR_WHT, 2*1024); //
-
- inited=1;
- }
-}
-
-static void video_scroll(void)
-{
- int i;
-
- memcpy(vidmem, vidmem + COLS * 2, (LINES - 1) * COLS * 2);
- for (i = (LINES - 1) * COLS * 2; i < LINES * COLS * 2; i += 2)
- vidmem[i] = ' ';
-}
-
-static void vga_putc(int byte)
-{
- if (byte == '\n') {
- video_line++;
- video_col = 0;
-
- } else if (byte == '\r') {
- video_col = 0;
-
- } else if (byte == '\b') {
- video_col--;
-
- } else if (byte == '\t') {
- video_col += 4;
-
- } else if (byte == '\a') {
- //beep
- //beep(500);
-
- } else {
- vidmem[((video_col + (video_line *COLS)) * 2)] = byte;
- vidmem[((video_col + (video_line *COLS)) * 2) +1] = VGA_ATTR_CLR_WHT;
- video_col++;
- }
- if (video_col < 0) {
- video_col = 0;
- }
- if (video_col >= COLS) {
- video_line++;
- video_col = 0;
- }
- if (video_line >= LINES) {
- video_scroll();
- video_line--;
- }
- // move the cursor
- write_crtc((video_col + (video_line *COLS)) >> 8, CRTC_CURSOR_HI);
- write_crtc((video_col + (video_line *COLS)) & 0x0ff, CRTC_CURSOR_LO);
-}
-
-struct console_driver vga_console __console_driver = {
- .putchar = vga_putc,
- .disabled = CONSOLE_DISABLED,
- .usage = CONSOLE_DIRECT_VGA,
-};
-
-struct init_fn video_init_fn __init_fn ( INIT_EARLY ) = {
- .initialise = video_init,
-};
diff --git a/qemu/roms/ipxe/src/arch/i386/core/virtaddr.S b/qemu/roms/ipxe/src/arch/i386/core/virtaddr.S
deleted file mode 100644
index 425591570..000000000
--- a/qemu/roms/ipxe/src/arch/i386/core/virtaddr.S
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Functions to support the virtual addressing method of relocation
- * that Etherboot uses.
- *
- */
-
-FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
-
-#include "librm.h"
-
- .arch i386
- .text
- .code32
-
-/****************************************************************************
- * _virt_to_phys (virtual addressing)
- *
- * Switch from virtual to flat physical addresses. %esp is adjusted
- * to a physical value. Segment registers are set to flat physical
- * selectors. All other registers are preserved. Flags are
- * preserved.
- *
- * Parameters: none
- * Returns: none
- ****************************************************************************
- */
- .globl _virt_to_phys
-_virt_to_phys:
- /* Preserve registers and flags */
- pushfl
- pushl %eax
- pushl %ebp
-
- /* Change return address to a physical address */
- movl virt_offset, %ebp
- addl %ebp, 12(%esp)
-
- /* Switch to physical code segment */
- cli
- pushl $PHYSICAL_CS
- leal 1f(%ebp), %eax
- pushl %eax
- lret
-1:
- /* Reload other segment registers and adjust %esp */
- movl $PHYSICAL_DS, %eax
- movl %eax, %ds
- movl %eax, %es
- movl %eax, %fs
- movl %eax, %gs
- movl %eax, %ss
- addl %ebp, %esp
-
- /* Restore registers and flags, and return */
- popl %ebp
- popl %eax
- popfl
- ret
-
-/****************************************************************************
- * _phys_to_virt (flat physical addressing)
- *
- * Switch from flat physical to virtual addresses. %esp is adjusted
- * to a virtual value. Segment registers are set to virtual
- * selectors. All other registers are preserved. Flags are
- * preserved.
- *
- * Parameters: none
- * Returns: none
- ****************************************************************************
- */
- .globl _phys_to_virt
-_phys_to_virt:
- /* Preserve registers and flags */
- pushfl
- pushl %eax
- pushl %ebp
-
- /* Switch to virtual code segment */
- cli
- ljmp $VIRTUAL_CS, $1f
-1:
- /* Reload data segment registers */
- movl $VIRTUAL_DS, %eax
- movl %eax, %ds
- movl %eax, %es
- movl %eax, %fs
- movl %eax, %gs
-
- /* Reload stack segment and adjust %esp */
- movl virt_offset, %ebp
- movl %eax, %ss
- subl %ebp, %esp
-
- /* Change the return address to a virtual address */
- subl %ebp, 12(%esp)
-
- /* Restore registers and flags, and return */
- popl %ebp
- popl %eax
- popfl
- ret
-
-/****************************************************************************
- * _intr_to_virt (virtual code segment, virtual or physical stack segment)
- *
- * Switch from virtual code segment with either a virtual or physical
- * stack segment to using virtual addressing. %esp is adjusted if
- * necessary to a virtual value. Segment registers are set to virtual
- * selectors. All other registers are preserved. Flags are
- * preserved.
- *
- * Parameters: none
- * Returns: none
- ****************************************************************************
- */
- .globl _intr_to_virt
-_intr_to_virt:
- /* Preserve registers and flags */
- pushfl
- pushl %eax
- pushl %ebp
-
- /* Check whether stack segment is physical or virtual */
- movl %ss, %eax
- cmpw $VIRTUAL_DS, %ax
- movl $VIRTUAL_DS, %eax
-
- /* Reload data segment registers */
- movl %eax, %ds
- movl %eax, %es
- movl %eax, %fs
- movl %eax, %gs
-
- /* Reload stack segment and adjust %esp if necessary */
- je 1f
- movl virt_offset, %ebp
- movl %eax, %ss
- subl %ebp, %esp
-1:
- /* Restore registers and flags, and return */
- popl %ebp
- popl %eax
- popfl
- ret