summaryrefslogtreecommitdiff
path: root/cpukit/libmisc/monitor/mon-config.c
blob: 95b77981733a6c765e9bf1a384f38a4dff9987f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * RTEMS Config display support
 *
 * TODO
 */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <rtems.h>
#include <rtems/monitor.h>

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>             /* strtoul() */

#define DATACOL 15
#define CONTCOL DATACOL		/* continued col */

/*
 * Fill in entire monitor config table
 * for sending to a remote monitor or printing on the local system
 */

void
rtems_monitor_config_canonical(
    rtems_monitor_config_t *canonical_config,
    const void             *config_void
)
{
    rtems_api_configuration_table *r = &Configuration_RTEMS_API;

    canonical_config->work_space_size = rtems_configuration_get_work_space_size();
    canonical_config->maximum_tasks = rtems_configuration_get_maximum_tasks();
    canonical_config->maximum_timers = rtems_configuration_get_maximum_timers();
    canonical_config->maximum_semaphores = rtems_configuration_get_maximum_semaphores();
    canonical_config->maximum_message_queues = rtems_configuration_get_maximum_message_queues();
    canonical_config->maximum_partitions = rtems_configuration_get_maximum_partitions();
    canonical_config->maximum_regions = rtems_configuration_get_maximum_regions();
    canonical_config->maximum_ports = rtems_configuration_get_maximum_ports();
    canonical_config->maximum_periods = rtems_configuration_get_maximum_periods();
    canonical_config->maximum_extensions = rtems_configuration_get_maximum_extensions();
    canonical_config->microseconds_per_tick = rtems_configuration_get_microseconds_per_tick();
    canonical_config->ticks_per_timeslice = rtems_configuration_get_ticks_per_timeslice();
    canonical_config->number_of_initialization_tasks = r->number_of_initialization_tasks;
}

/*
 * This is easy, since there is only 1 (altho we could get them from
 *    other nodes...)
 */

const void *
rtems_monitor_config_next(
    void                  *object_info RTEMS_UNUSED,
    rtems_monitor_config_t *canonical_config RTEMS_UNUSED,
    rtems_id              *next_id
)
{
    int n = rtems_object_id_get_index(*next_id);

    if (n >= 1)
        goto failed;

    _Objects_Allocator_lock();

    *next_id += 1;
    return (const void *) (uintptr_t) 1;

failed:
    *next_id = RTEMS_OBJECT_ID_FINAL;
    return 0;
}


void
rtems_monitor_config_dump_header(
    bool verbose RTEMS_UNUSED
)
{
    fprintf(stdout,"\
INITIAL (startup) Configuration Info\n");
/*23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
0         1         2         3         4         5         6         7       */
    rtems_monitor_separator();
}


int
rtems_monitor_config_dump(
    rtems_monitor_config_t *monitor_config,
    bool                 verbose RTEMS_UNUSED
)
{
    int     length = 0;

    length = 0;
    length += fprintf(stdout,"WORKSPACE");
    length += rtems_monitor_pad(DATACOL, length);
    length += fprintf(stdout,"start: %p;  size: 0x%" PRIx32 " (%" PRId32 ")\n",
                     monitor_config->work_space_start,
                     monitor_config->work_space_size,
                     monitor_config->work_space_size);

    length = 0;
    length += fprintf(stdout,"TIME");
    length += rtems_monitor_pad(DATACOL, length);
    length += fprintf(stdout,"usec/tick: %" PRId32 ";  tick/timeslice: %" PRId32 ";  tick/sec: %" PRId32 "\n",
                     monitor_config->microseconds_per_tick,
                     monitor_config->ticks_per_timeslice,
                     1000000 / monitor_config->microseconds_per_tick);

    length = 0;
    length += fprintf(stdout,"MAXIMUMS");
    length += rtems_monitor_pad(DATACOL, length);
    length += fprintf(stdout,"tasks: %" PRId32 "%c;  timers: %" PRId32 "%c;  sems: %" PRId32 "%c;  que's: %" PRId32 "%c;  ext's: %" PRId32 "%c;\n",
                     monitor_config->maximum_tasks & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_tasks & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_timers & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_timers & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_semaphores & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_semaphores & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_message_queues & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_message_queues & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_extensions & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_extensions & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+');
    length = 0;
    length += rtems_monitor_pad(CONTCOL, length);
    length += fprintf(stdout,"partitions: %" PRId32 "%c;  regions: %" PRId32 "%c;  ports: %" PRId32 "%c;  periods: %" PRId32 "%c;\n",
                     monitor_config->maximum_partitions & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_partitions & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_regions & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_regions & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_ports & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_ports & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+',
                     monitor_config->maximum_periods & ~OBJECTS_UNLIMITED_OBJECTS,
                     (monitor_config->maximum_periods & OBJECTS_UNLIMITED_OBJECTS) == 0 ? ' ' : '+');
    return length;
}