2005-04-16 15:20:36 -07:00
/*
2005-08-28 20:18:39 -04:00
* libata . h - helper library for ATA
*
* Copyright 2003 - 2004 Red Hat , Inc . All rights reserved .
* Copyright 2003 - 2004 Jeff Garzik
*
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 , or ( at your option )
* any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; see the file COPYING . If not , write to
* the Free Software Foundation , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*
*
* libata documentation is available via ' make { ps | pdf } docs ' ,
* as Documentation / DocBook / libata . *
*
2005-04-16 15:20:36 -07:00
*/
# ifndef __LIBATA_H__
# define __LIBATA_H__
# define DRV_NAME "libata"
struct ata_scsi_args {
2006-01-06 09:56:18 +01:00
struct ata_device * dev ;
2005-04-16 15:20:36 -07:00
u16 * id ;
struct scsi_cmnd * cmd ;
void ( * done ) ( struct scsi_cmnd * ) ;
} ;
/* libata-core.c */
2006-11-10 18:08:10 +09:00
enum {
/* flags for ata_dev_read_id() */
ATA_READID_POSTRESET = ( 1 < < 0 ) , /* reading ID after reset */
2007-02-02 16:22:30 +09:00
/* selector for ata_down_xfermask_limit() */
ATA_DNXFER_PIO = 0 , /* speed down PIO */
ATA_DNXFER_DMA = 1 , /* speed down DMA */
ATA_DNXFER_40C = 2 , /* apply 40c cable limit */
ATA_DNXFER_FORCE_PIO = 3 , /* force PIO */
ATA_DNXFER_FORCE_PIO0 = 4 , /* force PIO0 */
ATA_DNXFER_QUIET = ( 1 < < 31 ) ,
2006-11-10 18:08:10 +09:00
} ;
2007-04-17 23:44:07 +09:00
extern unsigned int ata_print_id ;
2006-05-31 18:27:42 +09:00
extern struct workqueue_struct * ata_aux_wq ;
2005-08-30 03:37:42 -04:00
extern int atapi_enabled ;
2006-04-04 10:57:18 +08:00
extern int atapi_dmadir ;
2006-02-27 22:31:19 -05:00
extern int libata_fua ;
2007-03-28 01:57:37 -04:00
extern int libata_noacpi ;
2006-05-15 20:57:53 +09:00
extern struct ata_queued_cmd * ata_qc_new_init ( struct ata_device * dev ) ;
2006-11-14 22:47:10 +09:00
extern int ata_build_rw_tf ( struct ata_taskfile * tf , struct ata_device * dev ,
u64 block , u32 n_block , unsigned int tf_flags ,
unsigned int tag ) ;
2006-11-14 22:37:35 +09:00
extern u64 ata_tf_read_block ( struct ata_taskfile * tf , struct ata_device * dev ) ;
2006-05-15 20:57:53 +09:00
extern void ata_dev_disable ( struct ata_device * dev ) ;
2006-03-05 15:29:09 +09:00
extern void ata_port_flush_task ( struct ata_port * ap ) ;
2006-05-15 20:57:53 +09:00
extern unsigned ata_exec_internal ( struct ata_device * dev ,
2006-04-02 18:51:53 +09:00
struct ata_taskfile * tf , const u8 * cdb ,
int dma_dir , void * buf , unsigned int buflen ) ;
2006-11-14 22:47:09 +09:00
extern unsigned ata_exec_internal_sg ( struct ata_device * dev ,
struct ata_taskfile * tf , const u8 * cdb ,
int dma_dir , struct scatterlist * sg ,
unsigned int n_elem ) ;
2006-06-24 20:30:19 +09:00
extern unsigned int ata_do_simple_cmd ( struct ata_device * dev , u8 cmd ) ;
2006-05-31 18:27:44 +09:00
extern int ata_dev_read_id ( struct ata_device * dev , unsigned int * p_class ,
2006-11-10 18:08:10 +09:00
unsigned int flags , u16 * id ) ;
2007-05-15 03:28:15 +09:00
extern int ata_dev_reread_id ( struct ata_device * dev , unsigned int readid_flags ) ;
extern int ata_dev_revalidate ( struct ata_device * dev , unsigned int readid_flags ) ;
2006-11-01 18:38:52 +09:00
extern int ata_dev_configure ( struct ata_device * dev ) ;
2006-05-15 20:57:23 +09:00
extern int sata_down_spd_limit ( struct ata_port * ap ) ;
extern int sata_set_spd_needed ( struct ata_port * ap ) ;
2007-02-02 16:22:30 +09:00
extern int ata_down_xfermask_limit ( struct ata_device * dev , unsigned int sel ) ;
2006-04-02 18:51:53 +09:00
extern int ata_set_mode ( struct ata_port * ap , struct ata_device * * r_failed_dev ) ;
2006-11-14 22:47:10 +09:00
extern void ata_sg_clean ( struct ata_queued_cmd * qc ) ;
2005-04-16 15:20:36 -07:00
extern void ata_qc_free ( struct ata_queued_cmd * qc ) ;
2006-03-31 20:41:11 +09:00
extern void ata_qc_issue ( struct ata_queued_cmd * qc ) ;
2006-05-15 20:58:05 +09:00
extern void __ata_qc_complete ( struct ata_queued_cmd * qc ) ;
2005-04-16 15:20:36 -07:00
extern int ata_check_atapi_dma ( struct ata_queued_cmd * qc ) ;
extern void ata_dev_select ( struct ata_port * ap , unsigned int device ,
unsigned int wait , unsigned int can_sleep ) ;
extern void swap_buf_le16 ( u16 * buf , unsigned int buf_words ) ;
2006-06-24 20:30:19 +09:00
extern int ata_flush_cache ( struct ata_device * dev ) ;
2006-05-31 18:27:30 +09:00
extern void ata_dev_init ( struct ata_device * dev ) ;
2005-05-12 15:45:22 -04:00
extern int ata_task_ioctl ( struct scsi_device * scsidev , void __user * arg ) ;
extern int ata_cmd_ioctl ( struct scsi_device * scsidev , void __user * arg ) ;
2007-04-17 23:44:07 +09:00
extern struct ata_port * ata_port_alloc ( struct ata_host * host ) ;
2005-04-16 15:20:36 -07:00
2006-09-28 11:29:01 -07:00
/* libata-acpi.c */
2007-05-05 23:50:38 +09:00
# ifdef CONFIG_ATA_ACPI
2006-09-28 11:29:01 -07:00
extern int ata_acpi_exec_tfs ( struct ata_port * ap ) ;
2007-05-05 23:50:38 +09:00
extern int ata_acpi_push_id ( struct ata_device * dev ) ;
2006-09-28 11:29:01 -07:00
# else
static inline int ata_acpi_exec_tfs ( struct ata_port * ap )
{
return 0 ;
}
2007-05-05 23:50:38 +09:00
static inline int ata_acpi_push_id ( struct ata_device * dev )
2006-09-28 11:29:12 -07:00
{
return 0 ;
}
2006-09-28 11:29:01 -07:00
# endif
2005-04-16 15:20:36 -07:00
/* libata-scsi.c */
2007-04-17 23:44:07 +09:00
extern int ata_scsi_add_hosts ( struct ata_host * host ,
struct scsi_host_template * sht ) ;
2005-10-03 15:55:19 -04:00
extern void ata_scsi_scan_host ( struct ata_port * ap ) ;
2006-05-31 18:28:01 +09:00
extern int ata_scsi_offline_dev ( struct ata_device * dev ) ;
2006-11-22 14:55:48 +00:00
extern void ata_scsi_hotplug ( struct work_struct * work ) ;
2005-04-16 15:20:36 -07:00
extern unsigned int ata_scsiop_inq_std ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_inq_00 ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_inq_80 ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_inq_83 ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_noop ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_sync_cache ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_mode_sense ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_read_cap ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern unsigned int ata_scsiop_report_luns ( struct ata_scsi_args * args , u8 * rbuf ,
unsigned int buflen ) ;
extern void ata_scsi_badcmd ( struct scsi_cmnd * cmd ,
void ( * done ) ( struct scsi_cmnd * ) ,
u8 asc , u8 ascq ) ;
2005-10-09 08:55:41 -04:00
extern void ata_scsi_set_sense ( struct scsi_cmnd * cmd ,
u8 sk , u8 asc , u8 ascq ) ;
2005-07-31 13:13:24 -04:00
extern void ata_scsi_rbuf_fill ( struct ata_scsi_args * args ,
2005-04-16 15:20:36 -07:00
unsigned int ( * actor ) ( struct ata_scsi_args * args ,
u8 * rbuf , unsigned int buflen ) ) ;
2006-05-15 20:58:07 +09:00
extern void ata_schedule_scsi_eh ( struct Scsi_Host * shost ) ;
2006-11-22 14:55:48 +00:00
extern void ata_scsi_dev_rescan ( struct work_struct * work ) ;
2006-08-07 14:27:31 -05:00
extern int ata_bus_probe ( struct ata_port * ap ) ;
2005-04-16 15:20:36 -07:00
2006-04-02 18:51:53 +09:00
/* libata-eh.c */
extern enum scsi_eh_timer_return ata_scsi_timed_out ( struct scsi_cmnd * cmd ) ;
2006-04-11 13:04:39 -04:00
extern void ata_scsi_error ( struct Scsi_Host * host ) ;
2006-05-31 18:27:27 +09:00
extern void ata_port_wait_eh ( struct ata_port * ap ) ;
2006-05-15 20:58:05 +09:00
extern void ata_qc_schedule_eh ( struct ata_queued_cmd * qc ) ;
2006-04-02 18:51:53 +09:00
2006-10-09 11:10:26 +09:00
/* libata-sff.c */
extern u8 ata_irq_on ( struct ata_port * ap ) ;
2007-01-30 00:59:17 -08:00
2005-04-16 15:20:36 -07:00
# endif /* __LIBATA_H__ */