18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * drivers/hyperhold/hp_space.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (c) 2020-2022 Huawei Technologies Co., Ltd.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _HP_SPACE_H_
98c2ecf20Sopenharmony_ci#define _HP_SPACE_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/kernel.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistruct hp_space {
148c2ecf20Sopenharmony_ci	u32 ext_size;
158c2ecf20Sopenharmony_ci	u32 nr_ext;
168c2ecf20Sopenharmony_ci	unsigned long *bitmap;
178c2ecf20Sopenharmony_ci	atomic_t last_alloc_bit;
188c2ecf20Sopenharmony_ci	atomic_t nr_alloced;
198c2ecf20Sopenharmony_ci	wait_queue_head_t empty_wq;
208c2ecf20Sopenharmony_ci};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_civoid deinit_space(struct hp_space *spc);
238c2ecf20Sopenharmony_cibool init_space(struct hp_space *spc, u64 dev_size, u32 ext_size);
248c2ecf20Sopenharmony_ciint alloc_eid(struct hp_space *spc);
258c2ecf20Sopenharmony_civoid free_eid(struct hp_space *spc, u32 eid);
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cibool wait_for_space_empty(struct hp_space *spc, bool force);
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciu64 space_memory(void);
308c2ecf20Sopenharmony_ci#endif
31