* LSIFC9xx/LSI409xx Fibre Channel
* running LSI Logic Fusion MPT (Message Passing Technology) firmware.
*
- * Credits:
- * This driver would not exist if not for Alan Cox's development
- * of the linux i2o driver.
- *
- * A huge debt of gratitude is owed to David S. Miller (DaveM)
- * for fixing much of the stupid and broken stuff in the early
- * driver while porting to sparc64 platform. THANK YOU!
- *
- * (see also mptbase.c)
- *
- * Copyright (c) 1999-2004 LSI Logic Corporation
- * Originally By: Steven J. Ralston
- * (mailto:netscape.net)
+ * Copyright (c) 1999-2005 LSI Logic Corporation
* (mailto:mpt_linux_developer@lsil.com)
*
- * $Id: mptscsih.h,v 1.21 2002/12/03 21:26:35 pdelaney Exp $
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
* SCSI Public stuff...
*/
-#define MPT_SCSI_CMD_PER_DEV_HIGH 31
-#define MPT_SCSI_CMD_PER_DEV_LOW 7
+#define MPT_SCSI_CMD_PER_DEV_HIGH 64
+#define MPT_SCSI_CMD_PER_DEV_LOW 32
#define MPT_SCSI_CMD_PER_LUN 7
#define MPTSCSIH_MAX_WIDTH 1
#define MPTSCSIH_MIN_SYNC 0x08
#define MPTSCSIH_SAF_TE 0
+#define MPTSCSIH_PT_CLEAR 0
-struct mptscsih_driver_setup
-{
- u8 dv;
- u8 max_width;
- u8 min_sync_fac;
- u8 saf_te;
-};
-
-
-#define MPTSCSIH_DRIVER_SETUP \
-{ \
- MPTSCSIH_DOMAIN_VALIDATION, \
- MPTSCSIH_MAX_WIDTH, \
- MPTSCSIH_MIN_SYNC, \
- MPTSCSIH_SAF_TE, \
-}
-
-
-
-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-/*
- * Various bits and pieces broke within the lk-2.4.0-testN series:-(
- * So here are various HACKS to work around them.
- */
-
-/*
- * tq_scheduler disappeared @ lk-2.4.0-test12
- * (right when <linux/sched.h> newly defined TQ_ACTIVE)
- * tq_struct reworked in 2.5.41. Include workqueue.h.
- */
-# include <linux/sched.h>
-# include <linux/workqueue.h>
-#define SCHEDULE_TASK(x) \
- if (schedule_work(x) == 0) { \
- /*MOD_DEC_USE_COUNT*/; \
- }
-
-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-
-#define x_scsi_info mptscsih_info
-#define x_scsi_queuecommand mptscsih_qcmd
-#define x_scsi_abort mptscsih_abort
-#define x_scsi_bus_reset mptscsih_bus_reset
-#define x_scsi_dev_reset mptscsih_dev_reset
-#define x_scsi_host_reset mptscsih_host_reset
-#define x_scsi_bios_param mptscsih_bios_param
-
-#define x_scsi_slave_alloc mptscsih_slave_alloc
-#define x_scsi_slave_configure mptscsih_slave_configure
-#define x_scsi_slave_destroy mptscsih_slave_destroy
-#define x_scsi_proc_info mptscsih_proc_info
-
-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-/*
- * MPT SCSI Host / Initiator decls...
- */
-extern const char *x_scsi_info(struct Scsi_Host *);
-extern int x_scsi_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
-extern int x_scsi_abort(Scsi_Cmnd *);
-extern int x_scsi_bus_reset(Scsi_Cmnd *);
-extern int x_scsi_dev_reset(Scsi_Cmnd *);
-extern int x_scsi_host_reset(Scsi_Cmnd *);
-extern int x_scsi_bios_param(struct scsi_device * sdev, struct block_device *bdev,
- sector_t capacity, int geom[]);
-extern int x_scsi_slave_alloc(Scsi_Device *);
-extern int x_scsi_slave_configure(Scsi_Device *);
-extern void x_scsi_slave_destroy(Scsi_Device *);
-extern int x_scsi_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int);
-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-
-/* include/scsi/scsi.h may not be quite complete... */
-#ifndef RESERVE_10
-#define RESERVE_10 0x56
-#endif
-#ifndef RELEASE_10
-#define RELEASE_10 0x57
-#endif
-#ifndef PERSISTENT_RESERVE_IN
-#define PERSISTENT_RESERVE_IN 0x5e
-#endif
-#ifndef PERSISTENT_RESERVE_OUT
-#define PERSISTENT_RESERVE_OUT 0x5f
#endif
-/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-
+extern void mptscsih_remove(struct pci_dev *);
+extern void mptscsih_shutdown(struct pci_dev *);
+#ifdef CONFIG_PM
+extern int mptscsih_suspend(struct pci_dev *pdev, pm_message_t state);
+extern int mptscsih_resume(struct pci_dev *pdev);
#endif
-
+extern int mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int func);
+extern const char * mptscsih_info(struct Scsi_Host *SChost);
+extern int mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *));
+extern int mptscsih_target_alloc(struct scsi_target *starget);
+extern int mptscsih_slave_alloc(struct scsi_device *device);
+extern void mptscsih_target_destroy(struct scsi_target *starget);
+extern void mptscsih_slave_destroy(struct scsi_device *device);
+extern int mptscsih_slave_configure(struct scsi_device *device);
+extern int mptscsih_abort(struct scsi_cmnd * SCpnt);
+extern int mptscsih_dev_reset(struct scsi_cmnd * SCpnt);
+extern int mptscsih_bus_reset(struct scsi_cmnd * SCpnt);
+extern int mptscsih_host_reset(struct scsi_cmnd *SCpnt);
+extern int mptscsih_bios_param(struct scsi_device * sdev, struct block_device *bdev, sector_t capacity, int geom[]);
+extern int mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
+extern int mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
+extern int mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
+extern int mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply);
+extern int mptscsih_ioc_reset(MPT_ADAPTER *ioc, int post_reset);
+extern int mptscsih_change_queue_depth(struct scsi_device *sdev, int qdepth);
+extern void mptscsih_timer_expired(unsigned long data);
+extern int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun, int ctx2abort, ulong timeout);