linux/drivers/scsi/be2iscsi/be_mgmt.h
<<
>>
Prefs
   1/**
   2 * Copyright (C) 2005 - 2015 Emulex
   3 * All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License version 2
   7 * as published by the Free Software Foundation.  The full GNU General
   8 * Public License is included in this distribution in the file called COPYING.
   9 *
  10 * Written by: Jayamohan Kallickal (jayamohan.kallickal@avagotech.com)
  11 *
  12 * Contact Information:
  13 * linux-drivers@avagotech.com
  14 *
  15 * Emulex
  16 * 3333 Susan Street
  17 * Costa Mesa, CA 92626
  18 */
  19
  20#ifndef _BEISCSI_MGMT_
  21#define _BEISCSI_MGMT_
  22
  23#include <scsi/scsi_bsg_iscsi.h>
  24#include "be_iscsi.h"
  25#include "be_main.h"
  26
  27#define IP_ACTION_ADD   0x01
  28#define IP_ACTION_DEL   0x02
  29
  30#define IP_V6_LEN       16
  31#define IP_V4_LEN       4
  32
  33/* UE Status and Mask register */
  34#define PCICFG_UE_STATUS_LOW            0xA0
  35#define PCICFG_UE_STATUS_HIGH           0xA4
  36#define PCICFG_UE_STATUS_MASK_LOW       0xA8
  37#define PCICFG_UE_STATUS_MASK_HI        0xAC
  38
  39/**
  40 * Pseudo amap definition in which each bit of the actual structure is defined
  41 * as a byte: used to calculate offset/shift/mask of each field
  42 */
  43struct amap_mcc_sge {
  44        u8 pa_lo[32];           /* dword 0 */
  45        u8 pa_hi[32];           /* dword 1 */
  46        u8 length[32];          /* DWORD 2 */
  47} __packed;
  48
  49/**
  50 * Pseudo amap definition in which each bit of the actual structure is defined
  51 * as a byte: used to calculate offset/shift/mask of each field
  52 */
  53struct amap_mcc_wrb_payload {
  54        union {
  55                struct amap_mcc_sge sgl[19];
  56                u8 embedded[59 * 32];   /* DWORDS 57 to 115 */
  57        } u;
  58} __packed;
  59
  60/**
  61 * Pseudo amap definition in which each bit of the actual structure is defined
  62 * as a byte: used to calculate offset/shift/mask of each field
  63 */
  64struct amap_mcc_wrb {
  65        u8 embedded;            /* DWORD 0 */
  66        u8 rsvd0[2];            /* DWORD 0 */
  67        u8 sge_count[5];        /* DWORD 0 */
  68        u8 rsvd1[16];           /* DWORD 0 */
  69        u8 special[8];          /* DWORD 0 */
  70        u8 payload_length[32];
  71        u8 tag[64];             /* DWORD 2 */
  72        u8 rsvd2[32];           /* DWORD 4 */
  73        struct amap_mcc_wrb_payload payload;
  74};
  75
  76struct mcc_sge {
  77        u32 pa_lo;              /* dword 0 */
  78        u32 pa_hi;              /* dword 1 */
  79        u32 length;             /* DWORD 2 */
  80} __packed;
  81
  82struct mcc_wrb_payload {
  83        union {
  84                struct mcc_sge sgl[19];
  85                u32 embedded[59];       /* DWORDS 57 to 115 */
  86        } u;
  87} __packed;
  88
  89#define MCC_WRB_EMBEDDED_MASK                0x00000001
  90
  91struct mcc_wrb {
  92        u32 dw[0];              /* DWORD 0 */
  93        u32 payload_length;
  94        u32 tag[2];             /* DWORD 2 */
  95        u32 rsvd2[1];           /* DWORD 4 */
  96        struct mcc_wrb_payload payload;
  97};
  98
  99int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute);
 100int mgmt_open_connection(struct beiscsi_hba *phba,
 101                         struct sockaddr *dst_addr,
 102                         struct beiscsi_endpoint *beiscsi_ep,
 103                         struct be_dma_mem *nonemb_cmd);
 104
 105unsigned int mgmt_upload_connection(struct beiscsi_hba *phba,
 106                                     unsigned short cid,
 107                                     unsigned int upload_flag);
 108unsigned int mgmt_invalidate_icds(struct beiscsi_hba *phba,
 109                                struct invalidate_command_table *inv_tbl,
 110                                unsigned int num_invalidate, unsigned int cid,
 111                                struct be_dma_mem *nonemb_cmd);
 112unsigned int mgmt_vendor_specific_fw_cmd(struct be_ctrl_info *ctrl,
 113                                         struct beiscsi_hba *phba,
 114                                         struct bsg_job *job,
 115                                         struct be_dma_mem *nonemb_cmd);
 116
 117#define BEISCSI_NO_RST_ISSUE    0
 118struct iscsi_invalidate_connection_params_in {
 119        struct be_cmd_req_hdr hdr;
 120        unsigned int session_handle;
 121        unsigned short cid;
 122        unsigned short unused;
 123        unsigned short cleanup_type;
 124        unsigned short save_cfg;
 125} __packed;
 126
 127struct iscsi_invalidate_connection_params_out {
 128        unsigned int session_handle;
 129        unsigned short cid;
 130        unsigned short unused;
 131} __packed;
 132
 133union iscsi_invalidate_connection_params {
 134        struct iscsi_invalidate_connection_params_in request;
 135        struct iscsi_invalidate_connection_params_out response;
 136} __packed;
 137
 138struct invalidate_commands_params_in {
 139        struct be_cmd_req_hdr hdr;
 140        unsigned int ref_handle;
 141        unsigned int icd_count;
 142        struct invalidate_command_table table[128];
 143        unsigned short cleanup_type;
 144        unsigned short unused;
 145} __packed;
 146
 147struct invalidate_commands_params_out {
 148        unsigned int ref_handle;
 149        unsigned int icd_count;
 150        unsigned int icd_status[128];
 151} __packed;
 152
 153union invalidate_commands_params {
 154        struct invalidate_commands_params_in request;
 155        struct invalidate_commands_params_out response;
 156} __packed;
 157
 158struct mgmt_hba_attributes {
 159        u8 flashrom_version_string[BEISCSI_VER_STRLEN];
 160        u8 manufacturer_name[BEISCSI_VER_STRLEN];
 161        u32 supported_modes;
 162        u8 seeprom_version_lo;
 163        u8 seeprom_version_hi;
 164        u8 rsvd0[2];
 165        u32 fw_cmd_data_struct_version;
 166        u32 ep_fw_data_struct_version;
 167        u8 ncsi_version_string[12];
 168        u32 default_extended_timeout;
 169        u8 controller_model_number[BEISCSI_VER_STRLEN];
 170        u8 controller_description[64];
 171        u8 controller_serial_number[BEISCSI_VER_STRLEN];
 172        u8 ip_version_string[BEISCSI_VER_STRLEN];
 173        u8 firmware_version_string[BEISCSI_VER_STRLEN];
 174        u8 bios_version_string[BEISCSI_VER_STRLEN];
 175        u8 redboot_version_string[BEISCSI_VER_STRLEN];
 176        u8 driver_version_string[BEISCSI_VER_STRLEN];
 177        u8 fw_on_flash_version_string[BEISCSI_VER_STRLEN];
 178        u32 functionalities_supported;
 179        u16 max_cdblength;
 180        u8 asic_revision;
 181        u8 generational_guid[16];
 182        u8 hba_port_count;
 183        u16 default_link_down_timeout;
 184        u8 iscsi_ver_min_max;
 185        u8 multifunction_device;
 186        u8 cache_valid;
 187        u8 hba_status;
 188        u8 max_domains_supported;
 189        u8 phy_port;
 190        u32 firmware_post_status;
 191        u32 hba_mtu[8];
 192        u8 iscsi_features;
 193        u8 asic_generation;
 194        u8 future_u8[2];
 195        u32 future_u32[3];
 196} __packed;
 197
 198struct mgmt_controller_attributes {
 199        struct mgmt_hba_attributes hba_attribs;
 200        u16 pci_vendor_id;
 201        u16 pci_device_id;
 202        u16 pci_sub_vendor_id;
 203        u16 pci_sub_system_id;
 204        u8 pci_bus_number;
 205        u8 pci_device_number;
 206        u8 pci_function_number;
 207        u8 interface_type;
 208        u64 unique_identifier;
 209        u8 netfilters;
 210        u8 rsvd0[3];
 211        u32 future_u32[4];
 212} __packed;
 213
 214struct be_mgmt_controller_attributes {
 215        struct be_cmd_req_hdr hdr;
 216        struct mgmt_controller_attributes params;
 217} __packed;
 218
 219struct be_mgmt_controller_attributes_resp {
 220        struct be_cmd_resp_hdr hdr;
 221        struct mgmt_controller_attributes params;
 222} __packed;
 223
 224struct be_bsg_vendor_cmd {
 225        struct be_cmd_req_hdr hdr;
 226        unsigned short region;
 227        unsigned short offset;
 228        unsigned short sector;
 229} __packed;
 230
 231/* configuration management */
 232
 233#define GET_MGMT_CONTROLLER_WS(phba)    (phba->pmgmt_ws)
 234
 235/* MGMT CMD flags */
 236
 237#define MGMT_CMDH_FREE                (1<<0)
 238
 239/*  --- MGMT_ERROR_CODES --- */
 240/*  Error Codes returned in the status field of the CMD response header */
 241#define MGMT_STATUS_SUCCESS 0   /* The CMD completed without errors */
 242#define MGMT_STATUS_FAILED 1    /* Error status in the Status field of */
 243                                /* the CMD_RESPONSE_HEADER  */
 244
 245#define ISCSI_GET_PDU_TEMPLATE_ADDRESS(pc, pa) {\
 246        pa->lo = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
 247                                        bus_address.u.a32.address_lo;  \
 248        pa->hi = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
 249                                        bus_address.u.a32.address_hi;  \
 250}
 251
 252#define BEISCSI_WRITE_FLASH 0
 253#define BEISCSI_READ_FLASH 1
 254
 255struct beiscsi_endpoint {
 256        struct beiscsi_hba *phba;
 257        struct beiscsi_sess *sess;
 258        struct beiscsi_conn *conn;
 259        struct iscsi_endpoint *openiscsi_ep;
 260        unsigned short ip_type;
 261        char dst6_addr[ISCSI_ADDRESS_BUF_LEN];
 262        unsigned long dst_addr;
 263        unsigned short ep_cid;
 264        unsigned int fw_handle;
 265        u16 dst_tcpport;
 266        u16 cid_vld;
 267};
 268
 269int mgmt_get_fw_config(struct be_ctrl_info *ctrl,
 270                                 struct beiscsi_hba *phba);
 271int mgmt_get_port_name(struct be_ctrl_info *ctrl,
 272                       struct beiscsi_hba *phba);
 273
 274unsigned int mgmt_invalidate_connection(struct beiscsi_hba *phba,
 275                                         struct beiscsi_endpoint *beiscsi_ep,
 276                                         unsigned short cid,
 277                                         unsigned short issue_reset,
 278                                         unsigned short savecfg_flag);
 279
 280int mgmt_set_ip(struct beiscsi_hba *phba,
 281                struct iscsi_iface_param_info *ip_param,
 282                struct iscsi_iface_param_info *subnet_param,
 283                uint32_t boot_proto);
 284
 285unsigned int mgmt_get_boot_target(struct beiscsi_hba *phba);
 286
 287unsigned int mgmt_reopen_session(struct beiscsi_hba *phba,
 288                                  unsigned int reopen_type,
 289                                  unsigned sess_handle);
 290
 291unsigned int mgmt_get_session_info(struct beiscsi_hba *phba,
 292                                   u32 boot_session_handle,
 293                                   struct be_dma_mem *nonemb_cmd);
 294
 295int mgmt_get_nic_conf(struct beiscsi_hba *phba,
 296                      struct be_cmd_get_nic_conf_resp *mac);
 297
 298int mgmt_get_if_info(struct beiscsi_hba *phba, int ip_type,
 299                     struct be_cmd_get_if_info_resp **if_info);
 300
 301int mgmt_get_gateway(struct beiscsi_hba *phba, int ip_type,
 302                     struct be_cmd_get_def_gateway_resp *gateway);
 303
 304int mgmt_set_gateway(struct beiscsi_hba *phba,
 305                     struct iscsi_iface_param_info *gateway_param);
 306
 307int be_mgmt_get_boot_shandle(struct beiscsi_hba *phba,
 308                              unsigned int *s_handle);
 309
 310unsigned int mgmt_get_all_if_id(struct beiscsi_hba *phba);
 311
 312int mgmt_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag);
 313
 314ssize_t beiscsi_drvr_ver_disp(struct device *dev,
 315                               struct device_attribute *attr, char *buf);
 316
 317ssize_t beiscsi_fw_ver_disp(struct device *dev,
 318                             struct device_attribute *attr, char *buf);
 319
 320ssize_t beiscsi_active_session_disp(struct device *dev,
 321                                     struct device_attribute *attr, char *buf);
 322
 323ssize_t beiscsi_adap_family_disp(struct device *dev,
 324                                  struct device_attribute *attr, char *buf);
 325
 326
 327ssize_t beiscsi_free_session_disp(struct device *dev,
 328                                   struct device_attribute *attr, char *buf);
 329
 330ssize_t beiscsi_phys_port_disp(struct device *dev,
 331                                struct device_attribute *attr, char *buf);
 332
 333void beiscsi_offload_cxn_v0(struct beiscsi_offload_params *params,
 334                             struct wrb_handle *pwrb_handle,
 335                             struct be_mem_descriptor *mem_descr,
 336                             struct hwi_wrb_context *pwrb_context);
 337
 338void beiscsi_offload_cxn_v2(struct beiscsi_offload_params *params,
 339                             struct wrb_handle *pwrb_handle,
 340                             struct hwi_wrb_context *pwrb_context);
 341
 342void beiscsi_ue_detect(struct beiscsi_hba *phba);
 343int be_cmd_modify_eq_delay(struct beiscsi_hba *phba,
 344                         struct be_set_eqd *, int num);
 345
 346int beiscsi_logout_fw_sess(struct beiscsi_hba *phba,
 347                            uint32_t fw_sess_handle);
 348
 349#endif
 350