blob: 0be87ab443c50473fa5fd06f87208fdef6c364a4 [file] [log] [blame]
/*
* seagate.h Copyright (C) 1992 Drew Eckhardt
* low level scsi driver header for ST01/ST02 by
* Drew Eckhardt
*
* <drew@colorado.edu>
*/
#ifndef _SEAGATE_H
#define SEAGATE_H
/*
$Header
*/
#ifndef ASM
int seagate_st0x_detect(int);
int seagate_st0x_command(Scsi_Cmnd *);
int seagate_st0x_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int seagate_st0x_abort(Scsi_Cmnd *, int);
const char *seagate_st0x_info(void);
int seagate_st0x_reset(void);
#ifndef NULL
#define NULL 0
#endif
#ifdef CONFIG_BLK_DEV_SD
int seagate_st0x_biosparam(int, int, int*);
#else
#define seagate_st0x_biosparam NULL
#endif
#define SEAGATE_ST0X {"Seagate ST-01/ST-02", seagate_st0x_detect, \
seagate_st0x_info, seagate_st0x_command, \
seagate_st0x_queue_command, seagate_st0x_abort, \
seagate_st0x_reset, NULL, seagate_st0x_biosparam, \
1, 7, SG_ALL, 1, 0, 0}
#endif
/*
defining PARITY causes parity data to be checked
*/
#define PARITY
/*
Thanks to Brian Antoine for the example code in his Messy-Loss ST-01
driver, and Mitsugu Suzuki for information on the ST-01
SCSI host.
*/
/*
CONTROL defines
*/
#define CMD_RST 0x01
#define CMD_SEL 0x02
#define CMD_BSY 0x04
#define CMD_ATTN 0x08
#define CMD_START_ARB 0x10
#define CMD_EN_PARITY 0x20
#define CMD_INTR 0x40
#define CMD_DRVR_ENABLE 0x80
/*
STATUS
*/
#define STAT_BSY 0x01
#define STAT_MSG 0x02
#define STAT_IO 0x04
#define STAT_CD 0x08
#define STAT_REQ 0x10
#define STAT_SEL 0x20
#define STAT_PARITY 0x40
#define STAT_ARB_CMPL 0x80
/*
REQUESTS
*/
#define REQ_MASK (STAT_CD | STAT_IO | STAT_MSG)
#define REQ_DATAOUT 0
#define REQ_DATAIN STAT_IO
#define REQ_CMDOUT STAT_CD
#define REQ_STATIN (STAT_CD | STAT_IO)
#define REQ_MSGOUT (STAT_MSG | STAT_CD)
#define REQ_MSGIN (STAT_MSG | STAT_CD | STAT_IO)
extern volatile int seagate_st0x_timeout;
#ifdef PARITY
#define BASE_CMD CMD_EN_PARITY
#else
#define BASE_CMD 0
#endif
/*
Debugging code
*/
#define PHASE_BUS_FREE 1
#define PHASE_ARBITRATION 2
#define PHASE_SELECTION 4
#define PHASE_DATAIN 8
#define PHASE_DATAOUT 0x10
#define PHASE_CMDOUT 0x20
#define PHASE_MSGIN 0x40
#define PHASE_MSGOUT 0x80
#define PHASE_STATUSIN 0x100
#define PHASE_ETC (PHASE_DATAIN | PHASE_DATA_OUT | PHASE_CMDOUT | PHASE_MSGIN | PHASE_MSGOUT | PHASE_STATUSIN)
#define PRINT_COMMAND 0x200
#define PHASE_EXIT 0x400
#define PHASE_RESELECT 0x800
#define DEBUG_FAST 0x1000
#define DEBUG_SG 0x2000
#define DEBUG_LINKED 0x4000
#define DEBUG_BORKEN 0x8000
/*
* Control options - these are timeouts specified in .01 seconds.
*/
/* 30, 20 work */
#define ST0X_BUS_FREE_DELAY 25
#define ST0X_SELECTION_DELAY 25
#define eoi() __asm__("push %%eax\nmovb $0x20, %%al\noutb %%al, $0x20\npop %%eax"::)
#define SEAGATE 1 /* these determine the type of the controller */
#define FD 2
#endif