Subversion Repositories HelenOS

Rev

Rev 2131 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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