/* * Copyright 2010 Stefan Lankes, Chair for Operating Systems, * RWTH Aachen University * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This file is part of MetalSVM. */ /** * @author Stefan Lankes * @file include/metalsvm/stdlib.h * @brief Kernel space malloc and free functions and conversion functions * * This file contains some memory alloc and free calls for the kernel * and conversion functions. */ #ifndef __STDLIB_H__ #define __STDLIB_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif #define MAP_KERNEL_SPACE (1 << 0) #define MAP_USER_SPACE (1 << 1) #define MAP_PAGE_TABLE (1 << 2) #define MAP_NO_CACHE (1 << 3) #define MAP_WT (1 << 5) //#define MAP_HEAP (1 << 5) #define MAP_CODE (1 << 6) #define MAP_READONLY (1 << 7) #ifdef CONFIG_ROCKCREEK #define MAP_MPE (1 << 8) #endif #define MAP_SVM_STRONG (1 << 9) #define MAP_SVM_LAZYRELEASE (1 << 10) #define MAP_NO_ACCESS (1 << 11) void NORETURN abort(void); /** @brief Kernel's memory allocator function. * * This will just call mem_allocation with * the flags MAP_KERNEL_SPACE and MAP_HEAP. * * @return Pointer to the new memory range */ void* kmalloc(size_t); /** @brief Kernel's more general memory allocator function. * * This function lets you choose flags for the newly allocated memory. * * @param sz Desired size of the new memory * @param flags Flags to specify * * @return Pointer to the new memory range */ void* mem_allocation(size_t sz, uint32_t flags); /** @brief Free memory * * The kernel malloc doesn't track how * much memory was allocated for which pointer, * so you have to specify how much memory shall be freed. */ void kfree(void*, size_t); /** @brief String to long * * This one is documented in newlib library. * * @return Long value of the parsed numerical string */ long strtol(const char* str, char** endptr, int base); unsigned long strtoul(const char* nptr, char** endptr, int base); /** @brief ASCII to integer * * Convenience function using strtol(). * * @return Integer value of the parsed numerical string */ static inline int atoi(const char *str) { return (int)strtol(str, (char **)NULL, 10); } #ifdef __cplusplus } #endif #endif