Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_gpio_dispatch.c

Issue 3256004: [ARM] tegra: add nvos/nvrm/nvmap drivers (Closed) Base URL: ssh://git@gitrw.chromium.org/kernel.git
Patch Set: remove ap15 headers Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2009 NVIDIA Corporation.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * Neither the name of the NVIDIA Corporation nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 */
32
33 #define NV_IDL_IS_DISPATCH
34
35 #include "nvcommon.h"
36 #include "nvos.h"
37 #include "nvassert.h"
38 #include "nvreftrack.h"
39 #include "nvidlcmd.h"
40 #include "nvrm_gpio.h"
41
42 #define OFFSET( s, e ) (NvU32)(void *)(&(((s*)0)->e))
43
44
45 typedef struct NvRmGpioGetIrqs_in_t
46 {
47 NvU32 package_;
48 NvU32 function_;
49 NvRmDeviceHandle hRmDevice;
50 NvRmGpioPinHandle * pin;
51 NvU32 * Irq;
52 NvU32 pinCount;
53 } NV_ALIGN(4) NvRmGpioGetIrqs_in;
54
55 typedef struct NvRmGpioGetIrqs_inout_t
56 {
57 NvU32 dummy_;
58 } NV_ALIGN(4) NvRmGpioGetIrqs_inout;
59
60 typedef struct NvRmGpioGetIrqs_out_t
61 {
62 NvError ret_;
63 } NV_ALIGN(4) NvRmGpioGetIrqs_out;
64
65 typedef struct NvRmGpioGetIrqs_params_t
66 {
67 NvRmGpioGetIrqs_in in;
68 NvRmGpioGetIrqs_inout inout;
69 NvRmGpioGetIrqs_out out;
70 } NvRmGpioGetIrqs_params;
71
72 typedef struct NvRmGpioConfigPins_in_t
73 {
74 NvU32 package_;
75 NvU32 function_;
76 NvRmGpioHandle hGpio;
77 NvRmGpioPinHandle * pin;
78 NvU32 pinCount;
79 NvRmGpioPinMode Mode;
80 } NV_ALIGN(4) NvRmGpioConfigPins_in;
81
82 typedef struct NvRmGpioConfigPins_inout_t
83 {
84 NvU32 dummy_;
85 } NV_ALIGN(4) NvRmGpioConfigPins_inout;
86
87 typedef struct NvRmGpioConfigPins_out_t
88 {
89 NvError ret_;
90 } NV_ALIGN(4) NvRmGpioConfigPins_out;
91
92 typedef struct NvRmGpioConfigPins_params_t
93 {
94 NvRmGpioConfigPins_in in;
95 NvRmGpioConfigPins_inout inout;
96 NvRmGpioConfigPins_out out;
97 } NvRmGpioConfigPins_params;
98
99 typedef struct NvRmGpioReadPins_in_t
100 {
101 NvU32 package_;
102 NvU32 function_;
103 NvRmGpioHandle hGpio;
104 NvRmGpioPinHandle * pin;
105 NvRmGpioPinState * pPinState;
106 NvU32 pinCount;
107 } NV_ALIGN(4) NvRmGpioReadPins_in;
108
109 typedef struct NvRmGpioReadPins_inout_t
110 {
111 NvU32 dummy_;
112 } NV_ALIGN(4) NvRmGpioReadPins_inout;
113
114 typedef struct NvRmGpioReadPins_out_t
115 {
116 NvU32 dummy_;
117 } NV_ALIGN(4) NvRmGpioReadPins_out;
118
119 typedef struct NvRmGpioReadPins_params_t
120 {
121 NvRmGpioReadPins_in in;
122 NvRmGpioReadPins_inout inout;
123 NvRmGpioReadPins_out out;
124 } NvRmGpioReadPins_params;
125
126 typedef struct NvRmGpioWritePins_in_t
127 {
128 NvU32 package_;
129 NvU32 function_;
130 NvRmGpioHandle hGpio;
131 NvRmGpioPinHandle * pin;
132 NvRmGpioPinState * pinState;
133 NvU32 pinCount;
134 } NV_ALIGN(4) NvRmGpioWritePins_in;
135
136 typedef struct NvRmGpioWritePins_inout_t
137 {
138 NvU32 dummy_;
139 } NV_ALIGN(4) NvRmGpioWritePins_inout;
140
141 typedef struct NvRmGpioWritePins_out_t
142 {
143 NvU32 dummy_;
144 } NV_ALIGN(4) NvRmGpioWritePins_out;
145
146 typedef struct NvRmGpioWritePins_params_t
147 {
148 NvRmGpioWritePins_in in;
149 NvRmGpioWritePins_inout inout;
150 NvRmGpioWritePins_out out;
151 } NvRmGpioWritePins_params;
152
153 typedef struct NvRmGpioReleasePinHandles_in_t
154 {
155 NvU32 package_;
156 NvU32 function_;
157 NvRmGpioHandle hGpio;
158 NvRmGpioPinHandle * hPin;
159 NvU32 pinCount;
160 } NV_ALIGN(4) NvRmGpioReleasePinHandles_in;
161
162 typedef struct NvRmGpioReleasePinHandles_inout_t
163 {
164 NvU32 dummy_;
165 } NV_ALIGN(4) NvRmGpioReleasePinHandles_inout;
166
167 typedef struct NvRmGpioReleasePinHandles_out_t
168 {
169 NvU32 dummy_;
170 } NV_ALIGN(4) NvRmGpioReleasePinHandles_out;
171
172 typedef struct NvRmGpioReleasePinHandles_params_t
173 {
174 NvRmGpioReleasePinHandles_in in;
175 NvRmGpioReleasePinHandles_inout inout;
176 NvRmGpioReleasePinHandles_out out;
177 } NvRmGpioReleasePinHandles_params;
178
179 typedef struct NvRmGpioAcquirePinHandle_in_t
180 {
181 NvU32 package_;
182 NvU32 function_;
183 NvRmGpioHandle hGpio;
184 NvU32 port;
185 NvU32 pin;
186 } NV_ALIGN(4) NvRmGpioAcquirePinHandle_in;
187
188 typedef struct NvRmGpioAcquirePinHandle_inout_t
189 {
190 NvU32 dummy_;
191 } NV_ALIGN(4) NvRmGpioAcquirePinHandle_inout;
192
193 typedef struct NvRmGpioAcquirePinHandle_out_t
194 {
195 NvError ret_;
196 NvRmGpioPinHandle phPin;
197 } NV_ALIGN(4) NvRmGpioAcquirePinHandle_out;
198
199 typedef struct NvRmGpioAcquirePinHandle_params_t
200 {
201 NvRmGpioAcquirePinHandle_in in;
202 NvRmGpioAcquirePinHandle_inout inout;
203 NvRmGpioAcquirePinHandle_out out;
204 } NvRmGpioAcquirePinHandle_params;
205
206 typedef struct NvRmGpioClose_in_t
207 {
208 NvU32 package_;
209 NvU32 function_;
210 NvRmGpioHandle hGpio;
211 } NV_ALIGN(4) NvRmGpioClose_in;
212
213 typedef struct NvRmGpioClose_inout_t
214 {
215 NvU32 dummy_;
216 } NV_ALIGN(4) NvRmGpioClose_inout;
217
218 typedef struct NvRmGpioClose_out_t
219 {
220 NvU32 dummy_;
221 } NV_ALIGN(4) NvRmGpioClose_out;
222
223 typedef struct NvRmGpioClose_params_t
224 {
225 NvRmGpioClose_in in;
226 NvRmGpioClose_inout inout;
227 NvRmGpioClose_out out;
228 } NvRmGpioClose_params;
229
230 typedef struct NvRmGpioOpen_in_t
231 {
232 NvU32 package_;
233 NvU32 function_;
234 NvRmDeviceHandle hRmDevice;
235 } NV_ALIGN(4) NvRmGpioOpen_in;
236
237 typedef struct NvRmGpioOpen_inout_t
238 {
239 NvU32 dummy_;
240 } NV_ALIGN(4) NvRmGpioOpen_inout;
241
242 typedef struct NvRmGpioOpen_out_t
243 {
244 NvError ret_;
245 NvRmGpioHandle phGpio;
246 } NV_ALIGN(4) NvRmGpioOpen_out;
247
248 typedef struct NvRmGpioOpen_params_t
249 {
250 NvRmGpioOpen_in in;
251 NvRmGpioOpen_inout inout;
252 NvRmGpioOpen_out out;
253 } NvRmGpioOpen_params;
254
255 static NvError NvRmGpioGetIrqs_dispatch_( void *InBuffer, NvU32 InSize, void *Ou tBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
256 {
257 NvError err_ = NvSuccess;
258 NvRmGpioGetIrqs_in *p_in;
259 NvRmGpioGetIrqs_out *p_out;
260 NvRmGpioPinHandle *pin = NULL;
261 NvU32 *Irq = NULL;
262
263 p_in = (NvRmGpioGetIrqs_in *)InBuffer;
264 p_out = (NvRmGpioGetIrqs_out *)((NvU8 *)OutBuffer + OFFSET(NvRmGpioGetIrqs_p arams, out) - OFFSET(NvRmGpioGetIrqs_params, inout));
265
266 if( p_in->pinCount && p_in->pin )
267 {
268 pin = (NvRmGpioPinHandle *)NvOsAlloc( p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
269 if( !pin )
270 {
271 err_ = NvError_InsufficientMemory;
272 goto clean;
273 }
274 if( p_in->pin )
275 {
276 err_ = NvOsCopyIn( pin, p_in->pin, p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
277 if( err_ != NvSuccess )
278 {
279 err_ = NvError_BadParameter;
280 goto clean;
281 }
282 }
283 }
284 if( p_in->pinCount && p_in->Irq )
285 {
286 Irq = (NvU32 *)NvOsAlloc( p_in->pinCount * sizeof( NvU32 ) );
287 if( !Irq )
288 {
289 err_ = NvError_InsufficientMemory;
290 goto clean;
291 }
292 }
293
294 p_out->ret_ = NvRmGpioGetIrqs( p_in->hRmDevice, pin, Irq, p_in->pinCount );
295
296 if(p_in->Irq && Irq)
297 {
298 err_ = NvOsCopyOut( p_in->Irq, Irq, p_in->pinCount * sizeof( NvU32 ) );
299 if( err_ != NvSuccess )
300 {
301 err_ = NvError_BadParameter;
302 }
303 }
304 clean:
305 NvOsFree( pin );
306 NvOsFree( Irq );
307 return err_;
308 }
309
310 static NvError NvRmGpioConfigPins_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
311 {
312 NvError err_ = NvSuccess;
313 NvRmGpioConfigPins_in *p_in;
314 NvRmGpioConfigPins_out *p_out;
315 NvRmGpioPinHandle *pin = NULL;
316
317 p_in = (NvRmGpioConfigPins_in *)InBuffer;
318 p_out = (NvRmGpioConfigPins_out *)((NvU8 *)OutBuffer + OFFSET(NvRmGpioConfig Pins_params, out) - OFFSET(NvRmGpioConfigPins_params, inout));
319
320 if( p_in->pinCount && p_in->pin )
321 {
322 pin = (NvRmGpioPinHandle *)NvOsAlloc( p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
323 if( !pin )
324 {
325 err_ = NvError_InsufficientMemory;
326 goto clean;
327 }
328 if( p_in->pin )
329 {
330 err_ = NvOsCopyIn( pin, p_in->pin, p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
331 if( err_ != NvSuccess )
332 {
333 err_ = NvError_BadParameter;
334 goto clean;
335 }
336 }
337 }
338
339 p_out->ret_ = NvRmGpioConfigPins( p_in->hGpio, pin, p_in->pinCount, p_in->Mo de );
340
341 clean:
342 NvOsFree( pin );
343 return err_;
344 }
345
346 static NvError NvRmGpioReadPins_dispatch_( void *InBuffer, NvU32 InSize, void *O utBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
347 {
348 NvError err_ = NvSuccess;
349 NvRmGpioReadPins_in *p_in;
350 NvRmGpioPinHandle *pin = NULL;
351 NvRmGpioPinState *pPinState = NULL;
352
353 p_in = (NvRmGpioReadPins_in *)InBuffer;
354
355 if( p_in->pinCount && p_in->pin )
356 {
357 pin = (NvRmGpioPinHandle *)NvOsAlloc( p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
358 if( !pin )
359 {
360 err_ = NvError_InsufficientMemory;
361 goto clean;
362 }
363 if( p_in->pin )
364 {
365 err_ = NvOsCopyIn( pin, p_in->pin, p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
366 if( err_ != NvSuccess )
367 {
368 err_ = NvError_BadParameter;
369 goto clean;
370 }
371 }
372 }
373 if( p_in->pinCount && p_in->pPinState )
374 {
375 pPinState = (NvRmGpioPinState *)NvOsAlloc( p_in->pinCount * sizeof( NvR mGpioPinState ) );
376 if( !pPinState )
377 {
378 err_ = NvError_InsufficientMemory;
379 goto clean;
380 }
381 }
382
383 NvRmGpioReadPins( p_in->hGpio, pin, pPinState, p_in->pinCount );
384
385 if(p_in->pPinState && pPinState)
386 {
387 err_ = NvOsCopyOut( p_in->pPinState, pPinState, p_in->pinCount * sizeof( NvRmGpioPinState ) );
388 if( err_ != NvSuccess )
389 {
390 err_ = NvError_BadParameter;
391 }
392 }
393 clean:
394 NvOsFree( pin );
395 NvOsFree( pPinState );
396 return err_;
397 }
398
399 static NvError NvRmGpioWritePins_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
400 {
401 NvError err_ = NvSuccess;
402 NvRmGpioWritePins_in *p_in;
403 NvRmGpioPinHandle *pin = NULL;
404 NvRmGpioPinState *pinState = NULL;
405
406 p_in = (NvRmGpioWritePins_in *)InBuffer;
407
408 if( p_in->pinCount && p_in->pin )
409 {
410 pin = (NvRmGpioPinHandle *)NvOsAlloc( p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
411 if( !pin )
412 {
413 err_ = NvError_InsufficientMemory;
414 goto clean;
415 }
416 if( p_in->pin )
417 {
418 err_ = NvOsCopyIn( pin, p_in->pin, p_in->pinCount * sizeof( NvRmGpio PinHandle ) );
419 if( err_ != NvSuccess )
420 {
421 err_ = NvError_BadParameter;
422 goto clean;
423 }
424 }
425 }
426 if( p_in->pinCount && p_in->pinState )
427 {
428 pinState = (NvRmGpioPinState *)NvOsAlloc( p_in->pinCount * sizeof( NvRm GpioPinState ) );
429 if( !pinState )
430 {
431 err_ = NvError_InsufficientMemory;
432 goto clean;
433 }
434 if( p_in->pinState )
435 {
436 err_ = NvOsCopyIn( pinState, p_in->pinState, p_in->pinCount * sizeof ( NvRmGpioPinState ) );
437 if( err_ != NvSuccess )
438 {
439 err_ = NvError_BadParameter;
440 goto clean;
441 }
442 }
443 }
444
445 NvRmGpioWritePins( p_in->hGpio, pin, pinState, p_in->pinCount );
446
447 clean:
448 NvOsFree( pin );
449 NvOsFree( pinState );
450 return err_;
451 }
452
453 static NvError NvRmGpioReleasePinHandles_dispatch_( void *InBuffer, NvU32 InSize , void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
454 {
455 NvError err_ = NvSuccess;
456 NvRmGpioReleasePinHandles_in *p_in;
457 NvRmGpioPinHandle *hPin = NULL;
458
459 p_in = (NvRmGpioReleasePinHandles_in *)InBuffer;
460
461 if( p_in->pinCount && p_in->hPin )
462 {
463 hPin = (NvRmGpioPinHandle *)NvOsAlloc( p_in->pinCount * sizeof( NvRmGpi oPinHandle ) );
464 if( !hPin )
465 {
466 err_ = NvError_InsufficientMemory;
467 goto clean;
468 }
469 if( p_in->hPin )
470 {
471 err_ = NvOsCopyIn( hPin, p_in->hPin, p_in->pinCount * sizeof( NvRmGp ioPinHandle ) );
472 if( err_ != NvSuccess )
473 {
474 err_ = NvError_BadParameter;
475 goto clean;
476 }
477 }
478 }
479
480 NvRmGpioReleasePinHandles( p_in->hGpio, hPin, p_in->pinCount );
481
482 clean:
483 NvOsFree( hPin );
484 return err_;
485 }
486
487 static NvError NvRmGpioAcquirePinHandle_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
488 {
489 NvError err_ = NvSuccess;
490 NvRmGpioAcquirePinHandle_in *p_in;
491 NvRmGpioAcquirePinHandle_out *p_out;
492
493 p_in = (NvRmGpioAcquirePinHandle_in *)InBuffer;
494 p_out = (NvRmGpioAcquirePinHandle_out *)((NvU8 *)OutBuffer + OFFSET(NvRmGpio AcquirePinHandle_params, out) - OFFSET(NvRmGpioAcquirePinHandle_params, inout));
495
496
497 p_out->ret_ = NvRmGpioAcquirePinHandle( p_in->hGpio, p_in->port, p_in->pin, &p_out->phPin );
498
499 return err_;
500 }
501
502 static NvError NvRmGpioClose_dispatch_( void *InBuffer, NvU32 InSize, void *OutB uffer, NvU32 OutSize, NvDispatchCtx* Ctx )
503 {
504 NvError err_ = NvSuccess;
505 NvRmGpioClose_in *p_in;
506
507 p_in = (NvRmGpioClose_in *)InBuffer;
508
509
510 NvRmGpioClose( p_in->hGpio );
511
512 return err_;
513 }
514
515 static NvError NvRmGpioOpen_dispatch_( void *InBuffer, NvU32 InSize, void *OutBu ffer, NvU32 OutSize, NvDispatchCtx* Ctx )
516 {
517 NvError err_ = NvSuccess;
518 NvRmGpioOpen_in *p_in;
519 NvRmGpioOpen_out *p_out;
520
521 p_in = (NvRmGpioOpen_in *)InBuffer;
522 p_out = (NvRmGpioOpen_out *)((NvU8 *)OutBuffer + OFFSET(NvRmGpioOpen_params, out) - OFFSET(NvRmGpioOpen_params, inout));
523
524
525 p_out->ret_ = NvRmGpioOpen( p_in->hRmDevice, &p_out->phGpio );
526
527 return err_;
528 }
529
530 NvError nvrm_gpio_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx );
531 NvError nvrm_gpio_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
532 {
533 NvError err_ = NvSuccess;
534
535 switch( function ) {
536 case 7:
537 err_ = NvRmGpioGetIrqs_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
538 break;
539 case 6:
540 err_ = NvRmGpioConfigPins_dispatch_( InBuffer, InSize, OutBuffer, OutSiz e, Ctx );
541 break;
542 case 5:
543 err_ = NvRmGpioReadPins_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
544 break;
545 case 4:
546 err_ = NvRmGpioWritePins_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
547 break;
548 case 3:
549 err_ = NvRmGpioReleasePinHandles_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
550 break;
551 case 2:
552 err_ = NvRmGpioAcquirePinHandle_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
553 break;
554 case 1:
555 err_ = NvRmGpioClose_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ct x );
556 break;
557 case 0:
558 err_ = NvRmGpioOpen_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
559 break;
560 default:
561 err_ = NvError_BadParameter;
562 break;
563 }
564
565 return err_;
566 }
OLDNEW
« no previous file with comments | « arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_dma_dispatch.c ('k') | arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_i2c_dispatch.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698