Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 May 2007 16:24:52 +0200
From:      "Die Gestalt" <die.gestalt@gmail.com>
To:        freebsd-drivers@freebsd.org
Subject:   Generic int 13h driver
Message-ID:  <5bf3e10d0705150724q3f0fd25fq89094bd02d8f9d29@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi gurus,

As the subject implies I'm currently doing the most unholy thing ever. I'm
writing a driver that accesses hard disks through BIOS int13h. The reasons
why I'm doing this are many, but mainly I will be in a situation where I
will not be able to update my kernel and where I want to support as much
devices as possible. I know this will be slow and I know this will only work
on the i386 platform, I accept that.

So far so good, I have a skeleton which is able to query the drive
parameters and some basic stuff. But when I want to read, this doesn't work,
except in QEmu (http://www.qemu.org). I've tried on a VMWare and a real
machine, what I get is a stall for maybe 10 s (sometimes not) and the
operations returns saying it's successful but my buffer is actually left
untouched. I get no kernel message.

My code makes use of the vm86_datacall() API to make requests to the int
13h. I've tried both function 02h and 42h without success.

Of course I only attempt this on devices where support has been removed from
the kernel (to avoid all conflict). No X server is running on the test
machine.

I've compiled a kernel without APIC and ACPI support and removed as many
devices as possible same problem.

So my questions are :

 - Why does it work in QEmu and not in VMWare or on my laptop ?
 - Is there something in the VM86 monitor that would prevent this from
working ?

Thanks in advance any help or hint would be greatly appreciated.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5bf3e10d0705150724q3f0fd25fq89094bd02d8f9d29>