Subversion Repositories HelenOS

Rev

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

Rev 2012 Rev 2015
Line 81... Line 81...
81
} hashed_service_t;
81
} hashed_service_t;
82
 
82
 
83
static void *clockaddr = NULL;
83
static void *clockaddr = NULL;
84
static void *klogaddr = NULL;
84
static void *klogaddr = NULL;
85
 
85
 
86
static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name, void **addr)
86
static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name, char *colstr, void **addr)
87
{
87
{
88
    void *ph_addr;
88
    void *ph_addr;
-
 
89
    int ph_color;
89
 
90
 
90
    if (!*addr) {
91
    if (!*addr) {
91
        ph_addr = (void *)sysinfo_value(name);
92
        ph_addr = (void *) sysinfo_value(name);
92
        if (!ph_addr) {
93
        if (!ph_addr) {
93
            ipc_answer_fast(callid, ENOENT, 0, 0);
94
            ipc_answer_fast(callid, ENOENT, 0, 0);
94
            return;
95
            return;
95
        }
96
        }
-
 
97
        ph_color = (int) sysinfo_value(colstr);
96
        *addr = as_get_mappable_page(PAGE_SIZE);
98
        *addr = as_get_mappable_page(PAGE_SIZE, ph_color);
97
        physmem_map(ph_addr, *addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
99
        physmem_map(ph_addr, *addr, 1, AS_AREA_READ | AS_AREA_CACHEABLE);
98
    }
100
    }
99
    ipc_answer_fast(callid, 0, (ipcarg_t) *addr, AS_AREA_READ);
101
    ipc_answer_fast(callid, 0, (ipcarg_t) *addr, AS_AREA_READ);
100
}
102
}
101
 
103
 
Line 114... Line 116...
114
        callid = ipc_wait_for_call(&call);
116
        callid = ipc_wait_for_call(&call);
115
        switch (IPC_GET_METHOD(call)) {
117
        switch (IPC_GET_METHOD(call)) {
116
        case IPC_M_AS_AREA_RECV:
118
        case IPC_M_AS_AREA_RECV:
117
            switch (IPC_GET_ARG3(call)) {
119
            switch (IPC_GET_ARG3(call)) {
118
            case SERVICE_MEM_REALTIME:
120
            case SERVICE_MEM_REALTIME:
119
                get_as_area(callid, &call, "clock.faddr", &clockaddr);
121
                get_as_area(callid, &call, "clock.faddr",
-
 
122
                    "clock.fcolor", &clockaddr);
120
                break;
123
                break;
121
            case SERVICE_MEM_KLOG:
124
            case SERVICE_MEM_KLOG:
122
                get_as_area(callid, &call, "klog.faddr", &klogaddr);
125
                get_as_area(callid, &call, "klog.faddr",
-
 
126
                    "klog.fcolor", &klogaddr);
123
                break;
127
                break;
124
            default:
128
            default:
125
                ipc_answer_fast(callid, ENOENT, 0, 0);
129
                ipc_answer_fast(callid, ENOENT, 0, 0);
126
            }
130
            }
127
            continue;
131
            continue;