28 |
char *program_name = "physmem"; |
char *program_name = "physmem"; |
29 |
|
|
30 |
|
|
31 |
|
void |
32 |
|
get_all_memory (void) |
33 |
|
{ |
34 |
|
l4_fpage_t fpage; |
35 |
|
|
36 |
|
do |
37 |
|
{ |
38 |
|
l4_msg_t msg; |
39 |
|
l4_msg_tag_t msg_tag; |
40 |
|
l4_grant_item_t grant_item; |
41 |
|
|
42 |
|
l4_accept (l4_map_grant_items (l4_complete_address_space)); |
43 |
|
l4_msg_clear (&msg); |
44 |
|
/* FIXME: 2 is WORTEL_MSG_GET_MEM. */ |
45 |
|
l4_set_msg_label (&msg, 2); |
46 |
|
/* FIXME: cap_id */ |
47 |
|
l4_msg_append_word (&msg, 0); |
48 |
|
l4_msg_load (&msg); |
49 |
|
/* FIXME: Hard coded wortel thread. */ |
50 |
|
msg_tag = l4_call (l4_global_id (l4_thread_user_base () + 2, 1)); |
51 |
|
if (l4_ipc_failed (msg_tag)) |
52 |
|
{ |
53 |
|
debug ("get_mem request failed during %s: %u", |
54 |
|
l4_error_code () & 1 ? "receive" : "send", |
55 |
|
(l4_error_code () >> 1) & 0x7); |
56 |
|
l4_sleep (l4_never); |
57 |
|
} |
58 |
|
if (l4_untyped_words (msg_tag) != 0 |
59 |
|
|| l4_typed_words (msg_tag) != 2) |
60 |
|
{ |
61 |
|
debug ("Invalid format of wortel get_mem reply"); |
62 |
|
l4_sleep (l4_never); |
63 |
|
} |
64 |
|
l4_msg_store (msg_tag, &msg); |
65 |
|
l4_msg_get_grant_item (&msg, 0, &grant_item); |
66 |
|
fpage = grant_item.send_fpage; |
67 |
|
|
68 |
|
if (fpage.raw != l4_nilpage.raw) |
69 |
|
debug ("%s: Got fpage 0x%x/%u\n", program_name, |
70 |
|
l4_address (fpage), l4_size_log2 (fpage)); |
71 |
|
} |
72 |
|
while (fpage.raw != l4_nilpage.raw); |
73 |
|
} |
74 |
|
|
75 |
|
|
76 |
int |
int |
77 |
main (int argc, char *argv[]) |
main (int argc, char *argv[]) |
78 |
{ |
{ |
80 |
|
|
81 |
debug ("%s " PACKAGE_VERSION "\n", program_name); |
debug ("%s " PACKAGE_VERSION "\n", program_name); |
82 |
|
|
83 |
|
get_all_memory (); |
84 |
|
|
85 |
while (1) |
while (1) |
86 |
l4_sleep (l4_never); |
l4_sleep (l4_never); |
87 |
|
|