rrm.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Linux Rendering Resource Manager
  3.  *
  4.  *          Implements the SGI-compatible rendering resource manager.
  5.  *          This takes care of implementing the virtualized video hardware
  6.  *          access required for OpenGL direct rendering.
  7.  *
  8.  * Author:  Miguel de Icaza (miguel@nuclecu.unam.mx)
  9.  *
  10.  * Fixes:
  11.  */
  12. #include <linux/module.h>
  13. #include <asm/uaccess.h>
  14. #include <asm/rrm.h>
  15. int
  16. rrm_open_rn (int rnid, void *arg)
  17. {
  18. return 0;
  19. }
  20. int
  21. rrm_close_rn (int rnid, void *arg)
  22. {
  23. return 0;
  24. }
  25. int
  26. rrm_bind_proc_to_rn (int rnid, void *arg)
  27. {
  28. return 0;
  29. }
  30. typedef int (*rrm_function )(void *arg);
  31. struct {
  32. int (*r_fn)(int rnid, void *arg);
  33. int arg_size;
  34. } rrm_functions [] = {
  35. { rrm_open_rn,         sizeof (struct RRM_OpenRN) },
  36. { rrm_close_rn,        sizeof (struct RRM_CloseRN) },
  37. { rrm_bind_proc_to_rn, sizeof (struct RRM_BindProcToRN) }
  38. };
  39. #define RRM_FUNCTIONS (sizeof (rrm_functions)/sizeof (rrm_functions [0]))
  40. /* cmd is a number in the range [0..RRM_CMD_LIMIT-RRM_BASE] */
  41. int
  42. rrm_command (unsigned int cmd, void *arg)
  43. {
  44. int i, rnid;
  45. if (cmd > RRM_FUNCTIONS){
  46. printk ("Called unimplemented rrm ioctl: %dn", cmd + RRM_BASE);
  47. return -EINVAL;
  48. }
  49. i = verify_area (VERIFY_READ, arg, rrm_functions [cmd].arg_size);
  50. if (i) return i;
  51. if (__get_user (rnid, (int *) arg))
  52. return -EFAULT;
  53. return (*(rrm_functions [cmd].r_fn))(rnid, arg);
  54. }
  55. int
  56. rrm_close (struct inode *inode, struct file *file)
  57. {
  58. /* This routine is invoked when the device is closed */
  59. return 0;
  60. }
  61. EXPORT_SYMBOL(rrm_command);
  62. EXPORT_SYMBOL(rrm_close);