/[gxemul]/trunk/src/include/cpu_ppc.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/include/cpu_ppc.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10 by dpavlin, Mon Oct 8 16:18:27 2007 UTC revision 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC
# Line 28  Line 28 
28   *  SUCH DAMAGE.   *  SUCH DAMAGE.
29   *   *
30   *   *
31   *  $Id: cpu_ppc.h,v 1.23 2005/06/26 22:23:43 debug Exp $   *  $Id: cpu_ppc.h,v 1.29 2005/08/14 23:44:23 debug Exp $
32   */   */
33    
34  #include "misc.h"  #include "misc.h"
# Line 72  struct ppc_cpu_type_def { Line 72  struct ppc_cpu_type_def {
72  #define PPC_NGPRS               32  #define PPC_NGPRS               32
73  #define PPC_NFPRS               32  #define PPC_NFPRS               32
74    
75    
76    #define PPC_N_IC_ARGS                   3
77    #define PPC_INSTR_ALIGNMENT_SHIFT       2
78    #define PPC_IC_ENTRIES_SHIFT            10
79    #define PPC_IC_ENTRIES_PER_PAGE         (1 << PPC_IC_ENTRIES_SHIFT)
80    #define PPC_PC_TO_IC_ENTRY(a)           (((a)>>PPC_INSTR_ALIGNMENT_SHIFT) \
81                                            & (PPC_IC_ENTRIES_PER_PAGE-1))
82    #define PPC_ADDR_TO_PAGENR(a)           ((a) >> (PPC_IC_ENTRIES_SHIFT \
83                                            + PPC_INSTR_ALIGNMENT_SHIFT))
84    
85    struct ppc_instr_call {
86            void    (*f)(struct cpu *, struct ppc_instr_call *);
87            size_t  arg[PPC_N_IC_ARGS];
88    };
89    
90    /*  Translation cache struct for each physical page:  */
91    struct ppc_tc_physpage {
92            uint32_t        next_ofs;       /*  or 0 for end of chain  */
93            uint64_t        physaddr;
94            int             flags;
95            struct ppc_instr_call ics[PPC_IC_ENTRIES_PER_PAGE + 1];
96    };
97    
98    #define PPC_N_VPH_ENTRIES               1048576
99    
100    #define PPC_MAX_VPH_TLB_ENTRIES         256
101    struct ppc_vpg_tlb_entry {
102            int             valid;
103            int             writeflag;
104            int64_t         timestamp;
105            unsigned char   *host_page;
106            uint64_t        vaddr_page;
107            uint64_t        paddr_page;
108    };
109    
110  struct ppc_cpu {  struct ppc_cpu {
111          struct ppc_cpu_type_def cpu_type;          struct ppc_cpu_type_def cpu_type;
112    
         int             trace_tree_depth;  
   
113          uint64_t        of_emul_addr;          uint64_t        of_emul_addr;
114          uint64_t        pc_last;          uint64_t        pc_last;
115    
116          int             mode;           /*  MODE_PPC or MODE_POWER  */          int             mode;           /*  MODE_PPC or MODE_POWER  */
117          int             bits;           /*  32 or 64  */          int             bits;           /*  32 or 64  */
118    
119            uint64_t        zero;           /*  A zero register  */
120    
121          uint32_t        cr;             /*  Condition Register  */          uint32_t        cr;             /*  Condition Register  */
122          uint32_t        fpscr;          /*  FP Status and Control Register  */          uint32_t        fpscr;          /*  FP Status and Control Register  */
123          uint64_t        lr;             /*  Link Register  */          uint64_t        lr;             /*  Link Register  */
# Line 106  struct ppc_cpu { Line 141  struct ppc_cpu {
141          uint64_t        sprg3;          /*  Special Purpose Register G3  */          uint64_t        sprg3;          /*  Special Purpose Register G3  */
142          uint32_t        pvr;            /*  Processor Version Register  */          uint32_t        pvr;            /*  Processor Version Register  */
143          uint32_t        pir;            /*  Processor ID  */          uint32_t        pir;            /*  Processor ID  */
144    
145    
146            /*
147             *  Instruction translation cache:
148             */
149    
150            /*  cur_ic_page is a pointer to an array of PPC_IC_ENTRIES_PER_PAGE
151                instruction call entries. next_ic points to the next such
152                call to be executed.  */
153            struct ppc_tc_physpage  *cur_physpage;
154            struct ppc_instr_call   *cur_ic_page;
155            struct ppc_instr_call   *next_ic;
156    
157    
158            /*
159             *  Virtual -> physical -> host address translation:
160             *
161             *  host_load and host_store point to arrays of PPC_N_VPH_ENTRIES
162             *  pointers (to host pages); phys_addr points to an array of
163             *  PPC_N_VPH_ENTRIES uint32_t.
164             */
165    
166            struct ppc_vpg_tlb_entry        vph_tlb_entry[PPC_MAX_VPH_TLB_ENTRIES];
167            unsigned char                   *host_load[PPC_N_VPH_ENTRIES];
168            unsigned char                   *host_store[PPC_N_VPH_ENTRIES];
169            uint32_t                        phys_addr[PPC_N_VPH_ENTRIES];
170            struct ppc_tc_physpage          *phys_page[PPC_N_VPH_ENTRIES];
171  };  };
172    
173    
# Line 136  struct ppc_cpu { Line 198  struct ppc_cpu {
198    
199    
200  /*  cpu_ppc.c:  */  /*  cpu_ppc.c:  */
201  void ppc_cpu_show_full_statistics(struct machine *m);  void ppc_update_translation_table(struct cpu *cpu, uint64_t vaddr_page,
202  void ppc_cpu_register_match(struct machine *m, char *name,          unsigned char *host_page, int writeflag, uint64_t paddr_page);
203          int writeflag, uint64_t *valuep, int *match_register);  void ppc_invalidate_translation_caches_paddr(struct cpu *cpu, uint64_t paddr);
204  void ppc_cpu_register_dump(struct cpu *cpu, int gprs, int coprocs);  void ppc_invalidate_code_translation_caches(struct cpu *cpu);
 int ppc_cpu_disassemble_instr(struct cpu *cpu, unsigned char *instr,  
         int running, uint64_t addr, int bintrans);  
 int ppc_cpu_interrupt(struct cpu *cpu, uint64_t irq_nr);  
 int ppc_cpu_interrupt_ack(struct cpu *cpu, uint64_t irq_nr);  
 int ppc_cpu_run(struct emul *emul, struct machine *machine);  
 void ppc_cpu_dumpinfo(struct cpu *cpu);  
 void ppc_cpu_list_available_types(void);  
205  int ppc_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr,  int ppc_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr,
206          unsigned char *data, size_t len, int writeflag, int cache_flags);          unsigned char *data, size_t len, int writeflag, int cache_flags);
207  int ppc_cpu_family_init(struct cpu_family *);  int ppc_cpu_family_init(struct cpu_family *);

Legend:
Removed from v.10  
changed lines
  Added in v.12

  ViewVC Help
Powered by ViewVC 1.1.26