Replacing the SeaBios implementation of the delay  in src/clock.c with
the method used in the Bochs BIOS is also a workaround for FreeBSD:

//=========================
// Wait for CX:DX microseconds
void
handle_1586(struct bregs *regs)
{
    // Use the rtc to wait for the specified time.
    u32 count = (regs->cx << 16) | regs->dx;
#if 0
    u8 statusflag = 0;
    int ret = set_usertimer(count, GET_SEG(SS), (u32)&statusflag);
    if (ret) {
        set_code_invalid(regs, RET_ECLOCKINUSE);
        return;
    }
    while (!statusflag)
        wait_irq();
#else
    // Use bochs code: (t...@v7f.eu)
    count/= 15;
    while (count-- > 0) {
      u8 orig = inb(PORT_PS2_CTRLB) & 0x10;
      while (orig == (inb(PORT_PS2_CTRLB) & 0x10))
        ;
    }
#endif
    set_success(regs);
}

//=======================

You can replace /usr/share/seabios/bios.bin with
the bios downloaded from:

http://www.v7f.eu/public/bios.bin

-- 
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to qemu-kvm in Ubuntu.
https://bugs.launchpad.net/bugs/780657

Title:
  FreeBSD Hangs on Boot

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/780657/+subscriptions

-- 
Ubuntu-server-bugs mailing list
Ubuntu-server-bugs@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs

Reply via email to