summaryrefslogtreecommitdiff
path: root/firmware/usbstack/usb_storage.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/usbstack/usb_storage.c')
-rw-r--r--firmware/usbstack/usb_storage.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c
index e769216a8d..ed9efd67c3 100644
--- a/firmware/usbstack/usb_storage.c
+++ b/firmware/usbstack/usb_storage.c
@@ -302,7 +302,6 @@ static bool check_disk_present(IF_MV_NONVOID(int volume))
302#endif 302#endif
303} 303}
304 304
305#if 0
306static void try_release_ata(void) 305static void try_release_ata(void)
307{ 306{
308 /* Check if there is a connected drive left. If not, 307 /* Check if there is a connected drive left. If not,
@@ -317,10 +316,9 @@ static void try_release_ata(void)
317 } 316 }
318 if(canrelease) { 317 if(canrelease) {
319 logf("scsi release ata"); 318 logf("scsi release ata");
320 usb_release_exclusive_ata(); 319 usb_release_exclusive_storage();
321 } 320 }
322} 321}
323#endif
324 322
325#ifdef HAVE_HOTSWAP 323#ifdef HAVE_HOTSWAP
326void usb_storage_notify_hotswap(int volume,bool inserted) 324void usb_storage_notify_hotswap(int volume,bool inserted)
@@ -331,28 +329,14 @@ void usb_storage_notify_hotswap(int volume,bool inserted)
331 } 329 }
332 else { 330 else {
333 ejected[volume] = true; 331 ejected[volume] = true;
332 try_release_ata();
334 } 333 }
335} 334}
336#endif 335#endif
337 336
338void usb_storage_reconnect(void)
339{
340 int i;
341 if(usb_core_driver_enabled(USB_DRIVER_MASS_STORAGE)
342 && usb_inserted()) {
343 for(i=0;i<NUM_VOLUMES;i++)
344 ejected[i] = !check_disk_present(IF_MV(i));
345 logf("%s", __func__);
346 }
347}
348
349/* called by usb_core_init() */ 337/* called by usb_core_init() */
350void usb_storage_init(void) 338void usb_storage_init(void)
351{ 339{
352 int i;
353 for(i=0;i<NUM_VOLUMES;i++) {
354 ejected[i] = !check_disk_present(IF_MV(i));
355 }
356 logf("usb_storage_init done"); 340 logf("usb_storage_init done");
357} 341}
358 342
@@ -431,10 +415,10 @@ void usb_storage_init_connection(void)
431#endif 415#endif
432 usb_drv_recv(ep_out, tb.transfer_buffer, 1024); 416 usb_drv_recv(ep_out, tb.transfer_buffer, 1024);
433 417
434 int lun; 418 int i;
435 for(lun=0;lun<NUM_VOLUMES;lun++) 419 for(i=0;i<NUM_VOLUMES;i++) {
436 { 420 ejected[i] = !check_disk_present(IF_MV(i));
437 queue_broadcast(SYS_USB_LUN_LOCKED, (lun<<16)+0); 421 queue_broadcast(SYS_USB_LUN_LOCKED, (i<<16)+0);
438 } 422 }
439} 423}
440 424
@@ -691,6 +675,7 @@ static void handle_scsi(struct command_block_wrapper* cbw)
691#ifdef HAVE_HOTSWAP 675#ifdef HAVE_HOTSWAP
692 if(storage_removable(lun) && !storage_present(lun)) { 676 if(storage_removable(lun) && !storage_present(lun)) {
693 ejected[lun] = true; 677 ejected[lun] = true;
678 try_release_ata();
694 } 679 }
695#endif 680#endif
696 681
@@ -893,6 +878,7 @@ static void handle_scsi(struct command_block_wrapper* cbw)
893 { 878 {
894 logf("scsi eject"); 879 logf("scsi eject");
895 ejected[lun]=true; 880 ejected[lun]=true;
881 try_release_ata();
896 } 882 }
897 } 883 }
898 } 884 }