summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/arm7/arm7.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/arm7/arm7.h')
-rw-r--r--src/devices/cpu/arm7/arm7.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/devices/cpu/arm7/arm7.h b/src/devices/cpu/arm7/arm7.h
index 02d422ec0f9..05ea453ef53 100644
--- a/src/devices/cpu/arm7/arm7.h
+++ b/src/devices/cpu/arm7/arm7.h
@@ -158,6 +158,24 @@ protected:
bool m_insn_prefetch_valid[3];
const uint32_t m_prefetch_word0_shift;
const uint32_t m_prefetch_word1_shift;
+ int m_tlb_log;
+ int m_actual_log;
+
+ struct tlb_entry
+ {
+ bool valid;
+ uint8_t domain;
+ uint8_t access;
+ uint32_t table_bits;
+ uint32_t base_addr;
+ uint8_t type;
+ };
+ tlb_entry m_dtlb_entries[64];
+ tlb_entry m_itlb_entries[64];
+ uint8_t m_dtlb_entry_start[32];
+ uint8_t m_itlb_entry_start[32];
+ uint8_t m_dtlb_entry_index[32];
+ uint8_t m_itlb_entry_index[32];
bool m_pendingIrq;
bool m_pendingFiq;
@@ -235,8 +253,15 @@ protected:
void arm9ops_e(uint32_t insn);
void set_cpsr(uint32_t val);
- bool arm7_tlb_translate(offs_t &addr, int flags);
- uint32_t arm7_tlb_get_second_level_descriptor( uint32_t granularity, uint32_t first_desc, uint32_t vaddr );
+ bool translate_vaddr_to_paddr(offs_t &addr, const int flags);
+ bool page_table_finish_translation(offs_t &vaddr, const uint8_t type, const uint32_t lvl1, const uint32_t lvl2, const int flags, const uint32_t lvl1a, const uint32_t lvl2a);
+ bool page_table_translate(offs_t &vaddr, const int flags);
+ tlb_entry *tlb_map_entry(const offs_t vaddr, const int flags);
+ tlb_entry *tlb_probe(const offs_t vaddr, const int flags);
+ uint32_t get_fault_from_permissions(const uint8_t access, const uint8_t domain, const uint8_t type, const int flags);
+ uint32_t tlb_check_permissions(tlb_entry *entry, const int flags);
+ offs_t tlb_translate(tlb_entry *entry, const offs_t vaddr);
+ uint32_t get_lvl2_desc_from_page_table(uint32_t granularity, uint32_t first_desc, uint32_t vaddr);
int detect_fault(int desc_lvl1, int ap, int flags);
void arm7_check_irq_state();
void update_irq_state();