ocmem.h (1582B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * The On Chip Memory (OCMEM) allocator allows various clients to allocate 4 * memory from OCMEM based on performance, latency and power requirements. 5 * This is typically used by the GPU, camera/video, and audio components on 6 * some Snapdragon SoCs. 7 * 8 * Copyright (C) 2019 Brian Masney <masneyb@onstation.org> 9 * Copyright (C) 2015 Red Hat. Author: Rob Clark <robdclark@gmail.com> 10 */ 11 12#include <linux/device.h> 13#include <linux/err.h> 14 15#ifndef __OCMEM_H__ 16#define __OCMEM_H__ 17 18enum ocmem_client { 19 /* GMEM clients */ 20 OCMEM_GRAPHICS = 0x0, 21 /* 22 * TODO add more once ocmem_allocate() is clever enough to 23 * deal with multiple clients. 24 */ 25 OCMEM_CLIENT_MAX, 26}; 27 28struct ocmem; 29 30struct ocmem_buf { 31 unsigned long offset; 32 unsigned long addr; 33 unsigned long len; 34}; 35 36#if IS_ENABLED(CONFIG_QCOM_OCMEM) 37 38struct ocmem *of_get_ocmem(struct device *dev); 39struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, enum ocmem_client client, 40 unsigned long size); 41void ocmem_free(struct ocmem *ocmem, enum ocmem_client client, 42 struct ocmem_buf *buf); 43 44#else /* IS_ENABLED(CONFIG_QCOM_OCMEM) */ 45 46static inline struct ocmem *of_get_ocmem(struct device *dev) 47{ 48 return ERR_PTR(-ENODEV); 49} 50 51static inline struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, 52 enum ocmem_client client, 53 unsigned long size) 54{ 55 return ERR_PTR(-ENODEV); 56} 57 58static inline void ocmem_free(struct ocmem *ocmem, enum ocmem_client client, 59 struct ocmem_buf *buf) 60{ 61} 62 63#endif /* IS_ENABLED(CONFIG_QCOM_OCMEM) */ 64 65#endif /* __OCMEM_H__ */