Volume.h revision cb4dac8a5243f6673b0590019b5b28a01bd3e343
1f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat/*
2f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Copyright (C) 2008 The Android Open Source Project
3f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
4f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
5f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * you may not use this file except in compliance with the License.
6f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * You may obtain a copy of the License at
7f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
8f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
9f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat *
10f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * Unless required by applicable law or agreed to in writing, software
11f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
12f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * See the License for the specific language governing permissions and
14f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat * limitations under the License.
15f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat */
16f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
17f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#ifndef _VOLUME_H
18f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#define _VOLUME_H
19f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
20f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#include <utils/List.h>
21f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
22fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehatclass NetlinkEvent;
23a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehatclass VolumeManager;
24fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehat
25f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatclass Volume {
26f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprivate:
27f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    int mState;
28f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
29f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatpublic:
30f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Init       = -1;
31a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_NoMedia    = 0;
32f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Idle       = 1;
33f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    static const int State_Pending    = 2;
34a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Checking   = 3;
35a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Mounted    = 4;
36a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Unmounting = 5;
37a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Formatting = 6;
38a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_Shared     = 7;
39a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    static const int State_SharedMnt  = 8;
40f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
413bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    static const char *SECDIR;
423bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    static const char *SEC_STGDIR;
433bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    static const char *SEC_STG_SECIMGDIR;
443bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    static const char *SEC_ASECDIR;
453bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    static const char *ASECDIR;
463bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat
47f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprotected:
48f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    char *mLabel;
49f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    char *mMountpoint;
50a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    VolumeManager *mVm;
51d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat    bool mDebug;
52a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat
53a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    /*
54a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     * The major/minor tuple of the currently mounted filesystem.
55a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     */
56a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    dev_t mCurrentlyMountedKdev;
57f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
58f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatpublic:
59a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    Volume(VolumeManager *vm, const char *label, const char *mount_point);
60f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    virtual ~Volume();
61f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
62a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int mountVol();
634ba8948dc16463053e21cda5744f519a555080d0San Mehat    int unmountVol(bool force);
64a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int formatVol();
6549e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
66f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getLabel() { return mLabel; }
67f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getMountpoint() { return mMountpoint; }
68f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    int getState() { return mState; }
69f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
70fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehat    virtual int handleBlockEvent(NetlinkEvent *evt);
71a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual dev_t getDiskDevice();
72a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeShared();
73a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeUnshared();
74f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
75d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat    void setDebug(bool enable);
76d9a4e358614a0c5f60cc76c0636ee4bb02004a32San Mehat
77f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprotected:
78f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    void setState(int state);
7949e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
80a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual int getDeviceNodes(dev_t *devs, int max) = 0;
8149e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
82dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat    int createDeviceNode(const char *path, int major, int minor);
83dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat
8449e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehatprivate:
85a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int initializeMbr(const char *deviceNode);
86a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    bool isMountpointMounted(const char *path);
873bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int createBindMounts();
883bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int doUnmount(const char *path, bool force);
893bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int doMoveMount(const char *src, const char *dst, bool force);
90cb4dac8a5243f6673b0590019b5b28a01bd3e343San Mehat    void protectFromAutorunStupidity();
91f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat};
92f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
93f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehattypedef android::List<Volume *> VolumeCollection;
94f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
95f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#endif
96