Subversion Repositories HelenOS

Rev

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

Rev 3425 Rev 4375
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(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0);
191
    phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0);
192
 
-
 
193
    while (phone < 0) {
192
    if (phone < 0) {
194
        usleep(10000);
-
 
195
        phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP,
193
        printf(NAME ": Failed to connect to device mapper\n");
196
            DEVMAP_DRIVER, 0);
194
        return -1;
197
    }
195
    }
198
   
196
   
199
    req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer);
197
    req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer);
200
 
198
 
201
    retval = ipc_data_write_start(phone, (char *) name, strlen(name) + 1);
199
    retval = ipc_data_write_start(phone, (char *) name, str_size(name) + 1);
202
 
200
 
203
    if (retval != EOK) {
201
    if (retval != EOK) {
204
        async_wait_for(req, NULL);
202
        async_wait_for(req, NULL);
205
        return -1;
203
        return -1;
206
    }
204
    }
Line 219... Line 217...
219
    aid_t req;
217
    aid_t req;
220
    ipc_call_t answer;
218
    ipc_call_t answer;
221
 
219
 
222
    req = async_send_2(driver_phone, DEVMAP_DEVICE_REGISTER, 0, 0, &answer);
220
    req = async_send_2(driver_phone, DEVMAP_DEVICE_REGISTER, 0, 0, &answer);
223
 
221
 
224
    retval = ipc_data_write_start(driver_phone, (char *) name, strlen(name) + 1);
222
    retval = ipc_data_write_start(driver_phone, (char *) name,
-
 
223
        str_size(name) + 1);
225
 
224
 
226
    if (retval != EOK) {
225
    if (retval != EOK) {
227
        async_wait_for(req, NULL);
226
        async_wait_for(req, NULL);
228
        return retval;
227
        return retval;
229
    }
228
    }
Line 255... Line 254...
255
    rd_addr = as_get_mappable_page(rd_size);
254
    rd_addr = as_get_mappable_page(rd_size);
256
   
255
   
257
    int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
256
    int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE;
258
    int retval = physmem_map(rd_ph_addr, rd_addr,
257
    int retval = physmem_map(rd_ph_addr, rd_addr,
259
        ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
258
        ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags);
260
 
259
   
261
    if (retval < 0) {
260
    if (retval < 0) {
262
        printf(NAME ": Error mapping RAM disk\n");
261
        printf(NAME ": Error mapping RAM disk\n");
263
        return false;
262
        return false;
264
    }
263
    }
265
   
264
   
Line 275... Line 274...
275
    if (EOK != device_register(driver_phone, "initrd", &dev_handle)) {
274
    if (EOK != device_register(driver_phone, "initrd", &dev_handle)) {
276
        ipc_hangup(driver_phone);
275
        ipc_hangup(driver_phone);
277
        printf(NAME ": Unable to register device\n");
276
        printf(NAME ": Unable to register device\n");
278
        return false;
277
        return false;
279
    }
278
    }
-
 
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
    }
280
   
291
   
281
    return true;
292
    return true;
282
}
293
}
283
 
294
 
284
int main(int argc, char **argv)
295
int main(int argc, char **argv)