Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Copyright (C) 2019-2020 Linaro Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #ifndef _GSI_TRANS_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define _GSI_TRANS_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <linux/refcount.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #include <linux/completion.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <linux/dma-direction.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include "ipa_cmd.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) struct scatterlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) struct device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) struct sk_buff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) struct gsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) struct gsi_trans;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) struct gsi_trans_pool;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  * struct gsi_trans - a GSI transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  * Most fields in this structure for internal use by the transaction core code:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  * @links:	Links for channel transaction lists by state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  * @gsi:	GSI pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  * @channel_id: Channel number transaction is associated with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  * @cancelled:	If set by the core code, transaction was cancelled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * @tre_count:	Number of TREs reserved for this transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  * @used:	Number of TREs *used* (could be less than tre_count)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * @len:	Total # of transfer bytes represented in sgl[] (set by core)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * @data:	Preserved but not touched by the core transaction code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  * @sgl:	An array of scatter/gather entries managed by core code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * @info:	Array of command information structures (command channel)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * @direction:	DMA transfer direction (DMA_NONE for commands)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * @refcount:	Reference count used for destruction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * @completion:	Completed when the transaction completes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  * @byte_count:	TX channel byte count recorded when transaction committed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  * @trans_count: Channel transaction count when committed (for BQL accounting)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  * The size used for some fields in this structure were chosen to ensure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  * the full structure size is no larger than 128 bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) struct gsi_trans {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	struct list_head links;		/* gsi_channel lists */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	struct gsi *gsi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	u8 channel_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	bool cancelled;			/* true if transaction was cancelled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	u8 tre_count;			/* # TREs requested */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	u8 used;			/* # entries used in sgl[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	u32 len;			/* total # bytes across sgl[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	struct scatterlist *sgl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	struct ipa_cmd_info *info;	/* array of entries, or null */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	enum dma_data_direction direction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	refcount_t refcount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	struct completion completion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	u64 byte_count;			/* channel byte_count when committed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	u64 trans_count;		/* channel trans_count when committed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)  * gsi_trans_pool_init() - Initialize a pool of structures for transactions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  * @gsi:	GSI pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  * @size:	Size of elements in the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)  * @count:	Minimum number of elements in the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)  * @max_alloc:	Maximum number of elements allocated at a time from pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)  * Return:	0 if successful, or a negative error code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) int gsi_trans_pool_init(struct gsi_trans_pool *pool, size_t size, u32 count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 			u32 max_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)  * gsi_trans_pool_alloc() - Allocate one or more elements from a pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)  * @pool:	Pool pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86)  * @count:	Number of elements to allocate from the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)  * Return:	Virtual address of element(s) allocated from the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) void *gsi_trans_pool_alloc(struct gsi_trans_pool *pool, u32 count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  * gsi_trans_pool_exit() - Inverse of gsi_trans_pool_init()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * @pool:	Pool pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) void gsi_trans_pool_exit(struct gsi_trans_pool *pool);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  * gsi_trans_pool_init_dma() - Initialize a pool of DMA-able structures
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  * @dev:	Device used for DMA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  * @pool:	Pool pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)  * @size:	Size of elements in the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)  * @count:	Minimum number of elements in the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)  * @max_alloc:	Maximum number of elements allocated at a time from pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)  * Return:	0 if successful, or a negative error code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)  * Structures in this pool reside in DMA-coherent memory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) int gsi_trans_pool_init_dma(struct device *dev, struct gsi_trans_pool *pool,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 			    size_t size, u32 count, u32 max_alloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)  * gsi_trans_pool_alloc_dma() - Allocate an element from a DMA pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)  * @pool:	DMA pool pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)  * @addr:	DMA address "handle" associated with the allocation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  * Return:	Virtual address of element allocated from the pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)  * Only one element at a time may be allocated from a DMA pool.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) void *gsi_trans_pool_alloc_dma(struct gsi_trans_pool *pool, dma_addr_t *addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)  * gsi_trans_pool_exit() - Inverse of gsi_trans_pool_init()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)  * @pool:	Pool pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) void gsi_trans_pool_exit_dma(struct device *dev, struct gsi_trans_pool *pool);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)  * gsi_channel_trans_alloc() - Allocate a GSI transaction on a channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  * @gsi:	GSI pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)  * @channel_id:	Channel the transaction is associated with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)  * @tre_count:	Number of elements in the transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)  * @direction:	DMA direction for entire SGL (or DMA_NONE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)  * Return:	A GSI transaction structure, or a null pointer if all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)  *		available transactions are in use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) struct gsi_trans *gsi_channel_trans_alloc(struct gsi *gsi, u32 channel_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 					  u32 tre_count,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 					  enum dma_data_direction direction);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)  * gsi_trans_free() - Free a previously-allocated GSI transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)  * @trans:	Transaction to be freed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) void gsi_trans_free(struct gsi_trans *trans);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)  * gsi_trans_cmd_add() - Add an immediate command to a transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)  * @trans:	Transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)  * @buf:	Buffer pointer for command payload
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)  * @size:	Number of bytes in buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)  * @addr:	DMA address for payload
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)  * @direction:	Direction of DMA transfer (or DMA_NONE if none required)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)  * @opcode:	IPA immediate command opcode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) void gsi_trans_cmd_add(struct gsi_trans *trans, void *buf, u32 size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 		       dma_addr_t addr, enum dma_data_direction direction,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 		       enum ipa_cmd_opcode opcode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)  * gsi_trans_page_add() - Add a page transfer to a transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)  * @trans:	Transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)  * @page:	Page pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167)  * @size:	Number of bytes (starting at offset) to transfer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)  * @offset:	Offset within page for start of transfer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) int gsi_trans_page_add(struct gsi_trans *trans, struct page *page, u32 size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		       u32 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)  * gsi_trans_skb_add() - Add a socket transfer to a transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)  * @trans:	Transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)  * @skb:	Socket buffer for transfer (outbound)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)  * Return:	0, or -EMSGSIZE if socket data won't fit in transaction.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) int gsi_trans_skb_add(struct gsi_trans *trans, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)  * gsi_trans_commit() - Commit a GSI transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)  * @trans:	Transaction to commit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)  * @ring_db:	Whether to tell the hardware about these queued transfers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) void gsi_trans_commit(struct gsi_trans *trans, bool ring_db);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)  * gsi_trans_commit_wait() - Commit a GSI transaction and wait for it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)  *			     to complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192)  * @trans:	Transaction to commit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) void gsi_trans_commit_wait(struct gsi_trans *trans);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)  * gsi_trans_commit_wait_timeout() - Commit a GSI transaction and wait for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)  *				     it to complete, with timeout
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)  * @trans:	Transaction to commit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)  * @timeout:	Timeout period (in milliseconds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) int gsi_trans_commit_wait_timeout(struct gsi_trans *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 				  unsigned long timeout);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)  * gsi_trans_read_byte() - Issue a single byte read TRE on a channel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)  * @gsi:	GSI pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)  * @channel_id:	Channel on which to read a byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)  * @addr:	DMA address into which to transfer the one byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)  * This is not a transaction operation at all.  It's defined here because
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)  * it needs to be done in coordination with other transaction activity.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) int gsi_trans_read_byte(struct gsi *gsi, u32 channel_id, dma_addr_t addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  * gsi_trans_read_byte_done() - Clean up after a single byte read TRE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  * @gsi:	GSI pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)  * @channel_id:	Channel on which byte was read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)  * This function needs to be called to signal that the work related
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)  * to reading a byte initiated by gsi_trans_read_byte() is complete.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) void gsi_trans_read_byte_done(struct gsi *gsi, u32 channel_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #endif /* _GSI_TRANS_H_ */