blob: d5e05e97cb2fb12dc68794a2f1032eb366c79f18
1 | /* |
2 | * (C) Copyright 2000 |
3 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
4 | * |
5 | * SPDX-License-Identifier: GPL-2.0+ |
6 | */ |
7 | |
8 | #ifndef _IDE_H |
9 | #define _IDE_H |
10 | |
11 | #define IDE_BUS(dev) (dev / (CONFIG_SYS_IDE_MAXDEVICE / CONFIG_SYS_IDE_MAXBUS)) |
12 | |
13 | #define ATA_CURR_BASE(dev) (CONFIG_SYS_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)]) |
14 | extern ulong ide_bus_offset[]; |
15 | |
16 | #ifdef CONFIG_IDE_LED |
17 | |
18 | /* |
19 | * LED Port |
20 | */ |
21 | #define LED_PORT ((uchar *)(PER8_BASE + 0x3000)) |
22 | #define LED_IDE1 0x01 |
23 | #define LED_IDE2 0x02 |
24 | #define DEVICE_LED(d) ((d & 2) | ((d & 2) == 0)) /* depends on bit positions! */ |
25 | |
26 | void ide_led(uchar led, uchar status); |
27 | #endif /* CONFIG_IDE_LED */ |
28 | |
29 | #ifdef CONFIG_SYS_64BIT_LBA |
30 | typedef uint64_t lbaint_t; |
31 | #define LBAF "%llx" |
32 | #define LBAFU "%llu" |
33 | #else |
34 | typedef ulong lbaint_t; |
35 | #define LBAF "%lx" |
36 | #define LBAFU "%lu" |
37 | #endif |
38 | |
39 | /* |
40 | * Function Prototypes |
41 | */ |
42 | |
43 | void ide_init(void); |
44 | ulong ide_read(int device, lbaint_t blknr, lbaint_t blkcnt, void *buffer); |
45 | ulong ide_write(int device, lbaint_t blknr, lbaint_t blkcnt, |
46 | const void *buffer); |
47 | |
48 | #ifdef CONFIG_IDE_PREINIT |
49 | int ide_preinit(void); |
50 | #endif |
51 | |
52 | #ifdef CONFIG_IDE_INIT_POSTRESET |
53 | int ide_init_postreset(void); |
54 | #endif |
55 | |
56 | #if defined(CONFIG_OF_IDE_FIXUP) |
57 | int ide_device_present(int dev); |
58 | #endif |
59 | |
60 | #if defined(CONFIG_IDE_AHB) |
61 | unsigned char ide_read_register(int dev, unsigned int port); |
62 | void ide_write_register(int dev, unsigned int port, unsigned char val); |
63 | void ide_read_data(int dev, ulong *sect_buf, int words); |
64 | void ide_write_data(int dev, const ulong *sect_buf, int words); |
65 | #endif |
66 | |
67 | /* |
68 | * I/O function overrides |
69 | */ |
70 | unsigned char ide_inb(int dev, int port); |
71 | void ide_outb(int dev, int port, unsigned char val); |
72 | void ide_input_swap_data(int dev, ulong *sect_buf, int words); |
73 | void ide_input_data(int dev, ulong *sect_buf, int words); |
74 | void ide_output_data(int dev, const ulong *sect_buf, int words); |
75 | void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts); |
76 | void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts); |
77 | |
78 | void ide_led(uchar led, uchar status); |
79 | |
80 | /** |
81 | * board_start_ide() - Start up the board IDE interfac |
82 | * |
83 | * @return 0 if ok |
84 | */ |
85 | int board_start_ide(void); |
86 | |
87 | #endif /* _IDE_H */ |
88 |