File indexing completed on 2025-05-11 08:24:13
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
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
0046 typedef struct _rtems_symbol_t rtems_symbol_t;
0047 typedef struct _rtems_symbol_table_t rtems_symbol_table_t;
0048
0049
0050
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
0064
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
0077
0078
0079 #define RTEMS_MONITOR_SUSPEND 0x0001
0080 #define RTEMS_MONITOR_GLOBAL 0x0002
0081 #define RTEMS_MONITOR_NOTASK 0x0004
0082 #define RTEMS_MONITOR_NOSYMLOAD 0x0008
0083 #define RTEMS_MONITOR_WAITQUIT 0x0010
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
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
0113 } rtems_monitor_generic_t;
0114
0115
0116
0117
0118 typedef struct {
0119 rtems_id id;
0120 rtems_name name;
0121
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
0139
0140
0141 typedef struct {
0142 rtems_id id;
0143 rtems_name name;
0144
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
0156
0157 typedef struct {
0158 rtems_id id;
0159 rtems_name name;
0160
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
0169
0170 typedef struct {
0171 rtems_id id;
0172 rtems_name name;
0173
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
0183
0184 typedef struct {
0185 rtems_id id;
0186 rtems_name name;
0187
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
0200
0201 typedef struct {
0202 rtems_id id;
0203 rtems_name name;
0204
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
0215
0216 typedef struct {
0217 rtems_id id;
0218 rtems_name name;
0219
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
0229
0230
0231 typedef struct {
0232 rtems_id id;
0233 rtems_name name;
0234
0235 rtems_monitor_symbol_t initialization;
0236 rtems_monitor_symbol_t open;
0237 rtems_monitor_symbol_t close;
0238 rtems_monitor_symbol_t read;
0239 rtems_monitor_symbol_t write;
0240 rtems_monitor_symbol_t control;
0241 } rtems_monitor_driver_t;
0242
0243
0244
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
0266
0267
0268 #if defined(RTEMS_MULTIPROCESSING)
0269 typedef struct {
0270 uint32_t node;
0271 uint32_t maximum_nodes;
0272 uint32_t maximum_global_objects;
0273 uint32_t maximum_proxies;
0274
0275 uint32_t default_timeout;
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
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
0307
0308
0309
0310
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;
0344 extern uint32_t rtems_monitor_default_node;
0345
0346
0347
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;
0369 const char *usage;
0370 uint32_t arguments_required;
0371 rtems_monitor_command_function_t command_function;
0372
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;
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
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
0409 void rtems_monitor_kill(void);
0410 void rtems_monitor_init(uint32_t);
0411 void rtems_monitor_task(rtems_task_argument);
0412
0413
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
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
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
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
0450 const void *rtems_monitor_manager_next(void *, void *, rtems_id *);
0451
0452
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
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
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
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
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
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
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
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
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
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
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
0539 const rtems_monitor_object_info_t *rtems_monitor_object_lookup(
0540 rtems_monitor_object_type_t type
0541 );
0542
0543
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