diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-31 08:06:05 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-08-31 08:06:05 +0000 |
commit | f078f28b88cc3c4a69b29ba2d8f0c15a73423466 (patch) | |
tree | 181ffbb0980ee9a1004cac179a8f90b1be94662c /firmware/os/inc | |
parent | 8b23f4d001c24faf274800795d43ad45a18314ce (diff) | |
parent | 3ac6728f7a14714f5df47795b47f02d48c92503e (diff) | |
download | device_google_contexthub-f078f28b88cc3c4a69b29ba2d8f0c15a73423466.tar.gz device_google_contexthub-f078f28b88cc3c4a69b29ba2d8f0c15a73423466.tar.bz2 device_google_contexthub-f078f28b88cc3c4a69b29ba2d8f0c15a73423466.zip |
release-request-48587b2e-b0d9-4e33-ae5f-05bd16bc9d6f-for-git_pi-release-4308806 snap-temp-L91400000098269614
Change-Id: I15daef50ec90023f8b2465b891f5120cb028b200
Diffstat (limited to 'firmware/os/inc')
-rw-r--r-- | firmware/os/inc/chreApi.h | 48 | ||||
-rw-r--r-- | firmware/os/inc/eventnums.h | 21 | ||||
-rw-r--r-- | firmware/os/inc/nanohubCommand.h | 1 | ||||
-rw-r--r-- | firmware/os/inc/osApi.h | 6 | ||||
-rw-r--r-- | firmware/os/inc/sensors.h | 2 | ||||
-rw-r--r-- | firmware/os/inc/seos.h | 14 | ||||
-rw-r--r-- | firmware/os/inc/seos_priv.h | 17 |
7 files changed, 91 insertions, 18 deletions
diff --git a/firmware/os/inc/chreApi.h b/firmware/os/inc/chreApi.h index cf9bd499..e355ed5a 100644 --- a/firmware/os/inc/chreApi.h +++ b/firmware/os/inc/chreApi.h @@ -34,12 +34,17 @@ C_STATIC_ASSERT(va_list_size, sizeof(va_list) == sizeof(uint32_t)); C_STATIC_ASSERT(uintptr_size, sizeof(uintptr_t) >= sizeof(uint32_t)); //EXTERNAL API +//level 1 indices in the CHRE table #define SYSCALL_CHRE_MAIN 0 -#define SYSCALL_CHRE_LAST 1 +#define SYSCALL_CHRE_DRIVERS 1 +#define SYSCALL_CHRE_LAST 2 // always last. holes are allowed, but not immediately before this +//level 2 indices in the CHRE.main table #define SYSCALL_CHRE_MAIN_API 0 -#define SYSCALL_CHRE_MAIN_LAST 1 +#define SYSCALL_CHRE_MAIN_EVENT 1 +#define SYSCALL_CHRE_MAIN_LAST 2 // always last. holes are allowed, but not immediately before this +//level 3 indices in the CHRE.main.api table #define SYSCALL_CHRE_MAIN_API_GET_APP_ID 0 // (void) -> uint64_t #define SYSCALL_CHRE_MAIN_API_GET_INST_ID 1 // (void) -> uint32_t #define SYSCALL_CHRE_MAIN_API_LOG_OLD 2 // (enum LogLevel, const char *, uintptr_t) -> void @@ -52,14 +57,49 @@ C_STATIC_ASSERT(uintptr_size, sizeof(uintptr_t) >= sizeof(uint32_t)); #define SYSCALL_CHRE_MAIN_API_SEND_EVENT 9 // (uint32_t, void *, chreEventCompleteFunction*, uint32_t) -> bool #define SYSCALL_CHRE_MAIN_API_SEND_MSG 10 // (void *, uint32_t, uint32_t, chreMessageFreeFunction *) -> bool #define SYSCALL_CHRE_MAIN_API_SENSOR_FIND_DEFAULT 11 // -#define SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO 12 // +#define SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO_OLD 12 // #define SYSCALL_CHRE_MAIN_API_SENSOR_GET_STATUS 13 // #define SYSCALL_CHRE_MAIN_API_SENSOR_CONFIG 14 // #define SYSCALL_CHRE_MAIN_API_GET_OS_API_VERSION 15 // #define SYSCALL_CHRE_MAIN_API_GET_OS_VERSION 16 // #define SYSCALL_CHRE_MAIN_API_GET_PLATFORM_ID 17 // #define SYSCALL_CHRE_MAIN_API_LOG 18 // (enum LogLevel, const char *, uintptr_t) -> void -#define SYSCALL_CHRE_MAIN_API_LAST 19 // always last. holes are allowed, but not immediately before this +#define SYSCALL_CHRE_MAIN_API_SENSOR_GET_INFO 19 // +#define SYSCALL_CHRE_MAIN_API_GET_HOST_TIME_OFFSET 20 // (void) -> int64_t +#define SYSCALL_CHRE_MAIN_API_LAST 21 // always last. holes are allowed, but not immediately before this + +//level 3 indices in the CHRE.main.event table +#define SYSCALL_CHRE_MAIN_EVENT_SEND_EVENT 0 // (uint32_t, void *, chreEventCompleteFunction*, uint32_t) -> bool +#define SYSCALL_CHRE_MAIN_EVENT_SEND_MSG 1 // (void *, size_t, uint32_t, uint16_t, chreMessageFreeFunction *) -> bool +#define SYSCALL_CHRE_MAIN_EVENT_INFO_BY_APP_ID 2 // (uint64_t, struct chreNanoappInfo *) -> bool +#define SYSCALL_CHRE_MAIN_EVENT_INFO_BY_INST_ID 3 // (uint32_t, struct chreNanoappInfo *) -> bool +#define SYSCALL_CHRE_MAIN_EVENT_CFG_INFO 4 // (bool) -> void +#define SYSCALL_CHRE_MAIN_EVENT_LAST 5 // always last. holes are allowed, but not immediately before this + +//level 2 indices in the CHRE.drivers table +#define SYSCALL_CHRE_DRV_GNSS 0 +#define SYSCALL_CHRE_DRV_WIFI 1 +#define SYSCALL_CHRE_DRV_WWAN 2 +#define SYSCALL_CHRE_DRV_LAST 3 // always last. holes are allowed, but not immediately before this + +//level 3 indices in the CHRE.drivers.gnss table +#define SYSCALL_CHRE_DRV_GNSS_GET_CAP 0 // (void) -> uint32_t +#define SYSCALL_CHRE_DRV_GNSS_LOC_START_ASYNC 1 // (uint32_t, uint32_t const void *) -> bool +#define SYSCALL_CHRE_DRV_GNSS_LOC_STOP_ASYNC 2 // (const void *) -> bool +#define SYSCALL_CHRE_DRV_GNSS_MEAS_START_ASYNC 3 // (uint32_t, const void *) -> bool +#define SYSCALL_CHRE_DRV_GNSS_MEAS_STOP_ASYNC 4 // (const void *) -> bool +#define SYSCALL_CHRE_DRV_GNSS_LAST 5 // always last. holes are allowed, but not immediately before this + +//level 3 indices in the CHRE.drivers.wifi table +#define SYSCALL_CHRE_DRV_WIFI_GET_CAP 0 // (void) -> uint32_t +#define SYSCALL_CHRE_DRV_WIFI_CONF_SCAN_MON_ASYNC 1 // (bool, const void *) -> bool +#define SYSCALL_CHRE_DRV_WIFI_REQ_SCAN_ASYNC 2 // (const struct chreWifiScanParams *, const void *) -> bool +#define SYSCALL_CHRE_DRV_WIFI_LAST 3 // always last. holes are allowed, but not immediately before this + +//level 3 indices in the CHRE.drivers.wwan table +#define SYSCALL_CHRE_DRV_WWAN_GET_CAP 0 // (void) -> uint32_t +#define SYSCALL_CHRE_DRV_WWAN_GET_CELL_INFO_ASYNC 1 // (const void *cookie) -> bool +#define SYSCALL_CHRE_DRV_WWAN_LAST 2 // always last. holes are allowed, but not immediately before this //called by os entry point to export the api void osChreApiExport(void); diff --git a/firmware/os/inc/eventnums.h b/firmware/os/inc/eventnums.h index 246587a3..5746433e 100644 --- a/firmware/os/inc/eventnums.h +++ b/firmware/os/inc/eventnums.h @@ -29,8 +29,10 @@ #define EVT_APP_TO_HOST 0x00000401 //app data to host. Type is struct HostHubRawPacket #define EVT_MARSHALLED_SENSOR_DATA 0x00000402 //marshalled event data. Type is MarshalledUserEventData #define EVT_RESET_REASON 0x00000403 //reset reason to host. -#define EVT_APP_TO_SENSOR_HAL_DATA 0x00000404 // sensor driver out of band data update to sensor hal -#define EVT_DEBUG_LOG 0x00007F01 // send message payload to Linux kernel log +#define EVT_APP_TO_SENSOR_HAL_DATA 0x00000404 //sensor driver out of band data update to sensor hal +#define EVT_APP_STARTED 0x00000405 //sent when a app has successfully started +#define EVT_APP_STOPPED 0x00000406 //sent when a app has stopped +#define EVT_DEBUG_LOG 0x00007F01 //send message payload to Linux kernel log #define EVT_MASK 0x0000FFFF // host-side events are 32-bit @@ -54,9 +56,17 @@ struct HostHubRawPacket { SET_PACKED_STRUCT_MODE_OFF SET_PACKED_STRUCT_MODE_ON +struct NanohubMsgChreHdrV10 { + uint8_t size; + uint32_t appEvent; +}ATTRIBUTE_PACKED; +SET_PACKED_STRUCT_MODE_OFF + +SET_PACKED_STRUCT_MODE_ON struct NanohubMsgChreHdr { uint8_t size; uint32_t appEvent; + uint16_t endpoint; }ATTRIBUTE_PACKED; SET_PACKED_STRUCT_MODE_OFF @@ -103,17 +113,18 @@ SET_PACKED_STRUCT_MODE_OFF //for all apps #define EVT_APP_FREE_EVT_DATA 0x000000FF //sent to an external app when its event has been marked for freeing. Data: struct AppEventFreeData // this event is never enqueued; it goes directly to the app. -// It notifies app that hav outstanding IO, that is is about to end; +// It notifies app that have outstanding IO, that is is about to end; // Expected app behavior is to not send any more events to system; // any events sent after this point will be silently ignored by the system; -// any outstading events will be allowed to proceed to completion. (this is SIG_STOP) +// any outstanding events will be allowed to proceed to completion. (this is SIG_STOP) #define EVT_APP_STOP 0x000000FE // Internal event, with task pointer as event data; // system ends the task unconditionally; no further checks performed (this is SIG_KILL) #define EVT_APP_END 0x000000FD +#define EVT_APP_BEGIN 0x000000FC //for host comms -#define EVT_APP_FROM_HOST 0x000000F8 //host data to an app. Type is struct HostMsgHdr #define EVT_APP_FROM_HOST_CHRE 0x000000F9 //host data to an app. Type is struct HostMsgHdrChre +#define EVT_APP_FROM_HOST 0x000000F8 //host data to an app. Type is struct HostMsgHdr //for apps that use I2C #define EVT_APP_I2C_CBK 0x000000F0 //data pointer points to struct I2cEventData diff --git a/firmware/os/inc/nanohubCommand.h b/firmware/os/inc/nanohubCommand.h index 0c4c5220..408cffdc 100644 --- a/firmware/os/inc/nanohubCommand.h +++ b/firmware/os/inc/nanohubCommand.h @@ -41,5 +41,6 @@ struct NanohubHalCommand { const struct NanohubHalCommand *nanohubHalFindCommand(uint8_t msg); uint64_t hostGetTime(void); +int64_t hostGetTimeDelta(void); #endif /* __NANOHUBCOMMAND_H */ diff --git a/firmware/os/inc/osApi.h b/firmware/os/inc/osApi.h index 77cff48f..03f91264 100644 --- a/firmware/os/inc/osApi.h +++ b/firmware/os/inc/osApi.h @@ -17,11 +17,8 @@ #ifndef _OS_API_H_ #define _OS_API_H_ -#include <stdint.h> #include <slab.h> -#include <seos_priv.h> - //EXTERNAL API //level 1 indices in the OS table #define SYSCALL_OS_MAIN 0 @@ -127,8 +124,5 @@ //called by os entry point to export the api void osApiExport(struct SlabAllocator *mainSlubAllocator); - - - #endif diff --git a/firmware/os/inc/sensors.h b/firmware/os/inc/sensors.h index 7074a258..19fd3ecc 100644 --- a/firmware/os/inc/sensors.h +++ b/firmware/os/inc/sensors.h @@ -281,6 +281,8 @@ bool sensorSelfTest(uint32_t sensorHandle); bool sensorCfgData(uint32_t sensorHandle, void* cfgData); uint32_t sensorGetCurRate(uint32_t sensorHandle); uint64_t sensorGetCurLatency(uint32_t sensorHandle); +uint32_t sensorGetHwRate(uint32_t sensorHandle); +uint64_t sensorGetHwLatency(uint32_t sensorHandle); uint32_t sensorGetReqRate(uint32_t sensorHandle); uint64_t sensorGetReqLatency(uint32_t sensorHandle); uint64_t sensorGetTime(void); diff --git a/firmware/os/inc/seos.h b/firmware/os/inc/seos.h index 7979d762..2b52b5c9 100644 --- a/firmware/os/inc/seos.h +++ b/firmware/os/inc/seos.h @@ -126,6 +126,12 @@ struct AppEventFreeData { //goes with EVT_APP_FREE_EVT_DATA void* evtData; }; +struct AppEventStartStop { + uint64_t appId; + uint32_t version; + uint16_t tid; +}; + typedef void (*OsDeferCbkF)(void *); typedef void (*EventFreeF)(void* event); @@ -262,11 +268,13 @@ bool osEraseShared(); bool osRetainCurrentEvent(TaggedPtr *evtFreeingInfoP); //called from any apps' event handling to retain current event. Only valid for first app that tries. evtFreeingInfoP filled by call and used to free evt later void osFreeRetainedEvent(uint32_t evtType, void *evtData, TaggedPtr *evtFreeingInfoP); -uint32_t osExtAppStopApps(uint64_t appId); -uint32_t osExtAppEraseApps(uint64_t appId); -uint32_t osExtAppStartApps(uint64_t appId); +uint32_t osExtAppStopAppsByAppId(uint64_t appId); +uint32_t osExtAppEraseAppsByAppId(uint64_t appId); +uint32_t osExtAppStartAppsByAppId(uint64_t appId); +uint32_t osExtAppStartAppsDelayed(); bool osAppIsChre(uint16_t tid); +uint32_t osAppChreVersion(uint16_t tid); /* Logging */ enum LogLevel { diff --git a/firmware/os/inc/seos_priv.h b/firmware/os/inc/seos_priv.h index e2dd7643..862d5224 100644 --- a/firmware/os/inc/seos_priv.h +++ b/firmware/os/inc/seos_priv.h @@ -19,6 +19,7 @@ #include <inttypes.h> #include <seos.h> +#include <chre.h> #define NO_NODE (TaskIndex)(-1) #define for_each_task(listHead, task) for (task = osTaskByIdx((listHead)->next); task; task = osTaskByIdx(task->list.next)) @@ -26,6 +27,7 @@ #define TID_TO_TASK_IDX(tid) (tid & TASK_TID_IDX_MASK) #define FL_TASK_STOPPED 1 +#define FL_TASK_ABORTED 2 #define EVT_SUBSCRIBE_TO_EVT 0x00000000 #define EVT_UNSUBSCRIBE_TO_EVT 0x00000001 @@ -108,6 +110,8 @@ union SeosInternalSlabData { union OsApiSlabItem osApiItem; }; +typedef bool (*appMatchFunc)(const void *cookie, const struct AppHdr *); + uint8_t osTaskIndex(struct Task *task); struct Task *osGetCurrentTask(); struct Task *osSetCurrentTask(struct Task *task); @@ -122,6 +126,19 @@ static inline bool osTaskIsChre(const struct Task *task) return task->app && (task->app->hdr.fwFlags & FL_APP_HDR_CHRE) != 0; } +static inline uint32_t osTaskChreVersion(const struct Task *task) +{ + if (osTaskIsChre(task)) { + // Apps loaded on 1.0 stored 0xFF in both rfu bytes + if (task->app->hdr.chreApiMajor == 0xFF && task->app->hdr.chreApiMinor == 0xFF) + return CHRE_API_VERSION_1_0; + else + return task->app->hdr.chreApiMajor << 24 | task->app->hdr.chreApiMinor << 16; + } else { + return 0; + } +} + static inline void osTaskMakeNewTid(struct Task *task) { task->tid = ((task->tid + TASK_TID_INCREMENT) & TASK_TID_COUNTER_MASK) | |