
#if (DEBUG_SATA)
#define PRINTF(fmt,args...)	printf (fmt ,##args)
#else
#define PRINTF(fmt,args...)
#endif

struct sata_ioports {
	unsigned long cmd_addr;
	unsigned long data_addr;
	unsigned long error_addr;
	unsigned long feature_addr;
	unsigned long nsect_addr;
	unsigned long lbal_addr;
	unsigned long lbam_addr;
	unsigned long lbah_addr;
	unsigned long device_addr;
	unsigned long status_addr;
	unsigned long command_addr;
	unsigned long altstatus_addr;
	unsigned long ctl_addr;
	unsigned long bmdma_addr;
	unsigned long scr_addr;
};

struct sata_port {
	unsigned char port_no;		/* primary=0, secondary=1	*/
	struct sata_ioports ioaddr;	/* ATA cmd/ctl/dma reg blks	*/
	unsigned char ctl_reg;
	unsigned char last_ctl;
	unsigned char port_state;	/* 1-port is available and	*/
					/* 0-port is not available	*/
	unsigned char dev_mask;
};

/***********SATA LIBRARY SPECIFIC DEFINITIONS AND DECLARATIONS**************/
#ifdef SATA_DECL		/*SATA library specific declarations */
#define ata_id_has_lba48(id)    ((id)[83] & (1 << 10))
#define ata_id_has_lba(id)      ((id)[49] & (1 << 9))
#define ata_id_has_dma(id)      ((id)[49] & (1 << 8))
#define ata_id_u32(id,n)        \
	(((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)]))
#define ata_id_u64(id,n)        \
	(((u64) (id)[(n) + 3] << 48) | \
	((u64) (id)[(n) + 2] << 32) | \
	((u64) (id)[(n) + 1] << 16) | \
	((u64) (id)[(n) + 0]) )
#endif

#ifdef SATA_DECL		/*SATA library specific declarations */
static inline void
ata_dump_id (u16 * id)
{
	PRINTF ("49==0x%04x  "
		"53==0x%04x  "
		"63==0x%04x  "
		"64==0x%04x  "
		"75==0x%04x  \n", id[49], id[53], id[63], id[64], id[75]);
	PRINTF ("80==0x%04x  "
		"81==0x%04x  "
		"82==0x%04x  "
		"83==0x%04x  "
		"84==0x%04x  \n", id[80], id[81], id[82], id[83], id[84]);
	PRINTF ("88==0x%04x  " "93==0x%04x\n", id[88], id[93]);
}
#endif

#ifdef SATA_DECL		/*SATA library specific declarations */
int sata_bus_softreset (int num);
void sata_identify (int num, int dev);
void sata_port (struct sata_ioports *ioport);
void set_Feature_cmd (int num, int dev);
int sata_devchk (struct sata_ioports *ioaddr, int dev);
void dev_select (struct sata_ioports *ioaddr, int dev);
u8 sata_busy_wait (struct sata_ioports *ioaddr, int bits, unsigned int max);
u8 sata_chk_status (struct sata_ioports *ioaddr);
ulong sata_read (int device, ulong blknr,lbaint_t blkcnt, void * buffer);
ulong sata_write (int device,ulong blknr, lbaint_t blkcnt, void * buffer);
void msleep (int count);
#else
extern int sata_bus_softreset (int num);
extern void sata_identify (int num, int dev);
extern void sata_port (struct sata_ioports *ioport);
extern void set_Feature_cmd (int num, int dev);
extern ulong sata_read (int device, ulong blknr,
			lbaint_t blkcnt, void * buffer);
extern ulong sata_write (int device, ulong blknr,
			lbaint_t blkcnt, void * buffer);
extern void msleep (int count);
#endif

/************DRIVER SPECIFIC DEFINITIONS AND DECLARATIONS**************/

#ifdef DRV_DECL			/*Driver specific declaration */
int init_sata (void);
#else
extern int init_sata (void);
#endif

#ifdef DRV_DECL			/*Defines Driver Specific variables */
struct sata_port port[CFG_SATA_MAXBUS];
block_dev_desc_t sata_dev_desc[CFG_SATA_MAXDEVICES];
int curr_dev = -1;
#else
extern struct sata_port port[CFG_SATA_MAXBUS];
extern block_dev_desc_t sata_dev_desc[CFG_SATA_MAXDEVICES];
extern int curr_dev;
#endif
