Skip to content

Commit 83066bb

Browse files
joevtdingusdev
authored andcommitted
memctrlbase: Return entry instead of bool.
1 parent 637c20e commit 83066bb

File tree

6 files changed

+49
-48
lines changed

6 files changed

+49
-48
lines changed

devices/common/pci/pcibridgebase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-23 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -42,7 +42,7 @@ PCIBridgeBase::PCIBridgeBase(std::string name, PCIHeaderType hdr_type, int num_b
4242
this->pci_wr_bridge_control = [this](uint16_t val) { this->bridge_control = val; };
4343
};
4444

45-
bool PCIBridgeBase::pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj)
45+
AddressMapEntry* PCIBridgeBase::pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj)
4646
{
4747
// FIXME: constrain region to memory range
4848
return this->host_instance->pci_register_mmio_region(start_addr, size, obj);

devices/common/pci/pcibridgebase.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-23 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -43,14 +43,14 @@ class PCIBridgeBase : public PCIHost, public PCIBase {
4343
~PCIBridgeBase() = default;
4444

4545
// PCIHost methods
46-
virtual bool pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
47-
virtual bool pci_unregister_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
46+
virtual AddressMapEntry* pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj) override;
47+
virtual bool pci_unregister_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj) override;
4848

4949
// PCIBase methods
50-
virtual uint32_t pci_cfg_read(uint32_t reg_offs, AccessDetails &details);
51-
virtual void pci_cfg_write(uint32_t reg_offs, uint32_t value, AccessDetails &details);
50+
virtual uint32_t pci_cfg_read(uint32_t reg_offs, AccessDetails &details) override;
51+
virtual void pci_cfg_write(uint32_t reg_offs, uint32_t value, AccessDetails &details) override;
5252

53-
bool supports_io_space() {
53+
bool supports_io_space() override {
5454
return true;
5555
};
5656

@@ -69,7 +69,7 @@ class PCIBridgeBase : public PCIHost, public PCIBase {
6969
std::function<void(uint16_t)> pci_wr_bridge_control;
7070

7171
// HWComponent methods
72-
virtual int device_postinit();
72+
virtual int device_postinit() override;
7373

7474
protected:
7575
// PCI configuration space state

devices/common/pci/pcihost.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-24 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -23,7 +23,6 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
2323
#include <devices/common/pci/pcibridge.h>
2424
#include <devices/common/pci/pcihost.h>
2525
#include <devices/deviceregistry.h>
26-
#include <devices/memctrl/memctrlbase.h>
2726
#include <machines/machinefactory.h>
2827
#include <machines/machinebase.h>
2928
#include <endianswap.h>
@@ -90,7 +89,7 @@ void PCIHost::pci_unregister_device(int dev_fun_num)
9089
gMachineObj->remove_device(dev_instance); // calls destructor of dev_instance since it is a unique_ptr in the device_map.
9190
}
9291

93-
bool PCIHost::pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj)
92+
AddressMapEntry* PCIHost::pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj)
9493
{
9594
MemCtrlBase *mem_ctrl = dynamic_cast<MemCtrlBase *>
9695
(gMachineObj->get_comp_by_type(HWCompType::MEM_CTRL));

devices/common/pci/pcihost.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-24 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -24,6 +24,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
2424

2525
#include <core/bitops.h>
2626
#include <devices/common/hwinterrupt.h>
27+
#include <devices/memctrl/memctrlbase.h>
2728
#include <endianswap.h>
2829

2930
#include <cinttypes>
@@ -70,8 +71,8 @@ class PCIHost {
7071
virtual bool pci_register_device(int dev_fun_num, PCIBase* dev_instance);
7172
virtual void pci_unregister_device(int dev_fun_num);
7273

73-
virtual bool pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
74-
virtual bool pci_unregister_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
74+
virtual AddressMapEntry* pci_register_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
75+
virtual bool pci_unregister_mmio_region(uint32_t start_addr, uint32_t size, PCIBase* obj);
7576

7677
virtual void attach_pci_device(const std::string& dev_name, int slot_id);
7778
PCIBase *attach_pci_device(const std::string& dev_name, int slot_id,

devices/memctrl/memctrlbase.cpp

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-24 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -188,15 +188,15 @@ bool MemCtrlBase::is_range_free(uint32_t addr, uint32_t size) {
188188
}
189189

190190

191-
bool MemCtrlBase::add_mem_region(uint32_t start_addr, uint32_t size,
191+
AddressMapEntry* MemCtrlBase::add_mem_region(uint32_t start_addr, uint32_t size,
192192
uint32_t dest_addr, uint32_t type,
193193
uint8_t init_val = 0)
194194
{
195195
AddressMapEntry *entry;
196196

197197
// bail out if a memory region for the given range already exists
198198
if (!is_range_free(start_addr, size))
199-
return false;
199+
return nullptr;
200200

201201
uint8_t* reg_content = new uint8_t[size](); // allocate and clear to zero
202202

@@ -233,27 +233,27 @@ bool MemCtrlBase::add_mem_region(uint32_t start_addr, uint32_t size,
233233
dest_addr
234234
);
235235

236-
return true;
236+
return entry;
237237
}
238238

239239

240-
bool MemCtrlBase::add_rom_region(uint32_t start_addr, uint32_t size) {
240+
AddressMapEntry* MemCtrlBase::add_rom_region(uint32_t start_addr, uint32_t size) {
241241
return add_mem_region(start_addr, size, 0, RT_ROM);
242242
}
243243

244244

245-
bool MemCtrlBase::add_ram_region(uint32_t start_addr, uint32_t size) {
245+
AddressMapEntry* MemCtrlBase::add_ram_region(uint32_t start_addr, uint32_t size) {
246246
return add_mem_region(start_addr, size, 0, RT_RAM);
247247
}
248248

249249

250-
bool MemCtrlBase::add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
251-
uint32_t offset, uint32_t size) {
250+
AddressMapEntry* MemCtrlBase::add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
251+
uint32_t offset, uint32_t size) {
252252
AddressMapEntry *entry, *ref_entry;
253253

254254
ref_entry = find_range(dest_addr);
255255
if (!ref_entry)
256-
return false;
256+
return nullptr;
257257

258258
// use origin's size if no size was specified
259259
if (!size)
@@ -262,7 +262,7 @@ bool MemCtrlBase::add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
262262
if (ref_entry->start + offset + size - 1 > ref_entry->end) {
263263
LOG_F(ERROR, "Partial mirror outside the origin, offset=0x%X, size=0x%X",
264264
offset, size);
265-
return false;
265+
return nullptr;
266266
}
267267

268268
entry = new AddressMapEntry;
@@ -291,45 +291,45 @@ bool MemCtrlBase::add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
291291
: ""
292292
);
293293

294-
return true;
294+
return entry;
295295
}
296296

297297

298-
bool MemCtrlBase::add_mem_mirror(uint32_t start_addr, uint32_t dest_addr) {
298+
AddressMapEntry* MemCtrlBase::add_mem_mirror(uint32_t start_addr, uint32_t dest_addr) {
299299
return this->add_mem_mirror_common(start_addr, dest_addr);
300300
}
301301

302302

303-
bool MemCtrlBase::add_mem_mirror_partial(uint32_t start_addr, uint32_t dest_addr,
304-
uint32_t offset, uint32_t size) {
303+
AddressMapEntry* MemCtrlBase::add_mem_mirror_partial(uint32_t start_addr, uint32_t dest_addr,
304+
uint32_t offset, uint32_t size) {
305305
return this->add_mem_mirror_common(start_addr, dest_addr, offset, size);
306306
}
307307

308308

309-
bool MemCtrlBase::set_data(uint32_t load_addr, const uint8_t* data, uint32_t size) {
309+
AddressMapEntry* MemCtrlBase::set_data(uint32_t load_addr, const uint8_t* data, uint32_t size) {
310310
AddressMapEntry* ref_entry;
311311
uint32_t cpy_size;
312312

313313
ref_entry = find_range(load_addr);
314314
if (!ref_entry)
315-
return false;
315+
return nullptr;
316316

317317
uint32_t load_offset = load_addr - ref_entry->start;
318318

319319
cpy_size = std::min(ref_entry->end - ref_entry->start + 1, size);
320320
memcpy(ref_entry->mem_ptr + load_offset, data, cpy_size);
321321

322-
return true;
322+
return ref_entry;
323323
}
324324

325325

326-
bool MemCtrlBase::add_mmio_region(uint32_t start_addr, uint32_t size, MMIODevice* dev_instance)
326+
AddressMapEntry* MemCtrlBase::add_mmio_region(uint32_t start_addr, uint32_t size, MMIODevice* dev_instance)
327327
{
328328
AddressMapEntry *entry;
329329

330330
// bail out if a memory region for the given range already exists
331331
if (!is_range_free(start_addr, size))
332-
return false;
332+
return nullptr;
333333

334334
entry = new AddressMapEntry;
335335

@@ -351,9 +351,10 @@ bool MemCtrlBase::add_mmio_region(uint32_t start_addr, uint32_t size, MMIODevice
351351
: ""
352352
);
353353

354-
return true;
354+
return entry;
355355
}
356356

357+
357358
bool MemCtrlBase::remove_mmio_region(uint32_t start_addr, uint32_t size, MMIODevice* dev_instance)
358359
{
359360
int found = 0;

devices/memctrl/memctrlbase.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
DingusPPC - The Experimental PowerPC Macintosh emulator
3-
Copyright (C) 2018-24 divingkatae and maximum
3+
Copyright (C) 2018-25 divingkatae and maximum
44
(theweirdo) spatium
55
66
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
@@ -64,18 +64,18 @@ class MemCtrlBase {
6464
public:
6565
MemCtrlBase() = default;
6666
virtual ~MemCtrlBase();
67-
virtual bool add_rom_region(uint32_t start_addr, uint32_t size);
68-
virtual bool add_ram_region(uint32_t start_addr, uint32_t size);
69-
virtual bool add_mem_mirror(uint32_t start_addr, uint32_t dest_addr);
70-
virtual bool add_mem_mirror_partial(uint32_t start_addr, uint32_t dest_addr,
71-
uint32_t offset, uint32_t size);
72-
73-
virtual bool add_mmio_region(uint32_t start_addr, uint32_t size,
74-
MMIODevice* dev_instance);
67+
virtual AddressMapEntry* add_rom_region(uint32_t start_addr, uint32_t size);
68+
virtual AddressMapEntry* add_ram_region(uint32_t start_addr, uint32_t size);
69+
virtual AddressMapEntry* add_mem_mirror(uint32_t start_addr, uint32_t dest_addr);
70+
virtual AddressMapEntry* add_mem_mirror_partial(uint32_t start_addr, uint32_t dest_addr,
71+
uint32_t offset, uint32_t size);
72+
73+
virtual AddressMapEntry* add_mmio_region(uint32_t start_addr, uint32_t size,
74+
MMIODevice* dev_instance);
7575
virtual bool remove_mmio_region(uint32_t start_addr, uint32_t size,
7676
MMIODevice* dev_instance);
7777

78-
virtual bool set_data(uint32_t reg_addr, const uint8_t* data, uint32_t size);
78+
virtual AddressMapEntry* set_data(uint32_t reg_addr, const uint8_t* data, uint32_t size);
7979

8080
AddressMapEntry* find_range(uint32_t addr);
8181
AddressMapEntry* find_range_exact(uint32_t addr, uint32_t size,
@@ -91,13 +91,13 @@ class MemCtrlBase {
9191
void dump_regions();
9292

9393
protected:
94-
bool add_mem_region(
94+
AddressMapEntry* add_mem_region(
9595
uint32_t start_addr, uint32_t size, uint32_t dest_addr, uint32_t type,
9696
uint8_t init_val
9797
);
9898

99-
bool add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
100-
uint32_t offset=0, uint32_t size=0);
99+
AddressMapEntry* add_mem_mirror_common(uint32_t start_addr, uint32_t dest_addr,
100+
uint32_t offset=0, uint32_t size=0);
101101

102102
private:
103103
std::vector<uint8_t*> mem_regions;

0 commit comments

Comments
 (0)