On Mon, Jun 26, 2017 at 06:19:28PM +0530, Abhishek Sahu wrote: > QCOM BAM also supports command descriptor which allows the SW to > create descriptors of type command which does not generate any > data transmissions but configures registers in the peripheral. > In command descriptor the 32bit address point to the start of > the command block which holds the command elements and the > 16bit size define the size of the command block. > > Each Command Element is structured by 4 words: > Write command: address + cmd > register data > register mask > reserved > > Read command: address + cmd > read data result address, > reserved > reserved > > This patch creates a new header file for BAM driver which contains the > structures and wrapper functions for command descriptor. This file will > be used by different QCOM peripheral drivers for forming the command > descriptor > > Signed-off-by: Abhishek Sahu <absahu@xxxxxxxxxxxxxx> > --- > include/linux/dma/qcom_bam_dma.h | 79 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 79 insertions(+) > create mode 100644 include/linux/dma/qcom_bam_dma.h > > diff --git a/include/linux/dma/qcom_bam_dma.h b/include/linux/dma/qcom_bam_dma.h > new file mode 100644 > index 0000000..077d43a > --- /dev/null > +++ b/include/linux/dma/qcom_bam_dma.h > @@ -0,0 +1,79 @@ > +/* > + * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. > + * > + * This software is licensed under the terms of the GNU General Public > + * License version 2, as published by the Free Software Foundation, and > + * may be copied, distributed, and modified under those terms. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#ifndef _QCOM_BAM_DMA_H > +#define _QCOM_BAM_DMA_H > + > +#include <asm/byteorder.h> > + > +/* > + * This data type corresponds to the native Command Element > + * supported by BAM DMA Engine. > + * > + * @cmd_and_addr - upper 8 bits command and lower 24 bits register address. > + * @data - for write command: content to be written into peripheral register. > + * for read command: dest addr to write peripheral register value. > + * @mask - register mask. > + * @reserved - for future usage. > + * > + */ > +struct bam_cmd_element { > + __le32 cmd_and_addr; > + __le32 data; > + __le32 mask; > + __le32 reserved; > +}; > + > +/* > + * This enum indicates the command type in a command element > + */ > +enum bam_command_type { > + BAM_WRITE_COMMAND = 0, > + BAM_READ_COMMAND, > +}; > + > +/* > + * prep_bam_ce_le32 - Wrapper function to prepare a single BAM command > + * element with the data already in le32 format. > + * > + * @bam_ce: bam command element > + * @addr: target address > + * @cmd: BAM command > + * @data: actual data for write and dest addr for read in le32 > + */ > +static inline void > +bam_prep_ce_le32(struct bam_cmd_element *bam_ce, u32 addr, > + enum bam_command_type cmd, __le32 data) > +{ > + bam_ce->cmd_and_addr = > + cpu_to_le32((addr & 0xffffff) | ((cmd & 0xff) << 24)); > + bam_ce->data = data; > + bam_ce->mask = cpu_to_le32(0xffffffff); > +} Is this being used by clients? > + > +/* > + * bam_prep_ce - Wrapper function to prepare a single BAM command element > + * with the data. > + * > + * @bam_ce: BAM command element > + * @addr: target address > + * @cmd: BAM command > + * @data: actual data for write and dest addr for read > + */ > +static inline void > +bam_prep_ce(struct bam_cmd_element *bam_ce, u32 addr, > + enum bam_command_type cmd, u32 data) > +{ > + bam_prep_ce_le32(bam_ce, addr, cmd, cpu_to_le32(data)); > +} > +#endif > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation > -- ~Vinod -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html