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

Side by Side Diff: arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_transport_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 #define NV_IDL_IS_DISPATCH
3
4 /*
5 * Copyright (c) 2010 NVIDIA Corporation.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NVIDIA Corporation nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 #include "nvcommon.h"
37 #include "nvos.h"
38 #include "nvassert.h"
39 #include "nvreftrack.h"
40 #include "nvidlcmd.h"
41 #include "nvrm_transport.h"
42
43 #define OFFSET( s, e ) (NvU32)(void *)(&(((s*)0)->e))
44 #define MAX_MESSAGE_LENGTH 256
45 #define MAX_PORT_NAME_LENGTH 20
46
47 typedef struct NvRmTransportRecvMsg_in_t
48 {
49 NvU32 package_;
50 NvU32 function_;
51 NvRmTransportHandle hTransport;
52 void* pMessageBuffer;
53 NvU32 MaxSize;
54 } NV_ALIGN(4) NvRmTransportRecvMsg_in;
55
56 typedef struct NvRmTransportRecvMsg_inout_t
57 {
58 NvU32 dummy_;
59 } NV_ALIGN(4) NvRmTransportRecvMsg_inout;
60
61 typedef struct NvRmTransportRecvMsg_out_t
62 {
63 NvError ret_;
64 NvU32 pMessageSize;
65 } NV_ALIGN(4) NvRmTransportRecvMsg_out;
66
67 typedef struct NvRmTransportRecvMsg_params_t
68 {
69 NvRmTransportRecvMsg_in in;
70 NvRmTransportRecvMsg_inout inout;
71 NvRmTransportRecvMsg_out out;
72 } NvRmTransportRecvMsg_params;
73
74 typedef struct NvRmTransportSendMsgInLP0_in_t
75 {
76 NvU32 package_;
77 NvU32 function_;
78 NvRmTransportHandle hPort;
79 void* message;
80 NvU32 MessageSize;
81 } NV_ALIGN(4) NvRmTransportSendMsgInLP0_in;
82
83 typedef struct NvRmTransportSendMsgInLP0_inout_t
84 {
85 NvU32 dummy_;
86 } NV_ALIGN(4) NvRmTransportSendMsgInLP0_inout;
87
88 typedef struct NvRmTransportSendMsgInLP0_out_t
89 {
90 NvError ret_;
91 } NV_ALIGN(4) NvRmTransportSendMsgInLP0_out;
92
93 typedef struct NvRmTransportSendMsgInLP0_params_t
94 {
95 NvRmTransportSendMsgInLP0_in in;
96 NvRmTransportSendMsgInLP0_inout inout;
97 NvRmTransportSendMsgInLP0_out out;
98 } NvRmTransportSendMsgInLP0_params;
99
100 typedef struct NvRmTransportSendMsg_in_t
101 {
102 NvU32 package_;
103 NvU32 function_;
104 NvRmTransportHandle hTransport;
105 void* pMessageBuffer;
106 NvU32 MessageSize;
107 NvU32 TimeoutMS;
108 } NV_ALIGN(4) NvRmTransportSendMsg_in;
109
110 typedef struct NvRmTransportSendMsg_inout_t
111 {
112 NvU32 dummy_;
113 } NV_ALIGN(4) NvRmTransportSendMsg_inout;
114
115 typedef struct NvRmTransportSendMsg_out_t
116 {
117 NvError ret_;
118 } NV_ALIGN(4) NvRmTransportSendMsg_out;
119
120 typedef struct NvRmTransportSendMsg_params_t
121 {
122 NvRmTransportSendMsg_in in;
123 NvRmTransportSendMsg_inout inout;
124 NvRmTransportSendMsg_out out;
125 } NvRmTransportSendMsg_params;
126
127 typedef struct NvRmTransportSetQueueDepth_in_t
128 {
129 NvU32 package_;
130 NvU32 function_;
131 NvRmTransportHandle hTransport;
132 NvU32 MaxQueueDepth;
133 NvU32 MaxMessageSize;
134 } NV_ALIGN(4) NvRmTransportSetQueueDepth_in;
135
136 typedef struct NvRmTransportSetQueueDepth_inout_t
137 {
138 NvU32 dummy_;
139 } NV_ALIGN(4) NvRmTransportSetQueueDepth_inout;
140
141 typedef struct NvRmTransportSetQueueDepth_out_t
142 {
143 NvError ret_;
144 } NV_ALIGN(4) NvRmTransportSetQueueDepth_out;
145
146 typedef struct NvRmTransportSetQueueDepth_params_t
147 {
148 NvRmTransportSetQueueDepth_in in;
149 NvRmTransportSetQueueDepth_inout inout;
150 NvRmTransportSetQueueDepth_out out;
151 } NvRmTransportSetQueueDepth_params;
152
153 typedef struct NvRmTransportConnect_in_t
154 {
155 NvU32 package_;
156 NvU32 function_;
157 NvRmTransportHandle hTransport;
158 NvU32 TimeoutMS;
159 } NV_ALIGN(4) NvRmTransportConnect_in;
160
161 typedef struct NvRmTransportConnect_inout_t
162 {
163 NvU32 dummy_;
164 } NV_ALIGN(4) NvRmTransportConnect_inout;
165
166 typedef struct NvRmTransportConnect_out_t
167 {
168 NvError ret_;
169 } NV_ALIGN(4) NvRmTransportConnect_out;
170
171 typedef struct NvRmTransportConnect_params_t
172 {
173 NvRmTransportConnect_in in;
174 NvRmTransportConnect_inout inout;
175 NvRmTransportConnect_out out;
176 } NvRmTransportConnect_params;
177
178 typedef struct NvRmTransportWaitForConnect_in_t
179 {
180 NvU32 package_;
181 NvU32 function_;
182 NvRmTransportHandle hTransport;
183 NvU32 TimeoutMS;
184 } NV_ALIGN(4) NvRmTransportWaitForConnect_in;
185
186 typedef struct NvRmTransportWaitForConnect_inout_t
187 {
188 NvU32 dummy_;
189 } NV_ALIGN(4) NvRmTransportWaitForConnect_inout;
190
191 typedef struct NvRmTransportWaitForConnect_out_t
192 {
193 NvError ret_;
194 } NV_ALIGN(4) NvRmTransportWaitForConnect_out;
195
196 typedef struct NvRmTransportWaitForConnect_params_t
197 {
198 NvRmTransportWaitForConnect_in in;
199 NvRmTransportWaitForConnect_inout inout;
200 NvRmTransportWaitForConnect_out out;
201 } NvRmTransportWaitForConnect_params;
202
203 typedef struct NvRmTransportDeInit_in_t
204 {
205 NvU32 package_;
206 NvU32 function_;
207 NvRmDeviceHandle hRmDevice;
208 } NV_ALIGN(4) NvRmTransportDeInit_in;
209
210 typedef struct NvRmTransportDeInit_inout_t
211 {
212 NvU32 dummy_;
213 } NV_ALIGN(4) NvRmTransportDeInit_inout;
214
215 typedef struct NvRmTransportDeInit_out_t
216 {
217 NvU32 dummy_;
218 } NV_ALIGN(4) NvRmTransportDeInit_out;
219
220 typedef struct NvRmTransportDeInit_params_t
221 {
222 NvRmTransportDeInit_in in;
223 NvRmTransportDeInit_inout inout;
224 NvRmTransportDeInit_out out;
225 } NvRmTransportDeInit_params;
226
227 typedef struct NvRmTransportInit_in_t
228 {
229 NvU32 package_;
230 NvU32 function_;
231 NvRmDeviceHandle hRmDevice;
232 } NV_ALIGN(4) NvRmTransportInit_in;
233
234 typedef struct NvRmTransportInit_inout_t
235 {
236 NvU32 dummy_;
237 } NV_ALIGN(4) NvRmTransportInit_inout;
238
239 typedef struct NvRmTransportInit_out_t
240 {
241 NvError ret_;
242 } NV_ALIGN(4) NvRmTransportInit_out;
243
244 typedef struct NvRmTransportInit_params_t
245 {
246 NvRmTransportInit_in in;
247 NvRmTransportInit_inout inout;
248 NvRmTransportInit_out out;
249 } NvRmTransportInit_params;
250
251 typedef struct NvRmTransportClose_in_t
252 {
253 NvU32 package_;
254 NvU32 function_;
255 NvRmTransportHandle hTransport;
256 } NV_ALIGN(4) NvRmTransportClose_in;
257
258 typedef struct NvRmTransportClose_inout_t
259 {
260 NvU32 dummy_;
261 } NV_ALIGN(4) NvRmTransportClose_inout;
262
263 typedef struct NvRmTransportClose_out_t
264 {
265 NvU32 dummy_;
266 } NV_ALIGN(4) NvRmTransportClose_out;
267
268 typedef struct NvRmTransportClose_params_t
269 {
270 NvRmTransportClose_in in;
271 NvRmTransportClose_inout inout;
272 NvRmTransportClose_out out;
273 } NvRmTransportClose_params;
274
275 typedef struct NvRmTransportGetPortName_in_t
276 {
277 NvU32 package_;
278 NvU32 function_;
279 NvRmTransportHandle hTransport;
280 NvU8 * PortName;
281 NvU32 PortNameSize;
282 } NV_ALIGN(4) NvRmTransportGetPortName_in;
283
284 typedef struct NvRmTransportGetPortName_inout_t
285 {
286 NvU32 dummy_;
287 } NV_ALIGN(4) NvRmTransportGetPortName_inout;
288
289 typedef struct NvRmTransportGetPortName_out_t
290 {
291 NvU32 dummy_;
292 } NV_ALIGN(4) NvRmTransportGetPortName_out;
293
294 typedef struct NvRmTransportGetPortName_params_t
295 {
296 NvRmTransportGetPortName_in in;
297 NvRmTransportGetPortName_inout inout;
298 NvRmTransportGetPortName_out out;
299 } NvRmTransportGetPortName_params;
300
301 typedef struct NvRmTransportOpen_in_t
302 {
303 NvU32 package_;
304 NvU32 function_;
305 NvRmDeviceHandle hRmDevice;
306 char * pPortName_data;
307 NvU32 pPortName_len;
308 NvOsSemaphoreHandle RecvMessageSemaphore;
309 } NV_ALIGN(4) NvRmTransportOpen_in;
310
311 typedef struct NvRmTransportOpen_inout_t
312 {
313 NvU32 dummy_;
314 } NV_ALIGN(4) NvRmTransportOpen_inout;
315
316 typedef struct NvRmTransportOpen_out_t
317 {
318 NvError ret_;
319 NvRmTransportHandle phTransport;
320 } NV_ALIGN(4) NvRmTransportOpen_out;
321
322 typedef struct NvRmTransportOpen_params_t
323 {
324 NvRmTransportOpen_in in;
325 NvRmTransportOpen_inout inout;
326 NvRmTransportOpen_out out;
327 } NvRmTransportOpen_params;
328
329 static NvError NvRmTransportRecvMsg_dispatch_( void *InBuffer, NvU32 InSize, voi d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
330 {
331 NvError err_ = NvSuccess;
332 NvRmTransportRecvMsg_in *p_in;
333 NvRmTransportRecvMsg_out *p_out;
334 void* pMessageBuffer = NULL;
335 NvU32 MsgBuff[MAX_MESSAGE_LENGTH/sizeof(NvU32)];
336
337 p_in = (NvRmTransportRecvMsg_in *)InBuffer;
338 p_out = (NvRmTransportRecvMsg_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTranspor tRecvMsg_params, out) - OFFSET(NvRmTransportRecvMsg_params, inout));
339
340 if( p_in->MaxSize && p_in->pMessageBuffer )
341 {
342 pMessageBuffer = (void* )MsgBuff;
343 if( p_in->MaxSize > MAX_MESSAGE_LENGTH )
344 pMessageBuffer = (void* )NvOsAlloc( p_in->MaxSize );
345 if( !pMessageBuffer )
346 {
347 err_ = NvError_InsufficientMemory;
348 goto clean;
349 }
350 }
351
352 p_out->ret_ = NvRmTransportRecvMsg( p_in->hTransport, pMessageBuffer, p_in-> MaxSize, &p_out->pMessageSize );
353
354 if(p_in->pMessageBuffer && pMessageBuffer)
355 {
356 err_ = NvOsCopyOut( p_in->pMessageBuffer, pMessageBuffer, p_in->MaxSize );
357 if( err_ != NvSuccess )
358 {
359 err_ = NvError_BadParameter;
360 }
361 }
362 clean:
363 if (pMessageBuffer != MsgBuff)
364 NvOsFree( pMessageBuffer );
365 return err_;
366 }
367
368 static NvError NvRmTransportSendMsgInLP0_dispatch_( void *InBuffer, NvU32 InSize , void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
369 {
370 NvError err_ = NvSuccess;
371 NvRmTransportSendMsgInLP0_in *p_in;
372 NvRmTransportSendMsgInLP0_out *p_out;
373 void* message = NULL;
374 NvU32 MsgBuff[MAX_MESSAGE_LENGTH/sizeof(NvU32)];
375
376 p_in = (NvRmTransportSendMsgInLP0_in *)InBuffer;
377 p_out = (NvRmTransportSendMsgInLP0_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTra nsportSendMsgInLP0_params, out) - OFFSET(NvRmTransportSendMsgInLP0_params, inout ));
378
379 if( p_in->MessageSize && p_in->message )
380 {
381 message = (void* )MsgBuff;
382 if( p_in->MessageSize > MAX_MESSAGE_LENGTH )
383 message = (void* )NvOsAlloc( p_in->MessageSize );
384 if( !message )
385 {
386 err_ = NvError_InsufficientMemory;
387 goto clean;
388 }
389 if( p_in->message )
390 {
391 err_ = NvOsCopyIn( message, p_in->message, p_in->MessageSize );
392 if( err_ != NvSuccess )
393 {
394 err_ = NvError_BadParameter;
395 goto clean;
396 }
397 }
398 }
399
400 p_out->ret_ = NvRmTransportSendMsgInLP0( p_in->hPort, message, p_in->Message Size );
401
402 clean:
403 if( message != MsgBuff )
404 NvOsFree( message );
405 return err_;
406 }
407
408 static NvError NvRmTransportSendMsg_dispatch_( void *InBuffer, NvU32 InSize, voi d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
409 {
410 NvError err_ = NvSuccess;
411 NvRmTransportSendMsg_in *p_in;
412 NvRmTransportSendMsg_out *p_out;
413 void* pMessageBuffer = NULL;
414 NvU32 MsgBuff[MAX_MESSAGE_LENGTH/sizeof(NvU32)];
415
416 p_in = (NvRmTransportSendMsg_in *)InBuffer;
417 p_out = (NvRmTransportSendMsg_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTranspor tSendMsg_params, out) - OFFSET(NvRmTransportSendMsg_params, inout));
418
419 if( p_in->MessageSize && p_in->pMessageBuffer )
420 {
421 pMessageBuffer = (void* )&MsgBuff[0];
422 if( p_in->MessageSize > MAX_MESSAGE_LENGTH )
423 pMessageBuffer = (void* )NvOsAlloc( p_in->MessageSize );
424 if( !pMessageBuffer )
425 {
426 err_ = NvError_InsufficientMemory;
427 goto clean;
428 }
429 if( p_in->pMessageBuffer )
430 {
431 err_ = NvOsCopyIn( pMessageBuffer, p_in->pMessageBuffer, p_in->Messa geSize );
432 if( err_ != NvSuccess )
433 {
434 err_ = NvError_BadParameter;
435 goto clean;
436 }
437 }
438 }
439
440 p_out->ret_ = NvRmTransportSendMsg( p_in->hTransport, pMessageBuffer, p_in-> MessageSize, p_in->TimeoutMS );
441
442 clean:
443 if( pMessageBuffer != MsgBuff )
444 NvOsFree( pMessageBuffer );
445 return err_;
446 }
447
448 static NvError NvRmTransportSetQueueDepth_dispatch_( void *InBuffer, NvU32 InSiz e, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
449 {
450 NvError err_ = NvSuccess;
451 NvRmTransportSetQueueDepth_in *p_in;
452 NvRmTransportSetQueueDepth_out *p_out;
453
454 p_in = (NvRmTransportSetQueueDepth_in *)InBuffer;
455 p_out = (NvRmTransportSetQueueDepth_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTr ansportSetQueueDepth_params, out) - OFFSET(NvRmTransportSetQueueDepth_params, in out));
456
457
458 p_out->ret_ = NvRmTransportSetQueueDepth( p_in->hTransport, p_in->MaxQueueDe pth, p_in->MaxMessageSize );
459
460 return err_;
461 }
462
463 static NvError NvRmTransportConnect_dispatch_( void *InBuffer, NvU32 InSize, voi d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
464 {
465 NvError err_ = NvSuccess;
466 NvRmTransportConnect_in *p_in;
467 NvRmTransportConnect_out *p_out;
468
469 p_in = (NvRmTransportConnect_in *)InBuffer;
470 p_out = (NvRmTransportConnect_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTranspor tConnect_params, out) - OFFSET(NvRmTransportConnect_params, inout));
471
472
473 p_out->ret_ = NvRmTransportConnect( p_in->hTransport, p_in->TimeoutMS );
474
475 return err_;
476 }
477
478 static NvError NvRmTransportWaitForConnect_dispatch_( void *InBuffer, NvU32 InSi ze, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
479 {
480 NvError err_ = NvSuccess;
481 NvRmTransportWaitForConnect_in *p_in;
482 NvRmTransportWaitForConnect_out *p_out;
483
484 p_in = (NvRmTransportWaitForConnect_in *)InBuffer;
485 p_out = (NvRmTransportWaitForConnect_out *)((NvU8 *)OutBuffer + OFFSET(NvRmT ransportWaitForConnect_params, out) - OFFSET(NvRmTransportWaitForConnect_params, inout));
486
487
488 p_out->ret_ = NvRmTransportWaitForConnect( p_in->hTransport, p_in->TimeoutMS );
489
490 return err_;
491 }
492
493 static NvError NvRmTransportDeInit_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
494 {
495 NvError err_ = NvSuccess;
496 NvRmTransportDeInit_in *p_in;
497
498 p_in = (NvRmTransportDeInit_in *)InBuffer;
499
500
501 NvRmTransportDeInit( p_in->hRmDevice );
502
503 return err_;
504 }
505
506 static NvError NvRmTransportInit_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
507 {
508 NvError err_ = NvSuccess;
509 NvRmTransportInit_in *p_in;
510 NvRmTransportInit_out *p_out;
511
512 p_in = (NvRmTransportInit_in *)InBuffer;
513 p_out = (NvRmTransportInit_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTransportIn it_params, out) - OFFSET(NvRmTransportInit_params, inout));
514
515
516 p_out->ret_ = NvRmTransportInit( p_in->hRmDevice );
517
518 return err_;
519 }
520
521 static NvError NvRmTransportClose_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
522 {
523 NvError err_ = NvSuccess;
524 NvRmTransportClose_in *p_in;
525
526 p_in = (NvRmTransportClose_in *)InBuffer;
527
528
529 NvRmTransportClose( p_in->hTransport );
530
531 return err_;
532 }
533
534 static NvError NvRmTransportGetPortName_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
535 {
536 NvError err_ = NvSuccess;
537 NvRmTransportGetPortName_in *p_in;
538 NvU8 *PortName = NULL;
539 NvU32 PortNameBuff[MAX_PORT_NAME_LENGTH/sizeof(NvU32)];
540
541 p_in = (NvRmTransportGetPortName_in *)InBuffer;
542
543 if( p_in->PortNameSize && p_in->PortName )
544 {
545 PortName = (NvU8 *)PortNameBuff;
546 if( (p_in->PortNameSize * sizeof(NvU8)) > MAX_PORT_NAME_LENGTH )
547 PortName = (NvU8 *)NvOsAlloc( p_in->PortNameSize * sizeof( NvU8 ) );
548 if( !PortName )
549 {
550 err_ = NvError_InsufficientMemory;
551 goto clean;
552 }
553 if( p_in->PortName )
554 {
555 err_ = NvOsCopyIn( PortName, p_in->PortName, p_in->PortNameSize * si zeof( NvU8 ) );
556 if( err_ != NvSuccess )
557 {
558 err_ = NvError_BadParameter;
559 goto clean;
560 }
561 }
562 }
563
564 NvRmTransportGetPortName( p_in->hTransport, PortName, p_in->PortNameSize );
565
566 if(p_in->PortName && PortName)
567 {
568 err_ = NvOsCopyOut( p_in->PortName, PortName, p_in->PortNameSize * sizeo f( NvU8 ) );
569 if( err_ != NvSuccess )
570 {
571 err_ = NvError_BadParameter;
572 }
573 }
574 clean:
575 if ( PortName != PortNameBuff )
576 NvOsFree( PortName );
577 return err_;
578 }
579
580 static NvError NvRmTransportOpen_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
581 {
582 NvError err_ = NvSuccess;
583 NvRmTransportOpen_in *p_in;
584 NvRmTransportOpen_out *p_out;
585 char *pPortName = NULL;
586 NvOsSemaphoreHandle RecvMessageSemaphore = NULL;
587 NvU32 PortNameBuff[MAX_PORT_NAME_LENGTH/sizeof(NvU32)];
588
589 p_in = (NvRmTransportOpen_in *)InBuffer;
590 p_out = (NvRmTransportOpen_out *)((NvU8 *)OutBuffer + OFFSET(NvRmTransportOp en_params, out) - OFFSET(NvRmTransportOpen_params, inout));
591
592 if( p_in->pPortName_len )
593 {
594 pPortName = (char *)PortNameBuff;
595 if( p_in->pPortName_len > MAX_PORT_NAME_LENGTH )
596 pPortName = NvOsAlloc( p_in->pPortName_len );
597 if( !pPortName )
598 {
599 err_ = NvError_InsufficientMemory;
600 goto clean;
601 }
602 err_ = NvOsCopyIn( pPortName, p_in->pPortName_data, p_in->pPortName_len );
603 if( err_ != NvSuccess )
604 {
605 err_ = NvError_BadParameter;
606 goto clean;
607 }
608 if( pPortName[p_in->pPortName_len - 1] != 0 )
609 {
610 err_ = NvError_BadParameter;
611 goto clean;
612 }
613 }
614 if( p_in->RecvMessageSemaphore )
615 {
616 err_ = NvOsSemaphoreUnmarshal( p_in->RecvMessageSemaphore, &RecvMessageS emaphore );
617 if( err_ != NvSuccess )
618 {
619 err_ = NvError_BadParameter;
620 goto clean;
621 }
622 }
623
624 p_out->ret_ = NvRmTransportOpen( p_in->hRmDevice, pPortName, RecvMessageSema phore, &p_out->phTransport );
625
626 clean:
627 if( pPortName != PortNameBuff )
628 NvOsFree( pPortName );
629 NvOsSemaphoreDestroy( RecvMessageSemaphore );
630 return err_;
631 }
632
633 NvError nvrm_transport_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx );
634 NvError nvrm_transport_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
635 {
636 NvError err_ = NvSuccess;
637
638 switch( function ) {
639 case 10:
640 err_ = NvRmTransportRecvMsg_dispatch_( InBuffer, InSize, OutBuffer, OutS ize, Ctx );
641 break;
642 case 9:
643 err_ = NvRmTransportSendMsgInLP0_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
644 break;
645 case 8:
646 err_ = NvRmTransportSendMsg_dispatch_( InBuffer, InSize, OutBuffer, OutS ize, Ctx );
647 break;
648 case 7:
649 err_ = NvRmTransportSetQueueDepth_dispatch_( InBuffer, InSize, OutBuffer , OutSize, Ctx );
650 break;
651 case 6:
652 err_ = NvRmTransportConnect_dispatch_( InBuffer, InSize, OutBuffer, OutS ize, Ctx );
653 break;
654 case 5:
655 err_ = NvRmTransportWaitForConnect_dispatch_( InBuffer, InSize, OutBuffe r, OutSize, Ctx );
656 break;
657 case 4:
658 err_ = NvRmTransportDeInit_dispatch_( InBuffer, InSize, OutBuffer, OutSi ze, Ctx );
659 break;
660 case 3:
661 err_ = NvRmTransportInit_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
662 break;
663 case 2:
664 err_ = NvRmTransportClose_dispatch_( InBuffer, InSize, OutBuffer, OutSiz e, Ctx );
665 break;
666 case 1:
667 err_ = NvRmTransportGetPortName_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
668 break;
669 case 0:
670 err_ = NvRmTransportOpen_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
671 break;
672 default:
673 err_ = NvError_BadParameter;
674 break;
675 }
676
677 return err_;
678 }
OLDNEW
« no previous file with comments | « arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_spi_dispatch.c ('k') | arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_xpc_dispatch.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698