#ifndef CPQFCTS_H
#define CPQFCTS_H
#include "cpqfcTSstructs.h"

// These functions are required by the Linux SCSI layers
extern int cpqfcTS_detect(Scsi_Host_Template *);
extern int cpqfcTS_release(struct Scsi_Host *);
extern const char * cpqfcTS_info(struct Scsi_Host *);
extern int cpqfcTS_proc_info(char *, char **, off_t, int, int, int);
extern int cpqfcTS_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
extern int cpqfcTS_abort(Scsi_Cmnd *);
extern int cpqfcTS_reset(Scsi_Cmnd *, unsigned int);
extern int cpqfcTS_eh_abort(Scsi_Cmnd *Cmnd);
extern int cpqfcTS_eh_device_reset(Scsi_Cmnd *);
extern int cpqfcTS_biosparam(Disk *, kdev_t, int[]);
extern int cpqfcTS_ioctl( Scsi_Device *ScsiDev, int Cmnd, void *arg);

// note: since Tachyon TS supports an extended scatter/gather
// linked list of infinite length (with linked Ext S/G pages,
// limited only by available physical memory) we use SG_ALL.

#define CPQFCTS {                                \
 detect:                 cpqfcTS_detect,         \
 release:                cpqfcTS_release,        \
 info:                   cpqfcTS_info,           \
 proc_info:              cpqfcTS_proc_info,      \
 ioctl:                  cpqfcTS_ioctl,          \
 queuecommand:           cpqfcTS_queuecommand,   \
 eh_device_reset_handler:   cpqfcTS_eh_device_reset,   \
 eh_abort_handler:       cpqfcTS_eh_abort,       \
 reset:                  cpqfcTS_reset,          \
 abort:                  cpqfcTS_abort,		 \
 bios_param:             cpqfcTS_biosparam,      \
 can_queue:              CPQFCTS_REQ_QUEUE_LEN,  \
 this_id:                -1,                     \
 sg_tablesize:           SG_ALL,                 \
 cmd_per_lun:            CPQFCTS_CMD_PER_LUN,    \
 present:                0,                      \
 unchecked_isa_dma:      0,                      \
 use_clustering:         ENABLE_CLUSTERING,      \
 use_new_eh_code:        1			 \
}

#endif /* CPQFCTS_H */ 
