18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright 2014 IBM Corp.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef _MISC_CXL_BASE_H
78c2ecf20Sopenharmony_ci#define _MISC_CXL_BASE_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifdef CONFIG_CXL_BASE
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define CXL_IRQ_RANGES 4
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistruct cxl_irq_ranges {
148c2ecf20Sopenharmony_ci	irq_hw_number_t offset[CXL_IRQ_RANGES];
158c2ecf20Sopenharmony_ci	irq_hw_number_t range[CXL_IRQ_RANGES];
168c2ecf20Sopenharmony_ci};
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciextern atomic_t cxl_use_count;
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline bool cxl_ctx_in_use(void)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci       return (atomic_read(&cxl_use_count) != 0);
238c2ecf20Sopenharmony_ci}
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistatic inline void cxl_ctx_get(void)
268c2ecf20Sopenharmony_ci{
278c2ecf20Sopenharmony_ci       atomic_inc(&cxl_use_count);
288c2ecf20Sopenharmony_ci}
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistatic inline void cxl_ctx_put(void)
318c2ecf20Sopenharmony_ci{
328c2ecf20Sopenharmony_ci       atomic_dec(&cxl_use_count);
338c2ecf20Sopenharmony_ci}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cistruct cxl_afu *cxl_afu_get(struct cxl_afu *afu);
368c2ecf20Sopenharmony_civoid cxl_afu_put(struct cxl_afu *afu);
378c2ecf20Sopenharmony_civoid cxl_slbia(struct mm_struct *mm);
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci#else /* CONFIG_CXL_BASE */
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cistatic inline bool cxl_ctx_in_use(void) { return false; }
428c2ecf20Sopenharmony_cistatic inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; }
438c2ecf20Sopenharmony_cistatic inline void cxl_afu_put(struct cxl_afu *afu) {}
448c2ecf20Sopenharmony_cistatic inline void cxl_slbia(struct mm_struct *mm) {}
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* CONFIG_CXL_BASE */
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci#endif
49