ide.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/include/asm-i386/ide.h
  3.  *
  4.  *  Copyright (C) 1994-1996  Linus Torvalds & authors
  5.  */
  6. /*
  7.  *  This file contains the i386 architecture specific IDE code.
  8.  */
  9. #ifndef __ASMi386_IDE_H
  10. #define __ASMi386_IDE_H
  11. #ifdef __KERNEL__
  12. #include <linux/config.h>
  13. #ifndef MAX_HWIFS
  14. # ifdef CONFIG_BLK_DEV_IDEPCI
  15. #define MAX_HWIFS 10
  16. # else
  17. #define MAX_HWIFS 6
  18. # endif
  19. #endif
  20. #define ide__sti() __sti()
  21. #define ide_default_io_base(i) ((ide_ioreg_t)0)
  22. #define ide_default_irq(b) (0)
  23. static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
  24. {
  25. ide_ioreg_t reg = data_port;
  26. int i;
  27. memset(hw, 0, sizeof(*hw));
  28. for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
  29. hw->io_ports[i] = reg;
  30. reg += 1;
  31. }
  32. if (ctrl_port) {
  33. hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
  34. } else {
  35. hw->io_ports[IDE_CONTROL_OFFSET] = data_port + 0x206;
  36. }
  37. if (irq != NULL)
  38. *irq = 0;
  39. hw->io_ports[IDE_IRQ_OFFSET] = 0;
  40. }
  41. static __inline__ void ide_init_default_hwifs(void)
  42. {
  43. #ifndef CONFIG_BLK_DEV_IDEPCI
  44. hw_regs_t hw;
  45. ide_init_hwif_ports(&hw, 0x1f0, 0x3f6, NULL);
  46. hw.irq = 14;
  47. ide_register_hw(&hw, NULL);
  48. ide_init_hwif_ports(&hw, 0x170, 0x376, NULL);
  49. hw.irq = 15;
  50. ide_register_hw(&hw, NULL);
  51. ide_init_hwif_ports(&hw, 0x1e8, 0x3ee, NULL);
  52. hw.irq = 11;
  53. ide_register_hw(&hw, NULL);
  54. ide_init_hwif_ports(&hw, 0x168, 0x36e, NULL);
  55. hw.irq = 10;
  56. ide_register_hw(&hw, NULL);
  57. ide_init_hwif_ports(&hw, 0x1e0, 0x3e6, NULL);
  58. hw.irq = 8;
  59. ide_register_hw(&hw, NULL);
  60. ide_init_hwif_ports(&hw, 0x160, 0x366, NULL);
  61. hw.irq = 12;
  62. ide_register_hw(&hw, NULL);
  63. #endif /* CONFIG_BLK_DEV_IDEPCI */
  64. }
  65. typedef union {
  66. unsigned all : 8; /* all of the bits together */
  67. struct {
  68. unsigned head : 4; /* always zeros here */
  69. unsigned unit : 1; /* drive select number, 0 or 1 */
  70. unsigned bit5 : 1; /* always 1 */
  71. unsigned lba : 1; /* using LBA instead of CHS */
  72. unsigned bit7 : 1; /* always 1 */
  73. } b;
  74. } select_t;
  75. #define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id))
  76. #define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id))
  77. #define ide_check_region(from,extent) check_region((from), (extent))
  78. #define ide_request_region(from,extent,name) request_region((from), (extent), (name))
  79. #define ide_release_region(from,extent) release_region((from), (extent))
  80. /*
  81.  * The following are not needed for the non-m68k ports
  82.  */
  83. #define ide_ack_intr(hwif) (1)
  84. #define ide_fix_driveid(id) do {} while (0)
  85. #define ide_release_lock(lock) do {} while (0)
  86. #define ide_get_lock(lock, hdlr, data) do {} while (0)
  87. #endif /* __KERNEL__ */
  88. #endif /* __ASMi386_IDE_H */