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