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"
2005-08-23 10:53:51 +04:00
# define DRV_VERSION "1.12" /* must be exactly four chars */
2005-04-17 02:20:36 +04:00
struct ata_scsi_args {
u16 * id ;
struct scsi_cmnd * cmd ;
void ( * done ) ( struct scsi_cmnd * ) ;
} ;
/* libata-core.c */
2005-08-30 11:37:42 +04:00
extern int atapi_enabled ;
2005-04-17 02:20:36 +04:00
extern struct ata_queued_cmd * ata_qc_new_init ( struct ata_port * ap ,
struct ata_device * dev ) ;
extern void ata_qc_free ( struct ata_queued_cmd * qc ) ;
extern int ata_qc_issue ( struct ata_queued_cmd * qc ) ;
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 ata_tf_to_host_nolock ( struct ata_port * ap , struct ata_taskfile * tf ) ;
extern void swap_buf_le16 ( u16 * buf , unsigned int buf_words ) ;
/* libata-scsi.c */
extern void ata_to_sense_error ( struct ata_queued_cmd * qc , u8 drv_stat ) ;
extern int ata_scsi_error ( struct Scsi_Host * host ) ;
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-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 ) ) ;
static inline void ata_bad_scsiop ( struct scsi_cmnd * cmd , void ( * done ) ( struct scsi_cmnd * ) )
{
ata_scsi_badcmd ( cmd , done , 0x20 , 0x00 ) ;
}
static inline void ata_bad_cdb ( struct scsi_cmnd * cmd , void ( * done ) ( struct scsi_cmnd * ) )
{
ata_scsi_badcmd ( cmd , done , 0x24 , 0x00 ) ;
}
# endif /* __LIBATA_H__ */