OSDN Git Service

Move kMajor* constants to a header file
authorChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 24 Mar 2017 16:13:45 +0000 (00:13 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Tue, 17 Dec 2019 05:19:56 +0000 (13:19 +0800)
Currently each cpp defines its own kMajor* that can't be shared.
Move the kMajor* to a header to avoid duplicate definitions.

Change isVirtioBlkDevice() to be a public static method of Disk
so that the logic could be shared as well.

VolumeManager.cpp [changed mode: 0644->0755]
model/Disk.cpp
model/Disk.h
model/PrivateVolume.cpp

old mode 100644 (file)
new mode 100755 (executable)
index 8f5a948..515a735
@@ -94,10 +94,6 @@ static const std::string kEmptyString("");
 /* 512MiB is large enough for testing purposes */
 static const unsigned int kSizeVirtualDisk = 536870912;
 
-static const unsigned int kMajorBlockMmc = 179;
-static const unsigned int kMajorBlockExperimentalMin = 240;
-static const unsigned int kMajorBlockExperimentalMax = 254;
-
 VolumeManager* VolumeManager::sInstance = NULL;
 
 VolumeManager* VolumeManager::Instance() {
@@ -218,9 +214,8 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) {
                     // emulator-specific; see Disk.cpp for details) devices are SD,
                     // and that everything else is USB
                     int flags = source->getFlags();
-                    if (major == kMajorBlockMmc || (android::vold::IsRunningInEmulator() &&
-                                                    major >= (int)kMajorBlockExperimentalMin &&
-                                                    major <= (int)kMajorBlockExperimentalMax)) {
+                    if (major == android::vold::Disk::kMajorBlockMmc ||
+                            android::vold::Disk::isVirtioBlkDevice(major)) {
                         flags |= android::vold::Disk::Flags::kSd;
                     } else {
                         flags |= android::vold::Disk::Flags::kUsb;
index d7e09d7..1a1e0dd 100644 (file)
@@ -56,29 +56,6 @@ static const char* kSysfsLoopMaxMinors = "/sys/module/loop/parameters/max_part";
 static const char* kSysfsMmcMaxMinorsDeprecated = "/sys/module/mmcblk/parameters/perdev_minors";
 static const char* kSysfsMmcMaxMinors = "/sys/module/mmc_block/parameters/perdev_minors";
 
-static const unsigned int kMajorBlockLoop = 7;
-static const unsigned int kMajorBlockScsiA = 8;
-static const unsigned int kMajorBlockScsiB = 65;
-static const unsigned int kMajorBlockScsiC = 66;
-static const unsigned int kMajorBlockScsiD = 67;
-static const unsigned int kMajorBlockScsiE = 68;
-static const unsigned int kMajorBlockScsiF = 69;
-static const unsigned int kMajorBlockScsiG = 70;
-static const unsigned int kMajorBlockScsiH = 71;
-static const unsigned int kMajorBlockScsiI = 128;
-static const unsigned int kMajorBlockScsiJ = 129;
-static const unsigned int kMajorBlockScsiK = 130;
-static const unsigned int kMajorBlockScsiL = 131;
-static const unsigned int kMajorBlockScsiM = 132;
-static const unsigned int kMajorBlockScsiN = 133;
-static const unsigned int kMajorBlockScsiO = 134;
-static const unsigned int kMajorBlockScsiP = 135;
-static const unsigned int kMajorBlockMmc = 179;
-static const unsigned int kMajorBlockExperimentalMin = 240;
-static const unsigned int kMajorBlockExperimentalMax = 254;
-static const unsigned int kMajorBlockDynamicMin = 234;
-static const unsigned int kMajorBlockDynamicMax = 512;
-
 static const char* kGptBasicData = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
 static const char* kGptAndroidMeta = "19A710A2-B3CA-11E4-B026-10604B889DCF";
 static const char* kGptAndroidExpand = "193D1EA4-B3CA-11E4-B075-10604B889DCF";
@@ -89,7 +66,7 @@ enum class Table {
     kGpt,
 };
 
-static bool isVirtioBlkDevice(unsigned int major) {
+bool Disk::isVirtioBlkDevice(unsigned int major) {
     /*
      * The new emulator's "ranchu" virtual board no longer includes a goldfish
      * MMC-based SD card device; instead, it emulates SD cards with virtio-blk,
@@ -117,8 +94,8 @@ static bool isVirtioBlkDevice(unsigned int major) {
 }
 
 static bool isNvmeBlkDevice(unsigned int major, const std::string& sysPath) {
-    return sysPath.find("nvme") != std::string::npos && major >= kMajorBlockDynamicMin &&
-           major <= kMajorBlockDynamicMax;
+    return sysPath.find("nvme") != std::string::npos && major >= Disk::kMajorBlockDynamicMin &&
+           major <= Disk::kMajorBlockDynamicMax;
 }
 
 Disk::Disk(const std::string& eventPath, dev_t device, const std::string& nickname, int flags)
index 977aac4..876ee10 100644 (file)
@@ -40,6 +40,31 @@ class Disk {
     Disk(const std::string& eventPath, dev_t device, const std::string& nickname, int flags);
     virtual ~Disk();
 
+    enum {
+        kMajorBlockLoop = 7,
+        kMajorBlockScsiA = 8,
+        kMajorBlockScsiB = 65,
+        kMajorBlockScsiC = 66,
+        kMajorBlockScsiD = 67,
+        kMajorBlockScsiE = 68,
+        kMajorBlockScsiF = 69,
+        kMajorBlockScsiG = 70,
+        kMajorBlockScsiH = 71,
+        kMajorBlockScsiI = 128,
+        kMajorBlockScsiJ = 129,
+        kMajorBlockScsiK = 130,
+        kMajorBlockScsiL = 131,
+        kMajorBlockScsiM = 132,
+        kMajorBlockScsiN = 133,
+        kMajorBlockScsiO = 134,
+        kMajorBlockScsiP = 135,
+        kMajorBlockMmc = 179,
+        kMajorBlockExperimentalMin = 240,
+        kMajorBlockExperimentalMax = 254,
+        kMajorBlockDynamicMin = 234,
+        kMajorBlockDynamicMax = 512,
+    };
+
     enum Flags {
         /* Flag that disk is adoptable */
         kAdoptable = 1 << 0,
@@ -81,6 +106,8 @@ class Disk {
     virtual status_t partitionPrivate();
     virtual status_t partitionMixed(int8_t ratio);
 
+    static bool isVirtioBlkDevice(unsigned int major);
+
   protected:
     /* ID that uniquely references this disk */
     std::string mId;
index 2b6db1b..c4f28b4 100644 (file)
@@ -41,8 +41,6 @@ using android::base::StringPrintf;
 namespace android {
 namespace vold {
 
-static const unsigned int kMajorBlockMmc = 179;
-
 PrivateVolume::PrivateVolume(dev_t device, const std::string& keyRaw)
     : VolumeBase(Type::kPrivate), mRawDevice(device), mKeyRaw(keyRaw) {
     setId(StringPrintf("private:%u,%u", major(device), minor(device)));
@@ -180,7 +178,7 @@ status_t PrivateVolume::doFormat(const std::string& fsType) {
     if (fsType == "auto") {
         // For now, assume that all MMC devices are flash-based SD cards, and
         // give everyone else ext4 because sysfs rotational isn't reliable.
-        if ((major(mRawDevice) == kMajorBlockMmc) && f2fs::IsSupported()) {
+        if ((major(mRawDevice) == Disk::kMajorBlockMmc) && f2fs::IsSupported()) {
             resolvedFsType = "f2fs";
         } else {
             resolvedFsType = "ext4";