Subversion Repositories HelenOS-historic

Rev

Rev 1547 | Rev 1649 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1547 Rev 1596
Line 31... Line 31...
31
 * @brief   Naming service for HelenOS IPC.
31
 * @brief   Naming service for HelenOS IPC.
32
 */
32
 */
33
 
33
 
34
#include <ipc/ipc.h>
34
#include <ipc/ipc.h>
35
#include <ipc/ns.h>
35
#include <ipc/ns.h>
-
 
36
#include <ipc/services.h>
36
#include <stdio.h>
37
#include <stdio.h>
37
#include <unistd.h>
38
#include <unistd.h>
38
#include <stdlib.h>
39
#include <stdlib.h>
39
#include <errno.h>
40
#include <errno.h>
40
#include <assert.h>
41
#include <assert.h>
Line 74... Line 75...
74
    ipcarg_t in_phone_hash;     /**< Incoming phone hash. */
75
    ipcarg_t in_phone_hash;     /**< Incoming phone hash. */
75
} hashed_service_t;
76
} hashed_service_t;
76
 
77
 
77
int static ping_phone;
78
int static ping_phone;
78
 
79
 
-
 
80
static void *clockaddr = NULL;
-
 
81
static void *klogaddr = NULL;
-
 
82
 
79
static void get_realtime_as(ipc_callid_t callid, ipc_call_t *call)
83
static void get_as(ipc_callid_t callid, ipc_call_t *call, char *name, void **addr)
80
{
84
{
81
    static void *addr = NULL;
-
 
82
    void *ph_addr;
85
    void *ph_addr;
83
 
86
 
84
    if (!addr) {
87
    if (!*addr) {
85
        ph_addr = (void *)sysinfo_value("clock.faddr");
88
        ph_addr = (void *)sysinfo_value(name);
86
        if (!ph_addr) {
89
        if (!ph_addr) {
87
            ipc_answer_fast(callid, ENOENT, 0, 0);
90
            ipc_answer_fast(callid, ENOENT, 0, 0);
88
            return;
91
            return;
89
        }
92
        }
90
        addr = as_get_mappable_page(PAGE_SIZE);
93
        *addr = as_get_mappable_page(PAGE_SIZE);
91
        map_physmem(ph_addr, addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
94
        map_physmem(ph_addr, *addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
92
    }
95
    }
93
    ipc_answer_fast(callid, 0, (ipcarg_t)addr, AS_AREA_READ);
96
    ipc_answer_fast(callid, 0, (ipcarg_t)*addr, AS_AREA_READ);
94
}
97
}
95
 
98
 
96
int main(int argc, char **argv)
99
int main(int argc, char **argv)
97
{
100
{
98
    ipc_call_t call;
101
    ipc_call_t call;
Line 107... Line 110...
107
       
110
       
108
    while (1) {
111
    while (1) {
109
        callid = ipc_wait_for_call(&call);
112
        callid = ipc_wait_for_call(&call);
110
        switch (IPC_GET_METHOD(call)) {
113
        switch (IPC_GET_METHOD(call)) {
111
        case IPC_M_AS_AREA_RECV:
114
        case IPC_M_AS_AREA_RECV:
-
 
115
            switch (IPC_GET_ARG3(call)) {
-
 
116
            case SERVICE_MEM_REALTIME:
-
 
117
                get_as(callid, &call, "clock.faddr", &clockaddr);
-
 
118
                break;
-
 
119
            case SERVICE_MEM_KLOG:
-
 
120
                get_as(callid, &call, "klog.faddr", &klogaddr);
-
 
121
                break;
-
 
122
            default:
112
            get_realtime_as(callid, &call);
123
                ipc_answer_fast(callid, ENOENT, 0, 0);
-
 
124
            }
113
            continue;
125
            continue;
114
        case IPC_M_PHONE_HUNGUP:
126
        case IPC_M_PHONE_HUNGUP:
115
            retval = 0;
127
            retval = 0;
116
            break;
128
            break;
117
        case IPC_M_CONNECT_TO_ME:
129
        case IPC_M_CONNECT_TO_ME: