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

嵌入式Linux

开发平台:

Unix_Linux

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