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 #define LPFC_BSG_VENDOR_SET_CT_EVENT            1
  30 #define LPFC_BSG_VENDOR_GET_CT_EVENT            2
  31 #define LPFC_BSG_VENDOR_SEND_MGMT_RESP          3
  32 #define LPFC_BSG_VENDOR_DIAG_MODE               4
  33 #define LPFC_BSG_VENDOR_DIAG_RUN_LOOPBACK       5
  34 #define LPFC_BSG_VENDOR_GET_MGMT_REV            6
  35 #define LPFC_BSG_VENDOR_MBOX                    7
  36 #define LPFC_BSG_VENDOR_MENLO_CMD               8
  37 #define LPFC_BSG_VENDOR_MENLO_DATA              9
  38 #define LPFC_BSG_VENDOR_DIAG_MODE_END           10
  39 #define LPFC_BSG_VENDOR_LINK_DIAG_TEST          11
  40 #define LPFC_BSG_VENDOR_FORCED_LINK_SPEED       14
  41 #define LPFC_BSG_VENDOR_RAS_GET_LWPD            16
  42 #define LPFC_BSG_VENDOR_RAS_GET_FWLOG           17
  43 #define LPFC_BSG_VENDOR_RAS_GET_CONFIG          18
  44 #define LPFC_BSG_VENDOR_RAS_SET_CONFIG          19
  45 #define LPFC_BSG_VENDOR_GET_TRUNK_INFO          20
  46 
  47 struct set_ct_event {
  48         uint32_t command;
  49         uint32_t type_mask;
  50         uint32_t ev_req_id;
  51         uint32_t ev_reg_id;
  52 };
  53 
  54 struct get_ct_event {
  55         uint32_t command;
  56         uint32_t ev_reg_id;
  57         uint32_t ev_req_id;
  58 };
  59 
  60 struct get_ct_event_reply {
  61         uint32_t immed_data;
  62         uint32_t type;
  63 };
  64 
  65 struct send_mgmt_resp {
  66         uint32_t command;
  67         uint32_t tag;
  68 };
  69 
  70 
  71 #define DISABLE_LOOP_BACK  0x0 
  72 #define INTERNAL_LOOP_BACK 0x1 
  73 #define EXTERNAL_LOOP_BACK 0x2 
  74 
  75 struct diag_mode_set {
  76         uint32_t command;
  77         uint32_t type;
  78         uint32_t timeout;
  79         uint32_t physical_link;
  80 };
  81 
  82 struct sli4_link_diag {
  83         uint32_t command;
  84         uint32_t timeout;
  85         uint32_t test_id;
  86         uint32_t loops;
  87         uint32_t test_version;
  88         uint32_t error_action;
  89 };
  90 
  91 struct diag_mode_test {
  92         uint32_t command;
  93 };
  94 
  95 struct diag_status {
  96         uint32_t mbox_status;
  97         uint32_t shdr_status;
  98         uint32_t shdr_add_status;
  99 };
 100 
 101 #define LPFC_WWNN_TYPE          0
 102 #define LPFC_WWPN_TYPE          1
 103 
 104 struct get_mgmt_rev {
 105         uint32_t command;
 106 };
 107 
 108 #define MANAGEMENT_MAJOR_REV   1
 109 #define MANAGEMENT_MINOR_REV   1
 110 
 111 
 112 struct MgmtRevInfo {
 113         uint32_t a_Major;
 114         uint32_t a_Minor;
 115 };
 116 
 117 struct get_mgmt_rev_reply {
 118         struct MgmtRevInfo info;
 119 };
 120 
 121 #define BSG_MBOX_SIZE 4096 
 122 
 123 
 124 struct dfc_mbox_req {
 125         uint32_t command;
 126         uint32_t mbOffset;
 127         uint32_t inExtWLen;
 128         uint32_t outExtWLen;
 129         uint32_t extMboxTag;
 130         uint32_t extSeqNum;
 131 };
 132 
 133 
 134 struct menlo_command {
 135         uint32_t cmd;
 136         uint32_t xri;
 137 };
 138 
 139 struct menlo_response {
 140         uint32_t xri; 
 141 };
 142 
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 
 151 
 152 
 153 
 154 
 155 
 156 
 157 
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 
 167 
 168 
 169 
 170 
 171 
 172 
 173 
 174 #define bsg_bf_get_le32(name, ptr) \
 175         ((le32_to_cpu((ptr)->name##_WORD) >> name##_SHIFT) & name##_MASK)
 176 #define bsg_bf_get(name, ptr) \
 177         (((ptr)->name##_WORD >> name##_SHIFT) & name##_MASK)
 178 #define bsg_bf_set_le32(name, ptr, value) \
 179         ((ptr)->name##_WORD = cpu_to_le32(((((value) & \
 180         name##_MASK) << name##_SHIFT) | (le32_to_cpu((ptr)->name##_WORD) & \
 181         ~(name##_MASK << name##_SHIFT)))))
 182 #define bsg_bf_set(name, ptr, value) \
 183         ((ptr)->name##_WORD = ((((value) & name##_MASK) << name##_SHIFT) | \
 184         ((ptr)->name##_WORD & ~(name##_MASK << name##_SHIFT))))
 185 
 186 
 187 
 188 
 189 
 190 
 191 
 192 
 193 
 194 
 195 
 196 struct lpfc_sli_config_mse {
 197         uint32_t pa_lo;
 198         uint32_t pa_hi;
 199         uint32_t buf_len;
 200 #define lpfc_mbox_sli_config_mse_len_SHIFT      0
 201 #define lpfc_mbox_sli_config_mse_len_MASK       0xffffff
 202 #define lpfc_mbox_sli_config_mse_len_WORD       buf_len
 203 };
 204 
 205 struct lpfc_sli_config_hbd {
 206         uint32_t buf_len;
 207 #define lpfc_mbox_sli_config_ecmn_hbd_len_SHIFT 0
 208 #define lpfc_mbox_sli_config_ecmn_hbd_len_MASK  0xffffff
 209 #define lpfc_mbox_sli_config_ecmn_hbd_len_WORD  buf_len
 210         uint32_t pa_lo;
 211         uint32_t pa_hi;
 212 };
 213 
 214 struct lpfc_sli_config_hdr {
 215         uint32_t word1;
 216 #define lpfc_mbox_hdr_emb_SHIFT         0
 217 #define lpfc_mbox_hdr_emb_MASK          0x00000001
 218 #define lpfc_mbox_hdr_emb_WORD          word1
 219 #define lpfc_mbox_hdr_mse_cnt_SHIFT     3
 220 #define lpfc_mbox_hdr_mse_cnt_MASK      0x0000001f
 221 #define lpfc_mbox_hdr_mse_cnt_WORD      word1
 222         uint32_t payload_length;
 223         uint32_t tag_lo;
 224         uint32_t tag_hi;
 225         uint32_t reserved5;
 226 };
 227 
 228 struct lpfc_sli_config_emb0_subsys {
 229         struct lpfc_sli_config_hdr      sli_config_hdr;
 230 #define LPFC_MBX_SLI_CONFIG_MAX_MSE     19
 231         struct lpfc_sli_config_mse      mse[LPFC_MBX_SLI_CONFIG_MAX_MSE];
 232         uint32_t padding;
 233         uint32_t word64;
 234 #define lpfc_emb0_subcmnd_opcode_SHIFT  0
 235 #define lpfc_emb0_subcmnd_opcode_MASK   0xff
 236 #define lpfc_emb0_subcmnd_opcode_WORD   word64
 237 #define lpfc_emb0_subcmnd_subsys_SHIFT  8
 238 #define lpfc_emb0_subcmnd_subsys_MASK   0xff
 239 #define lpfc_emb0_subcmnd_subsys_WORD   word64
 240 
 241 #define SLI_CONFIG_SUBSYS_FCOE          0x0C
 242 #define FCOE_OPCODE_READ_FCF            0x08
 243 #define FCOE_OPCODE_ADD_FCF             0x09
 244 #define FCOE_OPCODE_SET_DPORT_MODE      0x27
 245 #define FCOE_OPCODE_GET_DPORT_RESULTS   0x28
 246 };
 247 
 248 struct lpfc_sli_config_emb1_subsys {
 249         struct lpfc_sli_config_hdr      sli_config_hdr;
 250         uint32_t word6;
 251 #define lpfc_emb1_subcmnd_opcode_SHIFT  0
 252 #define lpfc_emb1_subcmnd_opcode_MASK   0xff
 253 #define lpfc_emb1_subcmnd_opcode_WORD   word6
 254 #define lpfc_emb1_subcmnd_subsys_SHIFT  8
 255 #define lpfc_emb1_subcmnd_subsys_MASK   0xff
 256 #define lpfc_emb1_subcmnd_subsys_WORD   word6
 257 
 258 #define SLI_CONFIG_SUBSYS_COMN          0x01
 259 #define COMN_OPCODE_GET_PROFILE_CONFIG  0xA4
 260 #define COMN_OPCODE_READ_OBJECT         0xAB
 261 #define COMN_OPCODE_WRITE_OBJECT        0xAC
 262 #define COMN_OPCODE_READ_OBJECT_LIST    0xAD
 263 #define COMN_OPCODE_DELETE_OBJECT       0xAE
 264 #define COMN_OPCODE_GET_CNTL_ADDL_ATTRIBUTES    0x79
 265 #define COMN_OPCODE_GET_CNTL_ATTRIBUTES 0x20
 266         uint32_t timeout;
 267         uint32_t request_length;
 268         uint32_t word9;
 269 #define lpfc_subcmnd_version_SHIFT      0
 270 #define lpfc_subcmnd_version_MASK       0xff
 271 #define lpfc_subcmnd_version_WORD       word9
 272         uint32_t word10;
 273 #define lpfc_subcmnd_ask_rd_len_SHIFT   0
 274 #define lpfc_subcmnd_ask_rd_len_MASK    0xffffff
 275 #define lpfc_subcmnd_ask_rd_len_WORD    word10
 276         uint32_t rd_offset;
 277         uint32_t obj_name[26];
 278         uint32_t hbd_count;
 279 #define LPFC_MBX_SLI_CONFIG_MAX_HBD     8
 280         struct lpfc_sli_config_hbd      hbd[LPFC_MBX_SLI_CONFIG_MAX_HBD];
 281 };
 282 
 283 struct lpfc_sli_config_mbox {
 284         uint32_t word0;
 285 #define lpfc_mqe_status_SHIFT           16
 286 #define lpfc_mqe_status_MASK            0x0000FFFF
 287 #define lpfc_mqe_status_WORD            word0
 288 #define lpfc_mqe_command_SHIFT          8
 289 #define lpfc_mqe_command_MASK           0x000000FF
 290 #define lpfc_mqe_command_WORD           word0
 291         union {
 292                 struct lpfc_sli_config_emb0_subsys sli_config_emb0_subsys;
 293                 struct lpfc_sli_config_emb1_subsys sli_config_emb1_subsys;
 294         } un;
 295 };
 296 
 297 #define LPFC_FORCED_LINK_SPEED_NOT_SUPPORTED    0
 298 #define LPFC_FORCED_LINK_SPEED_SUPPORTED        1
 299 struct get_forced_link_speed_support {
 300         uint32_t command;
 301 };
 302 struct forced_link_speed_support_reply {
 303         uint8_t supported;
 304 };
 305 
 306 struct lpfc_bsg_ras_req {
 307         uint32_t command;
 308 };
 309 
 310 struct lpfc_bsg_get_fwlog_req {
 311         uint32_t command;
 312         uint32_t read_size;
 313         uint32_t read_offset;
 314 };
 315 
 316 struct lpfc_bsg_get_ras_lwpd {
 317         uint32_t offset;
 318         uint32_t wrap_count;
 319 };
 320 
 321 struct lpfc_bsg_set_ras_config_req {
 322         uint32_t command;
 323         uint8_t action;
 324 #define LPFC_RASACTION_STOP_LOGGING     0x00
 325 #define LPFC_RASACTION_START_LOGGING    0x01
 326         uint8_t log_level;
 327 };
 328 
 329 struct lpfc_bsg_get_ras_config_reply {
 330         uint8_t state;
 331 #define LPFC_RASLOG_STATE_STOPPED 0x00
 332 #define LPFC_RASLOG_STATE_RUNNING 0x01
 333         uint8_t log_level;
 334         uint32_t log_buff_sz;
 335 };
 336 
 337 struct lpfc_trunk_info {
 338         uint32_t word0;
 339 #define lpfc_trunk_info_link_status_SHIFT      0
 340 #define lpfc_trunk_info_link_status_MASK       1
 341 #define lpfc_trunk_info_link_status_WORD       word0
 342 #define lpfc_trunk_info_trunk_active0_SHIFT    8
 343 #define lpfc_trunk_info_trunk_active0_MASK     1
 344 #define lpfc_trunk_info_trunk_active0_WORD     word0
 345 #define lpfc_trunk_info_trunk_active1_SHIFT    9
 346 #define lpfc_trunk_info_trunk_active1_MASK     1
 347 #define lpfc_trunk_info_trunk_active1_WORD     word0
 348 #define lpfc_trunk_info_trunk_active2_SHIFT    10
 349 #define lpfc_trunk_info_trunk_active2_MASK     1
 350 #define lpfc_trunk_info_trunk_active2_WORD     word0
 351 #define lpfc_trunk_info_trunk_active3_SHIFT    11
 352 #define lpfc_trunk_info_trunk_active3_MASK     1
 353 #define lpfc_trunk_info_trunk_active3_WORD     word0
 354 #define lpfc_trunk_info_trunk_config0_SHIFT    12
 355 #define lpfc_trunk_info_trunk_config0_MASK     1
 356 #define lpfc_trunk_info_trunk_config0_WORD     word0
 357 #define lpfc_trunk_info_trunk_config1_SHIFT    13
 358 #define lpfc_trunk_info_trunk_config1_MASK     1
 359 #define lpfc_trunk_info_trunk_config1_WORD     word0
 360 #define lpfc_trunk_info_trunk_config2_SHIFT    14
 361 #define lpfc_trunk_info_trunk_config2_MASK     1
 362 #define lpfc_trunk_info_trunk_config2_WORD     word0
 363 #define lpfc_trunk_info_trunk_config3_SHIFT    15
 364 #define lpfc_trunk_info_trunk_config3_MASK     1
 365 #define lpfc_trunk_info_trunk_config3_WORD     word0
 366         uint16_t    port_speed;
 367         uint16_t    logical_speed;
 368         uint32_t    reserved3;
 369 };
 370 
 371 struct get_trunk_info_req {
 372         uint32_t command;
 373 };
 374 
 375 
 376 #define SLI_CONFIG_NOT_HANDLED          0
 377 #define SLI_CONFIG_HANDLED              1