1 /* This file is part of the program psim. 2 3 Copyright (C) 1994-1995, Andrew Cagney <cagney@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 2 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, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 21 22 #ifndef _MON_H_ 23 #define _MON_H_ 24 25 #include "basics.h" 26 #include "itable.h" 27 28 /* monitor/logger: counts what the simulation is up to */ 29 30 typedef unsigned long count_type; 31 32 /* Interfact to model to return model specific information */ 33 typedef struct _model_print model_print; 34 struct _model_print { 35 model_print *next; 36 const char *name; 37 const char *suffix_singular; 38 const char *suffix_plural; 39 count_type count; 40 }; 41 42 /* Additional events to monitor */ 43 typedef enum _mon_events { 44 mon_event_icache_miss, 45 nr_mon_events 46 } mon_events; 47 48 typedef struct _mon mon; 49 typedef struct _cpu_mon cpu_mon; 50 51 INLINE_MON\ 52 (mon *) mon_create 53 (void); 54 55 INLINE_MON\ 56 (cpu_mon *) mon_cpu 57 (mon *monitor, 58 int cpu_nr); 59 60 INLINE_MON\ 61 (void) mon_init 62 (mon *monitor, 63 int nr_cpus); 64 65 INLINE_MON\ 66 (void) mon_issue 67 (itable_index index, 68 cpu *processor, 69 unsigned_word cia); 70 71 /* NOTE - there is no mon_iload - it is made reduntant by mon_issue() 72 and besides when the cpu's have their own cache, the information is 73 wrong */ 74 75 INLINE_MON\ 76 (void) mon_read 77 (unsigned_word ea, 78 unsigned_word ra, 79 unsigned nr_bytes, 80 cpu *processor, 81 unsigned_word cia); 82 83 INLINE_MON\ 84 (void) mon_write 85 (unsigned_word ea, 86 unsigned_word ra, 87 unsigned nr_bytes, 88 cpu *processor, 89 unsigned_word cia); 90 91 INLINE_MON\ 92 (void) mon_event 93 (mon_events event, 94 cpu *processor, 95 unsigned_word cia); 96 97 INLINE_MON\ 98 (unsigned) mon_get_number_of_insns 99 (mon *monitor, 100 int cpu_nr); 101 102 INLINE_MON\ 103 (void) mon_print_info 104 (psim *system, 105 mon *monitor, 106 int verbose); 107 108 #endif 109