diff options
| author | Ethan.Du <a7233c@motorola.com> | 2009-09-24 10:52:13 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2009-09-24 10:52:13 -0700 |
| commit | 9e421c9410a1b1ec95db298a23e29fb4dd200ea4 (patch) | |
| tree | e16bd6736cfcfacc3153c868b9f936c6b1fd08ba /vold | |
| parent | 814215f44e804e198538b9cf679a4d2f1a69d904 (diff) | |
| parent | 3afe20b0beb7e274eee195de436211a3e8d1b0ce (diff) | |
| download | system_core-9e421c9410a1b1ec95db298a23e29fb4dd200ea4.zip system_core-9e421c9410a1b1ec95db298a23e29fb4dd200ea4.tar.gz system_core-9e421c9410a1b1ec95db298a23e29fb4dd200ea4.tar.bz2 | |
am 3afe20b0: vold: Add support for /dev/block/mmcblk1
Merge commit '3afe20b0beb7e274eee195de436211a3e8d1b0ce' into eclair-plus-aosp
* commit '3afe20b0beb7e274eee195de436211a3e8d1b0ce':
vold: Add support for /dev/block/mmcblk1
Diffstat (limited to 'vold')
| -rw-r--r-- | vold/blkdev.c | 8 | ||||
| -rw-r--r-- | vold/media.h | 6 | ||||
| -rw-r--r-- | vold/uevent.c | 5 | ||||
| -rw-r--r-- | vold/volmgr.c | 20 |
4 files changed, 33 insertions, 6 deletions
diff --git a/vold/blkdev.c b/vold/blkdev.c index 2c5681a..33fed1b 100644 --- a/vold/blkdev.c +++ b/vold/blkdev.c @@ -32,6 +32,7 @@ #include "vold.h" #include "blkdev.h" #include "diskmbr.h" +#include "media.h" #define DEBUG_BLKDEV 0 @@ -132,7 +133,12 @@ int blkdev_refresh(blkdev_t *blk) } } else if (blk->type == blkdev_partition) { struct dos_partition part; - int part_no = blk->minor -1; + int part_no; + + if (blk->media->media_type == media_mmc) + part_no = blk->minor % MMC_PARTS_PER_CARD -1; + else + part_no = blk->minor -1; if (part_no < NDOSPART) { dos_partition_dec(block + DOSPARTOFF + part_no * sizeof(struct dos_partition), &part); diff --git a/vold/media.h b/vold/media.h index 567ce04..6fd8b84 100644 --- a/vold/media.h +++ b/vold/media.h @@ -28,6 +28,12 @@ typedef enum media_type { media_devmapper, } media_type_t; +/* + * max 8 partitions per card + */ +#define MMC_PARTS_PER_CARD (1<<3) +#define ALIGN_MMC_MINOR(min) (min / MMC_PARTS_PER_CARD * MMC_PARTS_PER_CARD) + typedef struct media { char *devpath; char *name; diff --git a/vold/uevent.c b/vold/uevent.c index dffe817..dc15d80 100644 --- a/vold/uevent.c +++ b/vold/uevent.c @@ -325,7 +325,10 @@ static int handle_block_event(struct uevent *event) * If there isn't a disk already its because *we* * are the disk */ - disk = blkdev_lookup_by_devno(maj, 0); + if (media->media_type == media_mmc) + disk = blkdev_lookup_by_devno(maj, ALIGN_MMC_MINOR(min)); + else + disk = blkdev_lookup_by_devno(maj, 0); if (!(blkdev = blkdev_create(disk, event->path, diff --git a/vold/volmgr.c b/vold/volmgr.c index 61d0c4f..deb680e 100644 --- a/vold/volmgr.c +++ b/vold/volmgr.c @@ -536,9 +536,16 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev) * Since we only support creating 1 partition (right now), * we can just lookup the target by devno */ - blkdev_t *part = blkdev_lookup_by_devno(dev->major, 1); + blkdev_t *part; + if (vol->media_type == media_mmc) + part = blkdev_lookup_by_devno(dev->major, ALIGN_MMC_MINOR(dev->minor) + 1); + else + part = blkdev_lookup_by_devno(dev->major, 1); if (!part) { - part = blkdev_lookup_by_devno(dev->major, 0); + if (vol->media_type == media_mmc) + part = blkdev_lookup_by_devno(dev->major, ALIGN_MMC_MINOR(dev->minor)); + else + part = blkdev_lookup_by_devno(dev->major, 0); if (!part) { LOGE("Unable to find device to format"); return -ENODEV; @@ -573,9 +580,14 @@ static int _volmgr_consider_disk_and_vol(volume_t *vol, blkdev_t *dev) rc = -ENODEV; int i; for (i = 0; i < dev->nr_parts; i++) { - blkdev_t *part = blkdev_lookup_by_devno(dev->major, (i+1)); + blkdev_t *part; + if (vol->media_type == media_mmc) + part = blkdev_lookup_by_devno(dev->major, ALIGN_MMC_MINOR(dev->minor) + (i+1)); + else + part = blkdev_lookup_by_devno(dev->major, (i+1)); if (!part) { - LOGE("Error - unable to lookup partition for blkdev %d:%d", dev->major, (i+1)); + LOGE("Error - unable to lookup partition for blkdev %d:%d", + dev->major, dev->minor); continue; } rc = _volmgr_start(vol, part); |
