/* * Copyright (C) 2015 MediaTek Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include "ged_base.h" #include #include #include #include #include #include #include unsigned long ged_copy_to_user(void __user *pvTo, const void *pvFrom, unsigned long ulBytes) { if (access_ok(VERIFY_WRITE, pvTo, ulBytes)) return __copy_to_user(pvTo, pvFrom, ulBytes); return ulBytes; } unsigned long ged_copy_from_user(void *pvTo, const void __user *pvFrom, unsigned long ulBytes) { if (access_ok(VERIFY_READ, pvFrom, ulBytes)) return __copy_from_user(pvTo, pvFrom, ulBytes); return ulBytes; } void *ged_alloc(int i32Size) { void *pvBuf; if (i32Size <= PAGE_SIZE) pvBuf = kmalloc(i32Size, GFP_KERNEL); else pvBuf = vmalloc(i32Size); return pvBuf; } void *ged_alloc_atomic(int i32Size) { void *pvBuf; if (i32Size <= PAGE_SIZE) pvBuf = kmalloc(i32Size, GFP_ATOMIC); else pvBuf = vmalloc(i32Size); return pvBuf; } void ged_free(void *pvBuf, int i32Size) { if (pvBuf) { if (i32Size <= PAGE_SIZE) kfree(pvBuf); else vfree(pvBuf); } } long ged_get_pid(void) { if (in_interrupt()) return 0xffffffffL; return (long)task_tgid_nr(current); } unsigned long long ged_get_time(void) { unsigned long long temp; preempt_disable(); temp = cpu_clock(smp_processor_id()); preempt_enable(); return temp; }