2019-08-23 05:16:35 -07:00
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* The On Chip Memory ( OCMEM ) allocator allows various clients to allocate
* memory from OCMEM based on performance , latency and power requirements .
* This is typically used by the GPU , camera / video , and audio components on
* some Snapdragon SoCs .
*
* Copyright ( C ) 2019 Brian Masney < masneyb @ onstation . org >
* Copyright ( C ) 2015 Red Hat . Author : Rob Clark < robdclark @ gmail . com >
*/
2019-09-01 17:30:37 -04:00
# include <linux/device.h>
# include <linux/err.h>
2019-08-23 05:16:35 -07:00
# ifndef __OCMEM_H__
# define __OCMEM_H__
enum ocmem_client {
/* GMEM clients */
OCMEM_GRAPHICS = 0x0 ,
/*
* TODO add more once ocmem_allocate ( ) is clever enough to
* deal with multiple clients .
*/
OCMEM_CLIENT_MAX ,
} ;
struct ocmem ;
struct ocmem_buf {
unsigned long offset ;
unsigned long addr ;
unsigned long len ;
} ;
# if IS_ENABLED(CONFIG_QCOM_OCMEM)
struct ocmem * of_get_ocmem ( struct device * dev ) ;
struct ocmem_buf * ocmem_allocate ( struct ocmem * ocmem , enum ocmem_client client ,
unsigned long size ) ;
void ocmem_free ( struct ocmem * ocmem , enum ocmem_client client ,
struct ocmem_buf * buf ) ;
# else /* IS_ENABLED(CONFIG_QCOM_OCMEM) */
static inline struct ocmem * of_get_ocmem ( struct device * dev )
{
return ERR_PTR ( - ENODEV ) ;
}
static inline struct ocmem_buf * ocmem_allocate ( struct ocmem * ocmem ,
enum ocmem_client client ,
unsigned long size )
{
return ERR_PTR ( - ENODEV ) ;
}
static inline void ocmem_free ( struct ocmem * ocmem , enum ocmem_client client ,
struct ocmem_buf * buf )
{
}
# endif /* IS_ENABLED(CONFIG_QCOM_OCMEM) */
# endif /* __OCMEM_H__ */