]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/jdb/ux/jdb_kern_info-ux.cpp
update
[l4.git] / kernel / fiasco / src / jdb / ux / jdb_kern_info-ux.cpp
1 IMPLEMENTATION [ux]:
2
3 #include <cstdio>
4 #include <fcntl.h>
5
6 #include "cpu.h"
7 #include "perf_cnt.h"
8 #include "simpleio.h"
9 #include "space.h"
10 #include "jdb_kobject.h"
11
12
13 class Jdb_kern_info_misc : public Jdb_kern_info_module
14 {
15 };
16
17 static Jdb_kern_info_misc k_i INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
18
19 PUBLIC
20 Jdb_kern_info_misc::Jdb_kern_info_misc()
21   : Jdb_kern_info_module('i', "Miscellaneous info")
22 {
23   Jdb_kern_info::register_subcmd(this);
24 }
25
26 PUBLIC
27 void
28 Jdb_kern_info_misc::show()
29 {
30   printf ("clck: %08x.%08x\n",
31           (unsigned) (Kip::k()->clock >> 32), 
32           (unsigned) (Kip::k()->clock));
33   show_pdir();
34 }
35
36
37 class Jdb_kern_info_cpu : public Jdb_kern_info_module
38 {
39 };
40
41 static Jdb_kern_info_cpu k_c INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
42
43 PUBLIC
44 Jdb_kern_info_cpu::Jdb_kern_info_cpu()
45   : Jdb_kern_info_module('c', "CPU features")
46 {
47   Jdb_kern_info::register_subcmd(this);
48 }
49
50 PUBLIC
51 void
52 Jdb_kern_info_cpu::show()
53 {
54   const char *perf_type = Perf_cnt::perf_type();
55   char cpu_mhz[32];
56   char time[32];
57   unsigned hz;
58
59   cpu_mhz[0] = '\0';
60   if ((hz = Cpu::boot_cpu()->frequency()))
61     {
62       unsigned mhz = hz / 1000000;
63       hz -= mhz * 1000000;
64       unsigned khz = hz / 1000;
65       snprintf(cpu_mhz, sizeof(cpu_mhz), "%d.%03d MHz", mhz, khz);
66     }
67
68   printf ("CPU: %s %s\n", Cpu::boot_cpu()->model_str(), cpu_mhz);
69   Cpu::boot_cpu()->show_cache_tlb_info("     ");
70   show_features();
71
72   if (Cpu::boot_cpu()->tsc())
73     {
74       Unsigned32 hour, min, sec, ns;
75       Cpu::boot_cpu()->tsc_to_s_and_ns(Cpu::boot_cpu()->rdtsc(), &sec, &ns);
76       hour = sec  / 3600;
77       sec -= hour * 3600;
78       min  = sec  / 60;
79       sec -= min  * 60;
80       snprintf(time, sizeof(time), "%02d:%02d:%02d.%06d",
81           hour, min, sec, ns/1000);
82     }
83   else
84     strcpy(time, "not available");
85
86   printf("\nPerformance counters: %s"
87          "\nTime stamp counter: %s"
88          "\n",
89          perf_type ? perf_type : "no",
90          time);
91 }
92
93 class Jdb_kern_info_host : public Jdb_kern_info_module
94 {
95 };
96
97 static Jdb_kern_info_host k_H INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
98
99 PUBLIC
100 Jdb_kern_info_host::Jdb_kern_info_host()
101   : Jdb_kern_info_module('H', "Host information")
102 {
103   Jdb_kern_info::register_subcmd(this);
104 }
105
106 PUBLIC
107 void
108 Jdb_kern_info_host::show()
109 {
110   for (Kobject_dbg::Iterator i = Kobject_dbg::begin(); i != Kobject_dbg::end(); ++i)
111     {
112       Task const *task = Kobject::dcast<Task const *>(Kobject::from_dbg(*i));
113       if (!task)
114         continue;
115
116       char buf[64];
117
118       Jdb_kobject::obj_description(buf, sizeof(buf), true, *i);
119       buf[sizeof(buf) - 1] = 0;
120       printf("%s, host-pid=%d\n", buf, task->pid());
121
122       snprintf(buf, sizeof(buf), "/proc/%d/maps", task->pid());
123       buf[sizeof(buf) - 1] = 0;
124       int fd = open(buf, O_RDONLY);
125       if (fd >= 0)
126         {
127           int r;
128           do
129             {
130               r = read(fd, buf, sizeof(buf));
131               if (r > 0)
132                 printf("%.*s", r, buf);
133             }
134           while (r == sizeof(buf));
135           close(fd);
136         }
137
138       printf("\n");
139     }
140 }