forked from mirrors/linux
		
	[SCSI] initio: Convert into a real Linux driver and update to modern style
This is a mix of a grand clean up I did and a reworking of the hotplug support by Christoph. In testing it works as well as the previous code did (that is -quite badly-) but we can now read it and as it settles in actually debug the long standing problems it shares with the old driver. Signed-off-by: Alan Cox <alan@redhat.com> From Christoph: removal of the BSD license is also fine with me, but should really get a mention in the changelog aswell. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
		
							parent
							
								
									9d399cc7fe
								
							
						
					
					
						commit
						72d39fea90
					
				
					 2 changed files with 1928 additions and 2138 deletions
				
			
		
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -4,6 +4,8 @@
 | 
			
		|||
 * Copyright (c) 1994-1998 Initio Corporation
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Cleanups (c) Copyright 2007 Red Hat <alan@redhat.com>
 | 
			
		||||
 *
 | 
			
		||||
 * 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)
 | 
			
		||||
| 
						 | 
				
			
			@ -18,27 +20,6 @@
 | 
			
		|||
 * along with this program; see the file COPYING.  If not, write to
 | 
			
		||||
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 * --------------------------------------------------------------------------
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions, and the following disclaimer,
 | 
			
		||||
 *    without modification, immediately at the beginning of the file.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. The name of the author may not be used to endorse or promote products
 | 
			
		||||
 *    derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * Where this Software is combined with software released under the terms of 
 | 
			
		||||
 * the GNU General Public License ("GPL") and the terms of the GPL would require the 
 | 
			
		||||
 * combined work to also be released under the terms of the GPL, the terms
 | 
			
		||||
 * and conditions of this License will apply in addition to those of the
 | 
			
		||||
 * GPL with the exception of any terms or conditions of this License that
 | 
			
		||||
 * conflict with, or are expressly prohibited by, the GPL.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
| 
						 | 
				
			
			@ -56,17 +37,6 @@
 | 
			
		|||
 | 
			
		||||
#include <linux/types.h>
 | 
			
		||||
 | 
			
		||||
#define ULONG   unsigned long
 | 
			
		||||
#define USHORT  unsigned short
 | 
			
		||||
#define UCHAR   unsigned char
 | 
			
		||||
#define BYTE    unsigned char
 | 
			
		||||
#define WORD    unsigned short
 | 
			
		||||
#define DWORD   unsigned long
 | 
			
		||||
#define UBYTE   unsigned char
 | 
			
		||||
#define UWORD   unsigned short
 | 
			
		||||
#define UDWORD  unsigned long
 | 
			
		||||
#define U32     u32
 | 
			
		||||
 | 
			
		||||
#define TOTAL_SG_ENTRY		32
 | 
			
		||||
#define MAX_SUPPORTED_ADAPTERS  8
 | 
			
		||||
#define MAX_OFFSET		15
 | 
			
		||||
| 
						 | 
				
			
			@ -368,55 +338,55 @@ typedef struct {
 | 
			
		|||
/************************************************************************/
 | 
			
		||||
/*              Scatter-Gather Element Structure                        */
 | 
			
		||||
/************************************************************************/
 | 
			
		||||
typedef struct SG_Struc {
 | 
			
		||||
	U32 SG_Ptr;		/* Data Pointer */
 | 
			
		||||
	U32 SG_Len;		/* Data Length */
 | 
			
		||||
} SG;
 | 
			
		||||
struct sg_entry {
 | 
			
		||||
	u32 data;		/* Data Pointer */
 | 
			
		||||
	u32 len;		/* Data Length */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
		SCSI Control Block
 | 
			
		||||
************************************************************************/
 | 
			
		||||
typedef struct Scsi_Ctrl_Blk {
 | 
			
		||||
	struct Scsi_Ctrl_Blk *SCB_NxtScb;
 | 
			
		||||
	UBYTE SCB_Status;	/*4 */
 | 
			
		||||
	UBYTE SCB_NxtStat;	/*5 */
 | 
			
		||||
	UBYTE SCB_Mode;		/*6 */
 | 
			
		||||
	UBYTE SCB_Msgin;	/*7 SCB_Res0 */
 | 
			
		||||
	UWORD SCB_SGIdx;	/*8 */
 | 
			
		||||
	UWORD SCB_SGMax;	/*A */
 | 
			
		||||
struct scsi_ctrl_blk {
 | 
			
		||||
	struct scsi_ctrl_blk *next;
 | 
			
		||||
	u8 status;	/*4 */
 | 
			
		||||
	u8 next_state;	/*5 */
 | 
			
		||||
	u8 mode;		/*6 */
 | 
			
		||||
	u8 msgin;	/*7 SCB_Res0 */
 | 
			
		||||
	u16 sgidx;	/*8 */
 | 
			
		||||
	u16 sgmax;	/*A */
 | 
			
		||||
#ifdef ALPHA
 | 
			
		||||
	U32 SCB_Reserved[2];	/*C */
 | 
			
		||||
	u32 reserved[2];	/*C */
 | 
			
		||||
#else
 | 
			
		||||
	U32 SCB_Reserved[3];	/*C */
 | 
			
		||||
	u32 reserved[3];	/*C */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	U32 SCB_XferLen;	/*18 Current xfer len           */
 | 
			
		||||
	U32 SCB_TotXLen;	/*1C Total xfer len             */
 | 
			
		||||
	U32 SCB_PAddr;		/*20 SCB phy. Addr. */
 | 
			
		||||
	u32 xferlen;	/*18 Current xfer len           */
 | 
			
		||||
	u32 totxlen;	/*1C Total xfer len             */
 | 
			
		||||
	u32 paddr;		/*20 SCB phy. Addr. */
 | 
			
		||||
 | 
			
		||||
	UBYTE SCB_Opcode;	/*24 SCB command code */
 | 
			
		||||
	UBYTE SCB_Flags;	/*25 SCB Flags */
 | 
			
		||||
	UBYTE SCB_Target;	/*26 Target Id */
 | 
			
		||||
	UBYTE SCB_Lun;		/*27 Lun */
 | 
			
		||||
	U32 SCB_BufPtr;		/*28 Data Buffer Pointer */
 | 
			
		||||
	U32 SCB_BufLen;		/*2C Data Allocation Length */
 | 
			
		||||
	UBYTE SCB_SGLen;	/*30 SG list # */
 | 
			
		||||
	UBYTE SCB_SenseLen;	/*31 Sense Allocation Length */
 | 
			
		||||
	UBYTE SCB_HaStat;	/*32 */
 | 
			
		||||
	UBYTE SCB_TaStat;	/*33 */
 | 
			
		||||
	UBYTE SCB_CDBLen;	/*34 CDB Length */
 | 
			
		||||
	UBYTE SCB_Ident;	/*35 Identify */
 | 
			
		||||
	UBYTE SCB_TagMsg;	/*36 Tag Message */
 | 
			
		||||
	UBYTE SCB_TagId;	/*37 Queue Tag */
 | 
			
		||||
	UBYTE SCB_CDB[12];	/*38 */
 | 
			
		||||
	U32 SCB_SGPAddr;	/*44 SG List/Sense Buf phy. Addr. */
 | 
			
		||||
	U32 SCB_SensePtr;	/*48 Sense data pointer */
 | 
			
		||||
	void (*SCB_Post) (BYTE *, BYTE *);	/*4C POST routine */
 | 
			
		||||
	struct scsi_cmnd *SCB_Srb;	/*50 SRB Pointer */
 | 
			
		||||
	SG SCB_SGList[TOTAL_SG_ENTRY];	/*54 Start of SG list */
 | 
			
		||||
} SCB;
 | 
			
		||||
	u8 opcode;	/*24 SCB command code */
 | 
			
		||||
	u8 flags;	/*25 SCB Flags */
 | 
			
		||||
	u8 target;	/*26 Target Id */
 | 
			
		||||
	u8 lun;		/*27 Lun */
 | 
			
		||||
	u32 bufptr;		/*28 Data Buffer Pointer */
 | 
			
		||||
	u32 buflen;		/*2C Data Allocation Length */
 | 
			
		||||
	u8 sglen;	/*30 SG list # */
 | 
			
		||||
	u8 senselen;	/*31 Sense Allocation Length */
 | 
			
		||||
	u8 hastat;	/*32 */
 | 
			
		||||
	u8 tastat;	/*33 */
 | 
			
		||||
	u8 cdblen;	/*34 CDB Length */
 | 
			
		||||
	u8 ident;	/*35 Identify */
 | 
			
		||||
	u8 tagmsg;	/*36 Tag Message */
 | 
			
		||||
	u8 tagid;	/*37 Queue Tag */
 | 
			
		||||
	u8 cdb[12];	/*38 */
 | 
			
		||||
	u32 sgpaddr;	/*44 SG List/Sense Buf phy. Addr. */
 | 
			
		||||
	u32 senseptr;	/*48 Sense data pointer */
 | 
			
		||||
	void (*post) (u8 *, u8 *);	/*4C POST routine */
 | 
			
		||||
	struct scsi_cmnd *srb;	/*50 SRB Pointer */
 | 
			
		||||
	struct sg_entry sglist[TOTAL_SG_ENTRY];	/*54 Start of SG list */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Bit Definition for SCB_Status */
 | 
			
		||||
/* Bit Definition for status */
 | 
			
		||||
#define SCB_RENT        0x01
 | 
			
		||||
#define SCB_PEND        0x02
 | 
			
		||||
#define SCB_CONTIG      0x04	/* Contigent Allegiance */
 | 
			
		||||
| 
						 | 
				
			
			@ -425,17 +395,17 @@ typedef struct Scsi_Ctrl_Blk {
 | 
			
		|||
#define SCB_DONE        0x20
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Opcodes of SCB_Opcode */
 | 
			
		||||
/* Opcodes for opcode */
 | 
			
		||||
#define ExecSCSI        0x1
 | 
			
		||||
#define BusDevRst       0x2
 | 
			
		||||
#define AbortCmd        0x3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Bit Definition for SCB_Mode */
 | 
			
		||||
/* Bit Definition for mode */
 | 
			
		||||
#define SCM_RSENS       0x01	/* request sense mode */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Bit Definition for SCB_Flags */
 | 
			
		||||
/* Bit Definition for flags */
 | 
			
		||||
#define SCF_DONE        0x01
 | 
			
		||||
#define SCF_POST        0x02
 | 
			
		||||
#define SCF_SENSE       0x04
 | 
			
		||||
| 
						 | 
				
			
			@ -492,15 +462,14 @@ typedef struct Scsi_Ctrl_Blk {
 | 
			
		|||
		Target Device Control Structure
 | 
			
		||||
**********************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct Tar_Ctrl_Struc {
 | 
			
		||||
	UWORD TCS_Flags;	/* 0 */
 | 
			
		||||
	UBYTE TCS_JS_Period;	/* 2 */
 | 
			
		||||
	UBYTE TCS_SConfig0;	/* 3 */
 | 
			
		||||
 | 
			
		||||
	UWORD TCS_DrvFlags;	/* 4 */
 | 
			
		||||
	UBYTE TCS_DrvHead;	/* 6 */
 | 
			
		||||
	UBYTE TCS_DrvSector;	/* 7 */
 | 
			
		||||
} TCS;
 | 
			
		||||
struct target_control {
 | 
			
		||||
	u16 flags;
 | 
			
		||||
	u8 js_period;
 | 
			
		||||
	u8 sconfig0;
 | 
			
		||||
	u16 drv_flags;
 | 
			
		||||
	u8 heads;
 | 
			
		||||
	u8 sectors;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
		Target Device Control Structure
 | 
			
		||||
| 
						 | 
				
			
			@ -523,62 +492,53 @@ typedef struct Tar_Ctrl_Struc {
 | 
			
		|||
#define TCF_DRV_EN_TAG          0x0800
 | 
			
		||||
#define TCF_DRV_255_63          0x0400
 | 
			
		||||
 | 
			
		||||
typedef struct I91u_Adpt_Struc {
 | 
			
		||||
	UWORD ADPT_BIOS;	/* 0 */
 | 
			
		||||
	UWORD ADPT_BASE;	/* 1 */
 | 
			
		||||
	UBYTE ADPT_Bus;		/* 2 */
 | 
			
		||||
	UBYTE ADPT_Device;	/* 3 */
 | 
			
		||||
	UBYTE ADPT_INTR;	/* 4 */
 | 
			
		||||
} INI_ADPT_STRUCT;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***********************************************************************
 | 
			
		||||
	      Host Adapter Control Structure
 | 
			
		||||
************************************************************************/
 | 
			
		||||
typedef struct Ha_Ctrl_Struc {
 | 
			
		||||
	UWORD HCS_Base;		/* 00 */
 | 
			
		||||
	UWORD HCS_BIOS;		/* 02 */
 | 
			
		||||
	UBYTE HCS_Intr;		/* 04 */
 | 
			
		||||
	UBYTE HCS_SCSI_ID;	/* 05 */
 | 
			
		||||
	UBYTE HCS_MaxTar;	/* 06 */
 | 
			
		||||
	UBYTE HCS_NumScbs;	/* 07 */
 | 
			
		||||
struct initio_host {
 | 
			
		||||
	u16 addr;		/* 00 */
 | 
			
		||||
	u16 bios_addr;		/* 02 */
 | 
			
		||||
	u8 irq;			/* 04 */
 | 
			
		||||
	u8 scsi_id;		/* 05 */
 | 
			
		||||
	u8 max_tar;		/* 06 */
 | 
			
		||||
	u8 num_scbs;		/* 07 */
 | 
			
		||||
 | 
			
		||||
	UBYTE HCS_Flags;	/* 08 */
 | 
			
		||||
	UBYTE HCS_Index;	/* 09 */
 | 
			
		||||
	UBYTE HCS_HaId;		/* 0A */
 | 
			
		||||
	UBYTE HCS_Config;	/* 0B */
 | 
			
		||||
	UWORD HCS_IdMask;	/* 0C */
 | 
			
		||||
	UBYTE HCS_Semaph;	/* 0E */
 | 
			
		||||
	UBYTE HCS_Phase;	/* 0F */
 | 
			
		||||
	UBYTE HCS_JSStatus0;	/* 10 */
 | 
			
		||||
	UBYTE HCS_JSInt;	/* 11 */
 | 
			
		||||
	UBYTE HCS_JSStatus1;	/* 12 */
 | 
			
		||||
	UBYTE HCS_SConf1;	/* 13 */
 | 
			
		||||
	u8 flags;		/* 08 */
 | 
			
		||||
	u8 index;		/* 09 */
 | 
			
		||||
	u8 ha_id;		/* 0A */
 | 
			
		||||
	u8 config;		/* 0B */
 | 
			
		||||
	u16 idmask;		/* 0C */
 | 
			
		||||
	u8 semaph;		/* 0E */
 | 
			
		||||
	u8 phase;		/* 0F */
 | 
			
		||||
	u8 jsstatus0;		/* 10 */
 | 
			
		||||
	u8 jsint;		/* 11 */
 | 
			
		||||
	u8 jsstatus1;		/* 12 */
 | 
			
		||||
	u8 sconf1;		/* 13 */
 | 
			
		||||
 | 
			
		||||
	UBYTE HCS_Msg[8];	/* 14 */
 | 
			
		||||
	SCB *HCS_NxtAvail;	/* 1C */
 | 
			
		||||
	SCB *HCS_Scb;		/* 20 */
 | 
			
		||||
	SCB *HCS_ScbEnd;	/* 24 */
 | 
			
		||||
	SCB *HCS_NxtPend;	/* 28 */
 | 
			
		||||
	SCB *HCS_NxtContig;	/* 2C */
 | 
			
		||||
	SCB *HCS_ActScb;	/* 30 */
 | 
			
		||||
	TCS *HCS_ActTcs;	/* 34 */
 | 
			
		||||
	u8 msg[8];		/* 14 */
 | 
			
		||||
	struct scsi_ctrl_blk *next_avail;	/* 1C */
 | 
			
		||||
	struct scsi_ctrl_blk *scb;		/* 20 */
 | 
			
		||||
	struct scsi_ctrl_blk *scb_end;		/* 24 */ /*UNUSED*/
 | 
			
		||||
	struct scsi_ctrl_blk *next_pending;	/* 28 */
 | 
			
		||||
	struct scsi_ctrl_blk *next_contig;	/* 2C */ /*UNUSED*/
 | 
			
		||||
	struct scsi_ctrl_blk *active;		/* 30 */
 | 
			
		||||
	struct target_control *active_tc;	/* 34 */
 | 
			
		||||
 | 
			
		||||
	SCB *HCS_FirstAvail;	/* 38 */
 | 
			
		||||
	SCB *HCS_LastAvail;	/* 3C */
 | 
			
		||||
	SCB *HCS_FirstPend;	/* 40 */
 | 
			
		||||
	SCB *HCS_LastPend;	/* 44 */
 | 
			
		||||
	SCB *HCS_FirstBusy;	/* 48 */
 | 
			
		||||
	SCB *HCS_LastBusy;	/* 4C */
 | 
			
		||||
	SCB *HCS_FirstDone;	/* 50 */
 | 
			
		||||
	SCB *HCS_LastDone;	/* 54 */
 | 
			
		||||
	UBYTE HCS_MaxTags[16];	/* 58 */
 | 
			
		||||
	UBYTE HCS_ActTags[16];	/* 68 */
 | 
			
		||||
	TCS HCS_Tcs[MAX_TARGETS];	/* 78 */
 | 
			
		||||
	spinlock_t HCS_AvailLock;
 | 
			
		||||
	spinlock_t HCS_SemaphLock;
 | 
			
		||||
	struct scsi_ctrl_blk *first_avail;	/* 38 */
 | 
			
		||||
	struct scsi_ctrl_blk *last_avail;	/* 3C */
 | 
			
		||||
	struct scsi_ctrl_blk *first_pending;	/* 40 */
 | 
			
		||||
	struct scsi_ctrl_blk *last_pending;	/* 44 */
 | 
			
		||||
	struct scsi_ctrl_blk *first_busy;	/* 48 */
 | 
			
		||||
	struct scsi_ctrl_blk *last_busy;	/* 4C */
 | 
			
		||||
	struct scsi_ctrl_blk *first_done;	/* 50 */
 | 
			
		||||
	struct scsi_ctrl_blk *last_done;	/* 54 */
 | 
			
		||||
	u8 max_tags[16];	/* 58 */
 | 
			
		||||
	u8 act_tags[16];	/* 68 */
 | 
			
		||||
	struct target_control targets[MAX_TARGETS];	/* 78 */
 | 
			
		||||
	spinlock_t avail_lock;
 | 
			
		||||
	spinlock_t semaph_lock;
 | 
			
		||||
	struct pci_dev *pci_dev;
 | 
			
		||||
} HCS;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Bit Definition for HCB_Config */
 | 
			
		||||
#define HCC_SCSI_RESET          0x01
 | 
			
		||||
| 
						 | 
				
			
			@ -599,47 +559,47 @@ typedef struct Ha_Ctrl_Struc {
 | 
			
		|||
*******************************************************************/
 | 
			
		||||
 | 
			
		||||
typedef struct _NVRAM_SCSI {	/* SCSI channel configuration   */
 | 
			
		||||
	UCHAR NVM_ChSCSIID;	/* 0Ch -> Channel SCSI ID       */
 | 
			
		||||
	UCHAR NVM_ChConfig1;	/* 0Dh -> Channel config 1      */
 | 
			
		||||
	UCHAR NVM_ChConfig2;	/* 0Eh -> Channel config 2      */
 | 
			
		||||
	UCHAR NVM_NumOfTarg;	/* 0Fh -> Number of SCSI target */
 | 
			
		||||
	u8 NVM_ChSCSIID;	/* 0Ch -> Channel SCSI ID       */
 | 
			
		||||
	u8 NVM_ChConfig1;	/* 0Dh -> Channel config 1      */
 | 
			
		||||
	u8 NVM_ChConfig2;	/* 0Eh -> Channel config 2      */
 | 
			
		||||
	u8 NVM_NumOfTarg;	/* 0Fh -> Number of SCSI target */
 | 
			
		||||
	/* SCSI target configuration    */
 | 
			
		||||
	UCHAR NVM_Targ0Config;	/* 10h -> Target 0 configuration */
 | 
			
		||||
	UCHAR NVM_Targ1Config;	/* 11h -> Target 1 configuration */
 | 
			
		||||
	UCHAR NVM_Targ2Config;	/* 12h -> Target 2 configuration */
 | 
			
		||||
	UCHAR NVM_Targ3Config;	/* 13h -> Target 3 configuration */
 | 
			
		||||
	UCHAR NVM_Targ4Config;	/* 14h -> Target 4 configuration */
 | 
			
		||||
	UCHAR NVM_Targ5Config;	/* 15h -> Target 5 configuration */
 | 
			
		||||
	UCHAR NVM_Targ6Config;	/* 16h -> Target 6 configuration */
 | 
			
		||||
	UCHAR NVM_Targ7Config;	/* 17h -> Target 7 configuration */
 | 
			
		||||
	UCHAR NVM_Targ8Config;	/* 18h -> Target 8 configuration */
 | 
			
		||||
	UCHAR NVM_Targ9Config;	/* 19h -> Target 9 configuration */
 | 
			
		||||
	UCHAR NVM_TargAConfig;	/* 1Ah -> Target A configuration */
 | 
			
		||||
	UCHAR NVM_TargBConfig;	/* 1Bh -> Target B configuration */
 | 
			
		||||
	UCHAR NVM_TargCConfig;	/* 1Ch -> Target C configuration */
 | 
			
		||||
	UCHAR NVM_TargDConfig;	/* 1Dh -> Target D configuration */
 | 
			
		||||
	UCHAR NVM_TargEConfig;	/* 1Eh -> Target E configuration */
 | 
			
		||||
	UCHAR NVM_TargFConfig;	/* 1Fh -> Target F configuration */
 | 
			
		||||
	u8 NVM_Targ0Config;	/* 10h -> Target 0 configuration */
 | 
			
		||||
	u8 NVM_Targ1Config;	/* 11h -> Target 1 configuration */
 | 
			
		||||
	u8 NVM_Targ2Config;	/* 12h -> Target 2 configuration */
 | 
			
		||||
	u8 NVM_Targ3Config;	/* 13h -> Target 3 configuration */
 | 
			
		||||
	u8 NVM_Targ4Config;	/* 14h -> Target 4 configuration */
 | 
			
		||||
	u8 NVM_Targ5Config;	/* 15h -> Target 5 configuration */
 | 
			
		||||
	u8 NVM_Targ6Config;	/* 16h -> Target 6 configuration */
 | 
			
		||||
	u8 NVM_Targ7Config;	/* 17h -> Target 7 configuration */
 | 
			
		||||
	u8 NVM_Targ8Config;	/* 18h -> Target 8 configuration */
 | 
			
		||||
	u8 NVM_Targ9Config;	/* 19h -> Target 9 configuration */
 | 
			
		||||
	u8 NVM_TargAConfig;	/* 1Ah -> Target A configuration */
 | 
			
		||||
	u8 NVM_TargBConfig;	/* 1Bh -> Target B configuration */
 | 
			
		||||
	u8 NVM_TargCConfig;	/* 1Ch -> Target C configuration */
 | 
			
		||||
	u8 NVM_TargDConfig;	/* 1Dh -> Target D configuration */
 | 
			
		||||
	u8 NVM_TargEConfig;	/* 1Eh -> Target E configuration */
 | 
			
		||||
	u8 NVM_TargFConfig;	/* 1Fh -> Target F configuration */
 | 
			
		||||
} NVRAM_SCSI;
 | 
			
		||||
 | 
			
		||||
typedef struct _NVRAM {
 | 
			
		||||
/*----------header ---------------*/
 | 
			
		||||
	USHORT NVM_Signature;	/* 0,1: Signature */
 | 
			
		||||
	UCHAR NVM_Size;		/* 2:   Size of data structure */
 | 
			
		||||
	UCHAR NVM_Revision;	/* 3:   Revision of data structure */
 | 
			
		||||
	u16 NVM_Signature;	/* 0,1: Signature */
 | 
			
		||||
	u8 NVM_Size;		/* 2:   Size of data structure */
 | 
			
		||||
	u8 NVM_Revision;	/* 3:   Revision of data structure */
 | 
			
		||||
	/* ----Host Adapter Structure ---- */
 | 
			
		||||
	UCHAR NVM_ModelByte0;	/* 4:   Model number (byte 0) */
 | 
			
		||||
	UCHAR NVM_ModelByte1;	/* 5:   Model number (byte 1) */
 | 
			
		||||
	UCHAR NVM_ModelInfo;	/* 6:   Model information         */
 | 
			
		||||
	UCHAR NVM_NumOfCh;	/* 7:   Number of SCSI channel */
 | 
			
		||||
	UCHAR NVM_BIOSConfig1;	/* 8:   BIOS configuration 1  */
 | 
			
		||||
	UCHAR NVM_BIOSConfig2;	/* 9:   BIOS configuration 2  */
 | 
			
		||||
	UCHAR NVM_HAConfig1;	/* A:   Hoat adapter configuration 1 */
 | 
			
		||||
	UCHAR NVM_HAConfig2;	/* B:   Hoat adapter configuration 2 */
 | 
			
		||||
	u8 NVM_ModelByte0;	/* 4:   Model number (byte 0) */
 | 
			
		||||
	u8 NVM_ModelByte1;	/* 5:   Model number (byte 1) */
 | 
			
		||||
	u8 NVM_ModelInfo;	/* 6:   Model information         */
 | 
			
		||||
	u8 NVM_NumOfCh;	/* 7:   Number of SCSI channel */
 | 
			
		||||
	u8 NVM_BIOSConfig1;	/* 8:   BIOS configuration 1  */
 | 
			
		||||
	u8 NVM_BIOSConfig2;	/* 9:   BIOS configuration 2  */
 | 
			
		||||
	u8 NVM_HAConfig1;	/* A:   Hoat adapter configuration 1 */
 | 
			
		||||
	u8 NVM_HAConfig2;	/* B:   Hoat adapter configuration 2 */
 | 
			
		||||
	NVRAM_SCSI NVM_SCSIInfo[2];
 | 
			
		||||
	UCHAR NVM_reserved[10];
 | 
			
		||||
	u8 NVM_reserved[10];
 | 
			
		||||
	/* ---------- CheckSum ----------       */
 | 
			
		||||
	USHORT NVM_CheckSum;	/* 0x3E, 0x3F: Checksum of NVRam        */
 | 
			
		||||
	u16 NVM_CheckSum;	/* 0x3E, 0x3F: Checksum of NVRam        */
 | 
			
		||||
} NVRAM, *PNVRAM;
 | 
			
		||||
 | 
			
		||||
/* Bios Configuration for nvram->BIOSConfig1                            */
 | 
			
		||||
| 
						 | 
				
			
			@ -681,19 +641,6 @@ typedef struct _NVRAM {
 | 
			
		|||
#define DISC_ALLOW              0xC0	/* Disconnect is allowed        */
 | 
			
		||||
#define SCSICMD_RequestSense    0x03
 | 
			
		||||
 | 
			
		||||
typedef struct _HCSinfo {
 | 
			
		||||
	ULONG base;
 | 
			
		||||
	UCHAR vec;
 | 
			
		||||
	UCHAR bios;		/* High byte of BIOS address */
 | 
			
		||||
	USHORT BaseAndBios;	/* high byte: pHcsInfo->bios,low byte:pHcsInfo->base */
 | 
			
		||||
} HCSINFO;
 | 
			
		||||
 | 
			
		||||
#define TUL_RD(x,y)             (UCHAR)(inb(  (int)((ULONG)(x+y)) ))
 | 
			
		||||
#define TUL_RDLONG(x,y)         (ULONG)(inl((int)((ULONG)(x+y)) ))
 | 
			
		||||
#define TUL_WR(     adr,data)   outb( (UCHAR)(data), (int)(adr))
 | 
			
		||||
#define TUL_WRSHORT(adr,data)   outw( (UWORD)(data), (int)(adr))
 | 
			
		||||
#define TUL_WRLONG( adr,data)   outl( (ULONG)(data), (int)(adr))
 | 
			
		||||
 | 
			
		||||
#define SCSI_ABORT_SNOOZE 0
 | 
			
		||||
#define SCSI_ABORT_SUCCESS 1
 | 
			
		||||
#define SCSI_ABORT_PENDING 2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue