blob: 8e54894b05adba02e6b74e3317e8a9cadb0026f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/* $OpenBSD: siivar.h,v 1.3 2008/08/30 20:13:03 miod Exp $ */
/* $NetBSD: siivar.h,v 1.6 2000/06/02 20:16:51 mhitch Exp $ */
#ifndef _SIIVAR_H
#define _SIIVAR_H
typedef struct scsi_state {
int statusByte; /* status byte returned during STATUS_PHASE */
int dmaDataPhase; /* which data phase to expect */
int dmaCurPhase; /* SCSI phase if DMA is in progress */
int dmaPrevPhase; /* SCSI phase of DMA suspended by disconnect */
u_int dmaAddr[2]; /* DMA buffer memory offsets */
int dmaBufIndex; /* which of the above is currently in use */
int dmalen; /* amount to transfer in this chunk */
int cmdlen; /* total remaining amount of cmd to transfer */
u_char *cmd; /* current pointer within scsicmd->cmd */
int buflen; /* total remaining amount of data to transfer */
char *buf; /* current pointer within scsicmd->buf */
u_short flags; /* see below */
u_int8_t nextCmd; /* next command to send if PENDING_CMD set */
u_short prevComm; /* command reg before disconnect */
u_short dmaCtrl; /* DMA control register if disconnect */
u_short dmaAddrL; /* DMA address register if disconnect */
u_short dmaAddrH; /* DMA address register if disconnect */
u_short dmaCnt; /* DMA count if disconnect */
u_short dmaByte; /* DMA byte if disconnect on odd boundary */
u_short dmaReqAck; /* DMA synchronous xfer offset or 0 if async */
} State;
/* state flags */
#define FIRST_DMA 0x01 /* true if no data DMA started yet */
#define PENDING_CMD 0x02 /* need to send a particular command */
#define SII_NCMD 8
struct sii_softc {
struct device sc_dev; /* us as a device */
struct scsi_link sc_link; /* scsi link struct */
SIIRegs *sc_regs; /* HW address of SII controller chip */
int sc_flags;
int sc_target; /* target SCSI ID if connected */
int sc_hostid;
void (*sii_copytobuf)(void *, u_char *, u_int, int);
void (*sii_copyfrombuf)(void *, u_int, u_char *, int);
struct scsi_xfer *sc_xs[SII_NCMD]; /* currently executing requests */
State sc_st[SII_NCMD]; /* state info for each active command */
u_char sc_buf[258]; /* used for extended messages */
};
/* Machine-independent back-end attach entry point */
void sii_attach(struct sii_softc *sc);
int sii_intr(void *sc);
#endif /* _SIIVAR_H */
|