OLD | NEW |
(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_xpc.h" |
| 42 |
| 43 #define OFFSET( s, e ) (NvU32)(void *)(&(((s*)0)->e)) |
| 44 |
| 45 |
| 46 typedef struct NvRmXpcModuleRelease_in_t |
| 47 { |
| 48 NvU32 package_; |
| 49 NvU32 function_; |
| 50 NvRmModuleID modId; |
| 51 } NV_ALIGN(4) NvRmXpcModuleRelease_in; |
| 52 |
| 53 typedef struct NvRmXpcModuleRelease_inout_t |
| 54 { |
| 55 NvU32 dummy_; |
| 56 } NV_ALIGN(4) NvRmXpcModuleRelease_inout; |
| 57 |
| 58 typedef struct NvRmXpcModuleRelease_out_t |
| 59 { |
| 60 NvU32 dummy_; |
| 61 } NV_ALIGN(4) NvRmXpcModuleRelease_out; |
| 62 |
| 63 typedef struct NvRmXpcModuleRelease_params_t |
| 64 { |
| 65 NvRmXpcModuleRelease_in in; |
| 66 NvRmXpcModuleRelease_inout inout; |
| 67 NvRmXpcModuleRelease_out out; |
| 68 } NvRmXpcModuleRelease_params; |
| 69 |
| 70 typedef struct NvRmXpcModuleAcquire_in_t |
| 71 { |
| 72 NvU32 package_; |
| 73 NvU32 function_; |
| 74 NvRmModuleID modId; |
| 75 } NV_ALIGN(4) NvRmXpcModuleAcquire_in; |
| 76 |
| 77 typedef struct NvRmXpcModuleAcquire_inout_t |
| 78 { |
| 79 NvU32 dummy_; |
| 80 } NV_ALIGN(4) NvRmXpcModuleAcquire_inout; |
| 81 |
| 82 typedef struct NvRmXpcModuleAcquire_out_t |
| 83 { |
| 84 NvU32 dummy_; |
| 85 } NV_ALIGN(4) NvRmXpcModuleAcquire_out; |
| 86 |
| 87 typedef struct NvRmXpcModuleAcquire_params_t |
| 88 { |
| 89 NvRmXpcModuleAcquire_in in; |
| 90 NvRmXpcModuleAcquire_inout inout; |
| 91 NvRmXpcModuleAcquire_out out; |
| 92 } NvRmXpcModuleAcquire_params; |
| 93 |
| 94 typedef struct NvRmXpcInitArbSemaSystem_in_t |
| 95 { |
| 96 NvU32 package_; |
| 97 NvU32 function_; |
| 98 NvRmDeviceHandle hDevice; |
| 99 } NV_ALIGN(4) NvRmXpcInitArbSemaSystem_in; |
| 100 |
| 101 typedef struct NvRmXpcInitArbSemaSystem_inout_t |
| 102 { |
| 103 NvU32 dummy_; |
| 104 } NV_ALIGN(4) NvRmXpcInitArbSemaSystem_inout; |
| 105 |
| 106 typedef struct NvRmXpcInitArbSemaSystem_out_t |
| 107 { |
| 108 NvError ret_; |
| 109 } NV_ALIGN(4) NvRmXpcInitArbSemaSystem_out; |
| 110 |
| 111 typedef struct NvRmXpcInitArbSemaSystem_params_t |
| 112 { |
| 113 NvRmXpcInitArbSemaSystem_in in; |
| 114 NvRmXpcInitArbSemaSystem_inout inout; |
| 115 NvRmXpcInitArbSemaSystem_out out; |
| 116 } NvRmXpcInitArbSemaSystem_params; |
| 117 |
| 118 typedef struct NvRmPrivXpcGetMessage_in_t |
| 119 { |
| 120 NvU32 package_; |
| 121 NvU32 function_; |
| 122 NvRmPrivXpcMessageHandle hXpcMessage; |
| 123 } NV_ALIGN(4) NvRmPrivXpcGetMessage_in; |
| 124 |
| 125 typedef struct NvRmPrivXpcGetMessage_inout_t |
| 126 { |
| 127 NvU32 dummy_; |
| 128 } NV_ALIGN(4) NvRmPrivXpcGetMessage_inout; |
| 129 |
| 130 typedef struct NvRmPrivXpcGetMessage_out_t |
| 131 { |
| 132 NvU32 ret_; |
| 133 } NV_ALIGN(4) NvRmPrivXpcGetMessage_out; |
| 134 |
| 135 typedef struct NvRmPrivXpcGetMessage_params_t |
| 136 { |
| 137 NvRmPrivXpcGetMessage_in in; |
| 138 NvRmPrivXpcGetMessage_inout inout; |
| 139 NvRmPrivXpcGetMessage_out out; |
| 140 } NvRmPrivXpcGetMessage_params; |
| 141 |
| 142 typedef struct NvRmPrivXpcSendMessage_in_t |
| 143 { |
| 144 NvU32 package_; |
| 145 NvU32 function_; |
| 146 NvRmPrivXpcMessageHandle hXpcMessage; |
| 147 NvU32 data; |
| 148 } NV_ALIGN(4) NvRmPrivXpcSendMessage_in; |
| 149 |
| 150 typedef struct NvRmPrivXpcSendMessage_inout_t |
| 151 { |
| 152 NvU32 dummy_; |
| 153 } NV_ALIGN(4) NvRmPrivXpcSendMessage_inout; |
| 154 |
| 155 typedef struct NvRmPrivXpcSendMessage_out_t |
| 156 { |
| 157 NvError ret_; |
| 158 } NV_ALIGN(4) NvRmPrivXpcSendMessage_out; |
| 159 |
| 160 typedef struct NvRmPrivXpcSendMessage_params_t |
| 161 { |
| 162 NvRmPrivXpcSendMessage_in in; |
| 163 NvRmPrivXpcSendMessage_inout inout; |
| 164 NvRmPrivXpcSendMessage_out out; |
| 165 } NvRmPrivXpcSendMessage_params; |
| 166 |
| 167 typedef struct NvRmPrivXpcDestroy_in_t |
| 168 { |
| 169 NvU32 package_; |
| 170 NvU32 function_; |
| 171 NvRmPrivXpcMessageHandle hXpcMessage; |
| 172 } NV_ALIGN(4) NvRmPrivXpcDestroy_in; |
| 173 |
| 174 typedef struct NvRmPrivXpcDestroy_inout_t |
| 175 { |
| 176 NvU32 dummy_; |
| 177 } NV_ALIGN(4) NvRmPrivXpcDestroy_inout; |
| 178 |
| 179 typedef struct NvRmPrivXpcDestroy_out_t |
| 180 { |
| 181 NvU32 dummy_; |
| 182 } NV_ALIGN(4) NvRmPrivXpcDestroy_out; |
| 183 |
| 184 typedef struct NvRmPrivXpcDestroy_params_t |
| 185 { |
| 186 NvRmPrivXpcDestroy_in in; |
| 187 NvRmPrivXpcDestroy_inout inout; |
| 188 NvRmPrivXpcDestroy_out out; |
| 189 } NvRmPrivXpcDestroy_params; |
| 190 |
| 191 typedef struct NvRmPrivXpcCreate_in_t |
| 192 { |
| 193 NvU32 package_; |
| 194 NvU32 function_; |
| 195 NvRmDeviceHandle hDevice; |
| 196 } NV_ALIGN(4) NvRmPrivXpcCreate_in; |
| 197 |
| 198 typedef struct NvRmPrivXpcCreate_inout_t |
| 199 { |
| 200 NvU32 dummy_; |
| 201 } NV_ALIGN(4) NvRmPrivXpcCreate_inout; |
| 202 |
| 203 typedef struct NvRmPrivXpcCreate_out_t |
| 204 { |
| 205 NvError ret_; |
| 206 NvRmPrivXpcMessageHandle phXpcMessage; |
| 207 } NV_ALIGN(4) NvRmPrivXpcCreate_out; |
| 208 |
| 209 typedef struct NvRmPrivXpcCreate_params_t |
| 210 { |
| 211 NvRmPrivXpcCreate_in in; |
| 212 NvRmPrivXpcCreate_inout inout; |
| 213 NvRmPrivXpcCreate_out out; |
| 214 } NvRmPrivXpcCreate_params; |
| 215 |
| 216 static NvError NvRmXpcModuleRelease_dispatch_( void *InBuffer, NvU32 InSize, voi
d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 217 { |
| 218 NvError err_ = NvSuccess; |
| 219 NvRmXpcModuleRelease_in *p_in; |
| 220 |
| 221 p_in = (NvRmXpcModuleRelease_in *)InBuffer; |
| 222 |
| 223 |
| 224 NvRmXpcModuleRelease( p_in->modId ); |
| 225 |
| 226 return err_; |
| 227 } |
| 228 |
| 229 static NvError NvRmXpcModuleAcquire_dispatch_( void *InBuffer, NvU32 InSize, voi
d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 230 { |
| 231 NvError err_ = NvSuccess; |
| 232 NvRmXpcModuleAcquire_in *p_in; |
| 233 |
| 234 p_in = (NvRmXpcModuleAcquire_in *)InBuffer; |
| 235 |
| 236 |
| 237 NvRmXpcModuleAcquire( p_in->modId ); |
| 238 |
| 239 return err_; |
| 240 } |
| 241 |
| 242 static NvError NvRmXpcInitArbSemaSystem_dispatch_( void *InBuffer, NvU32 InSize,
void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 243 { |
| 244 NvError err_ = NvSuccess; |
| 245 NvRmXpcInitArbSemaSystem_in *p_in; |
| 246 NvRmXpcInitArbSemaSystem_out *p_out; |
| 247 |
| 248 p_in = (NvRmXpcInitArbSemaSystem_in *)InBuffer; |
| 249 p_out = (NvRmXpcInitArbSemaSystem_out *)((NvU8 *)OutBuffer + OFFSET(NvRmXpcI
nitArbSemaSystem_params, out) - OFFSET(NvRmXpcInitArbSemaSystem_params, inout)); |
| 250 |
| 251 |
| 252 p_out->ret_ = NvRmXpcInitArbSemaSystem( p_in->hDevice ); |
| 253 |
| 254 return err_; |
| 255 } |
| 256 |
| 257 static NvError NvRmPrivXpcGetMessage_dispatch_( void *InBuffer, NvU32 InSize, vo
id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 258 { |
| 259 NvError err_ = NvSuccess; |
| 260 NvRmPrivXpcGetMessage_in *p_in; |
| 261 NvRmPrivXpcGetMessage_out *p_out; |
| 262 |
| 263 p_in = (NvRmPrivXpcGetMessage_in *)InBuffer; |
| 264 p_out = (NvRmPrivXpcGetMessage_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPrivXpc
GetMessage_params, out) - OFFSET(NvRmPrivXpcGetMessage_params, inout)); |
| 265 |
| 266 |
| 267 p_out->ret_ = NvRmPrivXpcGetMessage( p_in->hXpcMessage ); |
| 268 |
| 269 return err_; |
| 270 } |
| 271 |
| 272 static NvError NvRmPrivXpcSendMessage_dispatch_( void *InBuffer, NvU32 InSize, v
oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 273 { |
| 274 NvError err_ = NvSuccess; |
| 275 NvRmPrivXpcSendMessage_in *p_in; |
| 276 NvRmPrivXpcSendMessage_out *p_out; |
| 277 |
| 278 p_in = (NvRmPrivXpcSendMessage_in *)InBuffer; |
| 279 p_out = (NvRmPrivXpcSendMessage_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPrivXp
cSendMessage_params, out) - OFFSET(NvRmPrivXpcSendMessage_params, inout)); |
| 280 |
| 281 |
| 282 p_out->ret_ = NvRmPrivXpcSendMessage( p_in->hXpcMessage, p_in->data ); |
| 283 |
| 284 return err_; |
| 285 } |
| 286 |
| 287 static NvError NvRmPrivXpcDestroy_dispatch_( void *InBuffer, NvU32 InSize, void
*OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 288 { |
| 289 NvError err_ = NvSuccess; |
| 290 NvRmPrivXpcDestroy_in *p_in; |
| 291 |
| 292 p_in = (NvRmPrivXpcDestroy_in *)InBuffer; |
| 293 |
| 294 |
| 295 NvRmPrivXpcDestroy( p_in->hXpcMessage ); |
| 296 |
| 297 return err_; |
| 298 } |
| 299 |
| 300 static NvError NvRmPrivXpcCreate_dispatch_( void *InBuffer, NvU32 InSize, void *
OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 301 { |
| 302 NvError err_ = NvSuccess; |
| 303 NvRmPrivXpcCreate_in *p_in; |
| 304 NvRmPrivXpcCreate_out *p_out; |
| 305 |
| 306 p_in = (NvRmPrivXpcCreate_in *)InBuffer; |
| 307 p_out = (NvRmPrivXpcCreate_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPrivXpcCrea
te_params, out) - OFFSET(NvRmPrivXpcCreate_params, inout)); |
| 308 |
| 309 |
| 310 p_out->ret_ = NvRmPrivXpcCreate( p_in->hDevice, &p_out->phXpcMessage ); |
| 311 |
| 312 return err_; |
| 313 } |
| 314 |
| 315 NvError nvrm_xpc_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *O
utBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ); |
| 316 NvError nvrm_xpc_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *O
utBuffer, NvU32 OutSize, NvDispatchCtx* Ctx ) |
| 317 { |
| 318 NvError err_ = NvSuccess; |
| 319 |
| 320 switch( function ) { |
| 321 case 6: |
| 322 err_ = NvRmXpcModuleRelease_dispatch_( InBuffer, InSize, OutBuffer, OutS
ize, Ctx ); |
| 323 break; |
| 324 case 5: |
| 325 err_ = NvRmXpcModuleAcquire_dispatch_( InBuffer, InSize, OutBuffer, OutS
ize, Ctx ); |
| 326 break; |
| 327 case 4: |
| 328 err_ = NvRmXpcInitArbSemaSystem_dispatch_( InBuffer, InSize, OutBuffer,
OutSize, Ctx ); |
| 329 break; |
| 330 case 3: |
| 331 err_ = NvRmPrivXpcGetMessage_dispatch_( InBuffer, InSize, OutBuffer, Out
Size, Ctx ); |
| 332 break; |
| 333 case 2: |
| 334 err_ = NvRmPrivXpcSendMessage_dispatch_( InBuffer, InSize, OutBuffer, Ou
tSize, Ctx ); |
| 335 break; |
| 336 case 1: |
| 337 err_ = NvRmPrivXpcDestroy_dispatch_( InBuffer, InSize, OutBuffer, OutSiz
e, Ctx ); |
| 338 break; |
| 339 case 0: |
| 340 err_ = NvRmPrivXpcCreate_dispatch_( InBuffer, InSize, OutBuffer, OutSize
, Ctx ); |
| 341 break; |
| 342 default: |
| 343 err_ = NvError_BadParameter; |
| 344 break; |
| 345 } |
| 346 |
| 347 return err_; |
| 348 } |
OLD | NEW |