File Index
Files and directories
Sign in
FILE

ae4dma.h

File preview with syntax highlighting.

linux-6.19.14/drivers/dma/amd/ae4dma/ae4dma.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * AMD AE4DMA driver
  4 *
  5 * Copyright (c) 2024, Advanced Micro Devices, Inc.
  6 * All Rights Reserved.
  7 *
  8 * Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
  9 */
 10#ifndef __AE4DMA_H__
 11#define __AE4DMA_H__
 12
 13#include <linux/device.h>
 14#include <linux/dmaengine.h>
 15#include <linux/dmapool.h>
 16#include <linux/list.h>
 17#include <linux/mutex.h>
 18#include <linux/pci.h>
 19#include <linux/spinlock.h>
 20#include <linux/wait.h>
 21
 22#include "../ptdma/ptdma.h"
 23#include "../../virt-dma.h"
 24
 25#define MAX_AE4_HW_QUEUES		16
 26
 27#define AE4_DESC_COMPLETED		0x03
 28
 29#define AE4_MAX_IDX_OFF			0x08
 30#define AE4_RD_IDX_OFF			0x0c
 31#define AE4_WR_IDX_OFF			0x10
 32#define AE4_INTR_STS_OFF		0x14
 33#define AE4_Q_BASE_L_OFF		0x18
 34#define AE4_Q_BASE_H_OFF		0x1c
 35#define AE4_Q_SZ			0x20
 36
 37#define AE4_DMA_VERSION			4
 38#define CMD_AE4_DESC_DW0_VAL		2
 39
 40#define AE4_TIME_OUT			5000
 41
 42struct ae4_msix {
 43	int msix_count;
 44	struct msix_entry msix_entry[MAX_AE4_HW_QUEUES];
 45};
 46
 47struct ae4_cmd_queue {
 48	struct ae4_device *ae4;
 49	struct pt_cmd_queue cmd_q;
 50	struct list_head cmd;
 51	/* protect command operations */
 52	struct mutex cmd_lock;
 53	struct delayed_work p_work;
 54	struct workqueue_struct *pws;
 55	struct completion cmp;
 56	wait_queue_head_t q_w;
 57	atomic64_t intr_cnt;
 58	atomic64_t done_cnt;
 59	u64 q_cmd_count;
 60	u32 dridx;
 61	u32 tail_wi;
 62	u32 id;
 63};
 64
 65union dwou {
 66	u32 dw0;
 67	struct dword0 {
 68	u8	byte0;
 69	u8	byte1;
 70	u16	timestamp;
 71	} dws;
 72};
 73
 74struct dword1 {
 75	u8	status;
 76	u8	err_code;
 77	u16	desc_id;
 78};
 79
 80struct ae4dma_desc {
 81	union dwou dwouv;
 82	struct dword1 dw1;
 83	u32 length;
 84	u32 rsvd;
 85	u32 src_hi;
 86	u32 src_lo;
 87	u32 dst_hi;
 88	u32 dst_lo;
 89};
 90
 91struct ae4_device {
 92	struct pt_device pt;
 93	struct ae4_msix *ae4_msix;
 94	struct ae4_cmd_queue ae4cmd_q[MAX_AE4_HW_QUEUES];
 95	unsigned int ae4_irq[MAX_AE4_HW_QUEUES];
 96	unsigned int cmd_q_count;
 97};
 98
 99int ae4_core_init(struct ae4_device *ae4);
100void ae4_destroy_work(struct ae4_device *ae4);
101void ae4_check_status_error(struct ae4_cmd_queue *ae4cmd_q, int idx);
102#endif
~/ Read-only file preview.