Changes in uspace/srv/ns/ns.c [6119f24:d9fae235] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/ns/ns.c
r6119f24 rd9fae235 37 37 38 38 #include <ipc/ipc.h> 39 #include <ipc/services.h> 39 40 #include <ipc/ns.h> 41 #include <unistd.h> 40 42 #include <stdio.h> 41 43 #include <errno.h> 44 #include <as.h> 45 #include <ddi.h> 46 #include <event.h> 42 47 #include <macros.h> 48 #include <sysinfo.h> 43 49 #include "ns.h" 44 50 #include "service.h" … … 46 52 #include "task.h" 47 53 54 static void *clockaddr = NULL; 55 static void *klogaddr = NULL; 56 57 static void get_as_area(ipc_callid_t callid, ipc_call_t *call, void *faddr, 58 size_t pages, void **addr) 59 { 60 if ((faddr == NULL) || (pages == 0)) { 61 ipc_answer_0(callid, ENOENT); 62 return; 63 } 64 65 if (*addr == NULL) { 66 *addr = as_get_mappable_page(pages * PAGE_SIZE); 67 68 if (*addr == NULL) { 69 ipc_answer_0(callid, ENOENT); 70 return; 71 } 72 73 if (physmem_map(faddr, *addr, pages, 74 AS_AREA_READ | AS_AREA_CACHEABLE) != 0) { 75 ipc_answer_0(callid, ENOENT); 76 return; 77 } 78 } 79 80 ipc_answer_2(callid, EOK, (ipcarg_t) *addr, AS_AREA_READ); 81 } 82 83 static void setup_clock_area(ipc_callid_t callid, ipc_call_t *call, void **addr) 84 { 85 uintptr_t faddr; 86 int err = sysinfo_get_value("clock.faddr", &faddr); 87 88 if (err != EOK) 89 ipc_answer_0(callid, err); 90 91 get_as_area(callid, call, (void *) faddr, 1, addr); 92 } 93 94 static void setup_klog_area(ipc_callid_t callid, ipc_call_t *call, void **addr) 95 { 96 uintptr_t faddr; 97 int err = sysinfo_get_value("klog.faddr", &faddr); 98 99 if (err != EOK) 100 ipc_answer_0(callid, err); 101 102 size_t pages; 103 err = sysinfo_get_value("klog.pages", &pages); 104 105 if (err != EOK) 106 ipc_answer_0(callid, err); 107 108 get_as_area(callid, call, (void *) faddr, pages, addr); 109 } 110 48 111 int main(int argc, char **argv) 49 112 { … … 72 135 73 136 task_id_t id; 74 sysarg_t retval; 75 76 switch (IPC_GET_IMETHOD(call)) { 137 ipcarg_t retval; 138 139 switch (IPC_GET_METHOD(call)) { 140 case IPC_M_SHARE_IN: 141 switch (IPC_GET_ARG3(call)) { 142 case SERVICE_MEM_REALTIME: 143 setup_clock_area(callid, &call, &clockaddr); 144 break; 145 case SERVICE_MEM_KLOG: 146 setup_klog_area(callid, &call, &klogaddr); 147 break; 148 default: 149 ipc_answer_0(callid, ENOENT); 150 } 151 continue; 77 152 case IPC_M_PHONE_HUNGUP: 78 153 retval = ns_task_disconnect(&call);
Note:
See TracChangeset
for help on using the changeset viewer.