Subversion Repositories HelenOS

Rev

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

Rev 4375 Rev 4376
Line 186... Line 186...
186
    aid_t req;
186
    aid_t req;
187
    ipc_call_t answer;
187
    ipc_call_t answer;
188
    int phone;
188
    int phone;
189
    ipcarg_t callback_phonehash;
189
    ipcarg_t callback_phonehash;
190
 
190
 
191
    phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0);
191
    phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0);
-
 
192
 
192
    if (phone < 0) {
193
    while (phone < 0) {
-
 
194
        usleep(10000);
193
        printf(NAME ": Failed to connect to device mapper\n");
195
        phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP,
194
        return -1;
196
            DEVMAP_DRIVER, 0);
195
    }
197
    }
196
   
198
   
197
    req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer);
199
    req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer);
198
 
200
 
199
    retval = ipc_data_write_start(phone, (char *) name, str_size(name) + 1);
201
    retval = ipc_data_write_start(phone, (char *) name, strlen(name) + 1);
200
 
202
 
201
    if (retval != EOK) {
203
    if (retval != EOK) {
202
        async_wait_for(req, NULL);
204
        async_wait_for(req, NULL);
203
        return -1;
205
        return -1;
204
    }
206
    }
Line 217... Line 219...
217
    aid_t req;
219
    aid_t req;
218
    ipc_call_t answer;
220
    ipc_call_t answer;
219
 
221
 
220
    req = async_send_2(driver_phone, DEVMAP_DEVICE_REGISTER, 0, 0, &answer);
222
    req = async_send_2(driver_phone, DEVMAP_DEVICE_REGISTER, 0, 0, &answer);
221
 
223
 
222
    retval = ipc_data_write_start(driver_phone, (char *) name,
224
    retval = ipc_data_write_start(driver_phone, (char *) name, strlen(name) + 1);
223
        str_size(name) + 1);
-
 
224
 
225
 
225
    if (retval != EOK) {
226
    if (retval != EOK) {
226
        async_wait_for(req, NULL);
227
        async_wait_for(req, NULL);
227
        return retval;
228
        return retval;
228
    }
229
    }
Line 254... Line 255...
254
    rd_addr = as_get_mappable_page(rd_size);
255
    rd_addr = as_get_mappable_page(rd_size);
255
   
256
   
256
    int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
257
    int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
257
    int retval = physmem_map(rd_ph_addr, rd_addr,
258
    int retval = physmem_map(rd_ph_addr, rd_addr,
258
        ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
259
        ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
259
   
260
 
260
    if (retval < 0) {
261
    if (retval < 0) {
261
        printf(NAME ": Error mapping RAM disk\n");
262
        printf(NAME ": Error mapping RAM disk\n");
262
        return false;
263
        return false;
263
    }
264
    }
264
   
265
   
Line 274... Line 275...
274
    if (EOK != device_register(driver_phone, "initrd", &dev_handle)) {
275
    if (EOK != device_register(driver_phone, "initrd", &dev_handle)) {
275
        ipc_hangup(driver_phone);
276
        ipc_hangup(driver_phone);
276
        printf(NAME ": Unable to register device\n");
277
        printf(NAME ": Unable to register device\n");
277
        return false;
278
        return false;
278
    }
279
    }
279
 
-
 
280
    /*
-
 
281
     * Create the second device.
-
 
282
     * We need at least two devices for the sake of testing of non-root
-
 
283
     * mounts. Of course it would be better to allow the second device
-
 
284
     * be created dynamically...
-
 
285
     */
-
 
286
    if (EOK != device_register(driver_phone, "spared", &dev_handle)) {
-
 
287
        ipc_hangup(driver_phone);
-
 
288
        printf(NAME ": Unable to register device\n");
-
 
289
        return false;
-
 
290
    }
-
 
291
   
280
   
292
    return true;
281
    return true;
293
}
282
}
294
 
283
 
295
int main(int argc, char **argv)
284
int main(int argc, char **argv)