mirror of https://github.com/F-Stack/f-stack.git
138 lines
3.9 KiB
C
138 lines
3.9 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(C) 2021 Marvell.
|
|
*/
|
|
|
|
#ifndef _ROC_REE_H_
|
|
#define _ROC_REE_H_
|
|
|
|
#include "roc_api.h"
|
|
|
|
#define REE_MAX_LFS 36
|
|
#define REE_MAX_QUEUES_PER_VF 36
|
|
#define REE_MAX_MATCHES_PER_VF 254
|
|
|
|
#define REE_MAX_PAYLOAD_SIZE (1 << 14)
|
|
|
|
#define REE_NON_INC_PROG 0
|
|
#define REE_INC_PROG 1
|
|
|
|
#define REE_MOD_INC(i, l) ((i) == (l - 1) ? (i) = 0 : (i)++)
|
|
|
|
/**
|
|
* Device vf data
|
|
*/
|
|
struct roc_ree_vf {
|
|
struct plt_pci_device *pci_dev;
|
|
struct dev *dev;
|
|
/**< Base class */
|
|
uint16_t max_queues;
|
|
/**< Max queues supported */
|
|
uint8_t nb_queues;
|
|
/**< Number of regex queues attached */
|
|
uint16_t max_matches;
|
|
/**< Max matches supported*/
|
|
uint16_t lf_msixoff[REE_MAX_LFS];
|
|
/**< MSI-X offsets */
|
|
uint8_t block_address;
|
|
/**< REE Block Address */
|
|
uint8_t err_intr_registered : 1;
|
|
/**< Are error interrupts registered? */
|
|
|
|
#define ROC_REE_MEM_SZ (6 * 1024)
|
|
uint8_t reserved[ROC_REE_MEM_SZ] __plt_cache_aligned;
|
|
} __plt_cache_aligned;
|
|
|
|
struct roc_ree_rid {
|
|
uintptr_t rid;
|
|
/** Request id of a ree operation */
|
|
uint64_t user_id;
|
|
/* Client data */
|
|
/**< IOVA address of the pattern to be matched. */
|
|
};
|
|
|
|
struct roc_ree_pending_queue {
|
|
uint64_t pending_count;
|
|
/** Pending requests count */
|
|
struct roc_ree_rid *rid_queue;
|
|
/** Array of pending requests */
|
|
uint16_t enq_tail;
|
|
/** Tail of queue to be used for enqueue */
|
|
uint16_t deq_head;
|
|
/** Head of queue to be used for dequeue */
|
|
};
|
|
|
|
struct roc_ree_qp {
|
|
uint32_t id;
|
|
/**< Queue pair id */
|
|
uintptr_t base;
|
|
/**< Base address where BAR is mapped */
|
|
struct roc_ree_pending_queue pend_q;
|
|
/**< Pending queue */
|
|
plt_iova_t iq_dma_addr;
|
|
/**< Instruction queue address */
|
|
uint32_t roc_regexdev_jobid;
|
|
/**< Job ID */
|
|
uint32_t write_offset;
|
|
/**< write offset */
|
|
};
|
|
|
|
union roc_ree_inst {
|
|
uint64_t u[8];
|
|
struct {
|
|
uint64_t doneint : 1;
|
|
uint64_t reserved_1_3 : 3;
|
|
uint64_t dg : 1;
|
|
uint64_t reserved_5_7 : 3;
|
|
uint64_t ooj : 1;
|
|
uint64_t reserved_9_15 : 7;
|
|
uint64_t reserved_16_63 : 48;
|
|
uint64_t inp_ptr_addr : 64;
|
|
uint64_t inp_ptr_ctl : 64;
|
|
uint64_t res_ptr_addr : 64;
|
|
uint64_t wq_ptr : 64;
|
|
uint64_t tag : 32;
|
|
uint64_t tt : 2;
|
|
uint64_t ggrp : 10;
|
|
uint64_t reserved_364_383 : 20;
|
|
uint64_t reserved_384_391 : 8;
|
|
uint64_t ree_job_id : 24;
|
|
uint64_t ree_job_ctrl : 16;
|
|
uint64_t ree_job_length : 15;
|
|
uint64_t reserved_447_447 : 1;
|
|
uint64_t ree_job_subset_id_0 : 16;
|
|
uint64_t ree_job_subset_id_1 : 16;
|
|
uint64_t ree_job_subset_id_2 : 16;
|
|
uint64_t ree_job_subset_id_3 : 16;
|
|
} cn98xx;
|
|
};
|
|
|
|
int __roc_api roc_ree_dev_init(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_dev_fini(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_queues_attach(struct roc_ree_vf *vf, uint8_t nb_queues);
|
|
int __roc_api roc_ree_queues_detach(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_msix_offsets_get(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_config_lf(struct roc_ree_vf *vf, uint8_t lf, uint8_t pri,
|
|
uint32_t size);
|
|
int __roc_api roc_ree_af_reg_read(struct roc_ree_vf *vf, uint64_t reg,
|
|
uint64_t *val);
|
|
int __roc_api roc_ree_af_reg_write(struct roc_ree_vf *vf, uint64_t reg,
|
|
uint64_t val);
|
|
int __roc_api roc_ree_rule_db_get(struct roc_ree_vf *vf, char *rule_db,
|
|
uint32_t rule_db_len, char *rule_dbi,
|
|
uint32_t rule_dbi_len);
|
|
int __roc_api roc_ree_rule_db_len_get(struct roc_ree_vf *vf,
|
|
uint32_t *rule_db_len,
|
|
uint32_t *rule_dbi_len);
|
|
int __roc_api roc_ree_rule_db_prog(struct roc_ree_vf *vf, const char *rule_db,
|
|
uint32_t rule_db_len, const char *rule_dbi,
|
|
uint32_t rule_dbi_len);
|
|
uintptr_t __roc_api roc_ree_qp_get_base(struct roc_ree_vf *vf, uint16_t qp_id);
|
|
void __roc_api roc_ree_err_intr_unregister(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_err_intr_register(struct roc_ree_vf *vf);
|
|
int __roc_api roc_ree_iq_enable(struct roc_ree_vf *vf,
|
|
const struct roc_ree_qp *qp, uint8_t pri,
|
|
uint32_t size_div128);
|
|
void __roc_api roc_ree_iq_disable(struct roc_ree_qp *qp);
|
|
|
|
#endif /* _ROC_REE_H_ */
|