xref: /linux/drivers/misc/issei/dma.h (revision 93e4b3076b5f2d853462b9777d083c77fc0b7b23)
1*65f0ecb9SAlexander Usyskin /* SPDX-License-Identifier: GPL-2.0 */
2*65f0ecb9SAlexander Usyskin /* Copyright (C) 2023-2026 Intel Corporation */
3*65f0ecb9SAlexander Usyskin #ifndef _ISSEI_DMA_H_
4*65f0ecb9SAlexander Usyskin #define _ISSEI_DMA_H_
5*65f0ecb9SAlexander Usyskin 
6*65f0ecb9SAlexander Usyskin #include <linux/types.h>
7*65f0ecb9SAlexander Usyskin 
8*65f0ecb9SAlexander Usyskin struct issei_device;
9*65f0ecb9SAlexander Usyskin 
10*65f0ecb9SAlexander Usyskin /**
11*65f0ecb9SAlexander Usyskin  * struct issei_dma_length - sizes of DMA memory portions
12*65f0ecb9SAlexander Usyskin  * @h2f: host to firmware buffer size
13*65f0ecb9SAlexander Usyskin  * @f2h: firmware to host buffer size
14*65f0ecb9SAlexander Usyskin  * @ctl: control buffer size
15*65f0ecb9SAlexander Usyskin  */
16*65f0ecb9SAlexander Usyskin struct issei_dma_length {
17*65f0ecb9SAlexander Usyskin 	size_t h2f;
18*65f0ecb9SAlexander Usyskin 	size_t f2h;
19*65f0ecb9SAlexander Usyskin 	size_t ctl;
20*65f0ecb9SAlexander Usyskin };
21*65f0ecb9SAlexander Usyskin 
22*65f0ecb9SAlexander Usyskin /**
23*65f0ecb9SAlexander Usyskin  * struct issei_dma - DMA memory structure
24*65f0ecb9SAlexander Usyskin  * @vaddr: virtual address
25*65f0ecb9SAlexander Usyskin  * @daddr: physical address
26*65f0ecb9SAlexander Usyskin  * @length: memory sizes structure
27*65f0ecb9SAlexander Usyskin  */
28*65f0ecb9SAlexander Usyskin struct issei_dma {
29*65f0ecb9SAlexander Usyskin 	void *vaddr;
30*65f0ecb9SAlexander Usyskin 	dma_addr_t daddr;
31*65f0ecb9SAlexander Usyskin 	struct issei_dma_length length;
32*65f0ecb9SAlexander Usyskin };
33*65f0ecb9SAlexander Usyskin 
34*65f0ecb9SAlexander Usyskin /* Operation statuses */
35*65f0ecb9SAlexander Usyskin #define HAMS_SUCCESS                        0x00
36*65f0ecb9SAlexander Usyskin #define HAMS_PROTOCOL_NOT_SUPPORTED         0x01
37*65f0ecb9SAlexander Usyskin #define HAMS_DEPRECATED_BUS_MSG             0x02
38*65f0ecb9SAlexander Usyskin #define HAMS_CLIENT_NOT_EXISTS              0x03
39*65f0ecb9SAlexander Usyskin #define HAMS_MSG_TOO_BIG                    0x04
40*65f0ecb9SAlexander Usyskin #define HAMS_MSG_NOT_CONSUMED               0x05
41*65f0ecb9SAlexander Usyskin #define HAMS_CORRUPTED_BUS_MSG              0x06
42*65f0ecb9SAlexander Usyskin #define HAMS_CORRUPTED_HEADER               0x07
43*65f0ecb9SAlexander Usyskin #define HAMS_INVALID_LENGTH                 0x08
44*65f0ecb9SAlexander Usyskin #define HAMS_SHARED_MEMORY_SIZE_UNSUPPORTED 0x09
45*65f0ecb9SAlexander Usyskin #define HAMS_GENERAL_FATAL_ERROR            0xff
46*65f0ecb9SAlexander Usyskin 
47*65f0ecb9SAlexander Usyskin /**
48*65f0ecb9SAlexander Usyskin  * struct issei_dma_data - data passed through channel
49*65f0ecb9SAlexander Usyskin  * @fw_id: firmware client id
50*65f0ecb9SAlexander Usyskin  * @host_id: host client id
51*65f0ecb9SAlexander Usyskin  * @flags: flags bitmap
52*65f0ecb9SAlexander Usyskin  * @status: operation status
53*65f0ecb9SAlexander Usyskin  * @length: data length
54*65f0ecb9SAlexander Usyskin  * @buf: pointer to data buffer
55*65f0ecb9SAlexander Usyskin  */
56*65f0ecb9SAlexander Usyskin struct issei_dma_data {
57*65f0ecb9SAlexander Usyskin 	u16 fw_id;
58*65f0ecb9SAlexander Usyskin 	u16 host_id;
59*65f0ecb9SAlexander Usyskin 	u32 flags;
60*65f0ecb9SAlexander Usyskin 	u32 status;
61*65f0ecb9SAlexander Usyskin 	u32 length;
62*65f0ecb9SAlexander Usyskin 	void *buf;
63*65f0ecb9SAlexander Usyskin };
64*65f0ecb9SAlexander Usyskin 
65*65f0ecb9SAlexander Usyskin int issei_dmam_setup(struct issei_device *idev);
66*65f0ecb9SAlexander Usyskin int issei_dma_write(struct issei_device *idev, const struct issei_dma_data *data);
67*65f0ecb9SAlexander Usyskin int issei_dma_read(struct issei_device *idev, struct issei_dma_data *data);
68*65f0ecb9SAlexander Usyskin 
69*65f0ecb9SAlexander Usyskin #endif /*_ISSEI_DMA_H_*/
70