TEMU  4.4
The Terma Emulator
Sparc.h
Go to the documentation of this file.
1 //===-- temu-c/Sparc.h - SPARCv8 Architecture Interfaces --------*- C++ -*-===//
2 //
3 // TEMU: The Terma Emulator
4 // (c) Terma 2015
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEMU_SPARC_H
10 #define TEMU_SPARC_H
11 
12 #include "temu-c/Memory/Memory.h"
13 #include "temu-c/Support/Objsys.h"
14 #include <stdint.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 typedef void (*temu_SparcAsrHandler)(void *Cpu, uint32_t Instr);
21 typedef void (*temu_SparcAsiHandler)(void *Cpu, temu_MemTransaction *MT);
22 
23 /*!
24  Interface for SPARC specific functionality
25  */
26 typedef struct temu_SparcV8Iface {
27  unsigned (*getWindowCount)(const void *Cpu);
28  uint32_t (*getWindowedReg)(const void *Cpu, int Window, unsigned Reg);
29  void (*setWindowedReg)(void *Cpu, int Window, unsigned Reg, uint32_t Value);
30  void (*setAsiHandler)(void *Cpu, unsigned Asi, int IsWriteAsi,
31  temu_SparcAsiHandler AsiHandler);
32 
33  // Should normally exist as property as well
34  uint32_t (*getAsr)(const void *Cpu, unsigned Asr);
35  void (*setAsr)(void *Cpu, unsigned Asr, uint32_t Value);
36  void (*setAsrReadHandler)(void *Cpu, unsigned Asr,
37  temu_SparcAsrHandler AsrHandler);
38  void (*setAsrWriteHandler)(void *Cpu, unsigned Asr,
39  temu_SparcAsrHandler AsrHandler);
40 
41  // Should go through property instead
42  uint32_t (*getPsr)(const void *Cpu);
43  void (*setPsr)(void *Cpu, uint32_t Value);
44  uint32_t (*getTbr)(const void *Cpu);
45  void (*setTbr)(void *Cpu, uint32_t Value);
46  uint32_t (*getWim)(const void *Cpu);
47  void (*setWim)(void *Cpu, uint32_t Value);
48 
49  uint32_t (*getNPc)(const void *Cpu);
50  void (*setNPc)(void *Cpu, uint32_t Value);
51 
52  uint32_t (*getFsr)(const void *Cpu);
53  void (*setFsr)(void *Cpu, uint32_t Value);
54 
55  uint32_t (*getCsr)(const void *Cpu);
56  void (*setCsr)(void *Cpu, uint32_t Value);
57 
59  void *obj, unsigned asi,
60  void (*asi_probe_handler)(void *cpu, temu_MemTransaction *mt));
61 
62 } temu_SparcV8Iface;
63 #define TEMU_SPARCV8_IFACE_TYPE "SparcIface"
64 TEMU_IFACE_REFERENCE_TYPE(temu_SparcV8);
65 
66 
67 typedef struct {
68  void (*setBootWord)(void *obj, uint32_t bootWord);
69  uint32_t (*getBootWord)(void *obj);
70 
71  void (*powerOn)(void *Cpu);
72  void (*powerOff)(void *Cpu);
73  void (*start)(void *Cpu);
74  void (*cancelStart)(void *Cpu);
75  void (*stop)(void *Cpu);
76  void (*cancelStop)(void *Cpu);
77  void (*wakeUp)(void *Cpu);
78  void (*cancelWakeUp)(void *Cpu);
79 } temu_Leon5Iface;
80 #define TEMU_LEON5_IFACE_TYPE "temu::Leon5Iface"
81 TEMU_IFACE_REFERENCE_TYPE(temu_Leon5);
82 
83 
84 #ifdef __cplusplus
85 }
86 #endif
87 
88 #endif /* ! TEMU_SPARC_H */
temu_SparcV8Iface::setAsrReadHandler
void(* setAsrReadHandler)(void *Cpu, unsigned Asr, temu_SparcAsrHandler AsrHandler)
Definition: Sparc.h:36
temu_SparcV8Iface::setWim
void(* setWim)(void *Cpu, uint32_t Value)
Definition: Sparc.h:47
temu_Leon5Iface::stop
void(* stop)(void *Cpu)
Definition: Sparc.h:75
temu_Leon5Iface::cancelWakeUp
void(* cancelWakeUp)(void *Cpu)
Definition: Sparc.h:78
temu_SparcV8Iface::setAsr
void(* setAsr)(void *Cpu, unsigned Asr, uint32_t Value)
Definition: Sparc.h:35
temu_SparcV8Iface::setTbr
void(* setTbr)(void *Cpu, uint32_t Value)
Definition: Sparc.h:45
temu_Leon5Iface::start
void(* start)(void *Cpu)
Definition: Sparc.h:73
temu_Leon5Iface::powerOn
void(* powerOn)(void *Cpu)
Definition: Sparc.h:71
temu_SparcV8Iface::getWindowCount
unsigned(* getWindowCount)(const void *Cpu)
Definition: Sparc.h:27
temu_Leon5Iface::cancelStop
void(* cancelStop)(void *Cpu)
Definition: Sparc.h:76
temu_SparcV8Iface::setPsr
void(* setPsr)(void *Cpu, uint32_t Value)
Definition: Sparc.h:43
temu_Leon5Iface::wakeUp
void(* wakeUp)(void *Cpu)
Definition: Sparc.h:77
temu_SparcV8Iface::setAsiProbeHandler
void(* setAsiProbeHandler)(void *obj, unsigned asi, void(*asi_probe_handler)(void *cpu, temu_MemTransaction *mt))
Definition: Sparc.h:58
temu_Leon5Iface::setBootWord
void(* setBootWord)(void *obj, uint32_t bootWord)
Definition: Sparc.h:68
temu_Leon5Iface::cancelStart
void(* cancelStart)(void *Cpu)
Definition: Sparc.h:74
temu_SparcV8Iface::setNPc
void(* setNPc)(void *Cpu, uint32_t Value)
Definition: Sparc.h:50
temu_SparcAsrHandler
void(* temu_SparcAsrHandler)(void *Cpu, uint32_t Instr)
Definition: Sparc.h:20
temu_SparcAsiHandler
void(* temu_SparcAsiHandler)(void *Cpu, temu_MemTransaction *MT)
Definition: Sparc.h:21
temu_SparcV8Iface::setAsiHandler
void(* setAsiHandler)(void *Cpu, unsigned Asi, int IsWriteAsi, temu_SparcAsiHandler AsiHandler)
Definition: Sparc.h:30
temu_Leon5Iface::powerOff
void(* powerOff)(void *Cpu)
Definition: Sparc.h:72
temu_SparcV8Iface::setAsrWriteHandler
void(* setAsrWriteHandler)(void *Cpu, unsigned Asr, temu_SparcAsrHandler AsrHandler)
Definition: Sparc.h:38
temu_SparcV8Iface
Definition: Sparc.h:26
temu_SparcV8Iface::setWindowedReg
void(* setWindowedReg)(void *Cpu, int Window, unsigned Reg, uint32_t Value)
Definition: Sparc.h:29
temu_SparcV8Iface::setFsr
void(* setFsr)(void *Cpu, uint32_t Value)
Definition: Sparc.h:53
temu_SparcV8Iface::setCsr
void(* setCsr)(void *Cpu, uint32_t Value)
Definition: Sparc.h:56