]>
Commit | Line | Data |
---|---|---|
66d9dbec | 1 | |
2 | #if (DEBUG_SATA) | |
3 | #define PRINTF(fmt,args...) printf (fmt ,##args) | |
4 | #else | |
5 | #define PRINTF(fmt,args...) | |
6 | #endif | |
7 | ||
8 | struct sata_ioports { | |
9 | unsigned long cmd_addr; | |
10 | unsigned long data_addr; | |
11 | unsigned long error_addr; | |
12 | unsigned long feature_addr; | |
13 | unsigned long nsect_addr; | |
14 | unsigned long lbal_addr; | |
15 | unsigned long lbam_addr; | |
16 | unsigned long lbah_addr; | |
17 | unsigned long device_addr; | |
18 | unsigned long status_addr; | |
19 | unsigned long command_addr; | |
20 | unsigned long altstatus_addr; | |
21 | unsigned long ctl_addr; | |
22 | unsigned long bmdma_addr; | |
23 | unsigned long scr_addr; | |
24 | }; | |
25 | ||
26 | struct sata_port { | |
3162eb83 WD |
27 | unsigned char port_no; /* primary=0, secondary=1 */ |
28 | struct sata_ioports ioaddr; /* ATA cmd/ctl/dma reg blks */ | |
66d9dbec | 29 | unsigned char ctl_reg; |
30 | unsigned char last_ctl; | |
1f2a0589 MK |
31 | unsigned char port_state; /* 1-port is available and */ |
32 | /* 0-port is not available */ | |
66d9dbec | 33 | unsigned char dev_mask; |
34 | }; | |
35 | ||
36 | /***********SATA LIBRARY SPECIFIC DEFINITIONS AND DECLARATIONS**************/ | |
37 | #ifdef SATA_DECL /*SATA library specific declarations */ | |
38 | #define ata_id_has_lba48(id) ((id)[83] & (1 << 10)) | |
39 | #define ata_id_has_lba(id) ((id)[49] & (1 << 9)) | |
40 | #define ata_id_has_dma(id) ((id)[49] & (1 << 8)) | |
41 | #define ata_id_u32(id,n) \ | |
42 | (((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)])) | |
43 | #define ata_id_u64(id,n) \ | |
44 | (((u64) (id)[(n) + 3] << 48) | \ | |
45 | ((u64) (id)[(n) + 2] << 32) | \ | |
46 | ((u64) (id)[(n) + 1] << 16) | \ | |
47 | ((u64) (id)[(n) + 0]) ) | |
48 | #endif | |
49 | ||
50 | #ifdef SATA_DECL /*SATA library specific declarations */ | |
51 | static inline void | |
52 | ata_dump_id (u16 * id) | |
53 | { | |
54 | PRINTF ("49==0x%04x " | |
55 | "53==0x%04x " | |
56 | "63==0x%04x " | |
57 | "64==0x%04x " | |
58 | "75==0x%04x \n", id[49], id[53], id[63], id[64], id[75]); | |
59 | PRINTF ("80==0x%04x " | |
60 | "81==0x%04x " | |
61 | "82==0x%04x " | |
62 | "83==0x%04x " | |
63 | "84==0x%04x \n", id[80], id[81], id[82], id[83], id[84]); | |
64 | PRINTF ("88==0x%04x " "93==0x%04x\n", id[88], id[93]); | |
65 | } | |
66 | #endif | |
67 | ||
68 | #ifdef SATA_DECL /*SATA library specific declarations */ | |
69 | int sata_bus_softreset (int num); | |
70 | void sata_identify (int num, int dev); | |
71 | void sata_port (struct sata_ioports *ioport); | |
72 | void set_Feature_cmd (int num, int dev); | |
73 | int sata_devchk (struct sata_ioports *ioaddr, int dev); | |
74 | void dev_select (struct sata_ioports *ioaddr, int dev); | |
75 | u8 sata_busy_wait (struct sata_ioports *ioaddr, int bits, unsigned int max); | |
76 | u8 sata_chk_status (struct sata_ioports *ioaddr); | |
1f2a0589 MK |
77 | ulong sata_read (int device, ulong blknr,lbaint_t blkcnt, void * buffer); |
78 | ulong sata_write (int device,ulong blknr, lbaint_t blkcnt, void * buffer); | |
66d9dbec | 79 | void msleep (int count); |
66d9dbec | 80 | #endif |
81 | ||
82 | /************DRIVER SPECIFIC DEFINITIONS AND DECLARATIONS**************/ | |
83 | ||
84 | #ifdef DRV_DECL /*Driver specific declaration */ | |
8e9bb434 | 85 | int init_sata (int dev); |
66d9dbec | 86 | #endif |
87 | ||
88 | #ifdef DRV_DECL /*Defines Driver Specific variables */ | |
89 | struct sata_port port[CFG_SATA_MAXBUS]; | |
66d9dbec | 90 | #endif |