136 lines
3.9 KiB
C
136 lines
3.9 KiB
C
|
|
/*
|
|
* 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
|