* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef TRS_STARS_H
#define TRS_STARS_H
#include <linux/types.h>
#include "trs_pub_def.h"
#ifdef __cplusplus
extern "C" {
#endif
struct trs_stars_cqint {
void __ka_mm_iomem *base;
size_t size;
u32 group;
u32 cq_num;
u32 cq_grp_num;
};
enum {
TRS_STARS_SCHED = 0,
TRS_STARS_CQINT,
TRS_STARS_MAX,
};
typedef void (* trs_stars_set_cq_l1_mask_t)(struct trs_stars_cqint *cqint, int val);
typedef int (* trs_stars_get_valid_cq_list_t)(struct trs_stars_cqint *cqint, u32 cqid[], u32 num, u32 *valid_num);
typedef u32 (* trs_stars_addr_adjust_t)(u32 devid, u32 val);
struct trs_stars_attr {
phys_addr_t paddr;
size_t size;
u32 stride;
u32 cq_num;
u32 cq_grp_num;
trs_stars_set_cq_l1_mask_t set_cq_l1_mask;
trs_stars_get_valid_cq_list_t get_valid_cq_list;
};
int trs_stars_set_sq_head(struct trs_id_inst *inst, u32 sqid, u32 head);
int trs_stars_sq_enable(struct trs_id_inst *inst, u32 sqid);
int trs_stars_get_sq_head(struct trs_id_inst *inst, u32 sqid, u32 *head);
int trs_stars_init(struct trs_id_inst *inst, int type, struct trs_stars_attr *attr);
void trs_stars_uninit(struct trs_id_inst *inst, int type);
int trs_stars_get_valid_cq_list(struct trs_id_inst *inst, u32 group, u32 cqid[], u32 num, u32 *valid_num);
int trs_stars_set_sq_tail(struct trs_id_inst *inst, u32 sqid, u32 tail);
int trs_stars_get_sq_tail(struct trs_id_inst *inst, u32 sqid, u32 *tail);
int trs_stars_set_cq_head(struct trs_id_inst *inst, u32 cqid, u32 head);
int trs_stars_get_cq_head(struct trs_id_inst *inst, u32 cqid, u32 *head);
int trs_stars_get_cq_tail(struct trs_id_inst *inst, u32 cqid, u32 *tail);
int trs_stars_get_sq_head_paddr(struct trs_id_inst *inst, u32 sqid, u64 *paddr);
int trs_stars_get_sq_tail_paddr(struct trs_id_inst *inst, u32 sqid, u64 *paddr);
int trs_stars_set_sq_status(struct trs_id_inst *inst, u32 sqid, u32 val);
int trs_stars_get_sq_status(struct trs_id_inst *inst, u32 sqid, u32 *val);
int trs_stars_set_cq_l1_mask(struct trs_id_inst *inst, u32 val, u32 group);
int trs_stars_get_cq_affinity_group(struct trs_id_inst *inst, u32 cq_id, u32 *group);
int trs_stars_test_bit(u32 nr, u32 val);
int trs_stars_get_rtsq_paddr(struct trs_id_inst *inst, u32 sqid, phys_addr_t *paddr, size_t *size);
int trs_stars_addr_adjust_register(struct trs_id_inst *inst, int type,
trs_stars_addr_adjust_t addr_adjust);
void trs_stars_addr_adjust_unregister(struct trs_id_inst *inst, int type);
#ifdef __cplusplus
}
#endif
#endif