1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _OS_API_H_ 18 #define _OS_API_H_ 19 20 #include <stdint.h> 21 #include <slab.h> 22 23 #include <seos_priv.h> 24 25 //EXTERNAL API 26 //level 1 indices in the OS table 27 #define SYSCALL_OS_MAIN 0 28 #define SYSCALL_OS_DRIVERS 1 29 #define SYSCALL_OS_LAST 2 // always last. holes are allowed, but not immediately before this 30 31 //level 2 indices in the OS.drivers table 32 #define SYSCALL_OS_DRV_GPIO 0 33 #define SYSCALL_OS_DRV_I2C_MASTER 1 34 #define SYSCALL_OS_DRV_I2C_SLAVE 2 35 #define SYSCALL_OS_DRV_LAST 3 // always last. holes are allowed, but not immediately before this 36 37 //level 3 indices in the OS.drivers.gpio table 38 /* more thing here eventually */ 39 #define SYSCALL_OS_DRV_GPIO_REQ 0 // (uint32_t gpioNum) -> void* handle 40 #define SYSCALL_OS_DRV_GPIO_REL 1 // (handle) -> void 41 #define SYSCALL_OS_DRV_GPIO_CFG_IN 2 // (handle, i32 gpioSpeed, GpioPullMode pull) -> void 42 #define SYSCALL_OS_DRV_GPIO_CFG_OUT 3 // (handle, i32 gpioSpeed, GpioPullMode pull, GpioOpenDrainMode output, bool value) -> void 43 #define SYSCALL_OS_DRV_GPIO_CFG_ALT 4 // (handle, i32 gpioSpeed, GpioPullMode pull, GpioOpenDrainMode output, u32 altFunc) -> void 44 #define SYSCALL_OS_DRV_GPIO_GET 5 // (handle) -> bool isHigh 45 #define SYSCALL_OS_DRV_GPIO_SET 6 // (handle, bool value) -> void 46 #define SYSCALL_OS_DRV_GPIO_LAST 7 // always last. holes are allowed, but not immediately before this 47 48 //level 3 indices in the OS.drivers.i2cM table 49 #define SYSCALL_OS_DRV_I2CM_REQ 0 // (I2cBus busId, I2cSpeed speed) -> int status 50 #define SYSCALL_OS_DRV_I2CM_REL 1 // (I2cBus busId) -> int status 51 #define SYSCALL_OS_DRV_I2CM_TXRX 2 // (I2cBus busId, I2cAddr addr, const void *txBuf, size_t txSize, void *rxBuf, size_t rxSize, uint32_t yourTidForEvts, void *cookie) -> int status 52 #define SYSCALL_OS_DRV_I2CM_LAST 3 // always last. holes are allowed, but not immediately before this 53 54 //level 3 indices in the OS.drivers.i2cS table 55 #define SYSCALL_OS_DRV_I2CS_REQ 0 // (I2cBus busId, I2cAddr addr) -> int status 56 #define SYSCALL_OS_DRV_I2CS_REL 1 // (I2cBus busId) -> int status 57 #define SYSCALL_OS_DRV_I2CS_RX_EN 2 // (I2cBus busId, void *rxBuf, size_t rxSize, uint32_t yourTidForEvts, void *cookie) -> void 58 #define SYSCALL_OS_DRV_I2CS_TX_PRE 3 // (I2cBus busId, uint8_t byte, uint32_t yourTidForEvts, void *cookie) -> int status 59 #define SYSCALL_OS_DRV_I2CS_TX_PKT 4 // (I2cBus busId, const void *txBuf, size_t txSize, uint32_t yourTidForEvts, void *cookie) -> int status 60 #define SYSCALL_OS_DRV_I2CS_LAST 5 // always last. holes are allowed, but not immediately before this 61 62 //level 2 indices in the OS.main table 63 #define SYSCALL_OS_MAIN_EVENTQ 0 64 #define SYSCALL_OS_MAIN_LOGGING 1 65 #define SYSCALL_OS_MAIN_SENSOR 2 66 #define SYSCALL_OS_MAIN_TIME 3 67 #define SYSCALL_OS_MAIN_HEAP 4 68 #define SYSCALL_OS_MAIN_SLAB 5 69 #define SYSCALL_OS_MAIN_HOST 6 70 #define SYSCALL_OS_MAIN_RTC 7 71 #define SYSCALL_OS_MAIN_LAST 8 // always last. holes are allowed, but not immediately before this 72 73 //level 3 indices in the OS.main.event_queue table 74 #define SYSCALL_OS_MAIN_EVTQ_SUBCRIBE 0 // (uint32_t tid, uint32_t evtType) -> bool success 75 #define SYSCALL_OS_MAIN_EVTQ_UNSUBCRIBE 1 // ((uint32_t tid, uint32_t evtType) -> bool success 76 #define SYSCALL_OS_MAIN_EVTQ_ENQUEUE 2 // (uint32_t evtType, void *evtData, uint32_t tidForFreeEvt) -> bool success 77 #define SYSCALL_OS_MAIN_EVTQ_ENQUEUE_PRIVATE 3 // (uint32_t evtType, void *evtData, uint32_t tidForFreeEvt, uint32_t toTid) -> bool success 78 #define SYSCALL_OS_MAIN_EVTQ_RETAIN_EVT 4 // (TaggedPtr *evtFreeingInfoP) -> bool success 79 #define SYSCALL_OS_MAIN_EVTQ_FREE_RETAINED 5 // (uint32_t evtType, void *evtData, TaggedPtr *evtFreeingInfoP) -> void 80 #define SYSCALL_OS_MAIN_EVTQ_LAST 6 // always last. holes are allowed, but not immediately before this 81 82 //level 3 indices in the OS.main.logging table 83 #define SYSCALL_OS_MAIN_LOG_LOGV 0 // (enum LogLevel level, const char *str, va_list *) -> void 84 #define SYSCALL_OS_MAIN_LOG_LAST 1 // always last. holes are allowed, but not immediately before this 85 86 //level 3 indices in the OS.main.sensors table 87 #define SYSCALL_OS_MAIN_SENSOR_SIGNAL 0 // (uint32_t handle, uint32_t intEvtNum, uint32_t value1, uint32_t value2_lo, uint32_t value2_hi) -> bool /* used by sensor-provding apps */ 88 #define SYSCALL_OS_MAIN_SENSOR_REG 1 // (const struct SensorInfo *si, uint32_t tid) -> u32 handle 89 #define SYSCALL_OS_MAIN_SENSOR_UNREG 2 // (uint32_t handle) -> bool 90 #define SYSCALL_OS_MAIN_SENSOR_REG_INIT_COMP 3 // (uint32_t handle) -> bool 91 #define SYSCALL_OS_MAIN_SENSOR_FIND 4 // (uint32_t sensorType, uint32_t idx, uint32_t *handleP) -> const struct SensorInfo* or NULL 92 #define SYSCALL_OS_MAIN_SENSOR_REQUEST 5 // (uint32_t clientId, uint32_t sensorHandle, uint32_t rate) -> bool success 93 #define SYSCALL_OS_MAIN_SENSOR_RATE_CHG 6 // (uint32_t clientId, uint32_t sensorHandle, uint32_t newRate) -> bool success 94 #define SYSCALL_OS_MAIN_SENSOR_RELEASE 7 // (uint32_t clientId, uint32_t sensorHandle) -> bool success 95 #define SYSCALL_OS_MAIN_SENSOR_TRIGGER 8 // (uint32_t clientId, uint32_t sensorHandle) -> bool success 96 #define SYSCALL_OS_MAIN_SENSOR_GET_CUR_RATE 9 // (uint32_t sensorHandle) -> uint32_t curRate 97 #define SYSCALL_OS_MAIN_SENSOR_GET_TIME 10 // (uint64_t *timeNanos) -> void 98 #define SYSCALL_OS_MAIN_SENSOR_GET_REQ_RATE 11 // (uint32_t sensorHandle) -> uint32_t reqRate 99 #define SYSCALL_OS_MAIN_SENSOR_LAST 12 // always last. holes are allowed, but not immediately before this 100 101 //level 3 indices in the OS.main.timer table 102 #define SYSCALL_OS_MAIN_TIME_GET_TIME 0 // (uint64_t *timeNanos) -> void 103 #define SYSCALL_OS_MAIN_TIME_SET_TIMER 1 // (uint32_t len_lo, uint32_t len_hi, uint32_t jitterPpm, uint32_t driftPpm, uint32_t tidForTimerEvt, void *cookie, bool oneshot) -> u32 timerId 104 #define SYSCALL_OS_MAIN_TIME_CANCEL_TIMER 2 // (uint32_t timer_id) -> bool success 105 #define SYSCALL_OS_MAIN_TIME_LAST 3 // always last. holes are allowed, but not immediately before this 106 107 //level 3 indices in the OS.main.heap table 108 #define SYSCALL_OS_MAIN_HEAP_ALLOC 0 // (uint32_t sz) -> void *mem 109 #define SYSCALL_OS_MAIN_HEAP_FREE 1 // (void *mem) -> void 110 #define SYSCALL_OS_MAIN_HEAP_LAST 2 // always last. holes are allowed, but not immediately before this 111 112 //level 3 indices in the OS.main.slab table 113 #define SYSCALL_OS_MAIN_SLAB_NEW 0 // (uint32_t itemSz, uint32_t itemAlign, uint32_t numItems) -> struct SlabAllocator *slab 114 #define SYSCALL_OS_MAIN_SLAB_DESTROY 1 // (struct SlabAllocator *slab) -> void 115 #define SYSCALL_OS_MAIN_SLAB_ALLOC 2 // (struct SlabAllocator *slab) -> void *mem 116 #define SYSCALL_OS_MAIN_SLAB_FREE 3 // (struct SlabAllocator *slab, void *mem) -> void 117 #define SYSCALL_OS_MAIN_SLAB_LAST 4 // always last. holes are allowed, but not immediately before this 118 119 //level 3 indices in the OS.main.host table 120 #define SYSCALL_OS_MAIN_HOST_GET_TIME 0 // (uint64_t *timeNanos) -> void 121 #define SYSCALL_OS_MAIN_HOST_LAST 1 122 123 //level 3 indices in the OS.main.rtc table 124 #define SYSCALL_OS_MAIN_RTC_GET_TIME 0 // (uint64_t *timeNanos) -> void 125 #define SYSCALL_OS_MAIN_RTC_LAST 1 126 127 //called by os entry point to export the api 128 void osApiExport(struct SlabAllocator *mainSlubAllocator); 129 130 131 132 133 #endif 134 135