Roll core version minor. Clean out some target mode stuff. Respecify some
queue related functions to take u_int16_t's. Restructure the softc a bit.
This commit is contained in:
parent
f5c2acedc2
commit
0f0fbfa802
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ispvar.h,v 1.25 1999/10/17 01:37:34 mjacob Exp $ */
|
||||
/* $NetBSD: ispvar.h,v 1.26 1999/12/04 03:06:05 mjacob Exp $ */
|
||||
/*
|
||||
* Copyright (C) 1999 National Aeronautics & Space Administration
|
||||
* All rights reserved.
|
||||
@ -35,16 +35,25 @@
|
||||
|
||||
#if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <dev/ic/ispmbox.h>
|
||||
#ifdef ISP_TARGET_MODE
|
||||
#include <dev/ic/isp_target.h>
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __FreeBSD__
|
||||
#include <dev/isp/ispmbox.h>
|
||||
#ifdef ISP_TARGET_MODE
|
||||
#include <dev/isp/isp_target.h>
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
#include "ispmbox.h"
|
||||
#ifdef ISP_TARGET_MODE
|
||||
#include "isp_target.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define ISP_CORE_VERSION_MAJOR 1
|
||||
#define ISP_CORE_VERSION_MINOR 10
|
||||
#define ISP_CORE_VERSION_MINOR 11
|
||||
|
||||
/*
|
||||
* Vector for bus specific code to provide specific services.
|
||||
@ -55,7 +64,7 @@ struct ispmdvec {
|
||||
void (*dv_wr_reg) __P((struct ispsoftc *, int, u_int16_t));
|
||||
int (*dv_mbxdma) __P((struct ispsoftc *));
|
||||
int (*dv_dmaset) __P((struct ispsoftc *,
|
||||
ISP_SCSI_XFER_T *, ispreq_t *, u_int8_t *, u_int8_t));
|
||||
ISP_SCSI_XFER_T *, ispreq_t *, u_int16_t *, u_int16_t));
|
||||
void (*dv_dmaclr)
|
||||
__P((struct ispsoftc *, ISP_SCSI_XFER_T *, u_int32_t));
|
||||
void (*dv_reset0) __P((struct ispsoftc *));
|
||||
@ -90,6 +99,40 @@ struct ispmdvec {
|
||||
#define ISP_MAX_LUNS(isp) \
|
||||
(IS_FC(isp)? _ISP_FC_LUN(isp) : _ISP_SCSI_LUN(isp))
|
||||
|
||||
|
||||
/*
|
||||
* Macros to read, write ISP registers through bus specific code.
|
||||
*/
|
||||
|
||||
#define ISP_READ(isp, reg) \
|
||||
(*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg))
|
||||
|
||||
#define ISP_WRITE(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val))
|
||||
|
||||
#define ISP_MBOXDMASETUP(isp) \
|
||||
(*(isp)->isp_mdvec->dv_mbxdma)((isp))
|
||||
|
||||
#define ISP_DMASETUP(isp, xs, req, iptrp, optr) \
|
||||
(*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr))
|
||||
|
||||
#define ISP_DMAFREE(isp, xs, hndl) \
|
||||
if ((isp)->isp_mdvec->dv_dmaclr) \
|
||||
(*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl))
|
||||
|
||||
#define ISP_RESET0(isp) \
|
||||
if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp))
|
||||
#define ISP_RESET1(isp) \
|
||||
if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp))
|
||||
#define ISP_DUMPREGS(isp) \
|
||||
if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp))
|
||||
|
||||
#define ISP_SETBITS(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) | (val))
|
||||
|
||||
#define ISP_CLRBITS(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) & ~(val))
|
||||
|
||||
/* this is the size of a queue entry (request and response) */
|
||||
#define QENTRY_LEN 64
|
||||
/* both request and result queue length must be a power of two */
|
||||
@ -106,6 +149,10 @@ struct ispmdvec {
|
||||
#define ISP_QAVAIL(in, out, qlen) \
|
||||
((in == out)? (qlen - 1) : ((in > out)? \
|
||||
((qlen - 1) - (in - out)) : (out - in - 1)))
|
||||
|
||||
#define ISP_ADD_REQUEST(isp, iptr) \
|
||||
ISP_WRITE(isp, INMAILBOX4, iptr), isp->isp_reqidx = iptr
|
||||
|
||||
/*
|
||||
* SCSI Specific Host Adapter Parameters- per bus, per target
|
||||
*/
|
||||
@ -248,34 +295,36 @@ struct ispsoftc {
|
||||
struct isposinfo isp_osinfo;
|
||||
|
||||
/*
|
||||
* Pointer to bus specific data
|
||||
* Pointer to bus specific functions and data
|
||||
*/
|
||||
struct ispmdvec * isp_mdvec;
|
||||
|
||||
/*
|
||||
* Mostly nonvolatile state.
|
||||
* (Mostly) nonvolatile state. Board specific parameters
|
||||
* may contain some volatile state (e.g., current loop state).
|
||||
*/
|
||||
|
||||
u_int isp_clock : 8,
|
||||
isp_confopts : 8,
|
||||
isp_fast_mttr : 1,
|
||||
: 1,
|
||||
isp_used : 1,
|
||||
isp_dblev : 3,
|
||||
isp_dogactive : 1,
|
||||
isp_bustype : 1, /* BUS Implementation */
|
||||
isp_type : 8; /* HBA Type and Revision */
|
||||
void * isp_param; /* type specific */
|
||||
u_int16_t isp_fwrev[3]; /* Loaded F/W revision */
|
||||
u_int16_t isp_romfw_rev[3]; /* PROM F/W revision */
|
||||
u_int16_t isp_maxcmds; /* max possible I/O cmds */
|
||||
u_int8_t isp_type; /* HBA Chip Type */
|
||||
u_int8_t isp_revision; /* HBA Chip H/W Revision */
|
||||
|
||||
u_int16_t isp_fwrev[3]; /* Running F/W revision */
|
||||
u_int16_t isp_romfw_rev[3]; /* 'ROM' F/W revision */
|
||||
u_int16_t isp_maxcmds; /* max active I/O cmds */
|
||||
void * isp_param;
|
||||
u_int32_t : 4,
|
||||
isp_touched : 1, /* board ever seen? */
|
||||
isp_fast_mttr : 1, /* fast sram */
|
||||
isp_bustype : 1, /* SBus or PCI */
|
||||
isp_dogactive : 1, /* watchdog running */
|
||||
isp_dblev : 8, /* debug level */
|
||||
isp_clock : 8, /* input clock */
|
||||
isp_confopts : 8; /* config options */
|
||||
|
||||
/*
|
||||
* Volatile state
|
||||
*/
|
||||
|
||||
volatile u_int : 9,
|
||||
volatile u_int32_t : 9,
|
||||
isp_state : 3,
|
||||
isp_sendmarker : 2, /* send a marker entry */
|
||||
isp_update : 2, /* update parameters */
|
||||
@ -287,7 +336,7 @@ struct ispsoftc {
|
||||
volatile u_int16_t isp_lasthdls; /* last handle seed */
|
||||
|
||||
/*
|
||||
* Active commands are stored here, found by handle functions.
|
||||
* Active commands are stored here, indexed by handle functions.
|
||||
*/
|
||||
ISP_SCSI_XFER_T **isp_xflist;
|
||||
|
||||
@ -316,7 +365,8 @@ struct ispsoftc {
|
||||
*/
|
||||
#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
|
||||
#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
|
||||
#define ISP_CFG_FULL_DUPLEX 0x01 /* Fibre Channel Only */
|
||||
#define ISP_CFG_FULL_DUPLEX 0x01 /* Full Duplex (Fibre Channel only) */
|
||||
#define ISP_CFG_OWNWWN 0x02 /* override NVRAM wwn */
|
||||
|
||||
#define ISP_FW_REV(maj, min, mic) ((maj << 24) | (min << 16) | mic)
|
||||
#define ISP_FW_REVX(xp) ((xp[0]<<24) | (xp[1] << 16) | xp[2])
|
||||
@ -349,39 +399,6 @@ struct ispsoftc {
|
||||
#define IS_12X0(isp) (isp->isp_type == ISP_HA_SCSI_12X0)
|
||||
#define IS_FC(isp) (isp->isp_type & ISP_HA_FC)
|
||||
|
||||
/*
|
||||
* Macros to read, write ISP registers through bus specific code.
|
||||
*/
|
||||
|
||||
#define ISP_READ(isp, reg) \
|
||||
(*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg))
|
||||
|
||||
#define ISP_WRITE(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), (val))
|
||||
|
||||
#define ISP_MBOXDMASETUP(isp) \
|
||||
(*(isp)->isp_mdvec->dv_mbxdma)((isp))
|
||||
|
||||
#define ISP_DMASETUP(isp, xs, req, iptrp, optr) \
|
||||
(*(isp)->isp_mdvec->dv_dmaset)((isp), (xs), (req), (iptrp), (optr))
|
||||
|
||||
#define ISP_DMAFREE(isp, xs, hndl) \
|
||||
if ((isp)->isp_mdvec->dv_dmaclr) \
|
||||
(*(isp)->isp_mdvec->dv_dmaclr)((isp), (xs), (hndl))
|
||||
|
||||
#define ISP_RESET0(isp) \
|
||||
if ((isp)->isp_mdvec->dv_reset0) (*(isp)->isp_mdvec->dv_reset0)((isp))
|
||||
#define ISP_RESET1(isp) \
|
||||
if ((isp)->isp_mdvec->dv_reset1) (*(isp)->isp_mdvec->dv_reset1)((isp))
|
||||
#define ISP_DUMPREGS(isp) \
|
||||
if ((isp)->isp_mdvec->dv_dregs) (*(isp)->isp_mdvec->dv_dregs)((isp))
|
||||
|
||||
#define ISP_SETBITS(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) | (val))
|
||||
|
||||
#define ISP_CLRBITS(isp, reg, val) \
|
||||
(*(isp)->isp_mdvec->dv_wr_reg)((isp), (reg), ISP_READ((isp), (reg)) & ~(val))
|
||||
|
||||
/*
|
||||
* Function Prototypes
|
||||
*/
|
||||
@ -423,6 +440,10 @@ typedef enum {
|
||||
ISPCTL_RESET_DEV, /* Reset Device */
|
||||
ISPCTL_ABORT_CMD, /* Abort Command */
|
||||
ISPCTL_UPDATE_PARAMS, /* Update Operating Parameters */
|
||||
#ifdef ISP_TARGET_MODE
|
||||
ISPCTL_ENABLE_LUN, /* enable a LUN */
|
||||
ISPCTL_MODIFY_LUN, /* enable a LUN */
|
||||
#endif
|
||||
ISPCTL_FCLINK_TEST /* Test FC Link Status */
|
||||
} ispctl_t;
|
||||
int isp_control __P((struct ispsoftc *, ispctl_t, void *));
|
||||
@ -444,6 +465,8 @@ typedef enum {
|
||||
ISPASYNC_PDB_CHANGED, /* FC Port Data Base Changed */
|
||||
ISPASYNC_CHANGE_NOTIFY, /* FC SNS Change Notification */
|
||||
ISPASYNC_FABRIC_DEV, /* FC New Fabric Device */
|
||||
ISPASYNC_TARGET_CMD, /* New target command */
|
||||
ISPASYNC_TARGET_EVENT /* New target event */
|
||||
} ispasync_t;
|
||||
int isp_async __P((struct ispsoftc *, ispasync_t, void *));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user