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) |