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