Xwarp.cpp revision 97ac40e4e6f3ed0bd5d6878d7d8d4a54fcaecb76
12350c44ff39b4cb2940893964a05f778fc80a436San Mehat/*
22350c44ff39b4cb2940893964a05f778fc80a436San Mehat * Copyright (C) 2008 The Android Open Source Project
32350c44ff39b4cb2940893964a05f778fc80a436San Mehat *
42350c44ff39b4cb2940893964a05f778fc80a436San Mehat * Licensed under the Apache License, Version 2.0 (the "License");
52350c44ff39b4cb2940893964a05f778fc80a436San Mehat * you may not use this file except in compliance with the License.
62350c44ff39b4cb2940893964a05f778fc80a436San Mehat * You may obtain a copy of the License at
72350c44ff39b4cb2940893964a05f778fc80a436San Mehat *
82350c44ff39b4cb2940893964a05f778fc80a436San Mehat *      http://www.apache.org/licenses/LICENSE-2.0
92350c44ff39b4cb2940893964a05f778fc80a436San Mehat *
102350c44ff39b4cb2940893964a05f778fc80a436San Mehat * Unless required by applicable law or agreed to in writing, software
112350c44ff39b4cb2940893964a05f778fc80a436San Mehat * distributed under the License is distributed on an "AS IS" BASIS,
122350c44ff39b4cb2940893964a05f778fc80a436San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132350c44ff39b4cb2940893964a05f778fc80a436San Mehat * See the License for the specific language governing permissions and
142350c44ff39b4cb2940893964a05f778fc80a436San Mehat * limitations under the License.
152350c44ff39b4cb2940893964a05f778fc80a436San Mehat */
162350c44ff39b4cb2940893964a05f778fc80a436San Mehat
172350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <stdio.h>
182350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <fcntl.h>
192350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <unistd.h>
202350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <errno.h>
212350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <string.h>
222350c44ff39b4cb2940893964a05f778fc80a436San Mehat
232350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <sys/types.h>
242350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <sys/stat.h>
252350c44ff39b4cb2940893964a05f778fc80a436San Mehat
262350c44ff39b4cb2940893964a05f778fc80a436San Mehat#define LOG_TAG "Vold"
272350c44ff39b4cb2940893964a05f778fc80a436San Mehat
282350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include <cutils/log.h>
292350c44ff39b4cb2940893964a05f778fc80a436San Mehat
302350c44ff39b4cb2940893964a05f778fc80a436San Mehat#include "Xwarp.h"
312350c44ff39b4cb2940893964a05f778fc80a436San Mehatconst char *Xwarp::XWARP_BACKINGFILE = "/mnt/secure/asec/xwarp.img";
322350c44ff39b4cb2940893964a05f778fc80a436San Mehatconst char *Xwarp::XWARP_CFG = "/sys/fs/yaffs/mtd3/xwarp-backing-store";
332350c44ff39b4cb2940893964a05f778fc80a436San Mehatconst char *Xwarp::XWARP_READY = "/sys/fs/yaffs/mtd3/xwarp-ready";
342350c44ff39b4cb2940893964a05f778fc80a436San Mehatconst char *Xwarp::XWARP_MIRROR_STATUS = "/sys/fs/yaffs/mtd3/xwarp-mirror";
352350c44ff39b4cb2940893964a05f778fc80a436San Mehat
362350c44ff39b4cb2940893964a05f778fc80a436San Mehatint Xwarp::enable() {
372350c44ff39b4cb2940893964a05f778fc80a436San Mehat    return doEnableDisable(true);
382350c44ff39b4cb2940893964a05f778fc80a436San Mehat}
392350c44ff39b4cb2940893964a05f778fc80a436San Mehat
402350c44ff39b4cb2940893964a05f778fc80a436San Mehatint Xwarp::disable() {
412350c44ff39b4cb2940893964a05f778fc80a436San Mehat    return doEnableDisable(false);
422350c44ff39b4cb2940893964a05f778fc80a436San Mehat}
432350c44ff39b4cb2940893964a05f778fc80a436San Mehat
442350c44ff39b4cb2940893964a05f778fc80a436San Mehatint Xwarp::status(bool *ready, unsigned *mirrorPos, unsigned *maxSize) {
452350c44ff39b4cb2940893964a05f778fc80a436San Mehat    FILE *fp;
462350c44ff39b4cb2940893964a05f778fc80a436San Mehat
472350c44ff39b4cb2940893964a05f778fc80a436San Mehat    *ready = false;
482350c44ff39b4cb2940893964a05f778fc80a436San Mehat    *mirrorPos = 0;
492350c44ff39b4cb2940893964a05f778fc80a436San Mehat    *maxSize = 0;
502350c44ff39b4cb2940893964a05f778fc80a436San Mehat    if (!(fp = fopen(XWARP_READY, "r"))) {
512350c44ff39b4cb2940893964a05f778fc80a436San Mehat        return -1;
522350c44ff39b4cb2940893964a05f778fc80a436San Mehat    }
532350c44ff39b4cb2940893964a05f778fc80a436San Mehat
542350c44ff39b4cb2940893964a05f778fc80a436San Mehat    fscanf(fp, "%d", (int *) ready);
552350c44ff39b4cb2940893964a05f778fc80a436San Mehat    fclose(fp);
562350c44ff39b4cb2940893964a05f778fc80a436San Mehat
572350c44ff39b4cb2940893964a05f778fc80a436San Mehat    if (!(fp = fopen(XWARP_MIRROR_STATUS, "r"))) {
582350c44ff39b4cb2940893964a05f778fc80a436San Mehat        return -1;
592350c44ff39b4cb2940893964a05f778fc80a436San Mehat    }
602350c44ff39b4cb2940893964a05f778fc80a436San Mehat
612350c44ff39b4cb2940893964a05f778fc80a436San Mehat    fscanf(fp, "%u %u", mirrorPos, maxSize);
622350c44ff39b4cb2940893964a05f778fc80a436San Mehat    fclose(fp);
632350c44ff39b4cb2940893964a05f778fc80a436San Mehat    return 0;
642350c44ff39b4cb2940893964a05f778fc80a436San Mehat}
652350c44ff39b4cb2940893964a05f778fc80a436San Mehat
662350c44ff39b4cb2940893964a05f778fc80a436San Mehatint Xwarp::doEnableDisable(bool enable) {
672350c44ff39b4cb2940893964a05f778fc80a436San Mehat    const char *tmp;
682350c44ff39b4cb2940893964a05f778fc80a436San Mehat    int fd = open(XWARP_CFG, O_WRONLY);
692350c44ff39b4cb2940893964a05f778fc80a436San Mehat
702350c44ff39b4cb2940893964a05f778fc80a436San Mehat    if (fd < 0)
712350c44ff39b4cb2940893964a05f778fc80a436San Mehat        return -1;
722350c44ff39b4cb2940893964a05f778fc80a436San Mehat
732350c44ff39b4cb2940893964a05f778fc80a436San Mehat    tmp = (enable ? XWARP_BACKINGFILE : "");
742350c44ff39b4cb2940893964a05f778fc80a436San Mehat
752350c44ff39b4cb2940893964a05f778fc80a436San Mehat    if (write(fd, tmp, strlen(tmp)+1) < 0) {
7697ac40e4e6f3ed0bd5d6878d7d8d4a54fcaecb76San Mehat        SLOGE("Failed to write xwarp cfg (%s)", strerror(errno));
772350c44ff39b4cb2940893964a05f778fc80a436San Mehat        close(fd);
782350c44ff39b4cb2940893964a05f778fc80a436San Mehat        return -1;
792350c44ff39b4cb2940893964a05f778fc80a436San Mehat    }
802350c44ff39b4cb2940893964a05f778fc80a436San Mehat
812350c44ff39b4cb2940893964a05f778fc80a436San Mehat    close(fd);
822350c44ff39b4cb2940893964a05f778fc80a436San Mehat    return 0;
832350c44ff39b4cb2940893964a05f778fc80a436San Mehat}
84