- patches.suse/slab-handle-memoryless-nodes-v2a.patch: Refresh.
[linux-flexiantxendom0-3.2.10.git] / drivers / scsi / bfa / include / bfi / bfi.h
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