13bca60611702f21738b1d45892bcf33847c4877eMark Salyzyn/*
2af98efbd15878fbd97fd3ef3c413d739ed9589e9Elliott Hughes** Copyright 2007, The Android Open Source Project
310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Licensed under the Apache License, Version 2.0 (the "License");
510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** you may not use this file except in compliance with the License.
610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** You may obtain a copy of the License at
710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**     http://www.apache.org/licenses/LICENSE-2.0
910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat**
1010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** Unless required by applicable law or agreed to in writing, software
1110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** distributed under the License is distributed on an "AS IS" BASIS,
1210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** See the License for the specific language governing permissions and
1410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat** limitations under the License.
1510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat*/
1610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
1712717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <errno.h>
1812717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <fcntl.h>
1910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdio.h>
2010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <stdlib.h>
2110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <string.h>
2212717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#include <unistd.h>
2310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
2410d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat#include <cutils/iosched_policy.h>
2510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
269b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__)
27167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert#include <linux/ioprio.h>
285e541bf47d28bae4a04ad124c3a82b0f33f85d17Dan Albert#include <sys/syscall.h>
2912717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#define __android_unused
3012717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#else
3112717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzyn#define __android_unused __attribute__((__unused__))
323bca60611702f21738b1d45892bcf33847c4877eMark Salyzyn#endif
3310d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
3412717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzynint android_set_ioprio(int pid __android_unused, IoSchedClass clazz __android_unused, int ioprio __android_unused) {
359b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__)
36167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert    if (syscall(SYS_ioprio_set, IOPRIO_WHO_PROCESS, pid, ioprio | (clazz << IOPRIO_CLASS_SHIFT))) {
3710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat        return -1;
3810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    }
39e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif
4010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    return 0;
4110d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat}
4210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
4312717169a51335f4b20b7c78a63b9ab66a81a366Mark Salyzynint android_get_ioprio(int pid __android_unused, IoSchedClass *clazz, int *ioprio) {
449b828adfad09200f3f1bd3602187fe3dd5335774Elliott Hughes#if defined(__ANDROID__)
4510d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    int rc;
4610d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
47167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert    if ((rc = syscall(SYS_ioprio_get, IOPRIO_WHO_PROCESS, pid)) < 0) {
4810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat        return -1;
4910d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    }
5010d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat
51167c0ed6da9d6c67d01d1e4635d8773a606419c0Dan Albert    *clazz = (rc >> IOPRIO_CLASS_SHIFT);
5210d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    *ioprio = (rc & 0xff);
53e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#else
54e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat    *clazz = IoSchedClass_NONE;
55e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat    *ioprio = 0;
56e2fe261d1ac775e9e6501bf976cd4fef4c1cf5ddSan Mehat#endif
5710d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat    return 0;
5810d469bff9031e857c7a290dae7d6ccf7b3a18f8San Mehat}
59