6
typedef struct pcilib_kmem_list_s pcilib_kmem_list_t;
11
PCILIB_KMEM_FLAG_REUSE = KMEM_FLAG_REUSE,
12
PCILIB_KMEM_FLAG_EXCLUSIVE = KMEM_FLAG_EXCLUSIVE,
13
PCILIB_KMEM_FLAG_PERSISTENT = KMEM_FLAG_PERSISTENT,
14
PCILIB_KMEM_FLAG_HARDWARE = KMEM_FLAG_HW,
15
PCILIB_KMEM_FLAG_FORCE = KMEM_FLAG_FORCE,
16
PCILIB_KMEM_FLAG_TRY = KMEM_FLAG_TRY
17
} pcilib_kmem_flags_t;
21
PCILIB_KMEM_REUSE_ALLOCATED = PCILIB_TRISTATE_NO,
22
PCILIB_KMEM_REUSE_REUSED = PCILIB_TRISTATE_YES,
23
PCILIB_KMEM_REUSE_PARTIAL = PCILIB_TRISTATE_PARTIAL,
24
PCILIB_KMEM_REUSE_PERSISTENT = 0x100,
25
PCILIB_KMEM_REUSE_HARDWARE = 0x200
26
} pcilib_kmem_reuse_state_t;
31
pcilib_kmem_reuse_state_t reused;
38
size_t alignment_offset;
43
* single allocation - we set only addr, n_blocks = 0
44
* multiple allocation - addr is not set, blocks are set, n_blocks > 0
45
* sgmap allocation - addr contains ua, but pa's are set in blocks, n_blocks > 0
48
pcilib_kmem_addr_t addr;
50
pcilib_kmem_reuse_state_t reused;
53
pcilib_kmem_addr_t blocks[];
54
} pcilib_kmem_buffer_t;
56
typedef void pcilib_kmem_handle_t;
59
struct pcilib_kmem_list_s {
60
pcilib_kmem_list_t *next, *prev;
62
pcilib_kmem_buffer_t buf; // variable size, should be last item in struct
65
pcilib_kmem_handle_t *pcilib_alloc_kernel_memory(pcilib_t *ctx, pcilib_kmem_type_t type, size_t nmemb, size_t size, size_t alignment, pcilib_kmem_use_t use, pcilib_kmem_flags_t flags);
66
void pcilib_free_kernel_memory(pcilib_t *ctx, pcilib_kmem_handle_t *k, pcilib_kmem_flags_t flags);
67
//int pcilib_kmem_sync(pcilib_t *ctx, pcilib_kmem_handle_t *k, pcilib_kmem_sync_direction_t dir);
68
int pcilib_kmem_sync_block(pcilib_t *ctx, pcilib_kmem_handle_t *k, pcilib_kmem_sync_direction_t dir, size_t block);
69
void *pcilib_kmem_get_ua(pcilib_t *ctx, pcilib_kmem_handle_t *k);
70
uintptr_t pcilib_kmem_get_pa(pcilib_t *ctx, pcilib_kmem_handle_t *k);
71
uintptr_t pcilib_kmem_get_ba(pcilib_t *ctx, pcilib_kmem_handle_t *k);
72
void *pcilib_kmem_get_block_ua(pcilib_t *ctx, pcilib_kmem_handle_t *k, size_t block);
73
uintptr_t pcilib_kmem_get_block_pa(pcilib_t *ctx, pcilib_kmem_handle_t *k, size_t block);
74
uintptr_t pcilib_kmem_get_block_ba(pcilib_t *ctx, pcilib_kmem_handle_t *k, size_t block);
75
size_t pcilib_kmem_get_block_size(pcilib_t *ctx, pcilib_kmem_handle_t *k, size_t block);
76
pcilib_kmem_reuse_state_t pcilib_kmem_is_reused(pcilib_t *ctx, pcilib_kmem_handle_t *k);
78
int pcilib_clean_kernel_memory(pcilib_t *ctx, pcilib_kmem_use_t use, pcilib_kmem_flags_t flags);
80
#endif /* _PCILIB_KMEM_H */