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