- Added INT pin init to method init_pci_conf().
- Moved readonly register handling to the common PCI write handler.
- Moved IRQ line reporting to the common PCI write handler.
- Added new structure bx_pci_bar_t that contains all parameters related to the
PCI BARs (type, size, address and r/w handlers).
- Added new methods init_bar_io() and init_bar_mem() to set up the new structure
in the pci device init code.
- Added new method pci_write_handler_common() to handle writes to the normal
BARs and the ROM BAR. Writes to other registers are forwarded to the device
specific PCI write handlers. Removed BAR and ROM BAR handling from the
specific code.
- Added new method pci_bar_change_notify() to execute specific code after BAR
update (vga, ne2k).
- Moved normal BAR handling to method after_restore_pci_state().
- Store pointer to PCI device name in bx_pci_device_c and use it for i/o setup.
- Removed "pseudo device plugin" containing common code and all connectable
USB devices.
- Moved USB device base class and module handling to the Bochs core.
Now loading USB device plugins in usb_common.cc.
- Created separate plugins for each USB device implementation.
- Modified Bochs plugin system to support new plugin type PLUGTYPE_USBDEV.
- Added entries for the non-plugin case similar to the network and sound stuff.
- Since the pci_read_handler() method is identical in most devices, move it
to the base class to reduce code duplication. Only the 'pcidev' device has
it's own implementation (NOTE: it is not maintained yet).
- Minor other fixes and cleanups in some PCI devices.
async mode by default for all USB devices (used by disk, cdrom and floppy).
Whenever we implement a new HC model, it is still possible to set the async mode
to 0 until the async packet completion is working correctly.
- Extended USB callback definition to support different event types sent from
device to HC. Currently we only have the two events "async completion" and
"remote wakeup".
- Implemented event handlers in the UHCI, OHCI and EHCI. For the EHCI version
we currently have no test case.
- The external USB hub now uses this feature at device connect/disconnect.
Now the device change on the hub is correctly detected by the guest OS.
- TODO #1: remote wakeup and async completion for the xHCI.
- TODO #2: event handler for the external hub to make a USB device work on
a chain of hubs.
- TODO #3: the event handler possibly could be used for the packet copy code.
- use get_dwords() and put_dwords() from EHCI sources for reading / writing
xHCI data structures as dword array. This fixes some endianness issues.
- simplified copying data from / to data structures since we can now use the
dword array with the correct byte order directly.
- fixed all remaining "strict-aliasing" GCC warnings.
- Moved UHCI async packet functions to usb_common.h for using then on both
UHCI and OHCI.
- Modified OHCI packet handling based on the UHCI implementation.
- Renamed EHCI helper function to avoid conflicts.
- TODO: async packet support on xHCI.
- Added missing queue handling code for init, reset and device disconnect.
- Added EHCI status access methods for async and periodic state.
- Added a lot of comments (mostly from the original EHCI core code).
- added a hack to make EHCI work in Bochs, but without asynchronous packet
support (tested with "high-speed" USB disk).
- added missing list for connected USB device state.
instead of the hub's remove_device() method. The external hub removes connected
devices before clearing it's own list. This fixes crash on exit when devices
are present on external hub.
Asynchronous transfers are not yet working properly (tested with USB disk device
in high speed mode). That's why the support for "speed:high" is still disabled.
Since we have no test case for the isosynchronous mode, I have not yet ported
the main code for it.
almost implemented, the port owner handling and the UHCI companion controllers
are present. High speed devices are not yet supported, since the EHCI scheduler
code has not been written yet (e.g. porting from Qemu). Low and full speed
devices should be detected correctly and work after port ownership change to
UHCI. 6 ports are available and the bochsrc syntax is similar to other HCs.