#include <linux/unaligned.h>
#include <linux/dma-mapping.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include "ufshcd-priv.h"
#include <linux/delay.h>
#include <scsi/scsi_cmnd.h>
#include <linux/bitfield.h>
#include <linux/iopoll.h>
#define MAX_QUEUE_SUP …
#define QCFGPTR …
#define UFS_MCQ_MIN_RW_QUEUES …
#define UFS_MCQ_MIN_READ_QUEUES …
#define UFS_MCQ_MIN_POLL_QUEUES …
#define QUEUE_EN_OFFSET …
#define QUEUE_ID_OFFSET …
#define MCQ_CFG_MAC_MASK …
#define MCQ_ENTRY_SIZE_IN_DWORD …
#define CQE_UCD_BA …
#define MCQ_POLL_US …
static int rw_queue_count_set(const char *val, const struct kernel_param *kp)
{ … }
static const struct kernel_param_ops rw_queue_count_ops = …;
static unsigned int rw_queues;
module_param_cb(…);
MODULE_PARM_DESC(…) …;
static int read_queue_count_set(const char *val, const struct kernel_param *kp)
{ … }
static const struct kernel_param_ops read_queue_count_ops = …;
static unsigned int read_queues;
module_param_cb(…);
MODULE_PARM_DESC(…) …;
static int poll_queue_count_set(const char *val, const struct kernel_param *kp)
{ … }
static const struct kernel_param_ops poll_queue_count_ops = …;
static unsigned int poll_queues = …;
module_param_cb(…);
MODULE_PARM_DESC(…) …;
void ufshcd_mcq_config_mac(struct ufs_hba *hba, u32 max_active_cmds)
{ … }
EXPORT_SYMBOL_GPL(…);
struct ufs_hw_queue *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba,
struct request *req)
{ … }
unsigned int ufshcd_mcq_queue_cfg_addr(struct ufs_hba *hba)
{ … }
EXPORT_SYMBOL_GPL(…);
int ufshcd_mcq_decide_queue_depth(struct ufs_hba *hba)
{ … }
static int ufshcd_mcq_config_nr_queues(struct ufs_hba *hba)
{ … }
int ufshcd_mcq_memory_alloc(struct ufs_hba *hba)
{ … }
static void __iomem *mcq_opr_base(struct ufs_hba *hba,
enum ufshcd_mcq_opr n, int i)
{ … }
u32 ufshcd_mcq_read_cqis(struct ufs_hba *hba, int i)
{ … }
EXPORT_SYMBOL_GPL(…);
void ufshcd_mcq_write_cqis(struct ufs_hba *hba, u32 val, int i)
{ … }
EXPORT_SYMBOL_GPL(…);
static int ufshcd_mcq_get_tag(struct ufs_hba *hba, struct cq_entry *cqe)
{ … }
static void ufshcd_mcq_process_cqe(struct ufs_hba *hba,
struct ufs_hw_queue *hwq)
{ … }
void ufshcd_mcq_compl_all_cqes_lock(struct ufs_hba *hba,
struct ufs_hw_queue *hwq)
{ … }
unsigned long ufshcd_mcq_poll_cqe_lock(struct ufs_hba *hba,
struct ufs_hw_queue *hwq)
{ … }
EXPORT_SYMBOL_GPL(…);
void ufshcd_mcq_make_queues_operational(struct ufs_hba *hba)
{ … }
EXPORT_SYMBOL_GPL(…);
void ufshcd_mcq_enable_esi(struct ufs_hba *hba)
{ … }
EXPORT_SYMBOL_GPL(…);
void ufshcd_mcq_enable(struct ufs_hba *hba)
{ … }
EXPORT_SYMBOL_GPL(…);
void ufshcd_mcq_disable(struct ufs_hba *hba)
{ … }
void ufshcd_mcq_config_esi(struct ufs_hba *hba, struct msi_msg *msg)
{ … }
EXPORT_SYMBOL_GPL(…);
int ufshcd_mcq_init(struct ufs_hba *hba)
{ … }
static int ufshcd_mcq_sq_stop(struct ufs_hba *hba, struct ufs_hw_queue *hwq)
{ … }
static int ufshcd_mcq_sq_start(struct ufs_hba *hba, struct ufs_hw_queue *hwq)
{ … }
int ufshcd_mcq_sq_cleanup(struct ufs_hba *hba, int task_tag)
{ … }
static void ufshcd_mcq_nullify_sqe(struct utp_transfer_req_desc *utrd)
{ … }
static bool ufshcd_mcq_sqe_search(struct ufs_hba *hba,
struct ufs_hw_queue *hwq, int task_tag)
{ … }
int ufshcd_mcq_abort(struct scsi_cmnd *cmd)
{ … }