Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
fpga.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 Antmicro <www.antmicro.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_FPGA_H_
8#define ZEPHYR_INCLUDE_DRIVERS_FPGA_H_
9
10#include <errno.h>
11
12#include <zephyr/types.h>
13#include <zephyr/sys/util.h>
14#include <zephyr/device.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
21 /* Inactive is when the FPGA cannot accept the bitstream
22 * and will not be programmed correctly
23 */
25 /* Active is when the FPGA can accept the bitstream and
26 * can be programmed correctly
27 */
29};
30
31typedef enum FPGA_status (*fpga_api_get_status)(const struct device *dev);
32typedef int (*fpga_api_load)(const struct device *dev, uint32_t *image_ptr,
33 uint32_t img_size);
34typedef int (*fpga_api_reset)(const struct device *dev);
35typedef int (*fpga_api_on)(const struct device *dev);
36typedef int (*fpga_api_off)(const struct device *dev);
37typedef const char *(*fpga_api_get_info)(const struct device *dev);
38
39__subsystem struct fpga_driver_api {
46};
47
56static inline enum FPGA_status fpga_get_status(const struct device *dev)
57{
58 const struct fpga_driver_api *api =
59 (const struct fpga_driver_api *)dev->api;
60
61 return api->get_status(dev);
62}
63
72static inline int fpga_reset(const struct device *dev)
73{
74 const struct fpga_driver_api *api =
75 (const struct fpga_driver_api *)dev->api;
76
77 return api->reset(dev);
78}
79
90static inline int fpga_load(const struct device *dev, uint32_t *image_ptr,
91 uint32_t img_size)
92{
93 const struct fpga_driver_api *api =
94 (const struct fpga_driver_api *)dev->api;
95
96 return api->load(dev, image_ptr, img_size);
97}
98
107static inline int fpga_on(const struct device *dev)
108{
109 const struct fpga_driver_api *api =
110 (const struct fpga_driver_api *)dev->api;
111
112 if (api->on == NULL) {
113 return -ENOTSUP;
114 }
115
116 return api->on(dev);
117}
118
126static inline const char *fpga_get_info(const struct device *dev)
127{
128 const struct fpga_driver_api *api =
129 (const struct fpga_driver_api *)dev->api;
130
131 return api->get_info(dev);
132}
133
142static inline int fpga_off(const struct device *dev)
143{
144 const struct fpga_driver_api *api =
145 (const struct fpga_driver_api *)dev->api;
146
147 if (api->off == NULL) {
148 return -ENOTSUP;
149 }
150
151 return api->off(dev);
152}
153
154#ifdef __cplusplus
155}
156#endif
157
158#endif /* ZEPHYR_INCLUDE_DRIVERS_FPGA_H_ */
System error numbers.
enum FPGA_status(* fpga_api_get_status)(const struct device *dev)
Definition: fpga.h:31
FPGA_status
Definition: fpga.h:20
@ FPGA_STATUS_INACTIVE
Definition: fpga.h:24
@ FPGA_STATUS_ACTIVE
Definition: fpga.h:28
static enum FPGA_status fpga_get_status(const struct device *dev)
Read the status of FPGA.
Definition: fpga.h:56
static int fpga_load(const struct device *dev, uint32_t *image_ptr, uint32_t img_size)
Load the bitstream and program the FPGA.
Definition: fpga.h:90
const char *(* fpga_api_get_info)(const struct device *dev)
Definition: fpga.h:37
int(* fpga_api_reset)(const struct device *dev)
Definition: fpga.h:34
int(* fpga_api_off)(const struct device *dev)
Definition: fpga.h:36
int(* fpga_api_load)(const struct device *dev, uint32_t *image_ptr, uint32_t img_size)
Definition: fpga.h:32
static int fpga_off(const struct device *dev)
Turns off the FPGA.
Definition: fpga.h:142
static const char * fpga_get_info(const struct device *dev)
Returns information about the FPGA.
Definition: fpga.h:126
static int fpga_on(const struct device *dev)
Turns on the FPGA.
Definition: fpga.h:107
static int fpga_reset(const struct device *dev)
Reset the FPGA.
Definition: fpga.h:72
int(* fpga_api_on)(const struct device *dev)
Definition: fpga.h:35
#define ENOTSUP
Unsupported value.
Definition: errno.h:115
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387
Definition: fpga.h:39
fpga_api_on on
Definition: fpga.h:43
fpga_api_load load
Definition: fpga.h:42
fpga_api_off off
Definition: fpga.h:44
fpga_api_get_info get_info
Definition: fpga.h:45
fpga_api_reset reset
Definition: fpga.h:41
fpga_api_get_status get_status
Definition: fpga.h:40
Misc utilities.