Lines 337-343
Link Here
|
337 |
* Interface with resman. |
337 |
* Interface with resman. |
338 |
*************************************************************************/ |
338 |
*************************************************************************/ |
339 |
|
339 |
|
340 |
static nvidia_modeset_rm_ops_t __rm_ops = { 0 }; |
340 |
static const nvidia_modeset_rm_ops_t *__rm_ops; |
341 |
static nvidia_modeset_callbacks_t nvkms_rm_callbacks = { |
341 |
static nvidia_modeset_callbacks_t nvkms_rm_callbacks = { |
342 |
.suspend = nvkms_suspend, |
342 |
.suspend = nvkms_suspend, |
343 |
.resume = nvkms_resume |
343 |
.resume = nvkms_resume |
Lines 347-365
Link Here
|
347 |
{ |
347 |
{ |
348 |
NV_STATUS nvstatus; |
348 |
NV_STATUS nvstatus; |
349 |
int ret; |
349 |
int ret; |
|
|
350 |
const char *version_string = NV_VERSION_STRING; |
350 |
|
351 |
|
351 |
__rm_ops.version_string = NV_VERSION_STRING; |
352 |
nvstatus = nvidia_get_rm_ops(&__rm_ops, &version_string); |
352 |
|
|
|
353 |
nvstatus = nvidia_get_rm_ops(&__rm_ops); |
354 |
|
353 |
|
355 |
if (nvstatus != NV_OK) { |
354 |
if (nvstatus != NV_OK) { |
356 |
printk(KERN_ERR NVKMS_LOG_PREFIX "Version mismatch: " |
355 |
printk(KERN_ERR NVKMS_LOG_PREFIX "Version mismatch: " |
357 |
"nvidia.ko(%s) nvidia-modeset.ko(%s)\n", |
356 |
"nvidia.ko(%s) nvidia-modeset.ko(%s)\n", |
358 |
__rm_ops.version_string, NV_VERSION_STRING); |
357 |
version_string, NV_VERSION_STRING); |
359 |
return -EINVAL; |
358 |
return -EINVAL; |
360 |
} |
359 |
} |
361 |
|
360 |
|
362 |
ret = __rm_ops.set_callbacks(&nvkms_rm_callbacks); |
361 |
ret = __rm_ops->set_callbacks(&nvkms_rm_callbacks); |
363 |
if (ret < 0) { |
362 |
if (ret < 0) { |
364 |
printk(KERN_ERR NVKMS_LOG_PREFIX "Failed to register callbacks\n"); |
363 |
printk(KERN_ERR NVKMS_LOG_PREFIX "Failed to register callbacks\n"); |
365 |
return ret; |
364 |
return ret; |
Lines 370-389
Link Here
|
370 |
|
369 |
|
371 |
static void nvkms_free_rm(void) |
370 |
static void nvkms_free_rm(void) |
372 |
{ |
371 |
{ |
373 |
__rm_ops.set_callbacks(NULL); |
372 |
__rm_ops->set_callbacks(NULL); |
374 |
} |
373 |
} |
375 |
|
374 |
|
376 |
void NVKMS_API_CALL nvkms_call_rm(void *ops) |
375 |
void NVKMS_API_CALL nvkms_call_rm(void *ops) |
377 |
{ |
376 |
{ |
378 |
nvidia_modeset_stack_ptr stack = NULL; |
377 |
nvidia_modeset_stack_ptr stack = NULL; |
379 |
|
378 |
|
380 |
if (__rm_ops.alloc_stack(&stack) != 0) { |
379 |
if (__rm_ops->alloc_stack(&stack) != 0) { |
381 |
return; |
380 |
return; |
382 |
} |
381 |
} |
383 |
|
382 |
|
384 |
__rm_ops.op(stack, ops); |
383 |
__rm_ops->op(stack, ops); |
385 |
|
384 |
|
386 |
__rm_ops.free_stack(stack); |
385 |
__rm_ops->free_stack(stack); |
387 |
} |
386 |
} |
388 |
|
387 |
|
389 |
/************************************************************************* |
388 |
/************************************************************************* |
Lines 711-723
Link Here
|
711 |
nvidia_modeset_stack_ptr stack = NULL; |
710 |
nvidia_modeset_stack_ptr stack = NULL; |
712 |
NvBool ret; |
711 |
NvBool ret; |
713 |
|
712 |
|
714 |
if (__rm_ops.alloc_stack(&stack) != 0) { |
713 |
if (__rm_ops->alloc_stack(&stack) != 0) { |
715 |
return NV_FALSE; |
714 |
return NV_FALSE; |
716 |
} |
715 |
} |
717 |
|
716 |
|
718 |
ret = __rm_ops.open_gpu(gpuId, stack) == 0; |
717 |
ret = __rm_ops->open_gpu(gpuId, stack) == 0; |
719 |
|
718 |
|
720 |
__rm_ops.free_stack(stack); |
719 |
__rm_ops->free_stack(stack); |
721 |
|
720 |
|
722 |
return ret; |
721 |
return ret; |
723 |
} |
722 |
} |
Lines 726-748
Link Here
|
726 |
{ |
725 |
{ |
727 |
nvidia_modeset_stack_ptr stack = NULL; |
726 |
nvidia_modeset_stack_ptr stack = NULL; |
728 |
|
727 |
|
729 |
if (__rm_ops.alloc_stack(&stack) != 0) { |
728 |
if (__rm_ops->alloc_stack(&stack) != 0) { |
730 |
return; |
729 |
return; |
731 |
} |
730 |
} |
732 |
|
731 |
|
733 |
__rm_ops.close_gpu(gpuId, stack); |
732 |
__rm_ops->close_gpu(gpuId, stack); |
734 |
|
733 |
|
735 |
__rm_ops.free_stack(stack); |
734 |
__rm_ops->free_stack(stack); |
736 |
} |
735 |
} |
737 |
|
736 |
|
738 |
NvU32 NVKMS_API_CALL nvkms_enumerate_gpus(nv_gpu_info_t *gpu_info) |
737 |
NvU32 NVKMS_API_CALL nvkms_enumerate_gpus(nv_gpu_info_t *gpu_info) |
739 |
{ |
738 |
{ |
740 |
return __rm_ops.enumerate_gpus(gpu_info); |
739 |
return __rm_ops->enumerate_gpus(gpu_info); |
741 |
} |
740 |
} |
742 |
|
741 |
|
743 |
NvBool NVKMS_API_CALL nvkms_allow_write_combining(void) |
742 |
NvBool NVKMS_API_CALL nvkms_allow_write_combining(void) |
744 |
{ |
743 |
{ |
745 |
return __rm_ops.system_info.allow_write_combining; |
744 |
return __rm_ops->system_info.allow_write_combining; |
746 |
} |
745 |
} |
747 |
|
746 |
|
748 |
/************************************************************************* |
747 |
/************************************************************************* |