1/* fcp.h: Definitions for Fibre Channel Protocol.
2 *
3 * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
4 *
5 */
6
7#ifndef __FCP_H
8#define __FCP_H
9
10/* FCP addressing is hierarchical with up to 4 layers, MS first.
11   Exact meaning of the addresses is up to the vendor */
12
13/* fcp_cntl field */
14#define FCP_CNTL_WRITE		0x00000001	/* Initiator write */
15#define FCP_CNTL_READ		0x00000002	/* Initiator read */
16#define FCP_CNTL_ABORT_TSK	0x00000200	/* Abort task set */
17#define FCP_CNTL_CLR_TASK	0x00000400	/* Clear task set */
18#define FCP_CNTL_RESET		0x00002000	/* Reset */
19#define FCP_CNTL_CLR_ACA	0x00004000	/* Clear ACA */
20#define FCP_CNTL_KILL_TASK	0x00008000	/* Terminate task */
21#define FCP_CNTL_QTYPE_MASK	0x00070000	/* Tagged queueing type */
22#define 	FCP_CNTL_QTYPE_SIMPLE		0x00000000
23#define 	FCP_CNTL_QTYPE_HEAD_OF_Q	0x00010000
24#define		FCP_CNTL_QTYPE_ORDERED		0x00020000
25#define 	FCP_CNTL_QTYPE_ACA_Q_TAG	0x00040000
26#define 	FCP_CNTL_QTYPE_UNTAGGED		0x00050000
27
28typedef struct {
29	u16	fcp_addr[4];
30	u32	fcp_cntl;
31	u8	fcp_cdb[16];
32	u32	fcp_data_len;
33} fcp_cmd;
34
35/* fcp_status field */
36#define	FCP_STATUS_MASK		0x000000ff	/* scsi status of command */
37#define FCP_STATUS_RSP_LEN	0x00000100	/* response_len != 0 */
38#define FCP_STATUS_SENSE_LEN	0x00000200	/* sense_len != 0 */
39#define FCP_STATUS_RESID	0x00000400	/* resid != 0 */
40
41typedef struct {
42	u32	xxx[2];
43	u32	fcp_status;
44	u32	fcp_resid;
45	u32	fcp_sense_len;
46	u32	fcp_response_len;
47	/* u8	fcp_sense[fcp_sense_len]; */
48	/* u8	fcp_response[fcp_response_len]; */
49} fcp_rsp;
50
51/* fcp errors */
52
53/* rsp_info_type field */
54#define FCP_RSP_SCSI_BUS_ERR	0x01
55#define FCP_RSP_SCSI_PORT_ERR	0x02
56#define FCP_RSP_CARD_ERR	0x03
57
58/* isp_status field */
59#define FCP_RSP_CMD_COMPLETE	0x0000
60#define FCP_RSP_CMD_INCOMPLETE	0x0001
61#define FCP_RSP_CMD_DMA_ERR	0x0002
62#define FCP_RSP_CMD_TRAN_ERR	0x0003
63#define FCP_RSP_CMD_RESET	0x0004
64#define FCP_RSP_CMD_ABORTED	0x0005
65#define FCP_RSP_CMD_TIMEOUT	0x0006
66#define FCP_RSP_CMD_OVERRUN	0x0007
67
68/* isp_state_flags field */
69#define FCP_RSP_ST_GOT_BUS	0x0100
70#define FCP_RSP_ST_GOT_TARGET	0x0200
71#define FCP_RSP_ST_SENT_CMD	0x0400
72#define FCP_RSP_ST_XFRD_DATA	0x0800
73#define FCP_RSP_ST_GOT_STATUS	0x1000
74#define FCP_RSP_ST_GOT_SENSE	0x2000
75
76/* isp_stat_flags field */
77#define FCP_RSP_STAT_DISC	0x0001
78#define FCP_RSP_STAT_SYNC	0x0002
79#define FCP_RSP_STAT_PERR	0x0004
80#define FCP_RSP_STAT_BUS_RESET	0x0008
81#define FCP_RSP_STAT_DEV_RESET	0x0010
82#define FCP_RSP_STAT_ABORTED	0x0020
83#define FCP_RSP_STAT_TIMEOUT	0x0040
84#define FCP_RSP_STAT_NEGOTIATE	0x0080
85
86typedef struct {
87	u8	rsp_info_type;
88	u8	xxx;
89	u16	isp_status;
90	u16	isp_state_flags;
91	u16	isp_stat_flags;
92} fcp_scsi_err;
93
94#endif /* !(__FCP_H) */
95