| |
| /* |
| * 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 <pthread.h> |
| |
| #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 |