[ac7d5ef0] | 1 | /* |
---|
[b06e68ef] | 2 | * @(#)monitor.h 1.14 - 95/08/02 |
---|
[ac7d5ef0] | 3 | * |
---|
[b06e68ef] | 4 | * $Id$ |
---|
[ac7d5ef0] | 5 | */ |
---|
| 6 | |
---|
| 7 | /* |
---|
| 8 | * File: monitor.h |
---|
| 9 | * |
---|
| 10 | * Description: |
---|
| 11 | * The RTEMS monitor task include file. |
---|
| 12 | * |
---|
| 13 | * TODO: |
---|
| 14 | */ |
---|
| 15 | |
---|
| 16 | #ifndef __MONITOR_H |
---|
| 17 | #define __MONITOR_H |
---|
| 18 | |
---|
[b06e68ef] | 19 | #include "symbols.h" |
---|
| 20 | #include <rtems/error.h> /* rtems_error() */ |
---|
| 21 | |
---|
[ac7d5ef0] | 22 | #ifdef __cplusplus |
---|
| 23 | extern "C" { |
---|
| 24 | #endif |
---|
| 25 | |
---|
[b06e68ef] | 26 | /* |
---|
| 27 | * XXX this should be in rtems proper when type becomes part of id |
---|
| 28 | */ |
---|
| 29 | |
---|
| 30 | typedef enum { |
---|
| 31 | RTEMS_OBJECT_INVALID = 0, |
---|
| 32 | RTEMS_OBJECT_TASK = 1, |
---|
| 33 | RTEMS_OBJECT_EXTENSION = 2, |
---|
| 34 | RTEMS_OBJECT_QUEUE = 3, |
---|
| 35 | RTEMS_OBJECT_SEMAPHORE = 4, |
---|
| 36 | RTEMS_OBJECT_DRIVER = 5, |
---|
| 37 | RTEMS_OBJECT_DNAME = 6, |
---|
| 38 | RTEMS_OBJECT_CONFIG = 7, |
---|
| 39 | RTEMS_OBJECT_INIT_TASK = 8, |
---|
| 40 | RTEMS_OBJECT_MPCI = 9, |
---|
| 41 | RTEMS_OBJECT_PARTITION = 10, |
---|
| 42 | RTEMS_OBJECT_REGION = 11, |
---|
| 43 | RTEMS_OBJECT_PORT = 12, |
---|
| 44 | RTEMS_OBJECT_SYMBOL = 13, |
---|
| 45 | } rtems_object_type_t; |
---|
| 46 | |
---|
| 47 | /* |
---|
| 48 | * rtems_monitor_init() flags |
---|
| 49 | */ |
---|
| 50 | |
---|
| 51 | #define RTEMS_MONITOR_SUSPEND 0x0001 /* suspend monitor on startup */ |
---|
| 52 | #define RTEMS_MONITOR_GLOBAL 0x0002 /* monitor should be global */ |
---|
| 53 | |
---|
| 54 | |
---|
| 55 | /* |
---|
| 56 | * Public interfaces for RTEMS data structures monitor is aware of. |
---|
| 57 | * These are only used by the monitor. |
---|
| 58 | * |
---|
| 59 | * NOTE: |
---|
| 60 | * All the canonical objects that correspond to RTEMS managed "objects" |
---|
| 61 | * must have an identical first portion with 'id' and 'name' fields. |
---|
| 62 | * |
---|
| 63 | * Others do not have that restriction, even tho we would like them to. |
---|
| 64 | * This is because some of the canonical structures are almost too big |
---|
| 65 | * for shared memory driver (eg: mpci) and we are nickel and diming it. |
---|
| 66 | */ |
---|
| 67 | |
---|
| 68 | /* |
---|
| 69 | * Type of a pointer that may be a symbol |
---|
| 70 | */ |
---|
| 71 | |
---|
| 72 | #define MONITOR_SYMBOL_LEN 20 |
---|
| 73 | typedef struct { |
---|
| 74 | char name[MONITOR_SYMBOL_LEN]; |
---|
| 75 | unsigned32 value; |
---|
| 76 | unsigned32 offset; |
---|
| 77 | } rtems_monitor_symbol_t; |
---|
| 78 | |
---|
| 79 | typedef struct { |
---|
| 80 | rtems_id id; |
---|
| 81 | rtems_name name; |
---|
| 82 | /* end of common portion */ |
---|
| 83 | } rtems_monitor_generic_t; |
---|
| 84 | |
---|
| 85 | /* |
---|
| 86 | * Task |
---|
| 87 | */ |
---|
| 88 | typedef struct { |
---|
| 89 | rtems_id id; |
---|
| 90 | rtems_name name; |
---|
| 91 | /* end of common portion */ |
---|
| 92 | Thread_Entry entry; |
---|
| 93 | unsigned32 argument; |
---|
| 94 | void *stack; |
---|
| 95 | unsigned32 stack_size; |
---|
| 96 | rtems_task_priority priority; |
---|
| 97 | States_Control state; |
---|
| 98 | rtems_event_set events; |
---|
| 99 | rtems_mode modes; |
---|
| 100 | rtems_attribute attributes; |
---|
| 101 | unsigned32 notepad[RTEMS_NUMBER_NOTEPADS]; |
---|
| 102 | rtems_id wait_id; |
---|
| 103 | unsigned32 wait_args; |
---|
| 104 | } rtems_monitor_task_t; |
---|
| 105 | |
---|
| 106 | /* |
---|
| 107 | * Init task |
---|
| 108 | */ |
---|
| 109 | |
---|
| 110 | typedef struct { |
---|
| 111 | rtems_id id; /* not really an id */ |
---|
| 112 | rtems_name name; |
---|
| 113 | /* end of common portion */ |
---|
| 114 | rtems_monitor_symbol_t entry; |
---|
| 115 | unsigned32 argument; |
---|
| 116 | unsigned32 stack_size; |
---|
| 117 | rtems_task_priority priority; |
---|
| 118 | rtems_mode modes; |
---|
| 119 | rtems_attribute attributes; |
---|
| 120 | } rtems_monitor_init_task_t; |
---|
| 121 | |
---|
| 122 | |
---|
| 123 | /* |
---|
| 124 | * Message queue |
---|
| 125 | */ |
---|
| 126 | typedef struct { |
---|
| 127 | rtems_id id; |
---|
| 128 | rtems_name name; |
---|
| 129 | /* end of common portion */ |
---|
| 130 | rtems_attribute attributes; |
---|
| 131 | unsigned32 number_of_pending_messages; |
---|
| 132 | unsigned32 maximum_pending_messages; |
---|
| 133 | unsigned32 maximum_message_size; |
---|
| 134 | } rtems_monitor_queue_t; |
---|
| 135 | |
---|
| 136 | /* |
---|
| 137 | * Extension |
---|
| 138 | */ |
---|
| 139 | typedef struct { |
---|
| 140 | rtems_id id; |
---|
| 141 | rtems_name name; |
---|
| 142 | /* end of common portion */ |
---|
[11290355] | 143 | rtems_monitor_symbol_t e_create; |
---|
| 144 | rtems_monitor_symbol_t e_start; |
---|
| 145 | rtems_monitor_symbol_t e_restart; |
---|
| 146 | rtems_monitor_symbol_t e_delete; |
---|
| 147 | rtems_monitor_symbol_t e_tswitch; |
---|
| 148 | rtems_monitor_symbol_t e_begin; |
---|
| 149 | rtems_monitor_symbol_t e_exitted; |
---|
| 150 | rtems_monitor_symbol_t e_fatal; |
---|
[b06e68ef] | 151 | } rtems_monitor_extension_t; |
---|
| 152 | |
---|
| 153 | /* |
---|
| 154 | * Device driver |
---|
| 155 | */ |
---|
| 156 | |
---|
| 157 | typedef struct { |
---|
| 158 | rtems_id id; /* not really an id (should be tho) */ |
---|
| 159 | rtems_name name; /* ditto */ |
---|
| 160 | /* end of common portion */ |
---|
| 161 | rtems_monitor_symbol_t initialization; /* initialization procedure */ |
---|
| 162 | rtems_monitor_symbol_t open; /* open request procedure */ |
---|
| 163 | rtems_monitor_symbol_t close; /* close request procedure */ |
---|
| 164 | rtems_monitor_symbol_t read; /* read request procedure */ |
---|
| 165 | rtems_monitor_symbol_t write; /* write request procedure */ |
---|
| 166 | rtems_monitor_symbol_t control; /* special functions procedure */ |
---|
| 167 | } rtems_monitor_driver_t; |
---|
| 168 | |
---|
| 169 | typedef struct { |
---|
| 170 | rtems_id id; /* not used for drivers (yet) */ |
---|
| 171 | rtems_name name; /* not used for drivers (yet) */ |
---|
| 172 | /* end of common portion */ |
---|
| 173 | unsigned32 major; |
---|
| 174 | unsigned32 minor; |
---|
| 175 | char name_string[64]; |
---|
| 176 | } rtems_monitor_dname_t; |
---|
| 177 | |
---|
| 178 | /* |
---|
| 179 | * System config |
---|
| 180 | */ |
---|
| 181 | |
---|
| 182 | typedef struct { |
---|
| 183 | void *work_space_start; |
---|
| 184 | unsigned32 work_space_size; |
---|
| 185 | unsigned32 maximum_tasks; |
---|
| 186 | unsigned32 maximum_timers; |
---|
| 187 | unsigned32 maximum_semaphores; |
---|
| 188 | unsigned32 maximum_message_queues; |
---|
| 189 | unsigned32 maximum_partitions; |
---|
| 190 | unsigned32 maximum_regions; |
---|
| 191 | unsigned32 maximum_ports; |
---|
| 192 | unsigned32 maximum_periods; |
---|
| 193 | unsigned32 maximum_extensions; |
---|
| 194 | unsigned32 microseconds_per_tick; |
---|
| 195 | unsigned32 ticks_per_timeslice; |
---|
| 196 | unsigned32 number_of_initialization_tasks; |
---|
| 197 | } rtems_monitor_config_t; |
---|
| 198 | |
---|
| 199 | /* |
---|
| 200 | * MPCI config |
---|
| 201 | */ |
---|
| 202 | |
---|
| 203 | typedef struct { |
---|
| 204 | unsigned32 node; /* local node number */ |
---|
| 205 | unsigned32 maximum_nodes; /* maximum # nodes in system */ |
---|
| 206 | unsigned32 maximum_global_objects; /* maximum # global objects */ |
---|
| 207 | unsigned32 maximum_proxies; /* maximum # proxies */ |
---|
| 208 | |
---|
| 209 | unsigned32 default_timeout; /* in ticks */ |
---|
| 210 | unsigned32 maximum_packet_size; |
---|
| 211 | rtems_monitor_symbol_t initialization; |
---|
| 212 | rtems_monitor_symbol_t get_packet; |
---|
| 213 | rtems_monitor_symbol_t return_packet; |
---|
| 214 | rtems_monitor_symbol_t send_packet; |
---|
| 215 | rtems_monitor_symbol_t receive_packet; |
---|
| 216 | } rtems_monitor_mpci_t; |
---|
| 217 | |
---|
| 218 | /* |
---|
| 219 | * The generic canonical information union |
---|
| 220 | */ |
---|
| 221 | |
---|
| 222 | typedef union { |
---|
| 223 | rtems_monitor_generic_t generic; |
---|
| 224 | rtems_monitor_task_t task; |
---|
| 225 | rtems_monitor_queue_t queue; |
---|
| 226 | rtems_monitor_extension_t extension; |
---|
| 227 | rtems_monitor_driver_t driver; |
---|
| 228 | rtems_monitor_dname_t dname; |
---|
| 229 | rtems_monitor_config_t config; |
---|
| 230 | rtems_monitor_mpci_t mpci; |
---|
| 231 | rtems_monitor_init_task_t itask; |
---|
| 232 | } rtems_monitor_union_t; |
---|
| 233 | |
---|
| 234 | /* |
---|
| 235 | * Support for talking to other monitors |
---|
| 236 | */ |
---|
| 237 | |
---|
| 238 | /* |
---|
| 239 | * Names of other monitors |
---|
| 240 | */ |
---|
| 241 | |
---|
| 242 | #define RTEMS_MONITOR_NAME (rtems_build_name('R', 'M', 'O', 'N')) |
---|
| 243 | #define RTEMS_MONITOR_SERVER_NAME (rtems_build_name('R', 'M', 'S', 'V')) |
---|
| 244 | #define RTEMS_MONITOR_QUEUE_NAME (rtems_build_name('R', 'M', 'S', 'Q')) |
---|
| 245 | #define RTEMS_MONITOR_RESPONSE_QUEUE_NAME (rtems_build_name('R', 'M', 'R', 'Q')) |
---|
| 246 | |
---|
| 247 | #define RTEMS_MONITOR_SERVER_RESPONSE 0x0001 |
---|
| 248 | #define RTEMS_MONITOR_SERVER_CANONICAL 0x0002 |
---|
| 249 | |
---|
| 250 | typedef struct |
---|
| 251 | { |
---|
| 252 | unsigned32 command; |
---|
| 253 | rtems_id return_id; |
---|
| 254 | unsigned32 argument0; |
---|
| 255 | unsigned32 argument1; |
---|
| 256 | unsigned32 argument2; |
---|
| 257 | unsigned32 argument3; |
---|
| 258 | unsigned32 argument4; |
---|
| 259 | unsigned32 argument5; |
---|
| 260 | } rtems_monitor_server_request_t; |
---|
| 261 | |
---|
| 262 | typedef struct |
---|
| 263 | { |
---|
| 264 | unsigned32 command; |
---|
| 265 | unsigned32 result0; |
---|
| 266 | unsigned32 result1; |
---|
| 267 | rtems_monitor_union_t payload; |
---|
| 268 | } rtems_monitor_server_response_t; |
---|
| 269 | |
---|
| 270 | extern rtems_id rtems_monitor_task_id; |
---|
| 271 | |
---|
| 272 | extern unsigned32 rtems_monitor_node; /* our node number */ |
---|
| 273 | extern unsigned32 rtems_monitor_default_node; /* current default for commands */ |
---|
| 274 | |
---|
| 275 | /* |
---|
| 276 | * Monitor command function and table entry |
---|
| 277 | */ |
---|
| 278 | |
---|
| 279 | typedef struct rtems_monitor_command_entry_s rtems_monitor_command_entry_t; |
---|
| 280 | |
---|
| 281 | typedef void ( *rtems_monitor_command_function_t )( |
---|
| 282 | int argc, |
---|
| 283 | char **argv, |
---|
| 284 | unsigned32 command_arg, |
---|
| 285 | boolean verbose |
---|
| 286 | ); |
---|
| 287 | |
---|
| 288 | struct rtems_monitor_command_entry_s { |
---|
| 289 | char *command; /* command name */ |
---|
| 290 | char *usage; /* usage string for the command */ |
---|
| 291 | unsigned32 arguments_required; /* # of required args */ |
---|
| 292 | rtems_monitor_command_function_t command_function; |
---|
| 293 | |
---|
| 294 | /* Some argument for the command */ |
---|
| 295 | unsigned32 command_arg; |
---|
| 296 | }; |
---|
| 297 | |
---|
| 298 | typedef void *(*rtems_monitor_object_next_fn)(void *, void *, rtems_id *); |
---|
| 299 | typedef void (*rtems_monitor_object_canonical_fn)(void *, void *); |
---|
| 300 | typedef void (*rtems_monitor_object_dump_header_fn)(boolean); |
---|
| 301 | typedef void (*rtems_monitor_object_dump_fn)(void *, boolean); |
---|
| 302 | |
---|
| 303 | typedef struct { |
---|
| 304 | rtems_object_type_t type; |
---|
| 305 | void *object_information; |
---|
| 306 | int size; /* of canonical object */ |
---|
| 307 | rtems_monitor_object_next_fn next; |
---|
| 308 | rtems_monitor_object_canonical_fn canonical; |
---|
| 309 | rtems_monitor_object_dump_header_fn dump_header; |
---|
| 310 | rtems_monitor_object_dump_fn dump; |
---|
| 311 | } rtems_monitor_object_info_t; |
---|
| 312 | |
---|
| 313 | |
---|
| 314 | /* monitor.c */ |
---|
| 315 | void rtems_monitor_kill(void); |
---|
| 316 | void rtems_monitor_init(rtems_boolean); |
---|
[ac7d5ef0] | 317 | void rtems_monitor_wakeup(void); |
---|
[b06e68ef] | 318 | void rtems_monitor_pause_cmd(int, char **, unsigned32, boolean); |
---|
| 319 | void rtems_monitor_fatal_cmd(int, char **, unsigned32, boolean); |
---|
| 320 | void rtems_monitor_continue_cmd(int, char **, unsigned32, boolean); |
---|
| 321 | void rtems_monitor_node_cmd(int, char **, unsigned32, boolean); |
---|
[ac7d5ef0] | 322 | void rtems_monitor_symbols_loadup(void); |
---|
[b06e68ef] | 323 | void rtems_monitor_task(rtems_task_argument); |
---|
| 324 | |
---|
| 325 | /* server.c */ |
---|
| 326 | void rtems_monitor_server_kill(void); |
---|
| 327 | rtems_status_code rtems_monitor_server_request(unsigned32, rtems_monitor_server_request_t *, rtems_monitor_server_response_t *); |
---|
| 328 | void rtems_monitor_server_task(rtems_task_argument); |
---|
| 329 | void rtems_monitor_server_init(unsigned32); |
---|
| 330 | |
---|
| 331 | /* command.c */ |
---|
| 332 | int rtems_monitor_make_argv(char *, int *, char **); |
---|
| 333 | int rtems_monitor_command_read(char *, int *, char **); |
---|
| 334 | rtems_monitor_command_entry_t *rtems_monitor_command_lookup( |
---|
| 335 | rtems_monitor_command_entry_t * table, int argc, char **argv); |
---|
| 336 | void rtems_monitor_command_usage(rtems_monitor_command_entry_t *, char *); |
---|
| 337 | void rtems_monitor_help_cmd(int, char **, unsigned32, boolean); |
---|
| 338 | |
---|
| 339 | /* prmisc.c */ |
---|
| 340 | void rtems_monitor_separator(void); |
---|
| 341 | unsigned32 rtems_monitor_pad(unsigned32 dest_col, unsigned32 curr_col); |
---|
| 342 | unsigned32 rtems_monitor_dump_char(unsigned8 ch); |
---|
| 343 | unsigned32 rtems_monitor_dump_decimal(unsigned32 num); |
---|
| 344 | unsigned32 rtems_monitor_dump_hex(unsigned32 num); |
---|
| 345 | unsigned32 rtems_monitor_dump_id(rtems_id id); |
---|
| 346 | unsigned32 rtems_monitor_dump_name(rtems_name name); |
---|
| 347 | unsigned32 rtems_monitor_dump_priority(rtems_task_priority priority); |
---|
| 348 | unsigned32 rtems_monitor_dump_state(States_Control state); |
---|
| 349 | unsigned32 rtems_monitor_dump_modes(rtems_mode modes); |
---|
| 350 | unsigned32 rtems_monitor_dump_attributes(rtems_attribute attributes); |
---|
| 351 | unsigned32 rtems_monitor_dump_events(rtems_event_set events); |
---|
| 352 | unsigned32 rtems_monitor_dump_notepad(unsigned32 *notepad); |
---|
| 353 | |
---|
| 354 | /* object.c */ |
---|
| 355 | rtems_id rtems_monitor_id_fixup(rtems_id, unsigned32, rtems_object_type_t); |
---|
| 356 | rtems_id rtems_monitor_object_canonical_get(rtems_object_type_t, rtems_id, void *, unsigned32 *size_p); |
---|
| 357 | rtems_id rtems_monitor_object_canonical_next(rtems_monitor_object_info_t *, rtems_id, void *); |
---|
| 358 | void *rtems_monitor_object_next(void *, void *, rtems_id, rtems_id *); |
---|
| 359 | rtems_id rtems_monitor_object_canonical(rtems_id, void *); |
---|
| 360 | void rtems_monitor_object_cmd(int, char **, unsigned32, boolean); |
---|
| 361 | |
---|
| 362 | /* manager.c */ |
---|
| 363 | void *rtems_monitor_manager_next(void *, void *, rtems_id *); |
---|
| 364 | |
---|
| 365 | /* config.c */ |
---|
| 366 | void rtems_monitor_config_canonical(rtems_monitor_config_t *, void *); |
---|
| 367 | void *rtems_monitor_config_next(void *, rtems_monitor_config_t *, rtems_id *); |
---|
| 368 | void rtems_monitor_config_dump_header(boolean); |
---|
| 369 | void rtems_monitor_config_dump(rtems_monitor_config_t *, boolean verbose); |
---|
| 370 | |
---|
| 371 | /* mpci.c */ |
---|
| 372 | void rtems_monitor_mpci_canonical(rtems_monitor_mpci_t *, void *); |
---|
| 373 | void *rtems_monitor_mpci_next(void *, rtems_monitor_mpci_t *, rtems_id *); |
---|
| 374 | void rtems_monitor_mpci_dump_header(boolean); |
---|
| 375 | void rtems_monitor_mpci_dump(rtems_monitor_mpci_t *, boolean verbose); |
---|
| 376 | |
---|
| 377 | /* itask.c */ |
---|
| 378 | void rtems_monitor_init_task_canonical(rtems_monitor_init_task_t *, void *); |
---|
| 379 | void *rtems_monitor_init_task_next(void *, rtems_monitor_init_task_t *, rtems_id *); |
---|
| 380 | void rtems_monitor_init_task_dump_header(boolean); |
---|
| 381 | void rtems_monitor_init_task_dump(rtems_monitor_init_task_t *, boolean verbose); |
---|
| 382 | |
---|
| 383 | /* extension.c */ |
---|
| 384 | void rtems_monitor_extension_canonical(rtems_monitor_extension_t *, void *); |
---|
| 385 | void rtems_monitor_extension_dump_header(boolean verbose); |
---|
| 386 | void rtems_monitor_extension_dump(rtems_monitor_extension_t *, boolean); |
---|
| 387 | |
---|
| 388 | /* task.c */ |
---|
| 389 | void rtems_monitor_task_canonical(rtems_monitor_task_t *, void *); |
---|
| 390 | void rtems_monitor_task_dump_header(boolean verbose); |
---|
| 391 | void rtems_monitor_task_dump(rtems_monitor_task_t *, boolean); |
---|
| 392 | |
---|
| 393 | /* queue.c */ |
---|
| 394 | void rtems_monitor_queue_canonical(rtems_monitor_queue_t *, void *); |
---|
| 395 | void rtems_monitor_queue_dump_header(boolean verbose); |
---|
| 396 | void rtems_monitor_queue_dump(rtems_monitor_queue_t *, boolean); |
---|
| 397 | |
---|
| 398 | /* driver.c */ |
---|
| 399 | void *rtems_monitor_driver_next(void *, rtems_monitor_driver_t *, rtems_id *); |
---|
| 400 | void rtems_monitor_driver_canonical(rtems_monitor_driver_t *, void *); |
---|
| 401 | void rtems_monitor_driver_dump_header(boolean); |
---|
| 402 | void rtems_monitor_driver_dump(rtems_monitor_driver_t *, boolean); |
---|
| 403 | |
---|
| 404 | /* dname.c */ |
---|
| 405 | void *rtems_monitor_dname_next(void *, rtems_monitor_dname_t *, rtems_id *); |
---|
| 406 | void rtems_monitor_dname_canonical(rtems_monitor_dname_t *, void *); |
---|
| 407 | void rtems_monitor_dname_dump_header(boolean); |
---|
| 408 | void rtems_monitor_dname_dump(rtems_monitor_dname_t *, boolean); |
---|
| 409 | |
---|
| 410 | /* symbols.c */ |
---|
| 411 | rtems_symbol_table_t *rtems_symbol_table_create(); |
---|
| 412 | void rtems_symbol_table_destroy(rtems_symbol_table_t *table); |
---|
| 413 | |
---|
| 414 | rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32); |
---|
| 415 | rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32); |
---|
| 416 | rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *); |
---|
| 417 | void *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *); |
---|
| 418 | void rtems_monitor_symbol_canonical(rtems_monitor_symbol_t *, rtems_symbol_t *); |
---|
| 419 | void rtems_monitor_symbol_canonical_by_name(rtems_monitor_symbol_t *, char *); |
---|
| 420 | void rtems_monitor_symbol_canonical_by_value(rtems_monitor_symbol_t *, void *); |
---|
| 421 | unsigned32 rtems_monitor_symbol_dump(rtems_monitor_symbol_t *, boolean); |
---|
| 422 | void rtems_monitor_symbol_cmd(int, char **, unsigned32, boolean); |
---|
[ac7d5ef0] | 423 | |
---|
| 424 | |
---|
| 425 | extern rtems_symbol_table_t *rtems_monitor_symbols; |
---|
| 426 | |
---|
[b06e68ef] | 427 | #ifndef MONITOR_PROMPT |
---|
| 428 | #define MONITOR_PROMPT "rtems" /* will have '> ' appended */ |
---|
| 429 | #endif |
---|
| 430 | |
---|
| 431 | #define MONITOR_WAKEUP_EVENT RTEMS_EVENT_0 |
---|
| 432 | |
---|
| 433 | |
---|
| 434 | #define STREQ(a,b) (strcmp(a,b) == 0) |
---|
| 435 | #define STRNEQ(a,b,n) (strncmp(a,b,n) == 0) |
---|
| 436 | |
---|
[ac7d5ef0] | 437 | #ifdef __cplusplus |
---|
| 438 | } |
---|
| 439 | #endif |
---|
| 440 | |
---|
| 441 | #endif /* ! __MONITOR_H */ |
---|