OLD | NEW |
(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 } |
OLD | NEW |