cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

qcom_bam_dma.h (1783B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
      4 */
      5
      6#ifndef _QCOM_BAM_DMA_H
      7#define _QCOM_BAM_DMA_H
      8
      9#include <asm/byteorder.h>
     10
     11/*
     12 * This data type corresponds to the native Command Element
     13 * supported by BAM DMA Engine.
     14 *
     15 * @cmd_and_addr - upper 8 bits command and lower 24 bits register address.
     16 * @data - for write command: content to be written into peripheral register.
     17 *	   for read command: dest addr to write peripheral register value.
     18 * @mask - register mask.
     19 * @reserved - for future usage.
     20 *
     21 */
     22struct bam_cmd_element {
     23	__le32 cmd_and_addr;
     24	__le32 data;
     25	__le32 mask;
     26	__le32 reserved;
     27};
     28
     29/*
     30 * This enum indicates the command type in a command element
     31 */
     32enum bam_command_type {
     33	BAM_WRITE_COMMAND = 0,
     34	BAM_READ_COMMAND,
     35};
     36
     37/*
     38 * prep_bam_ce_le32 - Wrapper function to prepare a single BAM command
     39 * element with the data already in le32 format.
     40 *
     41 * @bam_ce: bam command element
     42 * @addr: target address
     43 * @cmd: BAM command
     44 * @data: actual data for write and dest addr for read in le32
     45 */
     46static inline void
     47bam_prep_ce_le32(struct bam_cmd_element *bam_ce, u32 addr,
     48		 enum bam_command_type cmd, __le32 data)
     49{
     50	bam_ce->cmd_and_addr =
     51		cpu_to_le32((addr & 0xffffff) | ((cmd & 0xff) << 24));
     52	bam_ce->data = data;
     53	bam_ce->mask = cpu_to_le32(0xffffffff);
     54}
     55
     56/*
     57 * bam_prep_ce - Wrapper function to prepare a single BAM command element
     58 * with the data.
     59 *
     60 * @bam_ce: BAM command element
     61 * @addr: target address
     62 * @cmd: BAM command
     63 * @data: actual data for write and dest addr for read
     64 */
     65static inline void
     66bam_prep_ce(struct bam_cmd_element *bam_ce, u32 addr,
     67	    enum bam_command_type cmd, u32 data)
     68{
     69	bam_prep_ce_le32(bam_ce, addr, cmd, cpu_to_le32(data));
     70}
     71#endif