Volume.h revision 3bb6020e461e8872e8df0775cba6eb32e06b93ec
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;
51a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat
52a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    /*
53a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     * The major/minor tuple of the currently mounted filesystem.
54a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat     */
55a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    dev_t mCurrentlyMountedKdev;
56f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
57f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatpublic:
58a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    Volume(VolumeManager *vm, const char *label, const char *mount_point);
59f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    virtual ~Volume();
60f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
61a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int mountVol();
624ba8948dc16463053e21cda5744f519a555080d0San Mehat    int unmountVol(bool force);
63a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int formatVol();
6449e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
65f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getLabel() { return mLabel; }
66f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    const char *getMountpoint() { return mMountpoint; }
67f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    int getState() { return mState; }
68f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
69fd7f5875129adfe2845f4f3fffb17db3a89eea25San Mehat    virtual int handleBlockEvent(NetlinkEvent *evt);
70a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual dev_t getDiskDevice();
71a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeShared();
72a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual void handleVolumeUnshared();
73f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
74f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehatprotected:
75f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat    void setState(int state);
7649e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
77a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    virtual int getDeviceNodes(dev_t *devs, int max) = 0;
7849e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehat
79dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat    int createDeviceNode(const char *path, int major, int minor);
80dd9b8e92aaf330b48ddb40a7380588ef92b53de6San Mehat
8149e2bce5b74129c26a35e25d4693cbfe98c4688eSan Mehatprivate:
82a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    int initializeMbr(const char *deviceNode);
83a2677e4ad01f250b0765f04adf0acfa6627efc98San Mehat    bool isMountpointMounted(const char *path);
843bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int createBindMounts();
853bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int doUnmount(const char *path, bool force);
863bb6020e461e8872e8df0775cba6eb32e06b93ecSan Mehat    int doMoveMount(const char *src, const char *dst, bool force);
87f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat};
88f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
89f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehattypedef android::List<Volume *> VolumeCollection;
90f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat
91f1b736bc5605e92e917ab27f5abf3ba839be2270San Mehat#endif
92