317 |
317 |
IPR_LAST,
|
318 |
318 |
};
|
319 |
319 |
|
320 |
|
typedef struct CPUAlphaState CPUAlphaState;
|
|
320 |
/* MMU modes definitions */
|
|
321 |
|
|
322 |
/* Alpha has 5 MMU modes: PALcode, kernel, executive, supervisor, and user.
|
|
323 |
The Unix PALcode only exposes the kernel and user modes; presumably
|
|
324 |
executive and supervisor are used by VMS.
|
|
325 |
|
|
326 |
PALcode itself uses physical mode for code and kernel mode for data;
|
|
327 |
there are PALmode instructions that can access data via physical mode
|
|
328 |
or via an os-installed "alternate mode", which is one of the 4 above.
|
|
329 |
|
|
330 |
QEMU does not currently properly distinguish between code/data when
|
|
331 |
looking up addresses. To avoid having to address this issue, our
|
|
332 |
emulated PALcode will cheat and use the KSEG mapping for its code+data
|
|
333 |
rather than physical addresses.
|
|
334 |
|
|
335 |
Moreover, we're only emulating Unix PALcode, and not attempting VMS.
|
|
336 |
|
|
337 |
All of which allows us to drop all but kernel and user modes.
|
|
338 |
Elide the unused MMU modes to save space. */
|
321 |
339 |
|
322 |
|
#define NB_MMU_MODES 4
|
|
340 |
#define NB_MMU_MODES 2
|
|
341 |
|
|
342 |
#define MMU_MODE0_SUFFIX _kernel
|
|
343 |
#define MMU_MODE1_SUFFIX _user
|
|
344 |
#define MMU_KERNEL_IDX 0
|
|
345 |
#define MMU_USER_IDX 1
|
|
346 |
|
|
347 |
typedef struct CPUAlphaState CPUAlphaState;
|
323 |
348 |
|
324 |
349 |
struct CPUAlphaState {
|
325 |
350 |
uint64_t ir[31];
|
... | ... | |
370 |
395 |
#define cpu_gen_code cpu_alpha_gen_code
|
371 |
396 |
#define cpu_signal_handler cpu_alpha_signal_handler
|
372 |
397 |
|
373 |
|
/* MMU modes definitions */
|
374 |
|
#define MMU_MODE0_SUFFIX _kernel
|
375 |
|
#define MMU_MODE1_SUFFIX _executive
|
376 |
|
#define MMU_MODE2_SUFFIX _supervisor
|
377 |
|
#define MMU_MODE3_SUFFIX _user
|
378 |
|
#define MMU_USER_IDX 3
|
379 |
398 |
static inline int cpu_mmu_index (CPUState *env)
|
380 |
399 |
{
|
381 |
|
return (env->ps >> 3) & 3;
|
|
400 |
return (env->ps >> 3) & 1;
|
382 |
401 |
}
|
383 |
402 |
|
384 |
403 |
#include "cpu-all.h"
|