Rev 4376 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4376 | Rev 4378 | ||
---|---|---|---|
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) |