Files
android_kernel_samsung_sm8750/drivers/virt/gunyah/hcall_virtio.h
2025-08-12 22:16:57 +02:00

126 lines
2.6 KiB
C
Executable File

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef __GH_HCALL_VIRTIO_H
#define __GH_HCALL_VIRTIO_H
#include <linux/err.h>
#include <linux/types.h>
#include <linux/gunyah/hcall_common.h>
#include <linux/gunyah/gh_common.h>
#include <asm/gunyah/hcall.h>
static inline int
gh_hcall_virtio_mmio_backend_assert_virq(gh_capid_t capid, u64 int_status)
{
struct gh_hcall_resp _resp = {0};
return _gh_hcall(0x604e, (struct gh_hcall_args){ capid, int_status, 0 },
&_resp);
}
static inline int
gh_hcall_virtio_mmio_backend_set_dev_features(gh_capid_t capid,
u64 features_sel, u64 features)
{
struct gh_hcall_resp _resp = {0};
return _gh_hcall(0x604f,
(struct gh_hcall_args){ capid, features_sel, features,
0 },
&_resp);
}
static inline int
gh_hcall_virtio_mmio_backend_set_queue_num_max(gh_capid_t capid,
u64 queue_sel, u64 queue_num_max)
{
struct gh_hcall_resp _resp = {0};
return _gh_hcall(0x6050,
(struct gh_hcall_args){ capid, queue_sel,
queue_num_max, 0 },
&_resp);
}
static inline int
gh_hcall_virtio_mmio_backend_get_drv_features(gh_capid_t capid,
u64 features_sel, u64 *features)
{
int ret;
struct gh_hcall_resp _resp = {0};
ret = _gh_hcall(0x6051,
(struct gh_hcall_args){ capid, features_sel, 0},
&_resp);
if (!ret && features)
*features = _resp.resp1;
return ret;
}
struct gh_hcall_virtio_queue_info {
u64 queue_num;
u64 queue_ready;
u64 queue_desc;
u64 queue_driver;
u64 queue_device;
};
static inline int
gh_hcall_virtio_mmio_backend_get_queue_info(gh_capid_t capid,
u64 queue_sel, struct gh_hcall_virtio_queue_info *queue_info)
{
int ret;
struct gh_hcall_resp _resp = {0};
ret = _gh_hcall(0x6052,
(struct gh_hcall_args){ capid, queue_sel, 0},
&_resp);
if (!ret && queue_info) {
queue_info->queue_num = _resp.resp1;
queue_info->queue_ready = _resp.resp2;
queue_info->queue_desc = _resp.resp3;
queue_info->queue_driver = _resp.resp4;
queue_info->queue_device = _resp.resp5;
}
return ret;
}
static inline int
gh_hcall_virtio_mmio_backend_get_event(gh_capid_t capid,
u64 *event_data, u64 *event)
{
int ret;
struct gh_hcall_resp _resp = {0};
ret = _gh_hcall(0x6053,
(struct gh_hcall_args){ capid, 0},
&_resp);
if (!ret && event_data)
*event_data = _resp.resp1;
if (!ret && event)
*event = _resp.resp2;
return ret;
}
static inline int
gh_hcall_virtio_mmio_backend_ack_reset(gh_capid_t capid)
{
struct gh_hcall_resp _resp = {0};
return _gh_hcall(0x6054,
(struct gh_hcall_args){ capid, 0},
&_resp);
}
#endif