Zephyr Project API  3.4.0
A Scalable Open Source RTOS
gna.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Intel Corporation.
3 *
4 * Author: Sathish Kuttan <sathish.k.kuttan@intel.com>
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 */
8
14#ifndef __INCLUDE_GNA__
15#define __INCLUDE_GNA__
16
26#ifdef __cplusplus
27extern "C" {
28#endif
29
34struct gna_config {
35#ifdef __cplusplus
36 char no_empty_structs; /* technically a gcc C extension */
37#endif
38};
39
58};
59
66 void *rw_region;
67 void *ro_region;
68};
69
75 void *input;
76 void *output;
78};
79
87};
88
98};
99
105 void *output;
108};
109
115typedef int (*gna_callback)(struct gna_inference_resp *result);
116
117typedef int (*gna_api_config)(const struct device *dev,
118 struct gna_config *cfg);
119typedef int (*gna_api_register)(const struct device *dev,
120 struct gna_model_info *model,
121 void **model_handle);
122typedef int (*gna_api_deregister)(const struct device *dev,
123 void *model_handle);
124typedef int (*gna_api_infer)(const struct device *dev,
125 struct gna_inference_req *req,
126 gna_callback callback);
127
128struct gna_driver_api {
129 gna_api_config configure;
130 gna_api_register register_model;
131 gna_api_deregister deregister_model;
132 gna_api_infer infer;
133};
134
151static inline int gna_configure(const struct device *dev,
152 struct gna_config *cfg)
153{
154 const struct gna_driver_api *api =
155 (const struct gna_driver_api *)dev->api;
156
157 return api->configure(dev, cfg);
158}
159
173static inline int gna_register_model(const struct device *dev,
174 struct gna_model_info *model,
175 void **model_handle)
176{
177 const struct gna_driver_api *api =
178 (const struct gna_driver_api *)dev->api;
179
180 return api->register_model(dev, model, model_handle);
181}
182
196static inline int gna_deregister_model(const struct device *dev, void *model)
197{
198 const struct gna_driver_api *api =
199 (const struct gna_driver_api *)dev->api;
200
201 return api->deregister_model(dev, model);
202}
203
218static inline int gna_infer(const struct device *dev,
219 struct gna_inference_req *req,
220 gna_callback callback)
221{
222 const struct gna_driver_api *api =
223 (const struct gna_driver_api *)dev->api;
224
225 return api->infer(dev, req, callback);
226}
227
228#ifdef __cplusplus
229}
230#endif
231
236#endif /* __INCLUDE_GNA__ */
struct result result[2]
Definition: errno.c:42
static int gna_infer(const struct device *dev, struct gna_inference_req *req, gna_callback callback)
Perform inference on a model with input vectors.
Definition: gna.h:218
gna_result
Definition: gna.h:92
static int gna_deregister_model(const struct device *dev, void *model)
De-register a previously registered neural network model.
Definition: gna.h:196
static int gna_register_model(const struct device *dev, struct gna_model_info *model, void **model_handle)
Register a neural network model.
Definition: gna.h:173
static int gna_configure(const struct device *dev, struct gna_config *cfg)
Configure the GNA device.
Definition: gna.h:151
@ GNA_RESULT_INFERENCE_COMPLETE
Definition: gna.h:93
@ GNA_RESULT_SATURATION_OCCURRED
Definition: gna.h:94
@ GNA_RESULT_OUTPUT_BUFFER_FULL_ERROR
Definition: gna.h:95
@ GNA_RESULT_PARAM_OUT_OF_RANGE_ERROR
Definition: gna.h:96
@ GNA_RESULT_GENERIC_ERROR
Definition: gna.h:97
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition: device.h:380
const void * api
Definition: device.h:386
Definition: gna.h:34
Definition: gna.h:73
void * intermediate
Definition: gna.h:77
void * model_handle
Definition: gna.h:74
void * output
Definition: gna.h:76
void * input
Definition: gna.h:75
Definition: gna.h:103
enum gna_result result
Definition: gna.h:104
size_t output_len
Definition: gna.h:106
struct gna_inference_stats stats
Definition: gna.h:107
void * output
Definition: gna.h:105
Definition: gna.h:83
uint32_t total_cycles
Definition: gna.h:84
uint32_t cycles_per_sec
Definition: gna.h:86
uint32_t stall_cycles
Definition: gna.h:85
Definition: gna.h:44
uint32_t layer_count
Definition: gna.h:48
uint32_t rw_region_size
Definition: gna.h:55
uint32_t model_size
Definition: gna.h:46
uint32_t num_output_nodes
Definition: gna.h:52
uint32_t input_ptr_offset
Definition: gna.h:53
uint32_t num_input_nodes
Definition: gna.h:51
uint32_t bytes_per_input
Definition: gna.h:49
uint32_t labase_offset
Definition: gna.h:45
uint32_t output_scaling_factor
Definition: gna.h:57
uint32_t output_ptr_offset
Definition: gna.h:54
uint32_t input_scaling_factor
Definition: gna.h:56
uint32_t bytes_per_output
Definition: gna.h:50
uint32_t gna_mode
Definition: gna.h:47
Definition: gna.h:64
void * ro_region
Definition: gna.h:67
void * rw_region
Definition: gna.h:66
struct gna_model_header * header
Definition: gna.h:65