ide.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * (C) Copyright 2000
  3. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  4. *
  5. * See file CREDITS for list of people who contributed to this
  6. * project.
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation; either version 2 of
  11. * the License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21. * MA 02111-1307 USA
  22. */
  23. #ifndef _IDE_H
  24. #define _IDE_H
  25. #define IDE_BUS(dev) (dev / (CONFIG_SYS_IDE_MAXDEVICE / CONFIG_SYS_IDE_MAXBUS))
  26. #define ATA_CURR_BASE(dev) (CONFIG_SYS_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)])
  27. extern ulong ide_bus_offset[];
  28. #ifdef CONFIG_IDE_LED
  29. /*
  30. * LED Port
  31. */
  32. #define LED_PORT ((uchar *)(PER8_BASE + 0x3000))
  33. #define LED_IDE1 0x01
  34. #define LED_IDE2 0x02
  35. #define DEVICE_LED(d) ((d & 2) | ((d & 2) == 0)) /* depends on bit positions! */
  36. #endif /* CONFIG_IDE_LED */
  37. #ifdef CONFIG_SYS_64BIT_LBA
  38. typedef uint64_t lbaint_t;
  39. #define LBAF "%llx"
  40. #else
  41. typedef ulong lbaint_t;
  42. #define LBAF "%lx"
  43. #endif
  44. /*
  45. * Function Prototypes
  46. */
  47. void ide_init(void);
  48. ulong ide_read(int device, ulong blknr, lbaint_t blkcnt, void *buffer);
  49. ulong ide_write(int device, ulong blknr, lbaint_t blkcnt, const void *buffer);
  50. #ifdef CONFIG_IDE_PREINIT
  51. int ide_preinit(void);
  52. #endif
  53. #ifdef CONFIG_IDE_INIT_POSTRESET
  54. int ide_init_postreset(void);
  55. #endif
  56. #if defined(CONFIG_OF_IDE_FIXUP)
  57. int ide_device_present(int dev);
  58. #endif
  59. #if defined(CONFIG_IDE_AHB)
  60. unsigned char ide_read_register(int dev, unsigned int port);
  61. void ide_write_register(int dev, unsigned int port, unsigned char val);
  62. void ide_read_data(int dev, ulong *sect_buf, int words);
  63. void ide_write_data(int dev, ulong *sect_buf, int words);
  64. #endif
  65. /*
  66. * I/O function overrides
  67. */
  68. void ide_input_swap_data(int dev, ulong *sect_buf, int words);
  69. void ide_input_data(int dev, ulong *sect_buf, int words);
  70. void ide_output_data(int dev, const ulong *sect_buf, int words);
  71. void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts);
  72. void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts);
  73. /**
  74. * board_start_ide() - Start up the board IDE interfac
  75. *
  76. * @return 0 if ok
  77. */
  78. int board_start_ide(void);
  79. #endif /* _IDE_H */