70b9bd3929
This change is to allow support for QAT devices that may not have 16 rings per bank. The rings structure in bank is allocated dynamically based on the number of banks supported by a device. Note that in the error path in adf_init_bank(), ring->inflights is set to NULL after the free to silence a false positive double free reported by clang scan-build. Signed-off-by: Ahsan Atta <ahsan.atta@intel.com> Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Fiona Trahe <fiona.trahe@intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
|
|
/* Copyright(c) 2014 - 2020 Intel Corporation */
|
|
#ifndef ADF_TRANSPORT_INTRN_H
|
|
#define ADF_TRANSPORT_INTRN_H
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <linux/spinlock_types.h>
|
|
#include "adf_transport.h"
|
|
|
|
struct adf_etr_ring_debug_entry {
|
|
char ring_name[ADF_CFG_MAX_KEY_LEN_IN_BYTES];
|
|
struct dentry *debug;
|
|
};
|
|
|
|
struct adf_etr_ring_data {
|
|
void *base_addr;
|
|
atomic_t *inflights;
|
|
adf_callback_fn callback;
|
|
struct adf_etr_bank_data *bank;
|
|
dma_addr_t dma_addr;
|
|
struct adf_etr_ring_debug_entry *ring_debug;
|
|
spinlock_t lock; /* protects ring data struct */
|
|
u16 head;
|
|
u16 tail;
|
|
u8 ring_number;
|
|
u8 ring_size;
|
|
u8 msg_size;
|
|
};
|
|
|
|
struct adf_etr_bank_data {
|
|
struct adf_etr_ring_data *rings;
|
|
struct tasklet_struct resp_handler;
|
|
void __iomem *csr_addr;
|
|
u32 irq_coalesc_timer;
|
|
u32 bank_number;
|
|
u16 ring_mask;
|
|
u16 irq_mask;
|
|
spinlock_t lock; /* protects bank data struct */
|
|
struct adf_accel_dev *accel_dev;
|
|
struct dentry *bank_debug_dir;
|
|
struct dentry *bank_debug_cfg;
|
|
};
|
|
|
|
struct adf_etr_data {
|
|
struct adf_etr_bank_data *banks;
|
|
struct dentry *debug;
|
|
};
|
|
|
|
void adf_response_handler(uintptr_t bank_addr);
|
|
#ifdef CONFIG_DEBUG_FS
|
|
#include <linux/debugfs.h>
|
|
int adf_bank_debugfs_add(struct adf_etr_bank_data *bank);
|
|
void adf_bank_debugfs_rm(struct adf_etr_bank_data *bank);
|
|
int adf_ring_debugfs_add(struct adf_etr_ring_data *ring, const char *name);
|
|
void adf_ring_debugfs_rm(struct adf_etr_ring_data *ring);
|
|
#else
|
|
static inline int adf_bank_debugfs_add(struct adf_etr_bank_data *bank)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#define adf_bank_debugfs_rm(bank) do {} while (0)
|
|
|
|
static inline int adf_ring_debugfs_add(struct adf_etr_ring_data *ring,
|
|
const char *name)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#define adf_ring_debugfs_rm(ring) do {} while (0)
|
|
#endif
|
|
#endif
|