summaryrefslogtreecommitdiff
path: root/include/sps.h
blob: 93be326b15be54105b6563282e0d76b2881f518a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
 * Copyright 2015 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_INCLUDE_SPS_H
#define __CROS_EC_INCLUDE_SPS_H

#include "spi.h"
#include "util.h"

/* SPS Control Mode */
enum sps_mode {
	SPS_GENERIC_MODE = 0,
	SPS_SWETLAND_MODE = 1,
	SPS_ROM_MODE = 2,
	SPS_UNDEF_MODE = 3,
};

/*
 * Tx interrupt callback function prototype. This function returns a portion
 * of the received SPI data and current status of the CS line. When CS is
 * deasserted, this function is called with data_size of zero and a non-zero
 * cs_status. This allows the recipient to delineate the SPS frames.
 */
typedef void (*rx_handler_f)(uint32_t inst, uint8_t *data,
			     size_t data_size, int cs_status);

/*
 * Push data to the SPS TX FIFO
 * @param inst Interface number
 * @param data Pointer to 8-bit data
 * @param data_size Number of bytes to transmit
 * @return : actual number of bytes placed into tx fifo
 */
int sps_transmit(uint32_t inst, uint8_t *data, size_t data_size);

/*
 * These functions return zero on success or non-zero on failure (attempt to
 * register a callback on top of existing one, or attempt to unregister
 * non-exitisng callback.
 */
int sps_register_rx_handler(enum sps_mode mode, rx_handler_f rx_handler);
int sps_unregister_rx_handler(void);

#endif