diff options
Diffstat (limited to 'drivers/scsi/bfa/include/bfi/bfi.h')
-rw-r--r-- | drivers/scsi/bfa/include/bfi/bfi.h | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/include/bfi/bfi.h b/drivers/scsi/bfa/include/bfi/bfi.h new file mode 100644 index 000000000000..6cadfe0d4ba1 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi.h | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
10 | * published by the Free Software Foundation | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_H__ | ||
19 | #define __BFI_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <defs/bfa_defs_status.h> | ||
23 | |||
24 | #pragma pack(1) | ||
25 | |||
26 | /** | ||
27 | * Msg header common to all msgs | ||
28 | */ | ||
29 | struct bfi_mhdr_s { | ||
30 | u8 msg_class; /* @ref bfi_mclass_t */ | ||
31 | u8 msg_id; /* msg opcode with in the class */ | ||
32 | union { | ||
33 | struct { | ||
34 | u8 rsvd; | ||
35 | u8 lpu_id; /* msg destination */ | ||
36 | } h2i; | ||
37 | u16 i2htok; /* token in msgs to host */ | ||
38 | } mtag; | ||
39 | }; | ||
40 | |||
41 | #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \ | ||
42 | (_mh).msg_class = (_mc); \ | ||
43 | (_mh).msg_id = (_op); \ | ||
44 | (_mh).mtag.h2i.lpu_id = (_lpuid); \ | ||
45 | } while (0) | ||
46 | |||
47 | #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do { \ | ||
48 | (_mh).msg_class = (_mc); \ | ||
49 | (_mh).msg_id = (_op); \ | ||
50 | (_mh).mtag.i2htok = (_i2htok); \ | ||
51 | } while (0) | ||
52 | |||
53 | /* | ||
54 | * Message opcodes: 0-127 to firmware, 128-255 to host | ||
55 | */ | ||
56 | #define BFI_I2H_OPCODE_BASE 128 | ||
57 | #define BFA_I2HM(_x) ((_x) + BFI_I2H_OPCODE_BASE) | ||
58 | |||
59 | /** | ||
60 | **************************************************************************** | ||
61 | * | ||
62 | * Scatter Gather Element and Page definition | ||
63 | * | ||
64 | **************************************************************************** | ||
65 | */ | ||
66 | |||
67 | #define BFI_SGE_INLINE 1 | ||
68 | #define BFI_SGE_INLINE_MAX (BFI_SGE_INLINE + 1) | ||
69 | |||
70 | /** | ||
71 | * SG Flags | ||
72 | */ | ||
73 | enum { | ||
74 | BFI_SGE_DATA = 0, /* data address, not last */ | ||
75 | BFI_SGE_DATA_CPL = 1, /* data addr, last in current page */ | ||
76 | BFI_SGE_DATA_LAST = 3, /* data address, last */ | ||
77 | BFI_SGE_LINK = 2, /* link address */ | ||
78 | BFI_SGE_PGDLEN = 2, /* cumulative data length for page */ | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | * DMA addresses | ||
83 | */ | ||
84 | union bfi_addr_u { | ||
85 | struct { | ||
86 | u32 addr_lo; | ||
87 | u32 addr_hi; | ||
88 | } a32; | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * Scatter Gather Element | ||
93 | */ | ||
94 | struct bfi_sge_s { | ||
95 | #ifdef __BIGENDIAN | ||
96 | u32 flags : 2, | ||
97 | rsvd : 2, | ||
98 | sg_len : 28; | ||
99 | #else | ||
100 | u32 sg_len : 28, | ||
101 | rsvd : 2, | ||
102 | flags : 2; | ||
103 | #endif | ||
104 | union bfi_addr_u sga; | ||
105 | }; | ||
106 | |||
107 | /** | ||
108 | * Scatter Gather Page | ||
109 | */ | ||
110 | #define BFI_SGPG_DATA_SGES 7 | ||
111 | #define BFI_SGPG_SGES_MAX (BFI_SGPG_DATA_SGES + 1) | ||
112 | #define BFI_SGPG_RSVD_WD_LEN 8 | ||
113 | struct bfi_sgpg_s { | ||
114 | struct bfi_sge_s sges[BFI_SGPG_SGES_MAX]; | ||
115 | u32 rsvd[BFI_SGPG_RSVD_WD_LEN]; | ||
116 | }; | ||
117 | |||
118 | /* | ||
119 | * Large Message structure - 128 Bytes size Msgs | ||
120 | */ | ||
121 | #define BFI_LMSG_SZ 128 | ||
122 | #define BFI_LMSG_PL_WSZ \ | ||
123 | ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr_s)) / 4) | ||
124 | |||
125 | struct bfi_msg_s { | ||
126 | struct bfi_mhdr_s mhdr; | ||
127 | u32 pl[BFI_LMSG_PL_WSZ]; | ||
128 | }; | ||
129 | |||
130 | /** | ||
131 | * Mailbox message structure | ||
132 | */ | ||
133 | #define BFI_MBMSG_SZ 7 | ||
134 | struct bfi_mbmsg_s { | ||
135 | struct bfi_mhdr_s mh; | ||
136 | u32 pl[BFI_MBMSG_SZ]; | ||
137 | }; | ||
138 | |||
139 | /** | ||
140 | * Message Classes | ||
141 | */ | ||
142 | enum bfi_mclass { | ||
143 | BFI_MC_IOC = 1, /* IO Controller (IOC) */ | ||
144 | BFI_MC_DIAG = 2, /* Diagnostic Msgs */ | ||
145 | BFI_MC_FLASH = 3, /* Flash message class */ | ||
146 | BFI_MC_CEE = 4, | ||
147 | BFI_MC_FC_PORT = 5, /* FC port */ | ||
148 | BFI_MC_IOCFC = 6, /* FC - IO Controller (IOC) */ | ||
149 | BFI_MC_LL = 7, /* Link Layer */ | ||
150 | BFI_MC_UF = 8, /* Unsolicited frame receive */ | ||
151 | BFI_MC_FCXP = 9, /* FC Transport */ | ||
152 | BFI_MC_LPS = 10, /* lport fc login services */ | ||
153 | BFI_MC_RPORT = 11, /* Remote port */ | ||
154 | BFI_MC_ITNIM = 12, /* I-T nexus (Initiator mode) */ | ||
155 | BFI_MC_IOIM_READ = 13, /* read IO (Initiator mode) */ | ||
156 | BFI_MC_IOIM_WRITE = 14, /* write IO (Initiator mode) */ | ||
157 | BFI_MC_IOIM_IO = 15, /* IO (Initiator mode) */ | ||
158 | BFI_MC_IOIM = 16, /* IO (Initiator mode) */ | ||
159 | BFI_MC_IOIM_IOCOM = 17, /* good IO completion */ | ||
160 | BFI_MC_TSKIM = 18, /* Initiator Task management */ | ||
161 | BFI_MC_SBOOT = 19, /* SAN boot services */ | ||
162 | BFI_MC_IPFC = 20, /* IP over FC Msgs */ | ||
163 | BFI_MC_PORT = 21, /* Physical port */ | ||
164 | BFI_MC_MAX = 32 | ||
165 | }; | ||
166 | |||
167 | #define BFI_IOC_MAX_CQS 4 | ||
168 | #define BFI_IOC_MAX_CQS_ASIC 8 | ||
169 | #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ | ||
170 | |||
171 | #pragma pack() | ||
172 | |||
173 | #endif /* __BFI_H__ */ | ||
174 | |||