/*---------------- on_activate_disk_display ---------------*/ static void on_activate_disk_display(GtkWidget * widget,t_disk * disk) { t_mounter * mt ; if (disk != NULL) { mt = (t_mounter*) g_object_get_data (G_OBJECT(widget), "mounter"); if (disk->mount_info != NULL) {/*disk is mounted*/ disk_umount (disk, mt->umount_command); /* disk->mount_info is freed by disk_mount */ } else {/*disk is not mounted*/ disk_mount (disk, mt->on_mount_cmd, mt->mount_command); /* needs a refresh, a global refresh is done whe the window becomes visible*/ } } }
void _fat_mount(struct mount_s *mount, struct bdev * device) { mount->priv[0] = device; fat_init(); disk_mount(device->index,mount->index); }
static void sd_thread(void) { struct queue_event ev; while (1) { queue_wait_w_tmo(&sd_queue, &ev, HZ); switch(ev.id) { case SYS_HOTSWAP_INSERTED: case SYS_HOTSWAP_EXTRACTED: { fat_lock(); /* lock-out FAT activity first - prevent deadlocking via disk_mount that would cause a reverse-order attempt with another thread */ mutex_lock(&sd_mutex); /* lock-out card activity - direct calls into driver that bypass the fat cache */ /* We now have exclusive control of fat cache and sd */ disk_unmount(sd_first_drive); /* release "by force", ensure file descriptors aren't leaked and any busy ones are invalid if mounting */ /* Force card init for new card, re-init for re-inserted one or * clear if the last attempt to init failed with an error. */ card_info.initialized = 0; if(ev.id == SYS_HOTSWAP_INSERTED) { int ret = sd_init_card(); if(ret == 0) { ret = disk_mount(sd_first_drive); /* 0 if fail */ if(ret < 0) DEBUGF("disk_mount failed: %d", ret); } else DEBUGF("sd_init_card failed: %d", ret); } /* * Mount succeeded, or this was an EXTRACTED event, * in both cases notify the system about the changed filesystems */ if(card_info.initialized) queue_broadcast(SYS_FS_CHANGED, 0); /* Access is now safe */ mutex_unlock(&sd_mutex); fat_unlock(); } break; case SYS_TIMEOUT: if(!TIME_BEFORE(current_tick, last_disk_activity+(3*HZ))) sd_enable(false); break; case SYS_USB_CONNECTED: usb_acknowledge(SYS_USB_CONNECTED_ACK); /* Wait until the USB cable is extracted again */ usb_wait_for_disconnect(&sd_queue); break; } } }