forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
/* 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 <[email protected]> |
|
* Copyright (C) 2015 Red Hat. Author: Rob Clark <[email protected]> |
|
*/ |
|
|
|
#include <linux/device.h> |
|
#include <linux/err.h> |
|
|
|
#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__ */
|
|
|