2005-04-17 02:20:36 +04:00
/*
2005-08-29 04: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-17 02:20:36 +04:00
*/
# ifndef __LIBATA_H__
# define __LIBATA_H__
# define DRV_NAME "libata"
2006-06-27 04:41:33 +04:00
# define DRV_VERSION "2.00" /* must be exactly four chars */
2005-04-17 02:20:36 +04:00
struct ata_scsi_args {
2006-01-06 11:56:18 +03:00
struct ata_device * dev ;
2005-04-17 02:20:36 +04:00
u16 * id ;
struct scsi_cmnd * cmd ;
void ( * done ) ( struct scsi_cmnd * ) ;
} ;
/* libata-core.c */
2006-05-31 13:27:42 +04:00
extern struct workqueue_struct * ata_aux_wq ;
2005-08-30 11:37:42 +04:00
extern int atapi_enabled ;
2006-04-04 06:57:18 +04:00
extern int atapi_dmadir ;
2006-02-28 06:31:19 +03:00
extern int libata_fua ;
2006-05-15 15:57:53 +04:00
extern struct ata_queued_cmd * ata_qc_new_init ( struct ata_device * dev ) ;
2006-01-06 11:56:18 +03:00
extern int ata_rwcmd_protocol ( struct ata_queued_cmd * qc ) ;
2006-05-15 15:57:53 +04:00
extern void ata_dev_disable ( struct ata_device * dev ) ;
2006-03-05 09:29:09 +03:00
extern void ata_port_flush_task ( struct ata_port * ap ) ;
2006-05-15 15:57:53 +04:00
extern unsigned ata_exec_internal ( struct ata_device * dev ,
2006-04-02 13:51:53 +04:00
struct ata_taskfile * tf , const u8 * cdb ,
int dma_dir , void * buf , unsigned int buflen ) ;
2006-06-24 15:30:19 +04:00
extern unsigned int ata_do_simple_cmd ( struct ata_device * dev , u8 cmd ) ;
2006-05-31 13:27:44 +04:00
extern int ata_dev_read_id ( struct ata_device * dev , unsigned int * p_class ,
int post_reset , u16 * id ) ;
extern int ata_dev_configure ( struct ata_device * dev , int print_info ) ;
2006-05-15 15:57:23 +04:00
extern int sata_down_spd_limit ( struct ata_port * ap ) ;
extern int sata_set_spd_needed ( struct ata_port * ap ) ;
2006-05-15 15:57:53 +04:00
extern int ata_down_xfermask_limit ( struct ata_device * dev , int force_pio0 ) ;
2006-04-02 13:51:53 +04:00
extern int ata_set_mode ( struct ata_port * ap , struct ata_device * * r_failed_dev ) ;
2005-04-17 02:20:36 +04:00
extern void ata_qc_free ( struct ata_queued_cmd * qc ) ;
2006-03-31 15:41:11 +04:00
extern void ata_qc_issue ( struct ata_queued_cmd * qc ) ;
2006-05-15 15:58:05 +04:00
extern void __ata_qc_complete ( struct ata_queued_cmd * qc ) ;
2005-04-17 02:20:36 +04: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 15:30:19 +04:00
extern int ata_flush_cache ( struct ata_device * dev ) ;
2006-05-31 13:27:30 +04:00
extern void ata_dev_init ( struct ata_device * dev ) ;
2005-05-12 23: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 ) ;
2006-08-07 23:27:17 +04:00
extern void ata_port_init ( struct ata_port * ap , struct ata_host_set * host_set ,
const struct ata_probe_ent * ent , unsigned int port_no ) ;
2006-08-07 23:27:24 +04:00
extern struct ata_probe_ent * ata_probe_ent_alloc ( struct device * dev ,
const struct ata_port_info * port ) ;
2005-04-17 02:20:36 +04:00
/* libata-scsi.c */
2006-03-18 12:40:14 +03:00
extern struct scsi_transport_template ata_scsi_transport_template ;
2005-10-03 23:55:19 +04:00
extern void ata_scsi_scan_host ( struct ata_port * ap ) ;
2006-05-31 13:28:01 +04:00
extern int ata_scsi_offline_dev ( struct ata_device * dev ) ;
2006-05-31 13:28:05 +04:00
extern void ata_scsi_hotplug ( void * data ) ;
2005-04-17 02:20:36 +04: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 16:55:41 +04:00
extern void ata_scsi_set_sense ( struct scsi_cmnd * cmd ,
u8 sk , u8 asc , u8 ascq ) ;
2005-07-31 21:13:24 +04:00
extern void ata_scsi_rbuf_fill ( struct ata_scsi_args * args ,
2005-04-17 02:20:36 +04:00
unsigned int ( * actor ) ( struct ata_scsi_args * args ,
u8 * rbuf , unsigned int buflen ) ) ;
2006-05-15 15:58:07 +04:00
extern void ata_schedule_scsi_eh ( struct Scsi_Host * shost ) ;
2006-06-12 08:01:34 +04:00
extern void ata_scsi_dev_rescan ( void * data ) ;
2005-04-17 02:20:36 +04:00
2006-04-02 13:51:53 +04:00
/* libata-eh.c */
extern enum scsi_eh_timer_return ata_scsi_timed_out ( struct scsi_cmnd * cmd ) ;
2006-04-11 21:04:39 +04:00
extern void ata_scsi_error ( struct Scsi_Host * host ) ;
2006-05-31 13:27:27 +04:00
extern void ata_port_wait_eh ( struct ata_port * ap ) ;
2006-05-15 15:58:05 +04:00
extern void ata_qc_schedule_eh ( struct ata_queued_cmd * qc ) ;
2006-04-02 13:51:53 +04:00
2005-04-17 02:20:36 +04:00
# endif /* __LIBATA_H__ */