18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _QCOM_BAM_DMA_H 78c2ecf20Sopenharmony_ci#define _QCOM_BAM_DMA_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <asm/byteorder.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci/* 128c2ecf20Sopenharmony_ci * This data type corresponds to the native Command Element 138c2ecf20Sopenharmony_ci * supported by BAM DMA Engine. 148c2ecf20Sopenharmony_ci * 158c2ecf20Sopenharmony_ci * @cmd_and_addr - upper 8 bits command and lower 24 bits register address. 168c2ecf20Sopenharmony_ci * @data - for write command: content to be written into peripheral register. 178c2ecf20Sopenharmony_ci * for read command: dest addr to write peripheral register value. 188c2ecf20Sopenharmony_ci * @mask - register mask. 198c2ecf20Sopenharmony_ci * @reserved - for future usage. 208c2ecf20Sopenharmony_ci * 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_cistruct bam_cmd_element { 238c2ecf20Sopenharmony_ci __le32 cmd_and_addr; 248c2ecf20Sopenharmony_ci __le32 data; 258c2ecf20Sopenharmony_ci __le32 mask; 268c2ecf20Sopenharmony_ci __le32 reserved; 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* 308c2ecf20Sopenharmony_ci * This enum indicates the command type in a command element 318c2ecf20Sopenharmony_ci */ 328c2ecf20Sopenharmony_cienum bam_command_type { 338c2ecf20Sopenharmony_ci BAM_WRITE_COMMAND = 0, 348c2ecf20Sopenharmony_ci BAM_READ_COMMAND, 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci/* 388c2ecf20Sopenharmony_ci * prep_bam_ce_le32 - Wrapper function to prepare a single BAM command 398c2ecf20Sopenharmony_ci * element with the data already in le32 format. 408c2ecf20Sopenharmony_ci * 418c2ecf20Sopenharmony_ci * @bam_ce: bam command element 428c2ecf20Sopenharmony_ci * @addr: target address 438c2ecf20Sopenharmony_ci * @cmd: BAM command 448c2ecf20Sopenharmony_ci * @data: actual data for write and dest addr for read in le32 458c2ecf20Sopenharmony_ci */ 468c2ecf20Sopenharmony_cistatic inline void 478c2ecf20Sopenharmony_cibam_prep_ce_le32(struct bam_cmd_element *bam_ce, u32 addr, 488c2ecf20Sopenharmony_ci enum bam_command_type cmd, __le32 data) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci bam_ce->cmd_and_addr = 518c2ecf20Sopenharmony_ci cpu_to_le32((addr & 0xffffff) | ((cmd & 0xff) << 24)); 528c2ecf20Sopenharmony_ci bam_ce->data = data; 538c2ecf20Sopenharmony_ci bam_ce->mask = cpu_to_le32(0xffffffff); 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci/* 578c2ecf20Sopenharmony_ci * bam_prep_ce - Wrapper function to prepare a single BAM command element 588c2ecf20Sopenharmony_ci * with the data. 598c2ecf20Sopenharmony_ci * 608c2ecf20Sopenharmony_ci * @bam_ce: BAM command element 618c2ecf20Sopenharmony_ci * @addr: target address 628c2ecf20Sopenharmony_ci * @cmd: BAM command 638c2ecf20Sopenharmony_ci * @data: actual data for write and dest addr for read 648c2ecf20Sopenharmony_ci */ 658c2ecf20Sopenharmony_cistatic inline void 668c2ecf20Sopenharmony_cibam_prep_ce(struct bam_cmd_element *bam_ce, u32 addr, 678c2ecf20Sopenharmony_ci enum bam_command_type cmd, u32 data) 688c2ecf20Sopenharmony_ci{ 698c2ecf20Sopenharmony_ci bam_prep_ce_le32(bam_ce, addr, cmd, cpu_to_le32(data)); 708c2ecf20Sopenharmony_ci} 718c2ecf20Sopenharmony_ci#endif 72