diff options
author | Andrew Schultz <alschult@umich.edu> | 2004-05-12 16:55:49 -0400 |
---|---|---|
committer | Andrew Schultz <alschult@umich.edu> | 2004-05-12 16:55:49 -0400 |
commit | ab9415a2bd608246501b33f5670d2a3ecc746dde (patch) | |
tree | 5934840c601813776fd0e1f9c34cdcda57b9fb97 /dev/ide_ctrl.hh | |
parent | c5ec5bf3a746ae5ccbd80e5959807cf35e1d4b93 (diff) | |
download | gem5-ab9415a2bd608246501b33f5670d2a3ecc746dde.tar.xz |
Fixes to DMA writing (still unverified) and added serialize/unserialize
dev/ide_ctrl.cc:
Added serialize/unserialize functions and move some inlined functions
to regular functions
dev/ide_ctrl.hh:
Change inlined functions to regular functions
dev/ide_disk.cc:
Changes to dmaWrite and also add serialize/unserialize functions
dev/ide_disk.hh:
Support for serializing/unserializing
--HG--
extra : convert_revision : 40e016dc7f6637b033fe33409338437c985a05f4
Diffstat (limited to 'dev/ide_ctrl.hh')
-rw-r--r-- | dev/ide_ctrl.hh | 61 |
1 files changed, 5 insertions, 56 deletions
diff --git a/dev/ide_ctrl.hh b/dev/ide_ctrl.hh index b4de97036..9698724c1 100644 --- a/dev/ide_ctrl.hh +++ b/dev/ide_ctrl.hh @@ -27,7 +27,8 @@ */ /** @file - * Simple PCI IDE controller with bus mastering capability + * Simple PCI IDE controller with bus mastering capability and UDMA + * modeled after controller in the Intel PIIX4 chip */ #ifndef __IDE_CTRL_HH__ @@ -139,65 +140,13 @@ class IdeController : public PciDev private: /** Parse the access address to pass on to device */ void parseAddr(const Addr &addr, Addr &offset, bool &primary, - RegType_t &type) - { - offset = addr; - - if (addr >= pri_cmd_addr && addr < (pri_cmd_addr + pri_cmd_size)) { - offset -= pri_cmd_addr; - type = COMMAND_BLOCK; - primary = true; - } else if (addr >= pri_ctrl_addr && - addr < (pri_ctrl_addr + pri_ctrl_size)) { - offset -= pri_ctrl_addr; - type = CONTROL_BLOCK; - primary = true; - } else if (addr >= sec_cmd_addr && - addr < (sec_cmd_addr + sec_cmd_size)) { - offset -= sec_cmd_addr; - type = COMMAND_BLOCK; - primary = false; - } else if (addr >= sec_ctrl_addr && - addr < (sec_ctrl_addr + sec_ctrl_size)) { - offset -= sec_ctrl_addr; - type = CONTROL_BLOCK; - primary = false; - } else if (addr >= bmi_addr && addr < (bmi_addr + bmi_size)) { - offset -= bmi_addr; - type = BMI_BLOCK; - primary = (offset < BMIC1) ? true : false; - } else { - panic("IDE controller access to invalid address: %#x\n", addr); - } - }; + RegType_t &type); /** Select the disk based on the channel and device bit */ - int getDisk(bool primary) - { - int disk = 0; - uint8_t *devBit = &dev[0]; - - if (!primary) { - disk += 2; - devBit = &dev[1]; - } - - disk += *devBit; - - assert(*devBit == 0 || *devBit == 1); - - return disk; - }; + int getDisk(bool primary); /** Select the disk based on a pointer */ - int getDisk(IdeDisk *diskPtr) - { - for (int i = 0; i < 4; i++) { - if ((long)diskPtr == (long)disks[i]) - return i; - } - return -1; - } + int getDisk(IdeDisk *diskPtr); public: /** |