source: rtems/c/src/lib/libmisc/monitor/monitor.h @ 8cf88427

4.104.114.84.95
Last change on this file since 8cf88427 was 72c440e, checked in by Joel Sherrill <joel.sherrill@…>, on 01/17/96 at 20:13:45

Update from Tony Bennett (tbennett@…)

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