coreboot-libre-fam15h-rdimm/3rdparty/chromeec/include/motion_sense_fifo.h

78 lines
2.2 KiB
C

/* Copyright 2019 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __CROS_EC_MOTION_SENSE_FIFO_H
#define __CROS_EC_MOTION_SENSE_FIFO_H
#include "motion_sense.h"
#include "task.h"
extern struct queue motion_sense_fifo;
extern int wake_up_needed;
extern int fifo_int_enabled;
extern int fifo_queue_count;
extern int motion_sense_fifo_lost;
enum motion_sense_async_event {
ASYNC_EVENT_FLUSH = MOTIONSENSE_SENSOR_FLAG_FLUSH |
MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
ASYNC_EVENT_ODR = MOTIONSENSE_SENSOR_FLAG_ODR |
MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
};
/**
* Stage data to the fifo, including a timestamp. This data will not be
* available to the AP until motion_sense_fifo_commit_data is called.
*
* @param data data to insert in the FIFO
* @param sensor sensor the data comes from
* @param valid_data data should be copied into the public sensor vector
* @param time accurate time (ideally measured in an interrupt) the sample
* was taken at
*/
void motion_sense_fifo_stage_data(struct ec_response_motion_sensor_data *data,
struct motion_sensor_t *sensor,
int valid_data,
uint32_t time);
/**
* Commits all staged data to the fifo. If multiple readings were placed using
* the same timestamps, they will be spread out.
*/
void motion_sense_fifo_commit_data(void);
/**
* Insert an async event into the fifo.
*
* @param sensor Pointer to the sensor generating the event.
* @param evt The event to insert.
*/
void motion_sense_insert_async_event(struct motion_sensor_t *sensor,
enum motion_sense_async_event evt);
/**
* Stage a timestamp into the fifo.
*
* @param timestamp The timestamp to stage.
*/
void motion_sense_fifo_stage_timestamp(uint32_t timestamp);
/**
* Get information about the fifo.
*
* @param fifo_info The struct to store the info.
*/
void motion_sense_get_fifo_info(
struct ec_response_motion_sense_fifo_info *fifo_info);
/**
* Checks if either the AP should be woken up due to the fifo.
*
* @return 1 if the AP should be woken up, 0 otherwise.
*/
int motion_sense_fifo_is_wake_up_needed(void);
#endif /* __CROS_EC_MOTION_SENSE_FIFO_H */