* 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.
*/
#include "ka_memory_pub.h"
#include "hdcdrv_core.h"
#include "hdcdrv_core_com.h"
#ifndef CFG_FEATURE_VHDC_ADAPT
u32 hdcdrv_gen_unique_value(void)
{
u32 value;
value = (u32)ka_base_atomic_inc_return(&hdc_ctrl->unique_val);
value = HDCDRV_SESSION_UNIQUE_VALUE_HOST_FLAG | (value & HDCDRV_SESSION_UNIQUE_VALUE_MASK);
return value;
}
bool hdcdrv_ctrl_msg_connect_get_permission(const struct hdcdrv_ctrl_msg *msg, u32 devid)
{
return true;
}
int hdcdrv_get_connect_fid(int service_type, u32 fid)
{
(void)service_type;
return fid;
}
long hdcdrv_convert_id_from_vir_to_phy(u32 drv_cmd, union hdcdrv_cmd *cmd_data, u32 *vfid)
{
long ret = HDCDRV_OK;
int *p_devid = NULL;
int local_devid = 0;
switch (drv_cmd) {
case HDCDRV_CMD_GET_PEER_DEV_ID:
case HDCDRV_CMD_CLIENT_DESTROY:
case HDCDRV_CMD_SERVER_CREATE:
case HDCDRV_CMD_SERVER_DESTROY:
case HDCDRV_CMD_ACCEPT:
case HDCDRV_CMD_CONNECT:
case HDCDRV_CMD_ALLOC_MEM:
case HDCDRV_CMD_DMA_MAP:
case HDCDRV_CMD_DMA_REMAP:
p_devid = &cmd_data->cmd_com.dev_id;
break;
case HDCDRV_CMD_EPOLL_ALLOC_FD:
p_devid = &local_devid;
break;
case HDCDRV_CMD_EPOLL_CTL:
p_devid = hdcdrv_epoll_get_dev_id_ptr(cmd_data);
if (p_devid == NULL) {
return HDCDRV_OK;
}
break;
default:
return ret;
}
ret = hdcdrv_container_vir_to_phs_devid((u32)(*p_devid), (u32 *)p_devid, vfid);
return ret;
}
void hdcdrv_init_register(void)
{
devdrv_pci_suspend_check_register(hdcdrv_session_free_check);
devdrv_peer_fault_notifier_register(hdcdrv_peer_fault_notify);
}
void hdcdrv_uninit_unregister(void)
{
devdrv_pci_suspend_check_unregister();
devdrv_peer_fault_notifier_unregister();
}
void hdcdrv_get_mempool_size(u32 *small_packet_num, u32 *huge_packet_num)
{
u32 mempool_level = hdcdrv_get_hdc_mempool_level();
if (mempool_level >= HDC_MEM_POOL_LEVEL_INVALID) {
*small_packet_num = HDCDRV_SMALL_PACKET_NUM;
*huge_packet_num = HDCDRV_HUGE_PACKET_NUM;
}
else {
*small_packet_num = HDCDRV_SMALL_PACKET_NUM >> mempool_level;
*huge_packet_num = HDCDRV_HUGE_PACKET_NUM >> mempool_level;
}
}
void hdcdrv_set_session_run_env(u32 dev_id, u32 fid, int *run_env)
{
*run_env = hdcdrv_get_session_run_env(dev_id, fid);
}
#endif
ka_page_t *hdcdrv_alloc_pages_node_inner(u32 dev_id, ka_gfp_t gfp_mask, u32 order)
{
return hdcdrv_alloc_pages(gfp_mask, order, KA_SUB_MODULE_TYPE_2);
}
void *hdcdrv_kzalloc_mem_node_inner(u32 dev_id, ka_gfp_t gfp_mask, u32 size, u32 level)
{
return hdcdrv_kzalloc(size, gfp_mask, level);
}
ka_gfp_t hdcdrv_init_mem_pool_get_gfp(void)
{
return KA_GFP_KERNEL;
}
u64 hdcdrv_get_hash_fid(u32 fid)
{
return (u64)fid;
}