diff options
Diffstat (limited to 'firmware/usbstack/usb_storage.c')
-rw-r--r-- | firmware/usbstack/usb_storage.c | 30 |
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 | ||
306 | static void try_release_ata(void) | 305 | static 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 |
326 | void usb_storage_notify_hotswap(int volume,bool inserted) | 324 | void 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 | ||
338 | void 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() */ |
350 | void usb_storage_init(void) | 338 | void 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 | } |