.. | .. |
---|
1 | | -/* SPDX-License-Identifier: GPL-2.0 */ |
---|
| 1 | +/* SPDX-License-Identifier: MIT */ |
---|
2 | 2 | #ifndef __NVKM_MEMORY_H__ |
---|
3 | 3 | #define __NVKM_MEMORY_H__ |
---|
4 | 4 | #include <core/os.h> |
---|
.. | .. |
---|
29 | 29 | void *(*dtor)(struct nvkm_memory *); |
---|
30 | 30 | enum nvkm_memory_target (*target)(struct nvkm_memory *); |
---|
31 | 31 | u8 (*page)(struct nvkm_memory *); |
---|
| 32 | + u64 (*bar2)(struct nvkm_memory *); |
---|
32 | 33 | u64 (*addr)(struct nvkm_memory *); |
---|
33 | 34 | u64 (*size)(struct nvkm_memory *); |
---|
34 | 35 | void (*boot)(struct nvkm_memory *, struct nvkm_vmm *); |
---|
.. | .. |
---|
56 | 57 | |
---|
57 | 58 | #define nvkm_memory_target(p) (p)->func->target(p) |
---|
58 | 59 | #define nvkm_memory_page(p) (p)->func->page(p) |
---|
| 60 | +#define nvkm_memory_bar2(p) (p)->func->bar2(p) |
---|
59 | 61 | #define nvkm_memory_addr(p) (p)->func->addr(p) |
---|
60 | 62 | #define nvkm_memory_size(p) (p)->func->size(p) |
---|
61 | 63 | #define nvkm_memory_boot(p,v) (p)->func->boot((p),(v)) |
---|
.. | .. |
---|
82 | 84 | nvkm_wo32((o), __a + 4, upper_32_bits(__d)); \ |
---|
83 | 85 | } while(0) |
---|
84 | 86 | |
---|
| 87 | +#define nvkm_robj(o,a,p,s) do { \ |
---|
| 88 | + u32 _addr = (a), _size = (s) >> 2, *_data = (void *)(p); \ |
---|
| 89 | + while (_size--) { \ |
---|
| 90 | + *(_data++) = nvkm_ro32((o), _addr); \ |
---|
| 91 | + _addr += 4; \ |
---|
| 92 | + } \ |
---|
| 93 | +} while(0) |
---|
| 94 | + |
---|
| 95 | +#define nvkm_wobj(o,a,p,s) do { \ |
---|
| 96 | + u32 _addr = (a), _size = (s) >> 2, *_data = (void *)(p); \ |
---|
| 97 | + while (_size--) { \ |
---|
| 98 | + nvkm_wo32((o), _addr, *(_data++)); \ |
---|
| 99 | + _addr += 4; \ |
---|
| 100 | + } \ |
---|
| 101 | +} while(0) |
---|
| 102 | + |
---|
85 | 103 | #define nvkm_fill(t,s,o,a,d,c) do { \ |
---|
86 | 104 | u64 _a = (a), _c = (c), _d = (d), _o = _a >> s, _s = _c << s; \ |
---|
87 | 105 | u##t __iomem *_m = nvkm_kmap(o); \ |
---|