~thopiekar/arm-mali/libump-sunxi

« back to all changes in this revision

Viewing changes to src/ump_uk_types.h

  • Committer: Luc Verhaegen
  • Date: 2014-03-25 21:04:12 UTC
  • Revision ID: git-v1:fa5ad94ac2873793dcca65dafc3ea211de5e7226
import ump r2p4 source

Signed-off-by: Luc Verhaegen <libv@skynet.be>

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2010, 2012 ARM Limited. All rights reserved.
 
3
 * 
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 * 
 
8
 *       http://www.apache.org/licenses/LICENSE-2.0
 
9
 * 
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
/**
 
18
 * @file ump_uk_types.h
 
19
 * Defines the types and constants used in the user-kernel interface
 
20
 */
 
21
 
 
22
#ifndef __UMP_UK_TYPES_H__
 
23
#define __UMP_UK_TYPES_H__
 
24
 
 
25
#ifdef __cplusplus
 
26
extern "C"
 
27
{
 
28
#endif
 
29
 
 
30
/* Helpers for API version handling */
 
31
#define MAKE_VERSION_ID(x) (((x) << 16UL) | (x))
 
32
#define IS_VERSION_ID(x) (((x) & 0xFFFF) == (((x) >> 16UL) & 0xFFFF))
 
33
#define GET_VERSION(x) (((x) >> 16UL) & 0xFFFF)
 
34
#define IS_API_MATCH(x, y) (IS_VERSION_ID((x)) && IS_VERSION_ID((y)) && (GET_VERSION((x)) == GET_VERSION((y))))
 
35
 
 
36
/**
 
37
 * API version define.
 
38
 * Indicates the version of the kernel API
 
39
 * The version is a 16bit integer incremented on each API change.
 
40
 * The 16bit integer is stored twice in a 32bit integer
 
41
 * So for version 1 the value would be 0x00010001
 
42
 */
 
43
#define UMP_IOCTL_API_VERSION MAKE_VERSION_ID(2)
 
44
 
 
45
typedef enum
 
46
{
 
47
        _UMP_IOC_QUERY_API_VERSION = 1,
 
48
        _UMP_IOC_ALLOCATE,
 
49
        _UMP_IOC_RELEASE,
 
50
        _UMP_IOC_SIZE_GET,
 
51
        _UMP_IOC_MAP_MEM,    /* not used in Linux */
 
52
        _UMP_IOC_UNMAP_MEM,  /* not used in Linux */
 
53
        _UMP_IOC_MSYNC,
 
54
}_ump_uk_functions;
 
55
 
 
56
typedef enum
 
57
{
 
58
        UMP_REF_DRV_UK_CONSTRAINT_NONE = 0,
 
59
        UMP_REF_DRV_UK_CONSTRAINT_PHYSICALLY_LINEAR = 1,
 
60
        UMP_REF_DRV_UK_CONSTRAINT_USE_CACHE = 4,
 
61
} ump_uk_alloc_constraints;
 
62
 
 
63
typedef enum
 
64
{
 
65
        _UMP_UK_MSYNC_CLEAN = 0,
 
66
        _UMP_UK_MSYNC_CLEAN_AND_INVALIDATE = 1,
 
67
        _UMP_UK_MSYNC_READOUT_CACHE_ENABLED = 128,
 
68
} ump_uk_msync_op;
 
69
 
 
70
/**
 
71
 * Get API version ([in,out] u32 api_version, [out] u32 compatible)
 
72
 */
 
73
typedef struct _ump_uk_api_version_s
 
74
{
 
75
        void *ctx;      /**< [in,out] user-kernel context (trashed on output) */
 
76
        u32 version;    /**< Set to the user space version on entry, stores the device driver version on exit */
 
77
        u32 compatible; /**< Non-null if the device is compatible with the client */
 
78
} _ump_uk_api_version_s;
 
79
 
 
80
/**
 
81
 * ALLOCATE ([out] u32 secure_id, [in,out] u32 size,  [in] contraints)
 
82
 */
 
83
typedef struct _ump_uk_allocate_s
 
84
{
 
85
        void *ctx;                              /**< [in,out] user-kernel context (trashed on output) */
 
86
        u32 secure_id;                          /**< Return value from DD to Userdriver */
 
87
        u32 size;                               /**< Input and output. Requested size; input. Returned size; output */
 
88
        ump_uk_alloc_constraints constraints;   /**< Only input to Devicedriver */
 
89
} _ump_uk_allocate_s;
 
90
 
 
91
/**
 
92
 * SIZE_GET ([in] u32 secure_id, [out]size )
 
93
 */
 
94
typedef struct _ump_uk_size_get_s
 
95
{
 
96
        void *ctx;                              /**< [in,out] user-kernel context (trashed on output) */
 
97
        u32 secure_id;                          /**< Input to DD */
 
98
        u32 size;                               /**< Returned size; output */
 
99
} _ump_uk_size_get_s;
 
100
 
 
101
/**
 
102
 * Release ([in] u32 secure_id)
 
103
 */
 
104
typedef struct _ump_uk_release_s
 
105
{
 
106
        void *ctx;                              /**< [in,out] user-kernel context (trashed on output) */
 
107
        u32 secure_id;                          /**< Input to DD */
 
108
} _ump_uk_release_s;
 
109
 
 
110
typedef struct _ump_uk_map_mem_s
 
111
{
 
112
        void *ctx;                      /**< [in,out] user-kernel context (trashed on output) */
 
113
        void *mapping;                  /**< [out] Returns user-space virtual address for the mapping */
 
114
        void *phys_addr;                /**< [in] physical address */
 
115
        unsigned long size;             /**< [in] size */
 
116
        u32 secure_id;                  /**< [in] secure_id to assign to mapping */
 
117
        void * _ukk_private;            /**< Only used inside linux port between kernel frontend and common part to store vma */
 
118
        u32 cookie;
 
119
        u32 is_cached;            /**< [in,out] caching of CPU mappings */
 
120
} _ump_uk_map_mem_s;
 
121
 
 
122
typedef struct _ump_uk_unmap_mem_s
 
123
{
 
124
        void *ctx;            /**< [in,out] user-kernel context (trashed on output) */
 
125
        void *mapping;
 
126
        u32 size;
 
127
        void * _ukk_private;
 
128
        u32 cookie;
 
129
} _ump_uk_unmap_mem_s;
 
130
 
 
131
typedef struct _ump_uk_msync_s
 
132
{
 
133
        void *ctx;            /**< [in,out] user-kernel context (trashed on output) */
 
134
        void *mapping;        /**< [in] mapping addr */
 
135
        void *address;        /**< [in] flush start addr */
 
136
        u32 size;             /**< [in] size to flush */
 
137
        ump_uk_msync_op op;   /**< [in] flush operation */
 
138
        u32 cookie;           /**< [in] cookie stored with reference to the kernel mapping internals */
 
139
        u32 secure_id;        /**< [in] cookie stored with reference to the kernel mapping internals */
 
140
        u32 is_cached;        /**< [out] caching of CPU mappings */
 
141
} _ump_uk_msync_s;
 
142
 
 
143
#ifdef __cplusplus
 
144
}
 
145
#endif
 
146
 
 
147
#endif /* __UMP_UK_TYPES_H__ */