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