Home | History | Annotate | Line # | Download | only in ppc
      1 /*  This file is part of the program psim.
      2 
      3     Copyright (C) 1994-1996, Andrew Cagney <cagney (at) highland.com.au>
      4 
      5     This program is free software; you can redistribute it and/or modify
      6     it under the terms of the GNU General Public License as published by
      7     the Free Software Foundation; either version 3 of the License, or
      8     (at your option) any later version.
      9 
     10     This program is distributed in the hope that it will be useful,
     11     but WITHOUT ANY WARRANTY; without even the implied warranty of
     12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13     GNU General Public License for more details.
     14 
     15     You should have received a copy of the GNU General Public License
     16     along with this program; if not, see <http://www.gnu.org/licenses/>.
     17 
     18     */
     19 
     20 
     21 #ifndef _PSIM_H_
     22 #define _PSIM_H_
     23 
     24 #include "basics.h"
     25 
     26 #include "sim/sim.h"
     27 
     28 /* the system object */
     29 /* typedef struct _psim psim; */
     30 /* typedef struct _device device; */
     31 
     32 /* when the `system' stops, find out why.  FIXME - at this point this
     33    is really a bit puzzling.  After all, how can there be a status
     34    when there several processors involved */
     35 
     36 typedef struct _psim_status {
     37   int cpu_nr;
     38   stop_reason reason;
     39   int signal;
     40   unsigned_word program_counter;
     41 } psim_status;
     42 
     43 
     44 /* create an initial device tree and then populate it using
     45    information obtained from either the command line or a file */
     46 
     47 extern device *psim_tree
     48 (void);
     49 
     50 extern char * const *psim_options
     51 (device *root,
     52  char * const *argv,
     53  SIM_OPEN_KIND kind);
     54 
     55 extern void psim_command
     56 (device *root,
     57  char * const *argv);
     58 
     59 
     60 extern void psim_merge_device_file
     61 (device *root,
     62  const char *file_name);
     63 
     64 extern void psim_usage
     65 (int verbose, int help, SIM_OPEN_KIND kind);
     66 
     67 
     68 /* create a new simulator from the device tree */
     69 
     70 extern psim *psim_create
     71 (const char *file_name,
     72  device *root);
     73 
     74 
     75 /* Given the created simulator (re) initialize it */
     76 
     77 extern void psim_init
     78 (psim *system);
     79 
     80 extern void psim_stack
     81 (psim *system,
     82  char * const *argv,
     83  char * const *envp);
     84 
     85 
     86 /* Run/stop the system */
     87 
     88 extern void psim_step
     89 (psim *system);
     90 
     91 extern void psim_run
     92 (psim *system);
     93 
     94 extern void psim_restart
     95 (psim *system,
     96  int cpu_nr) ATTRIBUTE_NORETURN;
     97 
     98 extern void psim_set_halt_and_restart
     99 (psim *system,
    100  void *halt_jmp_buf,
    101  void *restart_jmp_buf);
    102 
    103 extern void psim_clear_halt_and_restart
    104 (psim *system);
    105 
    106 extern void psim_stop
    107 (psim *system);
    108 
    109 extern void psim_halt
    110 (psim *system,
    111  int cpu_nr,
    112  stop_reason reason,
    113  int signal) ATTRIBUTE_NORETURN;
    114 
    115 extern int psim_last_cpu
    116 (psim *system);
    117 
    118 extern int psim_nr_cpus
    119 (psim *system);
    120 
    121 
    122 extern psim_status psim_get_status
    123 (psim *system);
    124 
    125 
    126 /* reveal the internals of the simulation.  Grant access to the
    127    processor (cpu) device tree (device) and events (event_queue). */
    128 
    129 extern cpu *psim_cpu
    130 (psim *system,
    131  int cpu_nr);
    132 
    133 extern device *psim_device
    134 (psim *system,
    135  const char *path);
    136 
    137 extern event_queue *psim_event_queue
    138 (psim *system);
    139 
    140 
    141 
    142 /* Manipulate the state (registers or memory) of a processor within
    143    the system.  In the case of memory, the read/write is performed
    144    using the specified processors address translation tables.
    145 
    146    Where applicable, WHICH_CPU == -1 indicates all processors and
    147    WHICH_CPU == <nr_cpus> indicates the `current' processor.
    148 
    149    The register functions return the size of the register, or 0 if the
    150    register's name is not recognized.  */
    151 
    152 extern int psim_read_register
    153 (psim *system,
    154  int which_cpu,
    155  void *host_ordered_buf,
    156  const char reg[],
    157  transfer_mode mode);
    158 
    159 extern int psim_write_register
    160 (psim *system,
    161  int which_cpu,
    162  const void *buf,
    163  const char reg[],
    164  transfer_mode mode);
    165 
    166 extern unsigned psim_read_memory
    167 (psim *system,
    168  int which_cpu,
    169  void *buf,
    170  unsigned_word vaddr,
    171  unsigned len);
    172 
    173 extern unsigned psim_write_memory
    174 (psim *system,
    175  int which_cpu,
    176  const void *buf,
    177  unsigned_word vaddr,
    178  unsigned len,
    179  int violate_read_only_section);
    180 
    181 extern void psim_print_info
    182 (psim *system,
    183  int verbose);
    184 
    185 #endif /* _PSIM_H_ */
    186