drake
1.0.0
|
00001 /* 00002 Copyright 2015 Nicolas Melot 00003 00004 This file is part of Drake. 00005 00006 Drake is free software: you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation, either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 Drake is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with Drake. If not, see <http://www.gnu.org/licenses/>. 00018 00019 */ 00020 00021 00022 #include <stddef.h> 00023 00024 #include <drake/task.h> 00025 #include <drake/schedule.h> 00026 00027 #ifndef DRAKE_PLATFORM_H 00028 #define DRAKE_PLATFORM_H 00029 00031 #define drake_platform_stream_create(stream, application) \ 00032 void* (drake_function(application))(size_t id, task_status_t state); \ 00033 void (drake_schedule_init(application))(drake_schedule_t*); \ 00034 void (drake_schedule_destroy(application))(drake_schedule_t*); \ 00035 int (drake_task_number(application))(); \ 00036 char* (drake_task_name(application))(size_t); \ 00037 drake_platform_stream_create_explicit(stream, PELIB_##CONCAT_2(drake_schedule_init_, application), PELIB_##CONCAT_2(drake_schedule_destroy_, application), PELIB_CONCAT_2(drake_function_, application)) 00038 00040 typedef struct drake_time *drake_time_t; 00042 typedef struct drake_platform *drake_platform_t; 00044 typedef struct drake_power *drake_power_t; 00046 size_t drake_platform_shared_size(); 00048 size_t drake_platform_shared_align(); 00050 size_t drake_platform_private_size(); 00052 drake_platform_t drake_platform_init(void*); 00054 int drake_platform_destroy(drake_platform_t); 00060 volatile void* drake_platform_shared_malloc(size_t size, size_t core); 00061 volatile void* drake_platform_shared_malloc_mailbox(size_t size, size_t core); 00063 void drake_platform_shared_free(volatile void* addr, size_t core); 00065 void* drake_platform_store_malloc(size_t size); 00067 void drake_platform_store_free(void*); 00069 void* drake_platform_private_malloc(size_t size); 00071 void drake_platform_private_free(void*); 00076 void* drake_remote_addr(void* addr, size_t core); 00078 int drake_platform_pull(volatile void* addr); 00080 int drake_platform_commit(volatile void* addr); 00082 size_t drake_platform_core_id(); 00084 size_t drake_platform_core_size(); 00086 size_t drake_platform_core_max(); 00088 void drake_platform_barrier(void*); 00090 void drake_platform_exclusive_begin(); 00092 void drake_platform_exclusive_end(); 00097 int drake_platform_set_frequency(int frequency /* in KHz */); 00102 int drake_platform_set_frequency_autoscale(int frequency); 00107 int drake_platform_set_voltage(float voltage); 00112 int drake_platform_set_voltage_frequency(drake_platform_t, size_t frequency); 00114 size_t drake_platform_get_frequency(drake_platform_t); 00116 float drake_platform_get_voltage(); 00121 int drake_platform_time_get(drake_time_t); 00128 int drake_platform_time_subtract(drake_time_t res, drake_time_t t1, drake_time_t t2); 00135 int drake_platform_time_add(drake_time_t res, drake_time_t t1, drake_time_t t2); 00137 int drake_platform_time_greater(drake_time_t t1, drake_time_t t2); 00139 int drake_platform_time_equals(drake_time_t t1, drake_time_t t2); 00142 int drake_platform_time_init(drake_time_t t, double ms); 00144 FILE* drake_platform_time_printf(FILE* stream, drake_time_t); 00146 void drake_platform_time_destroy(drake_time_t time); 00148 drake_time_t drake_platform_time_alloc(); 00153 int drake_platform_sleep(drake_time_t period); 00155 enum drake_power_monitor {DRAKE_POWER_CHIP, DRAKE_POWER_MEMORY_CONTROLLER, DRAKE_POWER_CORE}; 00161 drake_power_t drake_platform_power_init(drake_platform_t pt, size_t samples, int measurement); 00165 void drake_platform_power_begin(drake_power_t pwr); 00167 size_t drake_platform_power_end(drake_power_t); 00173 FILE* drake_platform_power_printf(FILE* stream, drake_power_t, char* separator); 00180 FILE* drake_platform_power_printf_line(FILE* stream, drake_power_t, size_t line, char* separator); 00187 FILE* drake_platform_power_printf_cumulate(FILE* stream, drake_power_t, int metrics, char *separator); 00195 FILE* drake_platform_power_printf_line_cumulate(FILE* stream, drake_power_t, size_t line, int metrics, char *separator); 00197 void drake_platform_power_destroy(drake_power_t); 00198 00199 int drake_platform_stream_create_explicit(drake_platform_t stream, void (*schedule_init)(drake_schedule_t*), void (*schedule_destroy)(drake_schedule_t*), void* (*task_function)(size_t id, task_status_t status)); 00200 int drake_platform_stream_init(drake_platform_t stream, void* arg); 00201 int drake_platform_stream_run(drake_platform_t); 00202 int drake_platform_stream_destroy(drake_platform_t); 00203 00204 void drake_platform_core_disable(drake_platform_t pt, size_t core); 00205 void drake_platform_core_enable(drake_platform_t pt, size_t core); 00206 void drake_platform_sleep_disable(drake_platform_t pt, size_t core); 00207 void drake_platform_sleep_enable(drake_platform_t pt, size_t core); 00208 00209 #endif // DRAKE_PLATFORM_H