summaryrefslogtreecommitdiff
path: root/dev/pcidev.cc
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-10-22 01:34:40 -0400
committerNathan Binkert <binkertn@umich.edu>2004-10-22 01:34:40 -0400
commitb881408ed76a0ad9bd6a3992230b89dcec3a25bd (patch)
tree765f012ba50169db14f16763e5297ebd5be0cb27 /dev/pcidev.cc
parentf267dc4a8729179ed99ec591af2ba434cb644755 (diff)
downloadgem5-b881408ed76a0ad9bd6a3992230b89dcec3a25bd.tar.xz
Clean up the Range class and associated usages. The code was
never clear about whether the end of the range was inclusive or exclusive. Make it inclusive, but also provide a RangeSize() function that will generate a Range based on a start and a size. This, in combination with using the comparison operators, makes almost all usages of the range not care how it is stored. base/range.cc: Make the end of the range inclusive. start/end -> first/last (end seems too much like end() in stl) base/range.hh: Make the end of the range inclusive. Fix all comparison operators so that they work correctly with an inclusive range. Also, when comparing one range to another with <, <=, >, >=, we only look at the beginning of the range beacuse x <= y should be the same as x < y || x == y. (This wasn't the case before.) Add a few functions for making a range: RangeSize is start and size RangeEx is start and end where end is exclusive RangeIn is start and end where end is inclusive start/end -> first/last (end seems too much like end() in stl) dev/alpha_console.cc: dev/baddev.cc: dev/ide_ctrl.cc: dev/ns_gige.cc: dev/pciconfigall.cc: dev/pcidev.cc: dev/tsunami_cchip.cc: dev/tsunami_io.cc: dev/tsunami_pchip.cc: dev/uart.cc: Use the RangeSize function to create a range. --HG-- extra : convert_revision : 29a7eb7fce745680f1c77fefff456c2144bc3994
Diffstat (limited to 'dev/pcidev.cc')
-rw-r--r--dev/pcidev.cc33
1 files changed, 11 insertions, 22 deletions
diff --git a/dev/pcidev.cc b/dev/pcidev.cc
index 950d98b54..f0ceb40f2 100644
--- a/dev/pcidev.cc
+++ b/dev/pcidev.cc
@@ -184,21 +184,17 @@ PciDev::WriteConfig(int offset, int size, uint32_t data)
if (word_value & ~0x1) {
Addr base_addr = (word_value & ~0x1) + TSUNAMI_PCI0_IO;
- Addr base_size = BARSize[barnum]-1;
+ Addr base_size = BARSize[barnum];
// It's never been set
if (BARAddrs[barnum] == 0)
mmu->add_child((FunctionalMemory *)this,
- Range<Addr>(base_addr,
- base_addr + base_size));
+ RangeSize(base_addr, base_size));
else
mmu->update_child((FunctionalMemory *)this,
- Range<Addr>(BARAddrs[barnum],
- BARAddrs[barnum] +
- base_size),
- Range<Addr>(base_addr,
- base_addr +
- base_size));
+ RangeSize(BARAddrs[barnum],
+ base_size),
+ RangeSize(base_addr, base_size));
BARAddrs[barnum] = base_addr;
}
@@ -212,21 +208,17 @@ PciDev::WriteConfig(int offset, int size, uint32_t data)
Addr base_addr = (word_value & ~0x3) +
TSUNAMI_PCI0_MEMORY;
- Addr base_size = BARSize[barnum]-1;
+ Addr base_size = BARSize[barnum];
// It's never been set
if (BARAddrs[barnum] == 0)
mmu->add_child((FunctionalMemory *)this,
- Range<Addr>(base_addr,
- base_addr + base_size));
+ RangeSize(base_addr, base_size));
else
mmu->update_child((FunctionalMemory *)this,
- Range<Addr>(BARAddrs[barnum],
- BARAddrs[barnum] +
- base_size),
- Range<Addr>(base_addr,
- base_addr +
- base_size));
+ RangeSize(BARAddrs[barnum],
+ base_size),
+ RangeSize(base_addr, base_size));
BARAddrs[barnum] = base_addr;
}
@@ -273,10 +265,7 @@ PciDev::unserialize(Checkpoint *cp, const std::string &section)
// Add the MMU mappings for the BARs
for (int i=0; i < 6; i++) {
if (BARAddrs[i] != 0)
- mmu->add_child((FunctionalMemory *)this,
- Range<Addr>(BARAddrs[i],
- BARAddrs[i] +
- BARSize[i] - 1));
+ mmu->add_child(this, RangeSize(BARAddrs[i], BARSize[i]));
}
}