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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Access the floppy hardware on PC style hardware
  7.  *
  8.  * Copyright (C) 1996, 1997, 1998 by Ralf Baechle
  9.  */
  10. #include <linux/delay.h>
  11. #include <linux/init.h>
  12. #include <linux/ioport.h>
  13. #include <linux/sched.h>
  14. #include <linux/kernel.h>
  15. #include <linux/linkage.h>
  16. #include <linux/types.h>
  17. #include <linux/mm.h>
  18. #include <asm/bootinfo.h>
  19. #include <asm/cachectl.h>
  20. #include <asm/dma.h>
  21. #include <asm/floppy.h>
  22. #include <asm/keyboard.h>
  23. #include <asm/io.h>
  24. #include <asm/irq.h>
  25. #include <asm/pgtable.h>
  26. /*
  27.  * How to access the FDC's registers.
  28.  */
  29. static unsigned char std_fd_inb(unsigned int port)
  30. {
  31. return inb_p(port);
  32. }
  33. static void std_fd_outb(unsigned char value, unsigned int port)
  34. {
  35. outb_p(value, port);
  36. }
  37. /*
  38.  * How to access the floppy DMA functions.
  39.  */
  40. static void std_fd_enable_dma(int channel)
  41. {
  42. enable_dma(channel);
  43. }
  44. static void std_fd_disable_dma(int channel)
  45. {
  46. disable_dma(channel);
  47. }
  48. static int std_fd_request_dma(int channel)
  49. {
  50. return request_dma(channel, "floppy");
  51. }
  52. static void std_fd_free_dma(int channel)
  53. {
  54. free_dma(channel);
  55. }
  56. static void std_fd_clear_dma_ff(int channel)
  57. {
  58. clear_dma_ff(channel);
  59. }
  60. static void std_fd_set_dma_mode(int channel, char mode)
  61. {
  62. set_dma_mode(channel, mode);
  63. }
  64. static void std_fd_set_dma_addr(int channel, unsigned int addr)
  65. {
  66. set_dma_addr(channel, addr);
  67. }
  68. static void std_fd_set_dma_count(int channel, unsigned int count)
  69. {
  70. set_dma_count(channel, count);
  71. }
  72. static int std_fd_get_dma_residue(int channel)
  73. {
  74. return get_dma_residue(channel);
  75. }
  76. static void std_fd_enable_irq(int irq)
  77. {
  78. enable_irq(irq);
  79. }
  80. static void std_fd_disable_irq(int irq)
  81. {
  82. disable_irq(irq);
  83. }
  84. static unsigned long std_fd_getfdaddr1(void)
  85. {
  86. return 0x3f0;
  87. }
  88. static unsigned long std_fd_dma_mem_alloc(unsigned long size)
  89. {
  90. int order = get_order(size);
  91. unsigned long mem;
  92. mem = __get_dma_pages(GFP_KERNEL,order);
  93. return mem;
  94. }
  95. static void std_fd_dma_mem_free(unsigned long addr, unsigned long size)
  96. {
  97. free_pages(addr, get_order(size));
  98. }
  99. static unsigned long std_fd_drive_type(unsigned long n)
  100. {
  101. if (n == 0)
  102. return 4; /* 3,5", 1.44mb */
  103. return 0;
  104. }
  105. struct fd_ops std_fd_ops = {
  106. /*
  107.  * How to access the floppy controller's ports
  108.  */
  109. std_fd_inb,
  110. std_fd_outb,
  111. /*
  112.  * How to access the floppy DMA functions.
  113.  */
  114. std_fd_enable_dma,
  115. std_fd_disable_dma,
  116. std_fd_request_dma,
  117. std_fd_free_dma,
  118. std_fd_clear_dma_ff,
  119. std_fd_set_dma_mode,
  120. std_fd_set_dma_addr,
  121. std_fd_set_dma_count,
  122. std_fd_get_dma_residue,
  123. std_fd_enable_irq,
  124. std_fd_disable_irq,
  125.         std_fd_getfdaddr1,
  126.         std_fd_dma_mem_alloc,
  127.         std_fd_dma_mem_free,
  128. std_fd_drive_type
  129. };