/alps/ipecamera

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/ipecamera

« back to all changes in this revision

Viewing changes to kmem.h

  • Committer: Suren A. Chilingaryan
  • Date: 2015-04-27 00:28:57 UTC
  • Revision ID: csa@suren.me-20150427002857-82fk6r3e8rfgy4wr
First stand-alone ipecamera implementation

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#ifndef _PCILIB_KMEM_H
2
 
#define _PCILIB_KMEM_H
3
 
 
4
 
#include "pcilib.h"
5
 
 
6
 
typedef struct pcilib_kmem_list_s pcilib_kmem_list_t;
7
 
 
8
 
#include "tools.h"
9
 
 
10
 
typedef enum {
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;
18
 
 
19
 
 
20
 
typedef enum {
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;
27
 
 
28
 
 
29
 
typedef struct {
30
 
    int handle_id;
31
 
    pcilib_kmem_reuse_state_t reused;
32
 
    
33
 
    uintptr_t pa;
34
 
//    uintptr_t va;
35
 
    void *ua;
36
 
    size_t size;
37
 
    
38
 
    size_t alignment_offset;
39
 
    size_t mmap_offset;
40
 
} pcilib_kmem_addr_t;
41
 
 
42
 
/**
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
46
 
 */
47
 
typedef struct {
48
 
    pcilib_kmem_addr_t addr;
49
 
    
50
 
    pcilib_kmem_reuse_state_t reused;
51
 
 
52
 
    size_t n_blocks;
53
 
    pcilib_kmem_addr_t blocks[];
54
 
} pcilib_kmem_buffer_t;
55
 
 
56
 
typedef void pcilib_kmem_handle_t;
57
 
 
58
 
 
59
 
struct pcilib_kmem_list_s {
60
 
    pcilib_kmem_list_t *next, *prev;
61
 
 
62
 
    pcilib_kmem_buffer_t buf;   // variable size, should be last item in struct
63
 
};
64
 
 
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);
77
 
 
78
 
int pcilib_clean_kernel_memory(pcilib_t *ctx, pcilib_kmem_use_t use, pcilib_kmem_flags_t flags);
79
 
 
80
 
#endif /* _PCILIB_KMEM_H */