/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _VOLMGR_H #define _VOLMGR_H #include #include "vold.h" #include "blkdev.h" #include "media.h" #include "devmapper.h" #define PROP_EXTERNAL_STORAGE_STATE "EXTERNAL_STORAGE_STATE" // these must match the corresponding states in the MediaState enum. // A path to the volume mount point follows the colon typedef enum volume_state { volstate_unknown, volstate_nomedia, #define VOLD_EVT_NOMEDIA "volume_nomedia:" #define VOLD_ES_PVAL_NOMEDIA "removed" volstate_unmounted, #define VOLD_EVT_UNMOUNTED "volume_unmounted:" #define VOLD_ES_PVAL_UNMOUNTED "unmounted" volstate_checking, #define VOLD_EVT_CHECKING "volume_checking:" #define VOLD_ES_PVAL_CHECKING "checking" volstate_mounted, #define VOLD_EVT_MOUNTED "volume_mounted:" #define VOLD_ES_PVAL_MOUNTED "mounted" volstate_mounted_ro, #define VOLD_EVT_MOUNTED_RO "volume_mounted_ro:" #define VOLD_ES_PVAL_MOUNTED_RO "mounted_ro" volstate_badremoval, #define VOLD_EVT_BADREMOVAL "volume_badremoval:" #define VOLD_ES_PVAL_BADREMOVAL "bad_removal" volstate_damaged, #define VOLD_EVT_DAMAGED "volume_damaged:" #define VOLD_ES_PVAL_DAMAGED "unmountable" volstate_nofs, #define VOLD_EVT_NOFS "volume_nofs:" #define VOLD_ES_PVAL_NOFS "nofs" volstate_ums, #define VOLD_EVT_UMS "volume_ums:" #define VOLD_ES_PVAL_UMS "shared" volstate_ejecting, #define VOLD_EVT_EJECTING "volume_ejecting:" #define VOLD_ES_PVAL_EJECTING "ejecting" volstate_formatting, } volume_state_t; struct volume; struct volmgr_fstable_entry { char *name; int (*identify_fn) (blkdev_t *dev); int (*check_fn) (blkdev_t *dev); int (*mount_fn) (blkdev_t *dev, struct volume *vol, boolean safe_mode); boolean case_sensitive_paths; }; struct volmgr_start_args { struct volmgr_fstable_entry *fs; blkdev_t *dev; }; struct volmgr_reaper_args { void (*cb) (struct volume *, void *); void *cb_arg; }; #define VOLMGR_MAX_MEDIAPATHS_PER_VOLUME 8 typedef struct volume { char *media_paths[VOLMGR_MAX_MEDIAPATHS_PER_VOLUME]; media_type_t media_type; char *mount_point; char *ums_path; struct devmapping *dm; pthread_mutex_t lock; volume_state_t state; blkdev_t *dev; pid_t worker_pid; pthread_t worker_thread; union { struct volmgr_start_args start_args; struct volmgr_reaper_args reaper_args; } worker_args; boolean worker_running; pthread_mutex_t worker_sem; struct volmgr_fstable_entry *fs; struct volume *next; } volume_t; int volmgr_consider_disk(blkdev_t *dev); int volmgr_notify_eject(blkdev_t *dev, void (* cb) (blkdev_t *)); int volmgr_send_states(void); int volmgr_enable_ums(boolean enable); int volmgr_stop_volume_by_mountpoint(char *mount_point); int volmgr_start_volume_by_mountpoint(char *mount_point); int volmgr_safe_mode(boolean enable); int volmgr_format_volume(char *mount_point); int volmgr_set_volume_key(char *mount_point, unsigned char *key); void KillProcessesWithOpenFiles(const char* mountPoint, boolean sigkill, int *excluded, int num_excluded); #endif