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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: devops.c,v 1.13 2000/08/26 02:38:03 anton Exp $
  2.  * devops.c:  Device operations using the PROM.
  3.  *
  4.  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  5.  */
  6. #include <linux/types.h>
  7. #include <linux/kernel.h>
  8. #include <linux/sched.h>
  9. #include <asm/openprom.h>
  10. #include <asm/oplib.h>
  11. extern void restore_current(void);
  12. /* Open the device described by the string 'dstr'.  Returns the handle
  13.  * to that device used for subsequent operations on that device.
  14.  * Returns -1 on failure.
  15.  */
  16. int
  17. prom_devopen(char *dstr)
  18. {
  19. int handle;
  20. unsigned long flags;
  21. spin_lock_irqsave(&prom_lock, flags);
  22. switch(prom_vers) {
  23. case PROM_V0:
  24. handle = (*(romvec->pv_v0devops.v0_devopen))(dstr);
  25. if(handle == 0) handle = -1;
  26. break;
  27. case PROM_V2:
  28. case PROM_V3:
  29. handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr);
  30. break;
  31. default:
  32. handle = -1;
  33. break;
  34. };
  35. restore_current();
  36. spin_unlock_irqrestore(&prom_lock, flags);
  37. return handle;
  38. }
  39. /* Close the device described by device handle 'dhandle'. */
  40. int
  41. prom_devclose(int dhandle)
  42. {
  43. unsigned long flags;
  44. spin_lock_irqsave(&prom_lock, flags);
  45. switch(prom_vers) {
  46. case PROM_V0:
  47. (*(romvec->pv_v0devops.v0_devclose))(dhandle);
  48. break;
  49. case PROM_V2:
  50. case PROM_V3:
  51. (*(romvec->pv_v2devops.v2_dev_close))(dhandle);
  52. break;
  53. default:
  54. break;
  55. };
  56. restore_current();
  57. spin_unlock_irqrestore(&prom_lock, flags);
  58. return 0;
  59. }
  60. /* Seek to specified location described by 'seekhi' and 'seeklo'
  61.  * for device 'dhandle'.
  62.  */
  63. void
  64. prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
  65. {
  66. unsigned long flags;
  67. spin_lock_irqsave(&prom_lock, flags);
  68. switch(prom_vers) {
  69. case PROM_V0:
  70. (*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo);
  71. break;
  72. case PROM_V2:
  73. case PROM_V3:
  74. (*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo);
  75. break;
  76. default:
  77. break;
  78. };
  79. restore_current();
  80. spin_unlock_irqrestore(&prom_lock, flags);
  81. return;
  82. }