Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:13

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @brief The RTEMS Monitor Task
0007  */
0008 
0009 /*
0010  * COPYRIGHT (C) 1989-1999 On-Line Applications Research Corporation (OAR).
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 #ifndef __MONITOR_H
0035 #define __MONITOR_H
0036 
0037 #include <rtems/score/objectimpl.h>
0038 #include <rtems/error.h>  /* rtems_error() */
0039 #include <rtems/config.h>
0040 
0041 #ifdef __cplusplus
0042 extern "C" {
0043 #endif
0044 
0045 /* Forward decls from symbols.h */
0046 typedef struct _rtems_symbol_t rtems_symbol_t;
0047 typedef struct _rtems_symbol_table_t rtems_symbol_table_t;
0048 
0049 /*
0050  * Monitor types are derived from rtems object classes
0051  */
0052 
0053 typedef enum {
0054     RTEMS_MONITOR_OBJECT_INVALID   =  OBJECTS_CLASSIC_NO_CLASS,
0055     RTEMS_MONITOR_OBJECT_TASK      =  OBJECTS_RTEMS_TASKS,
0056     RTEMS_MONITOR_OBJECT_EXTENSION =  OBJECTS_RTEMS_EXTENSIONS,
0057     RTEMS_MONITOR_OBJECT_QUEUE     =  OBJECTS_RTEMS_MESSAGE_QUEUES,
0058     RTEMS_MONITOR_OBJECT_SEMAPHORE =  OBJECTS_RTEMS_SEMAPHORES,
0059     RTEMS_MONITOR_OBJECT_PARTITION =  OBJECTS_RTEMS_PARTITIONS,
0060     RTEMS_MONITOR_OBJECT_REGION    =  OBJECTS_RTEMS_REGIONS,
0061     RTEMS_MONITOR_OBJECT_PORT      =  OBJECTS_RTEMS_PORTS,
0062 
0063     /* following monitor objects are not known to RTEMS, but
0064      * we like to have "types" for them anyway */
0065 
0066     RTEMS_MONITOR_OBJECT_DRIVER    =  OBJECTS_RTEMS_CLASSES_LAST+1,
0067     RTEMS_MONITOR_OBJECT_DNAME,
0068     RTEMS_MONITOR_OBJECT_CONFIG,
0069     RTEMS_MONITOR_OBJECT_INIT_TASK,
0070     RTEMS_MONITOR_OBJECT_MPCI,
0071     RTEMS_MONITOR_OBJECT_SYMBOL,
0072     RTEMS_MONITOR_OBJECT_PTHREAD
0073 } rtems_monitor_object_type_t;
0074 
0075 /*
0076  * rtems_monitor_init() flags
0077  */
0078 
0079 #define RTEMS_MONITOR_SUSPEND   0x0001      /* suspend monitor on startup */
0080 #define RTEMS_MONITOR_GLOBAL    0x0002          /* monitor should be global */
0081 #define RTEMS_MONITOR_NOTASK    0x0004 /* do not start monitor task */
0082 #define RTEMS_MONITOR_NOSYMLOAD 0x0008 /* do not load symbols       */
0083 #define RTEMS_MONITOR_WAITQUIT  0x0010 /* wait for monitor task to terminate */
0084 
0085 /*
0086  * Public interfaces for RTEMS data structures monitor is aware of.
0087  * These are only used by the monitor.
0088  *
0089  * NOTE:
0090  *  All the canonical objects that correspond to RTEMS managed "objects"
0091  *  must have an identical first portion with 'id' and 'name' fields.
0092  *
0093  *  Others do not have that restriction, even tho we would like them to.
0094  *  This is because some of the canonical structures are almost too big
0095  *  for shared memory driver (eg: mpci) and we are nickel and diming it.
0096  */
0097 
0098 /*
0099  * Type of a pointer that may be a symbol
0100  */
0101 
0102 #define MONITOR_SYMBOL_LEN 20
0103 typedef struct {
0104     char       name[MONITOR_SYMBOL_LEN];
0105     uint32_t   value;
0106     uint32_t   offset;
0107 } rtems_monitor_symbol_t;
0108 
0109 typedef struct {
0110     rtems_id            id;
0111     rtems_name          name;
0112   /* end of common portion */
0113 } rtems_monitor_generic_t;
0114 
0115 /*
0116  * Task
0117  */
0118 typedef struct {
0119     rtems_id                   id;
0120     rtems_name                 name;
0121   /* end of common portion */
0122     char                       short_name[5];
0123     char                       long_name[16];
0124     Thread_Entry_information   entry;
0125     void                      *stack;
0126     uint32_t                   stack_size;
0127     char                       scheduler_name[5];
0128     rtems_task_priority        priority;
0129     States_Control             state;
0130     rtems_event_set            events;
0131     rtems_mode                 modes;
0132     rtems_attribute            attributes;
0133     char                       wait[17];
0134     uint32_t                   ticks;
0135 } rtems_monitor_task_t;
0136 
0137 /*
0138  * Init task
0139  */
0140 
0141 typedef struct {
0142     rtems_id            id;     /* not really an id */
0143     rtems_name          name;
0144   /* end of common portion */
0145     rtems_monitor_symbol_t entry;
0146     uint32_t               argument;
0147     uint32_t               stack_size;
0148     rtems_task_priority    priority;
0149     rtems_mode             modes;
0150     rtems_attribute        attributes;
0151 } rtems_monitor_init_task_t;
0152 
0153 
0154 /*
0155  * Message queue
0156  */
0157 typedef struct {
0158     rtems_id            id;
0159     rtems_name          name;
0160   /* end of common portion */
0161     rtems_attribute     attributes;
0162     uint32_t            number_of_pending_messages;
0163     uint32_t            maximum_pending_messages;
0164     size_t              maximum_message_size;
0165 } rtems_monitor_queue_t;
0166 
0167 /*
0168  * Semaphore
0169  */
0170 typedef struct {
0171     rtems_id            id;
0172     rtems_name          name;
0173   /* end of common portion */
0174     rtems_attribute     attribute;
0175     rtems_task_priority priority_ceiling;
0176     uint32_t            max_count;
0177     uint32_t            cur_count;
0178     rtems_id            holder_id;
0179 } rtems_monitor_sema_t;
0180 
0181 /*
0182  * Extension
0183  */
0184 typedef struct {
0185     rtems_id                 id;
0186     rtems_name               name;
0187   /* end of common portion */
0188     rtems_monitor_symbol_t  e_create;
0189     rtems_monitor_symbol_t  e_start;
0190     rtems_monitor_symbol_t  e_restart;
0191     rtems_monitor_symbol_t  e_delete;
0192     rtems_monitor_symbol_t  e_tswitch;
0193     rtems_monitor_symbol_t  e_begin;
0194     rtems_monitor_symbol_t  e_exitted;
0195     rtems_monitor_symbol_t  e_fatal;
0196 } rtems_monitor_extension_t;
0197 
0198  /*
0199  * Region
0200  */
0201 typedef struct {
0202     rtems_id            id;
0203     rtems_name          name;
0204   /* end of common portion */
0205   rtems_attribute     attribute;
0206   void *              start_addr;
0207   uint32_t            length;
0208   uint32_t            page_size;
0209   uint32_t            max_seg_size;
0210   uint32_t            used_blocks;
0211 } rtems_monitor_region_t;
0212 
0213 /*
0214  * Partition
0215  */
0216 typedef struct {
0217     rtems_id            id;
0218     rtems_name          name;
0219   /* end of common portion */
0220   rtems_attribute     attribute;
0221   const void *        start_addr;
0222   uint32_t            length;
0223   uint32_t            buf_size;
0224   uint32_t            used_blocks;
0225 } rtems_monitor_part_t;
0226 
0227 /*
0228  * Device driver
0229  */
0230 
0231 typedef struct {
0232     rtems_id            id;        /* not really an id (should be tho) */
0233     rtems_name          name;              /* ditto */
0234   /* end of common portion */
0235     rtems_monitor_symbol_t initialization; /* initialization procedure */
0236     rtems_monitor_symbol_t open;           /* open request procedure */
0237     rtems_monitor_symbol_t close;          /* close request procedure */
0238     rtems_monitor_symbol_t read;           /* read request procedure */
0239     rtems_monitor_symbol_t write;          /* write request procedure */
0240     rtems_monitor_symbol_t control;        /* special functions procedure */
0241 } rtems_monitor_driver_t;
0242 
0243 /*
0244  * System config
0245  */
0246 
0247 typedef struct {
0248     void               *work_space_start;
0249     uint32_t            work_space_size;
0250     uint32_t            maximum_tasks;
0251     uint32_t            maximum_timers;
0252     uint32_t            maximum_semaphores;
0253     uint32_t            maximum_message_queues;
0254     uint32_t            maximum_partitions;
0255     uint32_t            maximum_regions;
0256     uint32_t            maximum_ports;
0257     uint32_t            maximum_periods;
0258     uint32_t            maximum_extensions;
0259     uint32_t            microseconds_per_tick;
0260     uint32_t            ticks_per_timeslice;
0261     uint32_t            number_of_initialization_tasks;
0262 } rtems_monitor_config_t;
0263 
0264 /*
0265  * MPCI config
0266  */
0267 
0268 #if defined(RTEMS_MULTIPROCESSING)
0269 typedef struct {
0270     uint32_t    node;                   /* local node number */
0271     uint32_t    maximum_nodes;          /* maximum # nodes in system */
0272     uint32_t    maximum_global_objects; /* maximum # global objects */
0273     uint32_t    maximum_proxies;        /* maximum # proxies */
0274 
0275     uint32_t                 default_timeout;        /* in ticks */
0276     size_t                   maximum_packet_size;
0277     rtems_monitor_symbol_t   initialization;
0278     rtems_monitor_symbol_t   get_packet;
0279     rtems_monitor_symbol_t   return_packet;
0280     rtems_monitor_symbol_t   send_packet;
0281     rtems_monitor_symbol_t   receive_packet;
0282 } rtems_monitor_mpci_t;
0283 #endif
0284 
0285 /*
0286  * The generic canonical information union
0287  */
0288 
0289 typedef union {
0290     rtems_monitor_generic_t    generic;
0291     rtems_monitor_task_t       task;
0292     rtems_monitor_queue_t      queue;
0293     rtems_monitor_sema_t       sema;
0294     rtems_monitor_extension_t  extension;
0295     rtems_monitor_driver_t     driver;
0296     rtems_monitor_config_t     config;
0297     rtems_monitor_region_t     region;
0298     rtems_monitor_part_t       part;
0299 #if defined(RTEMS_MULTIPROCESSING)
0300     rtems_monitor_mpci_t       mpci;
0301 #endif
0302     rtems_monitor_init_task_t  itask;
0303 } rtems_monitor_union_t;
0304 
0305 /*
0306  * Support for talking to other monitors
0307  */
0308 
0309 /*
0310  * Names of other monitors
0311  */
0312 
0313 #define RTEMS_MONITOR_NAME        (rtems_build_name('R', 'M', 'O', 'N'))
0314 #define RTEMS_MONITOR_SERVER_NAME (rtems_build_name('R', 'M', 'S', 'V'))
0315 #define RTEMS_MONITOR_QUEUE_NAME  (rtems_build_name('R', 'M', 'S', 'Q'))
0316 #define RTEMS_MONITOR_RESPONSE_QUEUE_NAME (rtems_build_name('R', 'M', 'R', 'Q'))
0317 
0318 #define RTEMS_MONITOR_SERVER_RESPONSE    0x0001
0319 #define RTEMS_MONITOR_SERVER_CANONICAL   0x0002
0320 
0321 typedef struct
0322 {
0323     uint32_t    command;
0324     rtems_id    return_id;
0325     uint32_t    argument0;
0326     uint32_t    argument1;
0327     uint32_t    argument2;
0328     uint32_t    argument3;
0329     uint32_t    argument4;
0330     uint32_t    argument5;
0331 } rtems_monitor_server_request_t;
0332 
0333 typedef struct
0334 {
0335     uint32_t    command;
0336     uint32_t    result0;
0337     uint32_t    result1;
0338     rtems_monitor_union_t payload;
0339 } rtems_monitor_server_response_t;
0340 
0341 extern rtems_id  rtems_monitor_task_id;
0342 
0343 extern uint32_t   rtems_monitor_node;          /* our node number */
0344 extern uint32_t   rtems_monitor_default_node;  /* current default for commands */
0345 
0346 /*
0347  * Monitor command function and table entry
0348  */
0349 
0350 typedef struct rtems_monitor_command_entry_s rtems_monitor_command_entry_t;
0351 typedef union _rtems_monitor_command_arg_t   rtems_monitor_command_arg_t;
0352 
0353 typedef void (*rtems_monitor_command_function_t)(
0354   int                                argc,
0355   char                             **argv,
0356   const rtems_monitor_command_arg_t *command_arg,
0357   bool                               verbose
0358 );
0359 
0360 union _rtems_monitor_command_arg_t {
0361   rtems_monitor_object_type_t   monitor_object;
0362   rtems_status_code     status_code;
0363   rtems_symbol_table_t      **symbol_table;
0364   const rtems_monitor_command_entry_t *monitor_command_entry;
0365 };
0366 
0367 struct rtems_monitor_command_entry_s {
0368     const char *command;      /* command name */
0369     const char *usage;        /* usage string for the command */
0370     uint32_t arguments_required;    /* # of required args */
0371     rtems_monitor_command_function_t command_function;
0372                                /* Some argument for the command */
0373     rtems_monitor_command_arg_t command_arg;
0374     const rtems_monitor_command_entry_t *next;
0375 };
0376 
0377 
0378 typedef const void *(*rtems_monitor_object_next_fn)(void *, void *, rtems_id *);
0379 typedef void (*rtems_monitor_object_canonical_fn)(void *, const void *);
0380 typedef void (*rtems_monitor_object_dump_header_fn)(bool);
0381 typedef void (*rtems_monitor_object_dump_fn)(void *, bool);
0382 
0383 typedef struct {
0384     rtems_monitor_object_type_t         type;
0385     void                               *object_information;
0386     int                                 size;   /* of canonical object */
0387     rtems_monitor_object_next_fn        next;
0388     rtems_monitor_object_canonical_fn   canonical;
0389     rtems_monitor_object_dump_header_fn dump_header;
0390     rtems_monitor_object_dump_fn        dump;
0391 } rtems_monitor_object_info_t;
0392 
0393 typedef bool (*rtems_monitor_per_command_routine)(const rtems_monitor_command_entry_t *, void *);
0394 
0395 /* monitor.c */
0396 void    rtems_monitor_pause_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0397 void    rtems_monitor_fatal_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0398 void    rtems_monitor_continue_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0399 void    rtems_monitor_debugger_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0400 void    rtems_monitor_reset_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0401 void    rtems_monitor_node_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0402 void    rtems_monitor_symbols_loadup(void);
0403 int     rtems_monitor_insert_cmd(rtems_monitor_command_entry_t *);
0404 void    rtems_monitor_wakeup(void);
0405 void rtems_monitor_command_iterate(rtems_monitor_per_command_routine routine, void *arg);
0406 rtems_status_code rtems_monitor_suspend(rtems_interval timeout);
0407 
0408 /* editor.c */
0409 void    rtems_monitor_kill(void);
0410 void    rtems_monitor_init(uint32_t);
0411 void    rtems_monitor_task(rtems_task_argument);
0412 
0413 /* server.c */
0414 void    rtems_monitor_server_kill(void);
0415 rtems_status_code rtems_monitor_server_request(uint32_t  , rtems_monitor_server_request_t *, rtems_monitor_server_response_t *);
0416 void    rtems_monitor_server_task(rtems_task_argument);
0417 void    rtems_monitor_server_init(uint32_t);
0418 
0419 /* command.c */
0420 int     rtems_monitor_make_argv(char *, int *, char **);
0421 int     rtems_monitor_command_read(char *, int *, char **);
0422 void    rtems_monitor_command_usage(const rtems_monitor_command_entry_t *, const char *);
0423 void    rtems_monitor_help_cmd(int, char **, const rtems_monitor_command_arg_t *, bool);
0424 const rtems_monitor_command_entry_t *rtems_monitor_command_lookup(const char *name);
0425 
0426 /* prmisc.c */
0427 void       rtems_monitor_separator(void);
0428 uint32_t   rtems_monitor_pad(uint32_t   dest_col, uint32_t   curr_col);
0429 int        rtems_monitor_dump_decimal(uint32_t   num);
0430 int        rtems_monitor_dump_hex(uint32_t   num);
0431 int        rtems_monitor_dump_addr(const void *addr);
0432 int        rtems_monitor_dump_id(rtems_id id);
0433 int        rtems_monitor_dump_name(rtems_id id);
0434 int        rtems_monitor_dump_priority(rtems_task_priority priority);
0435 int        rtems_monitor_dump_state(States_Control state);
0436 int        rtems_monitor_dump_modes(rtems_mode modes);
0437 int        rtems_monitor_dump_attributes(rtems_attribute attributes);
0438 int        rtems_monitor_dump_events(rtems_event_set events);
0439 
0440 /* object.c */
0441 rtems_id   rtems_monitor_id_fixup(rtems_id, uint32_t  , rtems_monitor_object_type_t);
0442 const rtems_monitor_object_info_t *rtems_monitor_object_lookup(rtems_monitor_object_type_t type);
0443 rtems_id   rtems_monitor_object_canonical_get(rtems_monitor_object_type_t, rtems_id, void *, size_t *size_p);
0444 rtems_id   rtems_monitor_object_canonical_next(const rtems_monitor_object_info_t *, rtems_id, void *);
0445 const void *rtems_monitor_object_next(void *, void *, rtems_id, rtems_id *);
0446 rtems_id   rtems_monitor_object_canonical(rtems_id, const void *);
0447 void       rtems_monitor_object_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0448 
0449 /* manager.c */
0450 const void *rtems_monitor_manager_next(void *, void *, rtems_id *);
0451 
0452 /* config.c */
0453 void       rtems_monitor_config_canonical(rtems_monitor_config_t *, const void *);
0454 const void *rtems_monitor_config_next(void *, rtems_monitor_config_t *, rtems_id *);
0455 void       rtems_monitor_config_dump_header(bool);
0456 int        rtems_monitor_config_dump(rtems_monitor_config_t *, bool verbose);
0457 
0458 /* mpci.c */
0459 #if defined(RTEMS_MULTIPROCESSING)
0460 void       rtems_monitor_mpci_canonical(rtems_monitor_mpci_t *, const void *);
0461 const void *rtems_monitor_mpci_next(void *, rtems_monitor_mpci_t *, rtems_id *);
0462 void       rtems_monitor_mpci_dump_header(bool);
0463 void       rtems_monitor_mpci_dump(rtems_monitor_mpci_t *, bool verbose);
0464 #endif
0465 
0466 /* itask.c */
0467 void       rtems_monitor_init_task_canonical(rtems_monitor_init_task_t *, const void *);
0468 const void *rtems_monitor_init_task_next(void *, rtems_monitor_init_task_t *, rtems_id *);
0469 void       rtems_monitor_init_task_dump_header(bool);
0470 void       rtems_monitor_init_task_dump(rtems_monitor_init_task_t *, bool verbose);
0471 
0472 /* extension.c */
0473 void       rtems_monitor_extension_canonical(rtems_monitor_extension_t *, const void *);
0474 void       rtems_monitor_extension_dump_header(bool verbose);
0475 void       rtems_monitor_extension_dump(rtems_monitor_extension_t *, bool);
0476 
0477 /* task.c */
0478 void    rtems_monitor_task_canonical(rtems_monitor_task_t *, const void *);
0479 void    rtems_monitor_task_dump_header(bool verbose);
0480 void    rtems_monitor_task_dump(rtems_monitor_task_t *, bool);
0481 
0482 /* sema.c */
0483 void    rtems_monitor_sema_canonical(rtems_monitor_sema_t *, const void *);
0484 void    rtems_monitor_sema_dump_header(bool verbose);
0485 void    rtems_monitor_sema_dump(rtems_monitor_sema_t *, bool);
0486 
0487 /* queue.c */
0488 void    rtems_monitor_queue_canonical(rtems_monitor_queue_t *, const void *);
0489 void    rtems_monitor_queue_dump_header(bool verbose);
0490 void    rtems_monitor_queue_dump(rtems_monitor_queue_t *, bool);
0491 
0492 /* region.c */
0493 void    rtems_monitor_region_canonical(rtems_monitor_region_t *, const void *);
0494 void    rtems_monitor_region_dump_header(bool verbose);
0495 void    rtems_monitor_region_dump(rtems_monitor_region_t *, bool);
0496 
0497 /* partition.c */
0498 void    rtems_monitor_part_canonical(rtems_monitor_part_t *, const void *);
0499 void    rtems_monitor_part_dump_header(bool verbose);
0500 void    rtems_monitor_part_dump(rtems_monitor_part_t *, bool);
0501 
0502 /* driver.c */
0503 const void *rtems_monitor_driver_next(void *, rtems_monitor_driver_t *, rtems_id *);
0504 void     rtems_monitor_driver_canonical(rtems_monitor_driver_t *, const void *);
0505 void     rtems_monitor_driver_dump_header(bool);
0506 void     rtems_monitor_driver_dump(rtems_monitor_driver_t *, bool);
0507 
0508 /* symbols.c */
0509 rtems_symbol_table_t *rtems_symbol_table_create(void);
0510 void                  rtems_symbol_table_destroy(rtems_symbol_table_t *table);
0511 
0512 rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, const char *, uint32_t);
0513 rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, uint32_t);
0514 const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, uint32_t);
0515 rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, const char *);
0516 const void *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
0517 void    rtems_monitor_symbol_canonical(rtems_monitor_symbol_t *, rtems_symbol_t *);
0518 void    rtems_monitor_symbol_canonical_by_name(rtems_monitor_symbol_t *, const char *);
0519 void    rtems_monitor_symbol_canonical_by_value(rtems_monitor_symbol_t *, void *);
0520 uint32_t   rtems_monitor_symbol_dump(rtems_monitor_symbol_t *, bool);
0521 void    rtems_monitor_symbol_cmd(int, char **, const rtems_monitor_command_arg_t*, bool);
0522 
0523 #if defined(RTEMS_NETWORKING)
0524 void mon_ifconfig(
0525   int argc,
0526   char *argv[],
0527   uint32_t command_arg,
0528   bool verbose
0529 );
0530 void mon_route(
0531   int argc,
0532   char *argv[],
0533   uint32_t command_arg,
0534   bool verbose
0535 );
0536 #endif
0537 
0538 /* mon-object.c */
0539 const rtems_monitor_object_info_t *rtems_monitor_object_lookup(
0540   rtems_monitor_object_type_t type
0541 );
0542 
0543 /* shared data */
0544 extern rtems_symbol_table_t *rtems_monitor_symbols;
0545 
0546 #define MONITOR_WAKEUP_EVENT   RTEMS_EVENT_0
0547 
0548 #ifdef __cplusplus
0549 }
0550 #endif
0551 
0552 #endif  /* ! __MONITOR_H */