2 |
#define CPU_ALPHA_H |
#define CPU_ALPHA_H |
3 |
|
|
4 |
/* |
/* |
5 |
* Copyright (C) 2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
6 |
* |
* |
7 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
8 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
28 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
29 |
* |
* |
30 |
* |
* |
31 |
* $Id: cpu_alpha.h,v 1.23 2005/08/28 20:16:24 debug Exp $ |
* $Id: cpu_alpha.h,v 1.30 2006/02/09 22:40:27 debug Exp $ |
32 |
*/ |
*/ |
33 |
|
|
34 |
#include "misc.h" |
#include "misc.h" |
72 |
|
|
73 |
/* Translation cache struct for each physical page: */ |
/* Translation cache struct for each physical page: */ |
74 |
struct alpha_tc_physpage { |
struct alpha_tc_physpage { |
75 |
|
struct alpha_instr_call ics[ALPHA_IC_ENTRIES_PER_PAGE + 1]; |
76 |
uint32_t next_ofs; /* or 0 for end of chain */ |
uint32_t next_ofs; /* or 0 for end of chain */ |
77 |
uint32_t physaddr; |
uint32_t physaddr; |
78 |
int flags; |
int flags; |
|
struct alpha_instr_call ics[ALPHA_IC_ENTRIES_PER_PAGE + 1]; |
|
79 |
}; |
}; |
80 |
|
|
81 |
|
|
104 |
|
|
105 |
#define ALPHA_MAX_VPH_TLB_ENTRIES 128 |
#define ALPHA_MAX_VPH_TLB_ENTRIES 128 |
106 |
struct alpha_vpg_tlb_entry { |
struct alpha_vpg_tlb_entry { |
107 |
int valid; |
unsigned char valid; |
108 |
int writeflag; |
unsigned char writeflag; |
109 |
int64_t timestamp; |
int64_t timestamp; |
|
unsigned char *host_page; |
|
110 |
uint64_t vaddr_page; |
uint64_t vaddr_page; |
111 |
uint64_t paddr_page; |
uint64_t paddr_page; |
112 |
|
unsigned char *host_page; |
113 |
}; |
}; |
114 |
|
|
115 |
struct alpha_cpu { |
struct alpha_cpu { |
124 |
/* Misc.: */ |
/* Misc.: */ |
125 |
uint64_t pcc; /* Cycle Counter */ |
uint64_t pcc; /* Cycle Counter */ |
126 |
uint64_t ipl; |
uint64_t ipl; |
127 |
|
uint64_t sysvalue; |
128 |
uint64_t load_linked_addr; |
uint64_t load_linked_addr; |
129 |
int ll_flag; |
int ll_flag; |
130 |
|
|
132 |
/* |
/* |
133 |
* Instruction translation cache: |
* Instruction translation cache: |
134 |
*/ |
*/ |
135 |
|
DYNTRANS_ITC(alpha) |
|
/* cur_ic_page is a pointer to an array of ALPHA_IC_ENTRIES_PER_PAGE |
|
|
instruction call entries. next_ic points to the next such |
|
|
call to be executed. */ |
|
|
struct alpha_tc_physpage *cur_physpage; |
|
|
struct alpha_instr_call *cur_ic_page; |
|
|
struct alpha_instr_call *next_ic; |
|
|
|
|
136 |
|
|
137 |
/* |
/* |
138 |
* Virtual -> physical -> host address translation: |
* Hardcoded Alpha virtual -> physical -> host address translation: |
139 |
*/ |
*/ |
140 |
|
VPH_TLBS(alpha,ALPHA) |
|
struct alpha_vpg_tlb_entry vph_tlb_entry[ALPHA_MAX_VPH_TLB_ENTRIES]; |
|
141 |
struct alpha_vph_page *vph_default_page; |
struct alpha_vph_page *vph_default_page; |
142 |
struct alpha_vph_page *vph_next_free_page; |
struct alpha_vph_page *vph_next_free_page; |
143 |
struct alpha_vph_table *vph_next_free_table; |
struct alpha_vph_table *vph_next_free_table; |
149 |
/* cpu_alpha.c: */ |
/* cpu_alpha.c: */ |
150 |
void alpha_update_translation_table(struct cpu *cpu, uint64_t vaddr_page, |
void alpha_update_translation_table(struct cpu *cpu, uint64_t vaddr_page, |
151 |
unsigned char *host_page, int writeflag, uint64_t paddr_page); |
unsigned char *host_page, int writeflag, uint64_t paddr_page); |
152 |
void alpha_invalidate_translation_caches_paddr(struct cpu *cpu, uint64_t, int); |
void alpha_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); |
153 |
void alpha_invalidate_code_translation(struct cpu *cpu, uint64_t, int); |
void alpha_invalidate_code_translation(struct cpu *cpu, uint64_t, int); |
154 |
int alpha_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr, |
int alpha_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr, |
155 |
unsigned char *data, size_t len, int writeflag, int cache_flags); |
unsigned char *data, size_t len, int writeflag, int cache_flags); |