cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

shm_ipc.h (1651B)


      1/* SPDX-License-Identifier: GPL-2.0+ */
      2/* Copyright (c) 2015-2016 Quantenna Communications. All rights reserved. */
      3
      4#ifndef _QTN_FMAC_SHM_IPC_H_
      5#define _QTN_FMAC_SHM_IPC_H_
      6
      7#include <linux/workqueue.h>
      8#include <linux/completion.h>
      9#include <linux/mutex.h>
     10#include <linux/spinlock.h>
     11
     12#include "shm_ipc_defs.h"
     13
     14#define QTN_SHM_IPC_ACK_TIMEOUT		(2 * HZ)
     15
     16struct qtnf_shm_ipc_int {
     17	void (*fn)(void *arg);
     18	void *arg;
     19};
     20
     21struct qtnf_shm_ipc_rx_callback {
     22	void (*fn)(void *arg, const u8 __iomem *buf, size_t len);
     23	void *arg;
     24};
     25
     26enum qtnf_shm_ipc_direction {
     27	QTNF_SHM_IPC_OUTBOUND		= BIT(0),
     28	QTNF_SHM_IPC_INBOUND		= BIT(1),
     29};
     30
     31struct qtnf_shm_ipc {
     32	struct qtnf_shm_ipc_region __iomem *shm_region;
     33	enum qtnf_shm_ipc_direction direction;
     34	size_t tx_packet_count;
     35	size_t rx_packet_count;
     36
     37	size_t tx_timeout_count;
     38
     39	u8 waiting_for_ack;
     40
     41	struct qtnf_shm_ipc_int interrupt;
     42	struct qtnf_shm_ipc_rx_callback rx_callback;
     43
     44	void (*irq_handler)(struct qtnf_shm_ipc *ipc);
     45
     46	struct workqueue_struct *workqueue;
     47	struct work_struct irq_work;
     48	struct completion tx_completion;
     49};
     50
     51int qtnf_shm_ipc_init(struct qtnf_shm_ipc *ipc,
     52		      enum qtnf_shm_ipc_direction direction,
     53		      struct qtnf_shm_ipc_region __iomem *shm_region,
     54		      struct workqueue_struct *workqueue,
     55		      const struct qtnf_shm_ipc_int *interrupt,
     56		      const struct qtnf_shm_ipc_rx_callback *rx_callback);
     57void qtnf_shm_ipc_free(struct qtnf_shm_ipc *ipc);
     58int qtnf_shm_ipc_send(struct qtnf_shm_ipc *ipc, const u8 *buf, size_t size);
     59
     60static inline void qtnf_shm_ipc_irq_handler(struct qtnf_shm_ipc *ipc)
     61{
     62	ipc->irq_handler(ipc);
     63}
     64
     65#endif /* _QTN_FMAC_SHM_IPC_H_ */