Rev 1505 | Rev 1560 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1505 | Rev 1547 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | #include "fb.h" |
37 | #include "fb.h" |
38 | #include "sysio.h" |
38 | #include "sysio.h" |
39 | #include "ega.h" |
39 | #include "ega.h" |
40 | #include "main.h" |
40 | #include "main.h" |
41 | 41 | ||
42 | void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area, |
42 | void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area) |
43 | size_t maxsize) |
- | |
44 | { |
43 | { |
45 | void *dest; |
44 | void *dest; |
46 | 45 | ||
47 | if (*area) { |
- | |
48 | ipc_answer_fast(callid, ELIMIT, 0, 0); |
46 | dest = as_get_mappable_page(IPC_GET_ARG2(*call)); |
49 | return; |
- | |
50 | } |
- | |
51 | if (IPC_GET_ARG2(*call) > ALIGN_UP(maxsize, PAGE_SIZE)) { |
- | |
52 | ipc_answer_fast(callid, EINVAL, 0, 0); |
47 | if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0) { |
53 | return; |
48 | if (*area) |
54 | } |
- | |
55 | - | ||
56 | dest = as_get_mappable_page(maxsize); |
49 | as_area_destroy(*area); |
57 | if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0) |
- | |
58 | *area = dest; |
50 | *area = dest; |
- | 51 | } |
|
59 | } |
52 | } |
60 | 53 | ||
61 | int main(int argc, char *argv[]) |
54 | int main(int argc, char *argv[]) |
62 | { |
55 | { |
63 | ipcarg_t phonead; |
56 | ipcarg_t phonead; |