Rev 1418 | Rev 1462 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1418 | Rev 1435 | ||
---|---|---|---|
Line 38... | Line 38... | ||
38 | #include <stdlib.h> |
38 | #include <stdlib.h> |
39 | #include <errno.h> |
39 | #include <errno.h> |
40 | #include <assert.h> |
40 | #include <assert.h> |
41 | #include <libadt/list.h> |
41 | #include <libadt/list.h> |
42 | #include <libadt/hash_table.h> |
42 | #include <libadt/hash_table.h> |
- | 43 | #include <sysinfo.h> |
|
- | 44 | #include <ddi.h> |
|
- | 45 | #include <as.h> |
|
43 | 46 | ||
44 | #define NAME "NS" |
47 | #define NAME "NS" |
45 | 48 | ||
46 | #define NS_HASH_TABLE_CHAINS 20 |
49 | #define NS_HASH_TABLE_CHAINS 20 |
47 | 50 | ||
Line 71... | Line 74... | ||
71 | ipcarg_t in_phone_hash; /**< Incoming phone hash. */ |
74 | ipcarg_t in_phone_hash; /**< Incoming phone hash. */ |
72 | } hashed_service_t; |
75 | } hashed_service_t; |
73 | 76 | ||
74 | int static ping_phone; |
77 | int static ping_phone; |
75 | 78 | ||
- | 79 | static void get_realtime_as(ipc_callid_t callid, ipc_call_t *call) |
|
- | 80 | { |
|
- | 81 | static void *addr = NULL; |
|
- | 82 | void *ph_addr; |
|
- | 83 | ||
- | 84 | if (IPC_GET_ARG3(*call) != (AS_AREA_READ | AS_AREA_CACHEABLE)) { |
|
- | 85 | ipc_answer_fast(callid, EPERM, 0, 0); |
|
- | 86 | return; |
|
- | 87 | } |
|
- | 88 | if (!addr) { |
|
- | 89 | ph_addr = (void *)sysinfo_value("clock.faddr"); |
|
- | 90 | if (!ph_addr) { |
|
- | 91 | ipc_answer_fast(callid, ENOENT, 0, 0); |
|
- | 92 | return; |
|
- | 93 | } |
|
- | 94 | addr = (void *)(200*1024*1024); /* TODO: intelligent freemem space */ |
|
- | 95 | map_physmem(task_get_id(), ph_addr, addr, 1, |
|
- | 96 | AS_AREA_READ | AS_AREA_CACHEABLE); |
|
- | 97 | } |
|
- | 98 | ipc_answer_fast(callid, 0, (ipcarg_t)addr, 0); |
|
- | 99 | } |
|
- | 100 | ||
76 | int main(int argc, char **argv) |
101 | int main(int argc, char **argv) |
77 | { |
102 | { |
78 | ipc_call_t call; |
103 | ipc_call_t call; |
79 | ipc_callid_t callid; |
104 | ipc_callid_t callid; |
80 | char *as_area; |
105 | char *as_area; |
Line 100... | Line 125... | ||
100 | // printf("Reading shared memory..."); |
125 | // printf("Reading shared memory..."); |
101 | // printf("Text: %s", as_area); |
126 | // printf("Text: %s", as_area); |
102 | } else |
127 | } else |
103 | // printf("Failed answer: %d\n", retval); |
128 | // printf("Failed answer: %d\n", retval); |
104 | continue; |
129 | continue; |
- | 130 | case IPC_M_AS_AREA_RECV: |
|
- | 131 | get_realtime_as(callid, &call); |
|
105 | break; |
132 | continue; |
106 | case IPC_M_INTERRUPT: |
133 | case IPC_M_INTERRUPT: |
107 | // printf("GOT INTERRUPT: %c\n", IPC_GET_ARG2(call)); |
- | |
108 | break; |
134 | break; |
109 | case IPC_M_PHONE_HUNGUP: |
135 | case IPC_M_PHONE_HUNGUP: |
110 | // printf("Phone hung up.\n"); |
- | |
111 | retval = 0; |
136 | retval = 0; |
112 | break; |
137 | break; |
113 | case IPC_M_CONNECT_TO_ME: |
138 | case IPC_M_CONNECT_TO_ME: |
114 | /* |
139 | /* |
115 | * Server requests service registration. |
140 | * Server requests service registration. |