2 |
#define CPU_ALPHA_H |
#define CPU_ALPHA_H |
3 |
|
|
4 |
/* |
/* |
5 |
* Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
* Copyright (C) 2005-2007 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.38 2006/06/24 21:47:23 debug Exp $ |
* $Id: cpu_alpha.h,v 1.45 2006/12/30 13:31:00 debug Exp $ |
32 |
*/ |
*/ |
33 |
|
|
34 |
#include "misc.h" |
#include "misc.h" |
35 |
|
|
36 |
|
#include "alpha_cpu.h" |
37 |
|
|
38 |
|
|
39 |
/* ALPHA CPU types: */ |
/* ALPHA CPU types: */ |
40 |
struct alpha_cpu_type_def { |
struct alpha_cpu_type_def { |
41 |
char *name; |
char *name; |
42 |
|
uint64_t pcs_type; /* See alpha_rpb.h */ |
43 |
int features; |
int features; |
44 |
|
int implver; |
45 |
int icache_shift; |
int icache_shift; |
46 |
int ilinesize; |
int ilinesize; |
47 |
int iway; |
int iway; |
57 |
#define ALPHA_FEATURE_BWX 1 |
#define ALPHA_FEATURE_BWX 1 |
58 |
|
|
59 |
#define ALPHA_CPU_TYPE_DEFS { \ |
#define ALPHA_CPU_TYPE_DEFS { \ |
60 |
{ "21064", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21064", 0x000000002ULL, 0, 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
61 |
{ "21066", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21066", 0x200000004ULL, 0, 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
62 |
{ "21164", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21164", 0x000000005ULL, 0, 1, 16,5,2, 16,5,2, 0,0,0 }, \ |
63 |
{ "21164A-2", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21164A-2", 0x000000007ULL, 0, 1, 16,5,2, 16,5,2, 0,0,0 }, \ |
64 |
{ "21164PC", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21164PC", 0x000000009ULL, 0, 1, 16,5,2, 16,5,2, 0,0,0 }, \ |
65 |
{ "21264", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21264", 0x00000000dULL, 0, 2, 16,5,2, 16,5,2, 0,0,0 }, \ |
66 |
{ "21364", 0, 16,5,2, 16,5,2, 0,0,0 }, \ |
{ "21364", 0x000000000ULL, 0, 3, 16,5,2, 16,5,2, 0,0,0 }, \ |
67 |
{ NULL, 0, 0,0,0, 0,0,0, 0,0,0 } } |
{ NULL, 0x000000000ULL, 0, 0, 0,0,0, 0,0,0, 0,0,0 } } |
68 |
|
|
69 |
|
|
70 |
struct cpu_family; |
struct cpu_family; |
71 |
|
|
72 |
|
/* ALPHA_KENTRY_INT .. ALPHA_KENTRY_SYS */ |
73 |
|
#define N_ALPHA_KENTRY 6 |
74 |
|
|
75 |
#define ALPHA_V0 0 |
#define ALPHA_V0 0 |
76 |
#define ALPHA_A0 16 |
#define ALPHA_A0 16 |
77 |
#define ALPHA_A1 17 |
#define ALPHA_A1 17 |
92 |
"t10", "t11", "ra", "t12", "at", "gp", "sp", "zero" } |
"t10", "t11", "ra", "t12", "at", "gp", "sp", "zero" } |
93 |
|
|
94 |
|
|
95 |
|
/* Dyntrans definitions: */ |
96 |
|
|
97 |
#define ALPHA_N_IC_ARGS 3 |
#define ALPHA_N_IC_ARGS 3 |
98 |
#define ALPHA_INSTR_ALIGNMENT_SHIFT 2 |
#define ALPHA_INSTR_ALIGNMENT_SHIFT 2 |
99 |
#define ALPHA_IC_ENTRIES_SHIFT 11 |
#define ALPHA_IC_ENTRIES_SHIFT 11 |
112 |
DYNTRANS_MISC64_DECLARATIONS(alpha,ALPHA,uint8_t) |
DYNTRANS_MISC64_DECLARATIONS(alpha,ALPHA,uint8_t) |
113 |
|
|
114 |
|
|
115 |
|
#define ALPHA_PAGESHIFT 13 |
116 |
|
|
117 |
|
|
118 |
struct alpha_cpu { |
struct alpha_cpu { |
119 |
|
struct alpha_cpu_type_def cpu_type; |
120 |
|
|
121 |
|
|
122 |
/* |
/* |
123 |
* General Purpose Registers: |
* General Purpose Registers: |
124 |
*/ |
*/ |
134 |
uint64_t load_linked_addr; |
uint64_t load_linked_addr; |
135 |
int ll_flag; |
int ll_flag; |
136 |
|
|
137 |
/* PALcode specific: */ |
/* OSF1 PALcode specific: */ |
138 |
uint64_t wrvptptr; |
uint64_t vptptr; /* Virtual Page Table Ptr */ |
139 |
uint64_t sysvalue; |
uint64_t sysvalue; |
140 |
|
uint64_t kgp; /* Kernel GP */ |
141 |
|
uint64_t kentry[N_ALPHA_KENTRY]; |
142 |
|
uint64_t ctx; /* Ptr to current PCB (?) */ |
143 |
|
struct alpha_pcb pcb; /* Process Control Block */ |
144 |
|
|
145 |
|
|
146 |
/* |
/* |
159 |
void alpha_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); |
void alpha_invalidate_translation_caches(struct cpu *cpu, uint64_t, int); |
160 |
void alpha_invalidate_code_translation(struct cpu *cpu, uint64_t, int); |
void alpha_invalidate_code_translation(struct cpu *cpu, uint64_t, int); |
161 |
void alpha_init_64bit_dummy_tables(struct cpu *cpu); |
void alpha_init_64bit_dummy_tables(struct cpu *cpu); |
162 |
|
int alpha_run_instr(struct cpu *cpu); |
163 |
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, |
164 |
unsigned char *data, size_t len, int writeflag, int cache_flags); |
unsigned char *data, size_t len, int writeflag, int cache_flags); |
165 |
int alpha_userland_memory_rw(struct cpu *cpu, struct memory *mem, |
int alpha_userland_memory_rw(struct cpu *cpu, struct memory *mem, |
175 |
int alpha_translate_v2p(struct cpu *cpu, uint64_t vaddr, |
int alpha_translate_v2p(struct cpu *cpu, uint64_t vaddr, |
176 |
uint64_t *return_addr, int flags); |
uint64_t *return_addr, int flags); |
177 |
|
|
178 |
|
|
179 |
#endif /* CPU_ALPHA_H */ |
#endif /* CPU_ALPHA_H */ |