Ignore:
Timestamp:
Aug 17, 1995, 7:51:51 PM (25 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
95fbca1
Parents:
3b438fa
Message:

Numerous miscellaneous features incorporated from Tony Bennett
(tbennett@…) including the following major additions:

+ variable length messages
+ named devices
+ debug monitor
+ association tables/variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libmisc/monitor/monitor.h

    r3b438fa rb06e68ef  
    11/*
    2  *      @(#)monitor.h   1.2 - 95/04/24
     2 *      @(#)monitor.h   1.14 - 95/08/02
    33 *     
     4 *  $Id$
    45 */
    56
     
    1011 *    The RTEMS monitor task include file.
    1112 *
    12  *
    13  *
    1413 *  TODO:
    15  *
    1614 */
    1715
    1816#ifndef __MONITOR_H
    1917#define __MONITOR_H
     18
     19#include "symbols.h"
     20#include <rtems/error.h>                /* rtems_error() */
    2021
    2122#ifdef __cplusplus
     
    2324#endif
    2425
    25 void    rtems_monitor_init(rtems_boolean monitor_suspend);
     26/*
     27 * XXX this should be in rtems proper when type becomes part of id
     28 */
     29
     30typedef 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
     73typedef struct {
     74    char       name[MONITOR_SYMBOL_LEN];
     75    unsigned32 value;
     76    unsigned32 offset;
     77} rtems_monitor_symbol_t;   
     78
     79typedef struct {
     80    rtems_id            id;
     81    rtems_name          name;
     82  /* end of common portion */
     83} rtems_monitor_generic_t;       
     84
     85/*
     86 * Task
     87 */
     88typedef 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
     110typedef 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 */
     126typedef 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 */
     139typedef struct {
     140    rtems_id                 id;
     141    rtems_name               name;
     142  /* end of common portion */
     143    rtems_monitor_symbol_t  create;
     144    rtems_monitor_symbol_t  start;
     145    rtems_monitor_symbol_t  restart;
     146    rtems_monitor_symbol_t  delete;
     147    rtems_monitor_symbol_t  tswitch;
     148    rtems_monitor_symbol_t  begin;
     149    rtems_monitor_symbol_t  exitted;
     150    rtems_monitor_symbol_t  fatal;
     151} rtems_monitor_extension_t;
     152
     153/*
     154 * Device driver
     155 */
     156
     157typedef 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
     169typedef 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
     182typedef 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
     203typedef 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
     222typedef 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
     250typedef 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
     262typedef struct
     263{
     264    unsigned32  command;
     265    unsigned32  result0;
     266    unsigned32  result1;
     267    rtems_monitor_union_t payload;
     268} rtems_monitor_server_response_t;
     269
     270extern rtems_id  rtems_monitor_task_id;
     271
     272extern unsigned32 rtems_monitor_node;          /* our node number */
     273extern unsigned32 rtems_monitor_default_node;  /* current default for commands */
     274
     275/*
     276 * Monitor command function and table entry
     277 */
     278
     279typedef struct rtems_monitor_command_entry_s rtems_monitor_command_entry_t;
     280
     281typedef void ( *rtems_monitor_command_function_t )(
     282                 int         argc,
     283                 char      **argv,
     284                 unsigned32  command_arg,
     285                 boolean     verbose
     286             );
     287
     288struct 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
     298typedef void *(*rtems_monitor_object_next_fn)(void *, void *, rtems_id *);
     299typedef void (*rtems_monitor_object_canonical_fn)(void *, void *);
     300typedef void (*rtems_monitor_object_dump_header_fn)(boolean);
     301typedef void (*rtems_monitor_object_dump_fn)(void *, boolean);
     302
     303typedef 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 */
     315void    rtems_monitor_kill(void);
     316void    rtems_monitor_init(rtems_boolean);
    26317void    rtems_monitor_wakeup(void);
    27 void    rtems_monitor_task(rtems_task_argument monitor_suspend);
     318void    rtems_monitor_pause_cmd(int, char **, unsigned32, boolean);
     319void    rtems_monitor_fatal_cmd(int, char **, unsigned32, boolean);
     320void    rtems_monitor_continue_cmd(int, char **, unsigned32, boolean);
     321void    rtems_monitor_node_cmd(int, char **, unsigned32, boolean);
    28322void    rtems_monitor_symbols_loadup(void);
    29 
    30 extern rtems_unsigned32        rtems_monitor_task_id;
     323void    rtems_monitor_task(rtems_task_argument);
     324
     325/* server.c */
     326void    rtems_monitor_server_kill(void);
     327rtems_status_code rtems_monitor_server_request(unsigned32, rtems_monitor_server_request_t *, rtems_monitor_server_response_t *);
     328void    rtems_monitor_server_task(rtems_task_argument);
     329void    rtems_monitor_server_init(unsigned32);
     330 
     331/* command.c */
     332int     rtems_monitor_make_argv(char *, int *, char **);
     333int     rtems_monitor_command_read(char *, int *, char **);
     334rtems_monitor_command_entry_t *rtems_monitor_command_lookup(
     335    rtems_monitor_command_entry_t * table, int argc, char **argv);
     336void    rtems_monitor_command_usage(rtems_monitor_command_entry_t *, char *);
     337void    rtems_monitor_help_cmd(int, char **, unsigned32, boolean);
     338
     339/* prmisc.c */
     340void       rtems_monitor_separator(void);
     341unsigned32 rtems_monitor_pad(unsigned32 dest_col, unsigned32 curr_col);
     342unsigned32 rtems_monitor_dump_char(unsigned8 ch);
     343unsigned32 rtems_monitor_dump_decimal(unsigned32 num);
     344unsigned32 rtems_monitor_dump_hex(unsigned32 num);
     345unsigned32 rtems_monitor_dump_id(rtems_id id);
     346unsigned32 rtems_monitor_dump_name(rtems_name name);
     347unsigned32 rtems_monitor_dump_priority(rtems_task_priority priority);
     348unsigned32 rtems_monitor_dump_state(States_Control state);
     349unsigned32 rtems_monitor_dump_modes(rtems_mode modes);
     350unsigned32 rtems_monitor_dump_attributes(rtems_attribute attributes);
     351unsigned32 rtems_monitor_dump_events(rtems_event_set events);
     352unsigned32 rtems_monitor_dump_notepad(unsigned32 *notepad);
     353
     354/* object.c */
     355rtems_id   rtems_monitor_id_fixup(rtems_id, unsigned32, rtems_object_type_t);
     356rtems_id   rtems_monitor_object_canonical_get(rtems_object_type_t, rtems_id, void *, unsigned32 *size_p);
     357rtems_id   rtems_monitor_object_canonical_next(rtems_monitor_object_info_t *, rtems_id, void *);
     358void      *rtems_monitor_object_next(void *, void *, rtems_id, rtems_id *);
     359rtems_id   rtems_monitor_object_canonical(rtems_id, void *);
     360void       rtems_monitor_object_cmd(int, char **, unsigned32, boolean);
     361
     362/* manager.c */
     363void      *rtems_monitor_manager_next(void *, void *, rtems_id *);
     364
     365/* config.c */
     366void       rtems_monitor_config_canonical(rtems_monitor_config_t *, void *);
     367void      *rtems_monitor_config_next(void *, rtems_monitor_config_t *, rtems_id *);
     368void       rtems_monitor_config_dump_header(boolean);
     369void       rtems_monitor_config_dump(rtems_monitor_config_t *, boolean verbose);
     370
     371/* mpci.c */
     372void       rtems_monitor_mpci_canonical(rtems_monitor_mpci_t *, void *);
     373void      *rtems_monitor_mpci_next(void *, rtems_monitor_mpci_t *, rtems_id *);
     374void       rtems_monitor_mpci_dump_header(boolean);
     375void       rtems_monitor_mpci_dump(rtems_monitor_mpci_t *, boolean verbose);
     376
     377/* itask.c */
     378void       rtems_monitor_init_task_canonical(rtems_monitor_init_task_t *, void *);
     379void      *rtems_monitor_init_task_next(void *, rtems_monitor_init_task_t *, rtems_id *);
     380void       rtems_monitor_init_task_dump_header(boolean);
     381void       rtems_monitor_init_task_dump(rtems_monitor_init_task_t *, boolean verbose);
     382
     383/* extension.c */
     384void       rtems_monitor_extension_canonical(rtems_monitor_extension_t *, void *);
     385void       rtems_monitor_extension_dump_header(boolean verbose);
     386void       rtems_monitor_extension_dump(rtems_monitor_extension_t *, boolean);
     387
     388/* task.c */
     389void    rtems_monitor_task_canonical(rtems_monitor_task_t *, void *);
     390void    rtems_monitor_task_dump_header(boolean verbose);
     391void    rtems_monitor_task_dump(rtems_monitor_task_t *, boolean);
     392
     393/* queue.c */
     394void    rtems_monitor_queue_canonical(rtems_monitor_queue_t *, void *);
     395void    rtems_monitor_queue_dump_header(boolean verbose);
     396void    rtems_monitor_queue_dump(rtems_monitor_queue_t *, boolean);
     397
     398/* driver.c */
     399void    *rtems_monitor_driver_next(void *, rtems_monitor_driver_t *, rtems_id *);
     400void     rtems_monitor_driver_canonical(rtems_monitor_driver_t *, void *);
     401void     rtems_monitor_driver_dump_header(boolean);
     402void     rtems_monitor_driver_dump(rtems_monitor_driver_t *, boolean);
     403
     404/* dname.c */
     405void    *rtems_monitor_dname_next(void *, rtems_monitor_dname_t *, rtems_id *);
     406void     rtems_monitor_dname_canonical(rtems_monitor_dname_t *, void *);
     407void     rtems_monitor_dname_dump_header(boolean);
     408void     rtems_monitor_dname_dump(rtems_monitor_dname_t *, boolean);
     409
     410/* symbols.c */
     411rtems_symbol_table_t *rtems_symbol_table_create();
     412void                  rtems_symbol_table_destroy(rtems_symbol_table_t *table);
     413
     414rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32);
     415rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32);
     416rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
     417void   *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
     418void    rtems_monitor_symbol_canonical(rtems_monitor_symbol_t *, rtems_symbol_t *);
     419void    rtems_monitor_symbol_canonical_by_name(rtems_monitor_symbol_t *, char *);
     420void    rtems_monitor_symbol_canonical_by_value(rtems_monitor_symbol_t *, void *);
     421unsigned32 rtems_monitor_symbol_dump(rtems_monitor_symbol_t *, boolean);
     422void    rtems_monitor_symbol_cmd(int, char **, unsigned32, boolean);
     423
    31424
    32425extern rtems_symbol_table_t *rtems_monitor_symbols;
     426
     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)
    33436
    34437#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.