From bb756eebdac6fd24e8919e2c43f7d2c8c4091f59 Mon Sep 17 00:00:00 2001 From: RajithaY Date: Tue, 25 Apr 2017 03:31:15 -0700 Subject: Adding qemu as a submodule of KVMFORNFV This Patch includes the changes to add qemu as a submodule to kvmfornfv repo and make use of the updated latest qemu for the execution of all testcase Change-Id: I1280af507a857675c7f81d30c95255635667bdd7 Signed-off-by:RajithaY --- qemu/roms/ipxe/src/arch/i386/README.i386 | 197 ------------------------------- 1 file changed, 197 deletions(-) delete mode 100644 qemu/roms/ipxe/src/arch/i386/README.i386 (limited to 'qemu/roms/ipxe/src/arch/i386/README.i386') diff --git a/qemu/roms/ipxe/src/arch/i386/README.i386 b/qemu/roms/ipxe/src/arch/i386/README.i386 deleted file mode 100644 index b9b79cc4b..000000000 --- a/qemu/roms/ipxe/src/arch/i386/README.i386 +++ /dev/null @@ -1,197 +0,0 @@ -Etherboot/NILO i386 initialisation path and external call interface -=================================================================== - -1. Background - -GCC compiles 32-bit code. It is capable of producing -position-independent code, but the resulting binary is about 25% -bigger than the corresponding fixed-position code. Since one main use -of Etherboot is as firmware to be burned into an EPROM, code size must -be kept as small as possible. - -This means that we want to compile fixed-position code with GCC, and -link it to have a predetermined start address. The problem then is -that we must know the address that the code will be loaded to when it -runs. There are several ways to solve this: - -1. Pick an address, link the code with this start address, then make - sure that the code gets loaded at that location. This is - problematic, because we may pick an address that we later end up - wanting to use to load the operating system that we're booting. - -2. Pick an address, link the code with this start address, then set up - virtual addressing so that the virtual addresses match the - link-time addresses regardless of the real physical address that - the code is loaded to. This enables us to relocate Etherboot to - the top of high memory, where it will be out of the way of any - loading operating system. - -3. Link the code with a text start address of zero and a data start - address also of zero. Use 16-bit real mode and the - quasi-position-independence it gives you via segment addressing. - Doing this requires that we generate 16-bit code, rather than - 32-bit code, and restricts us to a maximum of 64kB in each segment. - -There are other possible approaches (e.g. including a relocation table -and code that performs standard dynamic relocation), but the three -options listed above are probably the best available. - -Etherboot can be invoked in a variety of ways (ROM, floppy, as a PXE -NBP, etc). Several of these ways involve control being passed to -Etherboot with the CPU in 16-bit real mode. Some will involve the CPU -being in 32-bit protected mode, and there's an outside chance that -some may involve the CPU being in 16-bit protected mode. We will -almost certainly have to effect a CPU mode change in order to reach -the mode we want to be in to execute the C code. - -Additionally, Etherboot may wish to call external routines, such as -BIOS interrupts, which must be called in 16-bit real mode. When -providing a PXE API, Etherboot must provide a mechanism for external -code to call it from 16-bit real mode. - -Not all i386 builds of Etherboot will want to make real-mode calls. -For example, when built for LinuxBIOS rather than the standard PCBIOS, -no real-mode calls are necessary. - -For the ultimate in PXE compatibility, we may want to build Etherboot -to run permanently in real mode. - -There is a wide variety of potential combinations of mode switches -that we may wish to implement. There are additional complications, -such as the inability to access a high-memory stack when running in -real mode. - -2. Transition libraries - -To handle all these various combinations of mode switches, we have -several "transition" libraries in Etherboot. We also have the concept -of an "internal" and an "external" environment. The internal -environment is the environment within which we can execute C code. -The external environment is the environment of whatever external code -we're trying to interface to, such as the system BIOS or a PXE NBP. - -As well as having a separate addressing scheme, the internal -environment also has a separate stack. - -The transition libraries are: - -a) librm - -librm handles transitions between an external 16-bit real-mode -environment and an internal 32-bit protected-mode environment with -virtual addresses. - -b) libkir - -libkir handles transitions between an external 16-bit real-mode (or -16:16 or 16:32 protected-mode) environment and an internal 16-bit -real-mode (or 16:16 protected-mode) environment. - -c) libpm - -libpm handles transitions between an external 32-bit protected-mode -environment with flat physical addresses and an internal 32-bit -protected-mode environment with virtual addresses. - -The transition libraries handle the transitions required when -Etherboot is started up for the first time, the transitions required -to execute any external code, and the transitions required when -Etherboot exits (if it exits). When Etherboot provides a PXE API, -they also handle the transitions required when a PXE client makes a -PXE API call to Etherboot. - -Etherboot may use multiple transition libraries. For example, an -Etherboot ELF image does not require librm for its initial transitions -from prefix to runtime, but may require librm for calling external -real-mode functions. - -3. Setup and initialisation - -Etherboot is conceptually divided into the prefix, the decompressor, -and the runtime image. (For non-compressed images, the decompressor -is a no-op.) The complete image comprises all three parts and is -distinct from the runtime image, which exclude the prefix and the -decompressor. - -The prefix does several tasks: - - Load the complete image into memory. (For example, the floppy - prefix issues BIOS calls to load the remainder of the complete image - from the floppy disk into RAM, and the ISA ROM prefix copies the ROM - contents into RAM for faster access.) - - Call the decompressor, if the runtime image is compressed. This - decompresses the runtime image. - - Call the runtime image's setup() routine. This is a routine - implemented in assembly code which sets up the internal environment - so that C code can execute. - - Call the runtime image's arch_initialise() routine. This is a - routine implemented in C which does some basic startup tasks, such - as initialising the console device, obtaining a memory map and - relocating the runtime image to high memory. - - Call the runtime image's arch_main() routine. This records the exit - mechanism requested by the prefix and calls main(). (The prefix - needs to register an exit mechanism because by the time main() - returns, the memory occupied by the prefix has most likely been - overwritten.) - -When acting as a PXE ROM, the ROM prefix contains an UNDI loader -routine in addition to its usual code. The UNDI loader performs a -similar sequence of steps: - - Load the complete image into memory. - - Call the decompressor. - - Call the runtime image's setup() routine. - - Call the runtime image's arch_initialise() routine. - - Call the runtime image's install_pxe_stack() routine. - - Return to caller. - -The runtime image's setup() routine will perform the following steps: - - Switch to the internal environment using an appropriate transition - library. This will record the parameters of the external - environment. - - Set up the internal environment: load a stack, and set up a GDT for - virtual addressing if virtual addressing is to be used. - - Switch back to the external environment using the transition - library. This will record the parameters of the internal - environment. - -Once the setup() routine has returned, the internal environment has been -set up ready for C code to run. The prefix can call C routines using -a function from the transition library. - -The runtime image's arch_initialise() routine will perform the -following steps: - - Zero the bss - - Initialise the console device(s) and print a welcome message. - - Obtain a memory map via the INT 15,E820 BIOS call or suitable - fallback mechanism. [not done if libkir is being used] - - Relocate the runtime image to the top of high memory. [not done if - libkir is being used] - - Install librm to base memory. [done only if librm is being used] - - Call initialise(). - - Return to the prefix, setting registers to indicate to the prefix - the new location of the transition library, if applicable. Which - registers these are is specific to the transition library being - used. - -Once the arch_initialise() routine has returned, the prefix will -probably call arch_main(). -- cgit 1.2.3-korg