summaryrefslogtreecommitdiff
path: root/src/include_v2/gc_hal_user_context.h
blob: abc14813d35a5f191d000e4cb43d5f7e12191d87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/****************************************************************************
*
*    Copyright (C) 2005 - 2011 by Vivante Corp.
*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 2 of the license, or
*    (at your option) any later version.
*
*    This program is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*    GNU General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program; if not write to the Free Software
*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*****************************************************************************/




#ifndef __gc_hal_user_context_h_
#define __gc_hal_user_context_h_

#ifdef __cplusplus
extern "C" {
#endif

/* gcoCONTEXT structure that hold the current context. */
struct _gcoCONTEXT
{
    /* Object. */
    gcsOBJECT                   object;

    /* Pointer to gcoOS object. */
    gcoOS                       os;

    /* Pointer to gcoHARDWARE object. */
    gcoHARDWARE                 hardware;

    /* Context ID. */
    gctUINT64                   id;

    /* State mapping. */
    gctUINT32_PTR               map;
    gctSIZE_T                   stateCount;

    /* State hinting. */
    gctUINT8_PTR                hint;
    gctUINT8                    hintValue;
    gctSIZE_T                   hintCount;

    /* Context buffer. */
    gctUINT32_PTR               buffer;
    gctUINT32                   pipe3DIndex;
    gctUINT32                   pipe2DIndex;
    gctUINT32                   linkIndex;
    gctUINT32                   inUseIndex;
    gctSIZE_T                   bufferSize;

    /* Context buffer used for commitment. */
    gctSIZE_T                   bytes;
    gctPHYS_ADDR                physical;
    gctPOINTER                  logical;

    /* Pointer to final LINK command. */
    gctPOINTER                  link;

    /* Requested pipe select for context. */
    gctUINT32                   initialPipe;
    gctUINT32                   entryPipe;
    gctUINT32                   currentPipe;

    /* Flag to specify whether PostCommit needs to be called. */
    gctBOOL                     postCommit;

    /* Busy flag. */
    volatile gctBOOL *          inUse;

    /* Variables used for building state buffer. */
    gctUINT32                   lastAddress;
    gctSIZE_T                   lastSize;
    gctUINT32                   lastIndex;
    gctBOOL                     lastFixed;

    /* Hint array. */
    gctUINT32_PTR               hintArray;
    gctUINT32_PTR               hintIndex;
};

struct _gcoCMDBUF
{
    /* The object. */
    gcsOBJECT                   object;

    /* Pointer to gcoOS object. */
    gcoOS                       os;

    /* Pointer to gcoHARDWARE object. */
    gcoHARDWARE                 hardware;

    /* Physical address of command buffer. */
    gctPHYS_ADDR                physical;

    /* Logical address of command buffer. */
    gctPOINTER                  logical;

    /* Number of bytes in command buffer. */
    gctSIZE_T                   bytes;

    /* Start offset into the command buffer. */
    gctUINT32                   startOffset;

    /* Current offset into the command buffer. */
    gctUINT32                   offset;

    /* Number of free bytes in command buffer. */
    gctSIZE_T                   free;

#if gcdSECURE_USER
    /* Table of offsets that define the physical addresses to be mapped. */
    gctUINT32_PTR               hintTable;

    /* Current index into map table. */
    gctUINT32_PTR               hintIndex;

    /* Commit index for map table. */
    gctUINT32_PTR               hintCommit;
#endif
};

typedef struct _gcsQUEUE * gcsQUEUE_PTR;

typedef struct _gcsQUEUE
{
    /* Pointer to next gcsQUEUE structure. */
    gcsQUEUE_PTR                next;

#ifdef __QNXNTO__
    /* Size of this object. */
    gctSIZE_T                   bytes;
#endif

    /* Event information. */
    gcsHAL_INTERFACE            iface;
}
gcsQUEUE;

/* Event queue. */
struct _gcoQUEUE
{
    /* The object. */
    gcsOBJECT                   object;

    /* Pointer to gcoOS object. */
    gcoOS                       os;

    /* Pointer to current event queue. */
    gcsQUEUE_PTR                head;
    gcsQUEUE_PTR                tail;
};

#ifdef __cplusplus
}
#endif

#endif /* __gc_hal_user_context_h_ */