162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * drivers/hyperhold/hyperhold.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2020-2022 Huawei Technologies Co., Ltd. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _HYPERHOLD_H_ 962306a36Sopenharmony_ci#define _HYPERHOLD_H_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/kernel.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct hpio; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_citypedef void (*hp_endio)(struct hpio *); 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_civoid hyperhold_disable(bool force); 1862306a36Sopenharmony_civoid hyperhold_enable(void); 1962306a36Sopenharmony_cibool is_hyperhold_enable(void); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciu32 hyperhold_nr_extent(void); 2262306a36Sopenharmony_ciu32 hyperhold_extent_size(u32 eid); 2362306a36Sopenharmony_cilong hyperhold_address(u32 eid, u32 offset); 2462306a36Sopenharmony_ciint hyperhold_addr_extent(u64 addr); 2562306a36Sopenharmony_ciint hyperhold_addr_offset(u64 addr); 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciint hyperhold_alloc_extent(void); 2862306a36Sopenharmony_civoid hyperhold_free_extent(u32 eid); 2962306a36Sopenharmony_civoid hyperhold_should_free_extent(u32 eid); 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct hpio *hyperhold_io_alloc(u32 eid, gfp_t gfp, unsigned int op, bool new_page); 3262306a36Sopenharmony_civoid hyperhold_io_free(struct hpio *hpio); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct hpio *hyperhold_io_get(u32 eid, gfp_t gfp, unsigned int op); 3562306a36Sopenharmony_cibool hyperhold_io_put(struct hpio *hpio); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_civoid hyperhold_io_complete(struct hpio *hpio); 3862306a36Sopenharmony_civoid hyperhold_io_wait(struct hpio *hpio); 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cibool hyperhold_io_success(struct hpio *hpio); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciint hyperhold_io_extent(struct hpio *hpio); 4362306a36Sopenharmony_ciint hyperhold_io_operate(struct hpio *hpio); 4462306a36Sopenharmony_cistruct page *hyperhold_io_page(struct hpio *hpio, u32 index); 4562306a36Sopenharmony_cibool hyperhold_io_add_page(struct hpio *hpio, u32 index, struct page *page); 4662306a36Sopenharmony_ciu32 hyperhold_io_nr_page(struct hpio *hpio); 4762306a36Sopenharmony_civoid *hyperhold_io_private(struct hpio *hpio); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint hyperhold_write_async(struct hpio *hpio, hp_endio endio, void *priv); 5062306a36Sopenharmony_ciint hyperhold_read_async(struct hpio *hpio, hp_endio endio, void *priv); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#endif 53