aboutsummaryrefslogtreecommitdiffstats
path: root/include/boardobj/boardobjgrpmask.c
diff options
context:
space:
mode:
Diffstat (limited to 'include/boardobj/boardobjgrpmask.c')
-rw-r--r--include/boardobj/boardobjgrpmask.c411
1 files changed, 0 insertions, 411 deletions
diff --git a/include/boardobj/boardobjgrpmask.c b/include/boardobj/boardobjgrpmask.c
deleted file mode 100644
index a1dcd6d..0000000
--- a/include/boardobj/boardobjgrpmask.c
+++ /dev/null
@@ -1,411 +0,0 @@
1/*
2 * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
21 */
22#include <nvgpu/gk20a.h>
23
24#include "boardobjgrp.h"
25#include "ctrl/ctrlboardobj.h"
26
27/*
28* Assures that unused bits (size .. (maskDataCount * 32 - 1)) are always zero.
29*/
30#define BOARDOBJGRPMASK_NORMALIZE(_pmask) \
31 ((_pmask)->data[(_pmask)->maskdatacount-1] &= (_pmask)->lastmaskfilter)
32
33u32 boardobjgrpmask_init(struct boardobjgrpmask *mask, u8 bitsize,
34 struct ctrl_boardobjgrp_mask *extmask)
35{
36 if (mask == NULL) {
37 return -EINVAL;
38 }
39 if ((bitsize != CTRL_BOARDOBJGRP_E32_MAX_OBJECTS) &&
40 (bitsize != CTRL_BOARDOBJGRP_E255_MAX_OBJECTS)) {
41 return -EINVAL;
42 }
43
44 mask->bitcount = bitsize;
45 mask->maskdatacount = CTRL_BOARDOBJGRP_MASK_DATA_SIZE(bitsize);
46 mask->lastmaskfilter = bitsize %
47 CTRL_BOARDOBJGRP_MASK_MASK_ELEMENT_BIT_SIZE;
48
49 mask->lastmaskfilter = (mask->lastmaskfilter == 0) ?
50 0xFFFFFFFF : (u32)(BIT(mask->lastmaskfilter) - 1);
51
52 return (extmask == NULL) ?
53 boardobjgrpmask_clr(mask) :
54 boardobjgrpmask_import(mask, bitsize, extmask);
55}
56
57u32 boardobjgrpmask_import(struct boardobjgrpmask *mask, u8 bitsize,
58 struct ctrl_boardobjgrp_mask *extmask)
59{
60 u8 index;
61
62 if (mask == NULL) {
63 return -EINVAL;
64 }
65 if (extmask == NULL) {
66 return -EINVAL;
67 }
68 if (mask->bitcount != bitsize) {
69 return -EINVAL;
70 }
71
72 for (index = 0; index < mask->maskdatacount; index++) {
73 mask->data[index] = extmask->data[index];
74 }
75
76 BOARDOBJGRPMASK_NORMALIZE(mask);
77
78 return 0;
79}
80
81u32 boardobjgrpmask_export(struct boardobjgrpmask *mask, u8 bitsize,
82 struct ctrl_boardobjgrp_mask *extmask)
83{
84 u8 index;
85
86 if (mask == NULL) {
87 return -EINVAL;
88 }
89 if (extmask == NULL) {
90 return -EINVAL;
91 }
92 if (mask->bitcount != bitsize) {
93 return -EINVAL;
94 }
95
96 for (index = 0; index < mask->maskdatacount; index++) {
97 extmask->data[index] = mask->data[index];
98 }
99
100 return 0;
101}
102
103u32 boardobjgrpmask_clr(struct boardobjgrpmask *mask)
104{
105 u8 index;
106
107 if (mask == NULL) {
108 return -EINVAL;
109 }
110 for (index = 0; index < mask->maskdatacount; index++) {
111 mask->data[index] = 0;
112 }
113
114 return 0;
115}
116
117u32 boardobjgrpmask_set(struct boardobjgrpmask *mask)
118{
119 u8 index;
120
121 if (mask == NULL) {
122 return -EINVAL;
123 }
124 for (index = 0; index < mask->maskdatacount; index++) {
125 mask->data[index] = 0xFFFFFFFF;
126 }
127 BOARDOBJGRPMASK_NORMALIZE(mask);
128 return 0;
129}
130
131u32 boardobjgrpmask_inv(struct boardobjgrpmask *mask)
132{
133 u8 index;
134
135 if (mask == NULL) {
136 return -EINVAL;
137 }
138 for (index = 0; index < mask->maskdatacount; index++) {
139 mask->data[index] = ~mask->data[index];
140 }
141 BOARDOBJGRPMASK_NORMALIZE(mask);
142 return 0;
143}
144
145bool boardobjgrpmask_iszero(struct boardobjgrpmask *mask)
146{
147 u8 index;
148
149 if (mask == NULL) {
150 return true;
151 }
152 for (index = 0; index < mask->maskdatacount; index++) {
153 if (mask->data[index] != 0) {
154 return false;
155 }
156 }
157 return true;
158}
159
160u8 boardobjgrpmask_bitsetcount(struct boardobjgrpmask *mask)
161{
162 u8 index;
163 u8 result = 0;
164
165 if (mask == NULL) {
166 return result;
167 }
168
169 for (index = 0; index < mask->maskdatacount; index++) {
170 u32 m = mask->data[index];
171
172 NUMSETBITS_32(m);
173 result += (u8)m;
174 }
175
176 return result;
177}
178
179u8 boardobjgrpmask_bitidxlowest(struct boardobjgrpmask *mask)
180{
181 u8 index;
182 u8 result = CTRL_BOARDOBJ_IDX_INVALID;
183
184 if (mask == NULL) {
185 return result;
186 }
187
188 for (index = 0; index < mask->maskdatacount; index++) {
189 u32 m = mask->data[index];
190
191 if (m != 0) {
192 LOWESTBITIDX_32(m);
193 result = (u8)m + index *
194 CTRL_BOARDOBJGRP_MASK_MASK_ELEMENT_BIT_SIZE;
195 break;
196 }
197 }
198
199 return result;
200}
201
202u8 boardobjgrpmask_bitidxhighest(struct boardobjgrpmask *mask)
203{
204 u8 index;
205 u8 result = CTRL_BOARDOBJ_IDX_INVALID;
206
207 if (mask == NULL) {
208 return result;
209 }
210
211 for (index = 0; index < mask->maskdatacount; index++) {
212 u32 m = mask->data[index];
213
214 if (m != 0) {
215 HIGHESTBITIDX_32(m);
216 result = (u8)m + index *
217 CTRL_BOARDOBJGRP_MASK_MASK_ELEMENT_BIT_SIZE;
218 break;
219 }
220 }
221