Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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
11
12#ifndef ZEPHYR_INCLUDE_ESPI_SAF_H_
13#define ZEPHYR_INCLUDE_ESPI_SAF_H_
14
15#include <zephyr/sys/__assert.h>
16#include <zephyr/types.h>
17#include <zephyr/device.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
30
86
87
92
93
95
96struct espi_saf_hw_cfg;
97struct espi_saf_flash_cfg;
98struct espi_saf_pr;
99
105 struct espi_saf_hw_cfg hwcfg;
106 struct espi_saf_flash_cfg *flash_cfgs;
107};
108
117
118/*
119 *defined in espi.h
120 * struct espi_callback
121 * typedef void (*espi_callback_handler_t)()
122 */
123
131typedef int (*espi_saf_api_config)(const struct device *dev,
132 const struct espi_saf_cfg *cfg);
133
134typedef int (*espi_saf_api_set_protection_regions)(
135 const struct device *dev,
136 const struct espi_saf_protection *pr);
137
138typedef int (*espi_saf_api_activate)(const struct device *dev);
139
140typedef bool (*espi_saf_api_get_channel_status)(const struct device *dev);
141
142typedef int (*espi_saf_api_flash_read)(const struct device *dev,
143 struct espi_saf_packet *pckt);
144typedef int (*espi_saf_api_flash_write)(const struct device *dev,
145 struct espi_saf_packet *pckt);
146typedef int (*espi_saf_api_flash_erase)(const struct device *dev,
147 struct espi_saf_packet *pckt);
148typedef int (*espi_saf_api_flash_unsuccess)(const struct device *dev,
149 struct espi_saf_packet *pckt);
150/* Callbacks and traffic intercept */
151typedef int (*espi_saf_api_manage_callback)(const struct device *dev,
152 struct espi_callback *callback,
153 bool set);
154
155__subsystem struct espi_saf_driver_api {
156 espi_saf_api_config config;
157 espi_saf_api_set_protection_regions set_protection_regions;
158 espi_saf_api_activate activate;
159 espi_saf_api_get_channel_status get_channel_status;
160 espi_saf_api_flash_read flash_read;
161 espi_saf_api_flash_write flash_write;
162 espi_saf_api_flash_erase flash_erase;
163 espi_saf_api_flash_unsuccess flash_unsuccess;
164 espi_saf_api_manage_callback manage_callback;
165};
166
170
219__syscall int espi_saf_config(const struct device *dev,
220 const struct espi_saf_cfg *cfg);
221
222static inline int z_impl_espi_saf_config(const struct device *dev,
223 const struct espi_saf_cfg *cfg)
224{
225 return DEVICE_API_GET(espi_saf, dev)->config(dev, cfg);
226}
227
243 const struct device *dev,
244 const struct espi_saf_protection *pr);
245
246static inline int z_impl_espi_saf_set_protection_regions(
247 const struct device *dev,
248 const struct espi_saf_protection *pr)
249{
250 return DEVICE_API_GET(espi_saf, dev)->set_protection_regions(dev, pr);
251}
252
265__syscall int espi_saf_activate(const struct device *dev);
266
267static inline int z_impl_espi_saf_activate(const struct device *dev)
268{
269 return DEVICE_API_GET(espi_saf, dev)->activate(dev);
270}
271
282__syscall bool espi_saf_get_channel_status(const struct device *dev);
283
284static inline bool z_impl_espi_saf_get_channel_status(
285 const struct device *dev)
286{
287 return DEVICE_API_GET(espi_saf, dev)->get_channel_status(dev);
288}
289
303__syscall int espi_saf_flash_read(const struct device *dev,
304 struct espi_saf_packet *pckt);
305
306static inline int z_impl_espi_saf_flash_read(const struct device *dev,
307 struct espi_saf_packet *pckt)
308{
309 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
310
311 if (!api->flash_read) {
312 return -ENOTSUP;
313 }
314
315 return api->flash_read(dev, pckt);
316}
317
331__syscall int espi_saf_flash_write(const struct device *dev,
332 struct espi_saf_packet *pckt);
333
334static inline int z_impl_espi_saf_flash_write(const struct device *dev,
335 struct espi_saf_packet *pckt)
336{
337 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
338
339 if (!api->flash_write) {
340 return -ENOTSUP;
341 }
342
343 return api->flash_write(dev, pckt);
344}
345
359__syscall int espi_saf_flash_erase(const struct device *dev,
360 struct espi_saf_packet *pckt);
361
362static inline int z_impl_espi_saf_flash_erase(const struct device *dev,
363 struct espi_saf_packet *pckt)
364{
365 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
366
367 if (!api->flash_erase) {
368 return -ENOTSUP;
369 }
370
371 return api->flash_erase(dev, pckt);
372}
373
387__syscall int espi_saf_flash_unsuccess(const struct device *dev,
388 struct espi_saf_packet *pckt);
389
390static inline int z_impl_espi_saf_flash_unsuccess(const struct device *dev,
391 struct espi_saf_packet *pckt)
392{
393 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
394
395 if (!api->flash_unsuccess) {
396 return -ENOTSUP;
397 }
398
399 return api->flash_unsuccess(dev, pckt);
400}
401
463
472static inline void espi_saf_init_callback(struct espi_callback *callback,
474 enum espi_bus_event evt_type)
475{
476 __ASSERT(callback, "Callback pointer should not be NULL");
477 __ASSERT(handler, "Callback handler pointer should not be NULL");
478
479 callback->handler = handler;
480 callback->evt_type = evt_type;
481}
482
495static inline int espi_saf_add_callback(const struct device *dev,
496 struct espi_callback *callback)
497{
498 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
499
500 if (!api->manage_callback) {
501 return -ENOTSUP;
502 }
503
504 return api->manage_callback(dev, callback, true);
505}
506
523static inline int espi_saf_remove_callback(const struct device *dev,
524 struct espi_callback *callback)
525{
526 const struct espi_saf_driver_api *api = DEVICE_API_GET(espi_saf, dev);
527
528 if (!api->manage_callback) {
529 return -ENOTSUP;
530 }
531
532 return api->manage_callback(dev, callback, false);
533}
534
535#ifdef __cplusplus
536}
537#endif
538
542#include <zephyr/syscalls/espi_saf.h>
543#endif /* ZEPHYR_INCLUDE_ESPI_SAF_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1375
espi_bus_event
eSPI bus event.
Definition espi.h:119
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:545
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.
static void espi_saf_init_callback(struct espi_callback *callback, espi_callback_handler_t handler, enum espi_bus_event evt_type)
Callback model.
Definition espi_saf.h:472
int espi_saf_config(const struct device *dev, const struct espi_saf_cfg *cfg)
Configure operation of a eSPI controller.
int espi_saf_flash_unsuccess(const struct device *dev, struct espi_saf_packet *pckt)
Response unsuccessful completion for slave attached flash.
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:495
static int espi_saf_remove_callback(const struct device *dev, struct espi_callback *callback)
Remove an application callback.
Definition espi_saf.h:523
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
Unsupported value.
Definition errno.h:114
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
eSPI SAF configuration parameters
Definition espi_saf.h:103
struct espi_saf_hw_cfg hwcfg
Definition espi_saf.h:105
struct espi_saf_flash_cfg * flash_cfgs
Definition espi_saf.h:106
uint8_t nflash_devices
Definition espi_saf.h:104
eSPI SAF transaction packet format
Definition espi_saf.h:112
uint8_t * buf
Definition espi_saf.h:114
uint32_t flash_addr
Definition espi_saf.h:113
uint32_t len
Definition espi_saf.h:115