|  | /* | 
|  | * Copyright (c) 2020 Intel Corporation | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #include <drivers/espi.h> | 
|  | #include <syscall_handler.h> | 
|  |  | 
|  |  | 
|  | static inline int z_vrfy_espi_config(const struct device *dev, | 
|  | struct espi_cfg *cfg) | 
|  | { | 
|  | struct  espi_cfg cfg_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, config)); | 
|  | Z_OOPS(z_user_from_copy(&cfg_copy, cfg, | 
|  | sizeof(struct espi_cfg))); | 
|  |  | 
|  | return z_impl_espi_config(dev, &cfg_copy); | 
|  | } | 
|  | #include <syscalls/espi_config_mrsh.c> | 
|  |  | 
|  | static inline bool z_vrfy_espi_get_channel_status(const struct device *dev, | 
|  | enum espi_channel ch) | 
|  | { | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, get_channel_status)); | 
|  |  | 
|  | return z_impl_espi_get_channel_status(dev, ch); | 
|  | } | 
|  | #include <syscalls/espi_get_channel_status_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_read_lpc_request(const struct device *dev, | 
|  | enum lpc_peripheral_opcode op, | 
|  | uint32_t *data) | 
|  | { | 
|  | int ret; | 
|  | uint32_t data_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, read_lpc_request)); | 
|  |  | 
|  | ret = z_impl_espi_read_lpc_request(dev, op, &data_copy); | 
|  | Z_OOPS(z_user_to_copy(data, &data_copy, sizeof(uint8_t))); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_read_lpc_request_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_write_lpc_request(const struct device *dev, | 
|  | enum lpc_peripheral_opcode op, | 
|  | uint32_t *data) | 
|  | { | 
|  | uint32_t data_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, write_lpc_request)); | 
|  | Z_OOPS(z_user_from_copy(&data_copy, data, sizeof(*data))); | 
|  |  | 
|  | return z_impl_espi_write_lpc_request(dev, op, &data_copy); | 
|  | } | 
|  | #include <syscalls/espi_write_lpc_request_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_send_vwire(const struct device *dev, | 
|  | enum espi_vwire_signal signal, | 
|  | uint8_t level) | 
|  | { | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, send_vwire)); | 
|  |  | 
|  | return z_impl_espi_send_vwire(dev, signal, level); | 
|  | } | 
|  | #include <syscalls/espi_send_vwire_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_receive_vwire(const struct device *dev, | 
|  | enum espi_vwire_signal signal, | 
|  | uint8_t *level) | 
|  | { | 
|  | int ret; | 
|  | uint8_t level_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, receive_vwire)); | 
|  |  | 
|  | ret = z_impl_espi_receive_vwire(dev, signal, &level_copy); | 
|  | Z_OOPS(z_user_to_copy(level, &level_copy, sizeof(uint8_t))); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_receive_vwire_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_read_request(const struct device *dev, | 
|  | struct espi_request_packet *req) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_request_packet req_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, read_request)); | 
|  | Z_OOPS(z_user_from_copy(&req_copy, req, | 
|  | sizeof(struct espi_request_packet))); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_WRITE(req_copy.data, req_copy.len)); | 
|  |  | 
|  | ret = z_impl_espi_read_request(dev, &req_copy); | 
|  |  | 
|  | Z_OOPS(z_user_to_copy(req, &req_copy, | 
|  | sizeof(struct espi_request_packet))); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_read_request_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_write_request(const struct device *dev, | 
|  | struct espi_request_packet *req) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_request_packet req_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, write_request)); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_READ(req->data, req->len)); | 
|  | Z_OOPS(z_user_from_copy(&req_copy, req, | 
|  | sizeof(struct espi_request_packet))); | 
|  |  | 
|  | ret = z_impl_espi_write_request(dev, &req_copy); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_write_request_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_send_oob(const struct device *dev, | 
|  | struct espi_oob_packet *pckt) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_oob_packet pckt_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, send_oob)); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len)); | 
|  | Z_OOPS(z_user_from_copy(&pckt_copy, pckt, | 
|  | sizeof(struct espi_oob_packet))); | 
|  |  | 
|  | ret = z_impl_espi_send_oob(dev, &pckt_copy); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_send_oob_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_receive_oob(const struct device *dev, | 
|  | struct espi_oob_packet *pckt) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_oob_packet pckt_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, receive_oob)); | 
|  | Z_OOPS(z_user_from_copy(&pckt_copy, pckt, | 
|  | sizeof(struct espi_oob_packet))); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_WRITE(pckt->buf, pckt->len)); | 
|  |  | 
|  | ret = z_impl_espi_receive_oob(dev, &pckt_copy); | 
|  | Z_OOPS(z_user_to_copy(pckt, &pckt_copy, | 
|  | sizeof(struct espi_oob_packet))); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_receive_oob_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_read_flash(const struct device *dev, | 
|  | struct espi_flash_packet *pckt) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_flash_packet pckt_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, flash_read)); | 
|  | Z_OOPS(z_user_from_copy(&pckt_copy, pckt, | 
|  | sizeof(struct espi_flash_packet))); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_WRITE(pckt->buf, pckt->len)); | 
|  |  | 
|  | ret = z_impl_espi_read_flash(dev, pckt); | 
|  | Z_OOPS(z_user_to_copy(pckt, &pckt_copy, | 
|  | sizeof(struct espi_flash_packet))); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_read_flash_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_write_flash(const struct device *dev, | 
|  | struct espi_flash_packet *pckt) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_flash_packet pckt_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, flash_write)); | 
|  | Z_OOPS(z_user_from_copy(&pckt_copy, pckt, | 
|  | sizeof(struct espi_flash_packet))); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len)); | 
|  |  | 
|  | ret = z_impl_espi_write_flash(dev, &pckt_copy); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_write_flash_mrsh.c> | 
|  |  | 
|  | static inline int z_vrfy_espi_flash_erase(const struct device *dev, | 
|  | struct espi_flash_packet *pckt) | 
|  | { | 
|  | int ret; | 
|  | struct  espi_flash_packet pckt_copy; | 
|  |  | 
|  | Z_OOPS(Z_SYSCALL_DRIVER_ESPI(dev, flash_write)); | 
|  | Z_OOPS(z_user_from_copy(&pckt_copy, pckt, | 
|  | sizeof(struct espi_flash_packet))); | 
|  | Z_OOPS(Z_SYSCALL_MEMORY_READ(pckt->buf, pckt->len)); | 
|  |  | 
|  | ret = z_impl_espi_flash_erase(dev, &pckt_copy); | 
|  |  | 
|  | return ret; | 
|  | } | 
|  | #include <syscalls/espi_flash_erase_mrsh.c> |