- new functions raise_irq() and lower_irq()
- all trigger_irq() / untrigger_irq() calls are replaced by the new functions
- REMARK: timer IRQ handling is not correct but it works
- TODO: IOAPIC IRQ handling needs to be changed
of just panicing. In particular, if the logical sector is out of bounds
or the disk image cannot be read/written at the desired offset, we now
abort the ATA command and return an error code. Many of the old BX_PANIC
messages are turned to BX_ERROR, so they will still appear in the
log, but now the device model will try to communicate this fact to
the OS instead of simply giving up.
I still need to do add some commands from older specs that are obsolete
(and not listed) in ATAPI-6.
- commands that aren't in the spec will still panic.
- fill in names from spec on various commands
- add command aborted for 0x08 device reset on disks (it's only for ATAPI)
- add command aborted for 0xe1 idle immediate
This is a patch from Volker Ruppert <Volker.Ruppert@t-online.de>, who
comments: "The fdisk command reports an unusable second harddisk if the cdrom
is enabled. This patch helps, but I don't know if it is the right way."
> The Linux 2.4.5 CD-ROM driver sends a READ_DISC_INFO command which caused
> an "unrecognized ATAPI command" panic. Looks like READ_DISC_INFO is only
> recognized by CD-R and CD-RW drives, so I ignore it for now. (I don't
> know if ASC_INV_FIELD_IN_CMD_PACKET is the right code, but it shouldn't
> matter to Linux anyway.)
been converted into parameters temporarily have the letter "O" appended
to their name. I don't want to keep it this way, but it has helped
in the conversion process because the compiler refuses to compile the
old uses of the name. Before I started using the "O" trick, there were
many bugs like this: if (bx_options.diskc.present) {...}
This was legal with the new parameters, but it was testing whether the
parameter structure had been created, instead of testing the value of
the present parameter. Renaming present to Opresent turns this into
a compile error, which points out the incorrect use of the param.
- the "--disable-control-panel" no longer works, I'm afraid. I can no
longer support this and continue progress.
To see the commit logs for this use either cvsweb or
cvs update -r BRANCH-io-cleanup and then 'cvs log' the various files.
In general this provides a generic interface for logging.
logfunctions:: is a class that is inherited by some classes, and also
. allocated as a standalone global called 'genlog'. All logging uses
. one of the ::info(), ::error(), ::ldebug(), ::panic() methods of this
. class through 'BX_INFO(), BX_ERROR(), BX_DEBUG(), BX_PANIC()' macros
. respectively.
.
. An example usage:
. BX_INFO(("Hello, World!\n"));
iofunctions:: is a class that is allocated once by default, and assigned
as the iofunction of each logfunctions instance. It is this class that
maintains the file descriptor and other output related code, at this
point using vfprintf(). At some future point, someone may choose to
write a gui 'console' for bochs to which messages would be redirected
simply by assigning a different iofunction class to the various logfunctions
objects.
More cleanup is coming, but this works for now. If you want to see alot
of debugging output, in main.cc, change onoff[LOGLEV_DEBUG]=0 to =1.
Comments, bugs, flames, to me: todd@fries.net
- made the code that fills 0x1b-0x23 for diskc conditional on diskc being
present; this was probably not necessary.
- added some code (still commented out) that will help in supporting a second
IDE interface.