Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
espi_saf.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_ESPI_SAF_H_
13#define ZEPHYR_INCLUDE_ESPI_SAF_H_
14
15#include <sys/__assert.h>
16#include <zephyr/types.h>
17#include <device.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
94struct espi_saf_hw_cfg;
95struct espi_saf_flash_cfg;
96struct espi_saf_pr;
97
103 struct espi_saf_hw_cfg hwcfg;
104 struct espi_saf_flash_cfg *flash_cfgs;
105};
106
114};
115
116/*
117 *defined in espi.h
118 * struct espi_callback
119 * typedef void (*espi_callback_handler_t)()
120 */
121
129typedef int (*espi_saf_api_config)(const struct device *dev,
130 const struct espi_saf_cfg *cfg);
131
132typedef int (*espi_saf_api_set_protection_regions)(
133 const struct device *dev,
134 const struct espi_saf_protection *pr);
135
136typedef int (*espi_saf_api_activate)(const struct device *dev);
137
138typedef bool (*espi_saf_api_get_channel_status)(const struct device *dev);
139
140typedef int (*espi_saf_api_flash_read)(const struct device *dev,
141 struct espi_saf_packet *pckt);
142typedef int (*espi_saf_api_flash_write)(const struct device *dev,
143 struct espi_saf_packet *pckt);
144typedef int (*espi_saf_api_flash_erase)(const struct device *dev,
145 struct espi_saf_packet *pckt);
146/* Callbacks and traffic intercept */
147typedef int (*espi_saf_api_manage_callback)(const struct device *dev,
148 struct espi_callback *callback,
149 bool set);
150
151__subsystem struct espi_saf_driver_api {
152 espi_saf_api_config config;
153 espi_saf_api_set_protection_regions set_protection_regions;
154 espi_saf_api_activate activate;
155 espi_saf_api_get_channel_status get_channel_status;
156 espi_saf_api_flash_read flash_read;
157 espi_saf_api_flash_write flash_write;
158 espi_saf_api_flash_erase flash_erase;
159 espi_saf_api_manage_callback manage_callback;
160};
161
212__syscall int espi_saf_config(const struct device *dev,
213 const struct espi_saf_cfg *cfg);
214
215static inline int z_impl_espi_saf_config(const struct device *dev,
216 const struct espi_saf_cfg *cfg)
217{
218 const struct espi_saf_driver_api *api =
219 (const struct espi_saf_driver_api *)dev->api;
220
221 return api->config(dev, cfg);
222}
223
239 const struct device *dev,
240 const struct espi_saf_protection *pr);
241
242static inline int z_impl_espi_saf_set_protection_regions(
243 const struct device *dev,
244 const struct espi_saf_protection *pr)
245{
246 const struct espi_saf_driver_api *api =
247 (const struct espi_saf_driver_api *)dev->api;
248
249 return api->set_protection_regions(dev, pr);
250}
251
264__syscall int espi_saf_activate(const struct device *dev);
265
266static inline int z_impl_espi_saf_activate(const struct device *dev)
267{
268 const struct espi_saf_driver_api *api =
269 (const struct espi_saf_driver_api *)dev->api;
270
271 return api->activate(dev);
272}
273
284__syscall bool espi_saf_get_channel_status(const struct device *dev);
285
286static inline bool z_impl_espi_saf_get_channel_status(
287 const struct device *dev)
288{
289 const struct espi_saf_driver_api *api =
290 (const struct espi_saf_driver_api *)dev->api;
291
292 return api->get_channel_status(dev);
293}
294
308__syscall int espi_saf_flash_read(const struct device *dev,
309 struct espi_saf_packet *pckt);
310
311static inline int z_impl_espi_saf_flash_read(const struct device *dev,
312 struct espi_saf_packet *pckt)
313{
314 const struct espi_saf_driver_api *api =
315 (const struct espi_saf_driver_api *)dev->api;
316
317 if (!api->flash_read) {
318 return -ENOTSUP;
319 }
320
321 return api->flash_read(dev, pckt);
322}
323
337__syscall int espi_saf_flash_write(const struct device *dev,
338 struct espi_saf_packet *pckt);
339
340static inline int z_impl_espi_saf_flash_write(const struct device *dev,
341 struct espi_saf_packet *pckt)
342{
343 const struct espi_saf_driver_api *api =
344 (const struct espi_saf_driver_api *)dev->api;
345
346 if (!api->flash_write) {
347 return -ENOTSUP;
348 }
349
350 return api->flash_write(dev, pckt);
351}
352
366__syscall int espi_saf_flash_erase(const struct device *dev,
367 struct espi_saf_packet *pckt);
368
369static inline int z_impl_espi_saf_flash_erase(const struct device *dev,
370 struct espi_saf_packet *pckt)
371{
372 const struct espi_saf_driver_api *api =
373 (const struct espi_saf_driver_api *)dev->api;
374
375 if (!api->flash_erase) {
376 return -ENOTSUP;
377 }
378
379 return api->flash_erase(dev, pckt);
380}
381
450static inline void espi_saf_init_callback(struct espi_callback *callback,
452 enum espi_bus_event evt_type)
453{
454 __ASSERT(callback, "Callback pointer should not be NULL");
455 __ASSERT(handler, "Callback handler pointer should not be NULL");
456
457 callback->handler = handler;
458 callback->evt_type = evt_type;
459}
460
473static inline int espi_saf_add_callback(const struct device *dev,
474 struct espi_callback *callback)
475{
476 const struct espi_saf_driver_api *api =
477 (const struct espi_saf_driver_api *)dev->api;
478
479 if (!api->manage_callback) {
480 return -ENOTSUP;
481 }
482
483 return api->manage_callback(dev, callback, true);
484}
485
502static inline int espi_saf_remove_callback(const struct device *dev,
503 struct espi_callback *callback)
504{
505 const struct espi_saf_driver_api *api =
506 (const struct espi_saf_driver_api *)dev->api;
507
508 if (!api->manage_callback) {
509 return -ENOTSUP;
510 }
511
512 return api->manage_callback(dev, callback, false);
513}
514
515#ifdef __cplusplus
516}
517#endif
518
522#include <syscalls/espi_saf.h>
523#endif /* ZEPHYR_INCLUDE_ESPI_SAF_H_ */
int espi_saf_flash_read(const struct device *dev, struct espi_saf_packet *pckt)
Sends a read request packet for slave attached flash.
int espi_saf_flash_write(const struct device *dev, struct espi_saf_packet *pckt)
Sends a write request packet for slave attached flash.
int espi_saf_flash_erase(const struct device *dev, struct espi_saf_packet *pckt)
Sends a write request packet for slave attached flash.
int espi_saf_set_protection_regions(const struct device *dev, const struct espi_saf_protection *pr)
Set one or more SAF protection regions.
void(* espi_callback_handler_t)(const struct device *dev, struct espi_callback *cb, struct espi_event espi_evt)
Define the application callback handler function signature.
Definition: espi.h:342
static void espi_saf_init_callback(struct espi_callback *callback, espi_callback_handler_t handler, enum espi_bus_event evt_type)
Helper to initialize a struct espi_callback properly.
Definition: espi_saf.h:450
int espi_saf_config(const struct device *dev, const struct espi_saf_cfg *cfg)
Configure operation of a eSPI controller.
espi_bus_event
eSPI bus event.
Definition: espi.h:110
bool espi_saf_get_channel_status(const struct device *dev)
Query to see if SAF is ready.
int espi_saf_activate(const struct device *dev)
Activate SAF block.
static int espi_saf_add_callback(const struct device *dev, struct espi_callback *callback)
Add an application callback.
Definition: espi_saf.h:473
static int espi_saf_remove_callback(const struct device *dev, struct espi_callback *callback)
Remove an application callback.
Definition: espi_saf.h:502
int flash_erase(const struct device *dev, off_t offset, size_t size)
Erase part or all of a flash memory.
int flash_write(const struct device *dev, off_t offset, const void *data, size_t len)
Write buffer into flash memory.
int flash_read(const struct device *dev, off_t offset, void *data, size_t len)
Read data from flash.
#define ENOTSUP
Definition: errno.h:115
#define bool
Definition: stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
Runtime device structure (in ROM) per driver instance.
Definition: device.h:367
const void * api
Definition: device.h:373
eSPI SAF configuration parameters
Definition: espi_saf.h:101
struct espi_saf_hw_cfg hwcfg
Definition: espi_saf.h:103
struct espi_saf_flash_cfg * flash_cfgs
Definition: espi_saf.h:104
uint8_t nflash_devices
Definition: espi_saf.h:102
eSPI SAF transaction packet format
Definition: espi_saf.h:110
uint8_t * buf
Definition: espi_saf.h:112
uint32_t flash_addr
Definition: espi_saf.h:111
uint32_t len
Definition: espi_saf.h:113
static void handler(struct k_timer *timer)
Definition: main.c:19