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 | |
18 | enum 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 | |
28 | struct ocmem; |
29 | |
30 | struct ocmem_buf { |
31 | unsigned long offset; |
32 | unsigned long addr; |
33 | unsigned long len; |
34 | }; |
35 | |
36 | #if IS_ENABLED(CONFIG_QCOM_OCMEM) |
37 | |
38 | struct ocmem *of_get_ocmem(struct device *dev); |
39 | struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, enum ocmem_client client, |
40 | unsigned long size); |
41 | void ocmem_free(struct ocmem *ocmem, enum ocmem_client client, |
42 | struct ocmem_buf *buf); |
43 | |
44 | #else /* IS_ENABLED(CONFIG_QCOM_OCMEM) */ |
45 | |
46 | static inline struct ocmem *of_get_ocmem(struct device *dev) |
47 | { |
48 | return ERR_PTR(error: -ENODEV); |
49 | } |
50 | |
51 | static inline struct ocmem_buf *ocmem_allocate(struct ocmem *ocmem, |
52 | enum ocmem_client client, |
53 | unsigned long size) |
54 | { |
55 | return ERR_PTR(error: -ENODEV); |
56 | } |
57 | |
58 | static 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__ */ |
66 | |