Commit Graph

9386 Commits

Author SHA1 Message Date
Stanislav Shwartsman
75bda1d5cd implemented SVM emulation support for Bochs (incomplete yet)
I am merging the code in order to start making shortcuts between VMX emulation and SVM emulation.
Of course SVM emulation is incomplete, completely untested and not expected to work.
But someone could already take a look one the code and give some suggestions.

Also looking for anybody with existing SVM kernels - as simple as possible - for testing.

Status:
 - exceptions intercept is not implemented yet
 - IO intercept is not implemented yet
 - MSR intercept is not implemented yet
 - virtual interrupts are not implemented yet
 - CPUID is not implemented yet

No advanced SVM featurez planned - I am implementing the very basic 'Pacifica' document from 2005 using QEMU code as reference.
2011-12-25 19:35:29 +00:00
Volker Ruppert
aad2d89c83 - rewrite of the optional plugin control feature. Now the plugins are loaded
directly while parsing the bochsrc or command line. If plugin support is enabled,
  the option could load all optional plugins, not only the ones supported before.
  NOTE #1: The old option had all plugins enabled by default and gave the user
           a chance to diable them. Now the plugins are only loaded if they
           appear in the config line and they are set to "1".
  NOTE #2: Loading a plugin that is controlled by a bochsrc option is possible,
           but it currently leads to a panic, since the load command is still
           present in devices.cc.
  NOTE #3: The plugin init code creates the device object and registers the
           optional plugin device. As an option, it can create config parameters
           and register an option parser. The device init, register state and
           reset is still handled in devices.cc, but in the order the devices
           have been loaded with the plugin control.
  NOTE #4: If plugin support is disabled, the plugin control only accepts the
           devices listed in plugin.cc.
- plugin init of core plugins now fails if they are not loaded with the expected
  type. For core plugins the load order is important and they cannot be handled
  with the chained devices list (used for optional and user plugins).
- some additions for calling config.cc functions from a plugin device
2011-12-25 08:52:34 +00:00
Volker Ruppert
c4952b4c84 - E1000 support: updated workspace files and documentation 2011-12-24 15:17:10 +00:00
Volker Ruppert
f9ed249f10 - moved shared NIC config parameter init and parsing code to separate functions
(mac, ethmod, ethdev, script and bootrom)
2011-12-23 14:40:43 +00:00
Volker Ruppert
04b0bcb746 - some work for the case the plugin support is turned off
- added plugin unload function and improved load function
  - use new function in bx_unload_plugins()
- new macro BX_UNREGISTER_DEVICE_DEVMODEL for future enhancements
2011-12-23 12:01:58 +00:00
Volker Ruppert
6df6f4ff76 - renamed 'user options' to 'addon options'. When a load option for optional
plugins is implemented in bochsrc, these functions can be used to install
  additional options from the devices code. Then the whole init / parse / save
  code for this device can be moved from config.cc to the device plugin.
2011-12-23 10:03:10 +00:00
Stanislav Shwartsman
4bb4d29f8c better report supported CPUID features when not using pre-defined CPUID profile 2011-12-22 19:12:37 +00:00
Stanislav Shwartsman
d613ce554f added extra CPUID option (VMX) - increase list count 2011-12-22 15:49:16 +00:00
Volker Ruppert
38a797f502 - added function for loading optional plugins in case the plugin support is
turned off. Removed workaround code from devices.cc.
- removed 'pci_ide' plugin from the optional plugin control, since it depends
  on the presence of 'pci' and 'harddrv'.
- define types for plugin init/fini functions
2011-12-22 10:35:49 +00:00
Volker Ruppert
d070de30dd - removed BX_INFO (used for testing PCI ROM support) 2011-12-22 08:21:48 +00:00
Volker Ruppert
bfa3a14265 - PCI ROM handling fixes
- fixed tmpsize (patch by Sebastian Herbszt)
  - disable PCI ROM access after copying to shadow RAM (same as SeaBIOS)
2011-12-22 07:53:51 +00:00
Volker Ruppert
40052509d2 - PCI ROM handling fixes
- fixed tmpsize (patch by Sebastian Herbszt)
  - disable PCI ROM access after copying to shadow RAM (same as SeaBIOS)
2011-12-22 07:53:25 +00:00
Stanislav Shwartsman
2dee4b12be added VMX .bochsrc option to ctoggle VMX ON/OFF on runtime 2011-12-21 09:11:51 +00:00
Stanislav Shwartsman
e7ed8aca5c move inhibit interrrupts functionality to icount interface 2011-12-21 06:17:45 +00:00
Volker Ruppert
e38772006f - added PCI ROM init code that copies to shadow RAM and use it for both VGA
and other boot ROMs
- define and use PCI constants (patch by Sebastian Herbszt)
2011-12-20 19:34:47 +00:00
Volker Ruppert
46d5caa98d - added PCI ROM init code that copies to shadow RAM and use it for both VGA
and other boot ROMs
- define and use PCI constants (patch by Sebastian Herbszt)
2011-12-20 19:34:05 +00:00
Volker Ruppert
e312454851 - several fixes in PCI ROM code of the memory handlers
- use 'pci_rom_size - 1' as the mask for the offset address
  - ne2k: memory handlers must be disabled if compiled without PCI support
  - svga_cirrus: check for the PCI ROM size to make VBE work correctly
  - added BX_INFO to the mem write handlers
2011-12-20 19:33:16 +00:00
Stanislav Shwartsman
7cdeecf198 VMX: fixed VirtualBox VMX guest Guru Meditation - FS.BASE get corrupted after saving/restoring unusable selector 2011-12-19 16:06:53 +00:00
Stanislav Shwartsman
6cc03432d9 improve VMX debug print 2011-12-18 21:04:30 +00:00
Volker Ruppert
927d9bb057 - added PCI network boot ROM support to all network adapters. The ISA version
of the NE2000 is not supported and it currently requires SeaBIOS to boot.
- TODO: implement PCI network boot ROM support in the Bochs BIOS
2011-12-18 20:26:14 +00:00
Stanislav Shwartsman
f6203dae7d instrumentation: added special indication for indirect call/jump 2011-12-18 18:11:56 +00:00
Volker Ruppert
e635b86c16 - unload optional and user plugins first to avoid segfault in case of
dependencies on core plugins
- added missing core plugins to unload
2011-12-18 10:47:26 +00:00
Volker Ruppert
c9af6d043d - all networking modules: check device receive status before sending packet
- networking modules 'slirp' and 'vnet': use device speed for timing of
  emulated replies.
2011-12-18 09:12:38 +00:00
Stanislav Shwartsman
9763643106 VMX: Fixed VMFUNC instruction behavior to align with Intel SDM revision 041 2011-12-17 14:06:23 +00:00
Stanislav Shwartsman
fa7c225405 fixed typo - closing SF bug [3461405] step all command fails in SMP mode 2011-12-17 13:32:08 +00:00
Volker Ruppert
27c857784d - prepared receive status callback function that returns several flags.
For now it returns a flag that indicated that the device can receive data
  from the eth module and flags for the device speed. TODO: Use this callback
  in the eth modules before sending data to the device.
2011-12-17 08:22:33 +00:00
Stanislav Shwartsman
83cf658361 simplify x87 polinoms evaluation code 2011-12-16 19:22:03 +00:00
Volker Ruppert
982064bc5a - small cleanups 2011-12-16 19:16:44 +00:00
Volker Ruppert
c1c222f7d0 - some 'pcipnic' device fixes (plugin make rule, PCI BAR number, init message) 2011-12-16 18:34:48 +00:00
Volker Ruppert
dd678424f0 - more work on the new E1000 device
- another temporary solution for host from/to little endian conversion
  - changed some variable types to bx_bool
  - some other small cleanups
  - TODO: add boot ROM support to all network devices
2011-12-15 20:57:43 +00:00
Stanislav Shwartsman
50d6ab3a1b fixed compilation issue under win32 --with-nogui 2011-12-15 19:33:06 +00:00
Volker Ruppert
14256dcc09 - more work on the new E1000 device
- added save/restore support
  - added description in bochsrc sample
  - added to script .conf.everything
2011-12-14 22:48:57 +00:00
Stanislav Shwartsman
352fe5cc29 update devices.txt 2011-12-14 21:39:17 +00:00
Volker Ruppert
89ddc6e049 - regenerated after adding E1000 support 2011-12-14 16:52:13 +00:00
Volker Ruppert
5045a241e8 - ported Intel(R) 82540EM Gigabit Ethernet adapter emulation from Qemu
- TODO: add save/restore support, use Bochs function for host to little endian
  data conversion, timers of networking modules 'vnet' and 'slirp' should use
  the device speed instead of fixed 10 MBit
2011-12-13 20:53:44 +00:00
Volker Ruppert
51cf9faa12 - added missing dependencies for cdrom_osx.o 2011-12-11 12:07:01 +00:00
Stanislav Shwartsman
cbbd8bfd46 fixed some warnings after compilation with msvcpp 2010 2011-12-10 18:58:25 +00:00
Stanislav Shwartsman
76449fa8a5 applied SF patch 2011-12-10 08:20:19 +00:00
Stanislav Shwartsman
ac0ebc9728 added debug prints about vmcs initialization 2011-12-09 19:57:40 +00:00
Stanislav Shwartsman
117333ca8f fixed SF bug: Crash on WIN2K - ID: 3454214 2011-12-08 06:46:52 +00:00
Volker Ruppert
34644308f7 - added 'nokeyrepeat' option for the win32 gui 2011-12-04 21:15:35 +00:00
Volker Ruppert
eafa122339 - added 'nokeyrepeat' option for the SDL gui 2011-12-04 09:04:16 +00:00
Volker Ruppert
c4e2c080cc - added multiuser support to the Bochs installer. This fixes SF bug #3018258. 2011-12-04 08:25:01 +00:00
Stanislav Shwartsman
d3fe5c607e compilation fix 2011-12-02 20:11:57 +00:00
Stanislav Shwartsman
81f55b5be7 improved the fix for busmaster DMA transfers from device to memory done by Volker 2011-12-02 19:41:54 +00:00
Stanislav Shwartsman
f496e78326 fixed compilation warning 2011-12-02 19:40:31 +00:00
Volker Ruppert
1f18f5831f - final fix for busmaster DMA transfers from device to memory: new memory method
writePhysicalBlock() replaces the buggy code in iodev.h.
  Calling pageWriteStampTable.decWriteStamp(addr) is required here to make memcpy() work.
2011-11-30 17:11:43 +00:00
Stanislav Shwartsman
1e3e6ff2af BMI: fixed EFLAGS after BMI instructions (set EFLAGS while preserving PF was not implemented properly in 2.5 release) 2011-11-29 19:50:26 +00:00
Volker Ruppert
be53c733cf - temporary fix for the possible failure of busmaster DMA transfers caused by
memcpy(). The reason for the failure is unknown. Using writePhysicalPage()
  is safe, but slower and it only works on little endian hosts. On big endian
  hosts the data block would be copied in reverse order. We have to check
  whether or not this behaviour is expected for blocks > 8 bytes.
2011-11-29 19:36:41 +00:00
Stanislav Shwartsman
b8f2d91b9a fixed compilation err 2011-11-28 21:16:40 +00:00