Hardware Abstraction Layer for FreeRTOS
spi_prv.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2016
5  */
6 #ifndef SPI_PRV_H_
7 #define SPI_PRV_H_
8 #ifndef SPI_PRV
9 # error "Never include this file out of a SPI driver"
10 #endif
11 #include <stdbool.h>
12 #include <stdint.h>
13 #include <hal.h>
14 #define SPI_ALREDY_INITED 1
15 int32_t spi_genericInit(struct spi *spi);
16 #ifdef CONFIG_SPI_THREAD_SAVE
17 # define spi_lock(u, w, e) HAL_LOCK(u, w, e)
18 # define spi_unlock(u, e) HAL_UNLOCK(u, e)
19 #else
20 # define spi_lock(u, w, e)
21 # define spi_unlock(u, e)
22 #endif
23 #define SPI_ADDDEV(ns, p) HAL_ADDDEV(spi, ns, p)
25 #define SPI_GET_DEV(index) HAL_GET_DEV(spi, index)
26 #ifndef CONFIG_SPI_MULTI
27 # define SPI_OPS(ns)
28 # define SPI_INIT_DEV(ns)
29 # define SPI_INIT(ns, index, mode, opt) struct spi *spi_init(uint32_t index, enum spi_mode mode, struct spi_opt *opt)
30 # define SPI_DEINIT(ns, s) int32_t spi_deinit(struct spi *s)
31 # define SPI_SET_CALLBACK(ns, s, callback, data) int32_t spi_setCallback(struct spi *s, bool (*callback)(struct spi_slave *slave, void *data), void *data)
32 
33 # define SPI_SLAVE_INIT(ns, s, options) struct spi_slave *spiSlave_init(struct spi *s, struct spi_opt *options)
34 # define SPI_SLAVE_DEINIT(ns, s) int32_t spiSlave_deinit(struct spi_slave *s)
35 # define SPI_SLAVE_TRANSFER(ns, s, sendData, recvData, len, waittime) int32_t spiSlave_transfer(struct spi_slave *s, uint16_t *sendData, uint16_t *recvData, uint32_t len, TickType_t waittime)
36 # define SPI_SLAVE_SEND(ns, s, data, len, waittime) int32_t spiSlave_send(struct spi_slave *s, uint16_t *data, uint32_t len, TickType_t waittime)
37 # define SPI_SLAVE_RECV(ns, s, data, len, waittime) int32_t spiSlave_recv(struct spi_slave *s, uint16_t *data, uint32_t len, TickType_t waittime)
38 
39 # define SPI_SLAVE_TRANSFER_ISR(ns,s, sendData, rescvData, len) int32_t spiSlave_transferISR(struct spi_slave *s, uint16_t *sendData, uint16_t *recvData, uint32_t len)
40 # define SPI_SLAVE_SEND_ISR(ns,s, data, len) int32_t spiSlave_sendISR(struct spi_slave *s, uint16_t *data, uint32_t len)
41 # define SPI_SLAVE_RECV_ISR(ns, s, data, len) int32_t spiSlave_recvISR(struct spi_slave *s, uint16_t *data, uint32_t len)
42 #else
43 # define SPI_OPS(ns) static const struct spi_ops ns##_ops = { \
44  .spi_init = &ns##_spi_init, \
45  .spi_deinit = &ns##_spi_deinit, \
46  .spi_setCallback = &ns##_spi_setCallback, \
47  .spiSlave_init = &ns##_spiSlave_init, \
48  .spiSlave_deinit = &ns##_spiSlave_deinit, \
49  .spiSlave_transfer = &ns##_spiSlave_transfer, \
50  .spiSlave_send = &ns##_spiSlave_send, \
51  .spiSlave_recv = &ns##_spiSlave_recv, \
52  .spiSlave_transferISR = ns##_spiSlave_transferISR, \
53  .spiSlave_sendISR = ns##_spiSlave_sendISR, \
54  .spiSlave_recvISR = ns##_spiSlave_recvISR, \
55 }
56 # define SPI_INIT_DEV(ns) .gen.ops = &ns##_ops,
57 # define SPI_INIT(ns, index, mode, opt) static struct spi *ns##_spi_init(uint32_t index, enum spi_mode mode, struct spi_opt *opt)
58 # define SPI_DEINIT(ns, s) static int32_t ns##_spi_deinit(struct spi *s)
59 # define SPI_SET_CALLBACK(ns, s, callback, data) static int32_t ns##_spi_setCallback(struct spi *s, bool (*callback)(struct spi_slave *slave, void *data), void *data)
60 
61 # define SPI_SLAVE_INIT(ns, s, options) static struct spi_slave *ns##_spiSlave_init(struct spi *s, struct spi_opt *options)
62 # define SPI_SLAVE_DEINIT(ns, s) static int32_t ns##_spiSlave_deinit(struct spi_slave *s)
63 # define SPI_SLAVE_TRANSFER(ns, s, sendData, recvData, len, waittime) static int32_t ns##_spiSlave_transfer(struct spi_slave *s, uint16_t *sendData, uint16_t *recvData, uint32_t len, TickType_t waittime)
64 # define SPI_SLAVE_SEND(ns, s, data, len, waittime) static int32_t ns##_spiSlave_send(struct spi_slave *s, uint16_t *data, uint32_t len, TickType_t waittime)
65 # define SPI_SLAVE_RECV(ns, s, data, len, waittime) static int32_t ns##_spiSlave_recv(struct spi_slave *s, uint16_t *data, uint32_t len, TickType_t waittime)
66 
67 # define SPI_SLAVE_TRANSFER_ISR(ns,s, sendData, rescvData, len) static int32_t ns##_spiSlave_transferISR(struct spi_slave *s, uint16_t *sendData, uint16_t *recvData, uint32_t len)
68 # define SPI_SLAVE_SEND_ISR(ns,s, data, len) static int32_t ns##_spiSlave_sendISR(struct spi_slave *s, uint16_t *data, uint32_t len)
69 # define SPI_SLAVE_RECV_ISR(ns, s, data, len) static int32_t ns##_spiSlave_recvISR(struct spi_slave *s, uint16_t *data, uint32_t len)
70 #endif
71 #endif
hal.h
HAL_DEFINE_GLOBAL_ARRAY
HAL_DEFINE_GLOBAL_ARRAY(spi)
spi_genericInit
int32_t spi_genericInit(struct spi *spi)