| |
| |
| BIOS Device Mapping Techniques |
| |
| |
| NOTE: This is only necessary to do for hard disks. Floppies are |
| already easy to determine. (IDE are in the order of "Master from |
| controller on INT 14, Slave from controller on INT 14, Master from |
| controller on INT 15, and Slave from controller on INT 15, and |
| always come before SCSI) |
| |
| |
| Both of these techniques should be usable from any PC OS, and neither |
| require any special support in the drivers themselves. This document |
| will be flushed out into detailed explanations, particularly for #2 |
| below. |
| |
| The general rule is that technique #1 is the quick and dirty solution. |
| It works most of the time, but doesn't cover all the bases, and is |
| relatively simple. |
| |
| Technique #2 is much more complex, but it has potential to solve the |
| problem under all conditions, plus allow access of the remaining |
| BIOS devices when not all of them have OS drivers. |
| |
| |
| -- BIOS device mapping technique #1 -- |
| |
| Before activating ANY of the device drivers, gather enough data |
| from similar sectors on each of the disks such that each one can be |
| uniquely identified. |
| |
| After activating the device drivers, compare data from the drives |
| using the OS drivers. This should hopefully be sufficient to provide |
| such a mapping. |
| |
| Problems: (1) The data on some BIOS devices might be identical (so |
| the part reading the drives from the BIOS should have some mechanism |
| to give up), and (2) There might be extra drives not accessible from |
| the BIOS which are identical to some drive used by the BIOS (so it |
| should be capable of giving up there as well). |
| |
| |
| -- BIOS device mapping technique #2 -- |
| |
| This first step may be unnecessary, but first create copy-on-write |
| mappings for the device drivers writing into PC RAM. Keep the original |
| copies for the "clean BIOS virtual machine" to be created later. |
| |
| For each device driver brought online, determine which BIOS devices |
| become inaccessible by: |
| |
| -- Creating a "clean BIOS virtual machine". |
| -- Set the I/O permission map for the I/O area claimed by the device driver |
| to no permissions (neither read nor write). |
| -- Access each device. |
| -- Record which devices succed, and those which try to access the |
| "restricted" I/O areas (hopefully, this will be an "xor" situation). |
| |
| For each device driver, given how many of the BIOS devices were subsumed |
| by it (there should be no gaps in this list), it should be easy to |
| determine which devices on the controller these are. |
| |
| In general, you have at most 2 disks from each controller given BIOS numbers, |
| but they pretty much always count from the lowest logically numbered devices |
| on the controller. |
| |
| |