linux/drivers/scsi/be2iscsi/be_mgmt.h
<<
>>
Prefs
   1/**
   2 * Copyright (C) 2005 - 2009 ServerEngines
   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 (jayamohank@serverengines.com)
  11 *
  12 * Contact Information:
  13 * linux-drivers@serverengines.com
  14 *
  15 * ServerEngines
  16 * 209 N. Fair Oaks Ave
  17 * Sunnyvale, CA 94085
  18 *
  19 */
  20
  21#ifndef _BEISCSI_MGMT_
  22#define _BEISCSI_MGMT_
  23
  24#include <linux/types.h>
  25#include <linux/list.h>
  26#include "be_iscsi.h"
  27#include "be_main.h"
  28
  29/**
  30 * Pseudo amap definition in which each bit of the actual structure is defined
  31 * as a byte: used to calculate offset/shift/mask of each field
  32 */
  33struct amap_mcc_sge {
  34        u8 pa_lo[32];           /* dword 0 */
  35        u8 pa_hi[32];           /* dword 1 */
  36        u8 length[32];          /* DWORD 2 */
  37} __packed;
  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_wrb_payload {
  44        union {
  45                struct amap_mcc_sge sgl[19];
  46                u8 embedded[59 * 32];   /* DWORDS 57 to 115 */
  47        } u;
  48} __packed;
  49
  50/**
  51 * Pseudo amap definition in which each bit of the actual structure is defined
  52 * as a byte: used to calculate offset/shift/mask of each field
  53 */
  54struct amap_mcc_wrb {
  55        u8 embedded;            /* DWORD 0 */
  56        u8 rsvd0[2];            /* DWORD 0 */
  57        u8 sge_count[5];        /* DWORD 0 */
  58        u8 rsvd1[16];           /* DWORD 0 */
  59        u8 special[8];          /* DWORD 0 */
  60        u8 payload_length[32];
  61        u8 tag[64];             /* DWORD 2 */
  62        u8 rsvd2[32];           /* DWORD 4 */
  63        struct amap_mcc_wrb_payload payload;
  64};
  65
  66struct mcc_sge {
  67        u32 pa_lo;              /* dword 0 */
  68        u32 pa_hi;              /* dword 1 */
  69        u32 length;             /* DWORD 2 */
  70} __packed;
  71
  72struct mcc_wrb_payload {
  73        union {
  74                struct mcc_sge sgl[19];
  75                u32 embedded[59];       /* DWORDS 57 to 115 */
  76        } u;
  77} __packed;
  78
  79#define MCC_WRB_EMBEDDED_MASK                0x00000001
  80
  81struct mcc_wrb {
  82        u32 dw[0];              /* DWORD 0 */
  83        u32 payload_length;
  84        u32 tag[2];             /* DWORD 2 */
  85        u32 rsvd2[1];           /* DWORD 4 */
  86        struct mcc_wrb_payload payload;
  87};
  88
  89unsigned char mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute);
  90int mgmt_open_connection(struct beiscsi_hba *phba, struct sockaddr *dst_addr,
  91                         struct beiscsi_endpoint *beiscsi_ep);
  92
  93unsigned char mgmt_upload_connection(struct beiscsi_hba *phba,
  94                                     unsigned short cid,
  95                                     unsigned int upload_flag);
  96unsigned char mgmt_invalidate_icds(struct beiscsi_hba *phba,
  97                                   unsigned int icd, unsigned int cid);
  98
  99struct iscsi_invalidate_connection_params_in {
 100        struct be_cmd_req_hdr hdr;
 101        unsigned int session_handle;
 102        unsigned short cid;
 103        unsigned short unused;
 104        unsigned short cleanup_type;
 105        unsigned short save_cfg;
 106} __packed;
 107
 108struct iscsi_invalidate_connection_params_out {
 109        unsigned int session_handle;
 110        unsigned short cid;
 111        unsigned short unused;
 112} __packed;
 113
 114union iscsi_invalidate_connection_params {
 115        struct iscsi_invalidate_connection_params_in request;
 116        struct iscsi_invalidate_connection_params_out response;
 117} __packed;
 118
 119struct invalidate_command_table {
 120        unsigned short icd;
 121        unsigned short cid;
 122} __packed;
 123
 124struct invalidate_commands_params_in {
 125        struct be_cmd_req_hdr hdr;
 126        unsigned int ref_handle;
 127        unsigned int icd_count;
 128        struct invalidate_command_table table[128];
 129        unsigned short cleanup_type;
 130        unsigned short unused;
 131} __packed;
 132
 133struct invalidate_commands_params_out {
 134        unsigned int ref_handle;
 135        unsigned int icd_count;
 136        unsigned int icd_status[128];
 137} __packed;
 138
 139union invalidate_commands_params {
 140        struct invalidate_commands_params_in request;
 141        struct invalidate_commands_params_out response;
 142} __packed;
 143
 144struct mgmt_hba_attributes {
 145        u8 flashrom_version_string[32];
 146        u8 manufacturer_name[32];
 147        u32 supported_modes;
 148        u8 seeprom_version_lo;
 149        u8 seeprom_version_hi;
 150        u8 rsvd0[2];
 151        u32 fw_cmd_data_struct_version;
 152        u32 ep_fw_data_struct_version;
 153        u32 future_reserved[12];
 154        u32 default_extended_timeout;
 155        u8 controller_model_number[32];
 156        u8 controller_description[64];
 157        u8 controller_serial_number[32];
 158        u8 ip_version_string[32];
 159        u8 firmware_version_string[32];
 160        u8 bios_version_string[32];
 161        u8 redboot_version_string[32];
 162        u8 driver_version_string[32];
 163        u8 fw_on_flash_version_string[32];
 164        u32 functionalities_supported;
 165        u16 max_cdblength;
 166        u8 asic_revision;
 167        u8 generational_guid[16];
 168        u8 hba_port_count;
 169        u16 default_link_down_timeout;
 170        u8 iscsi_ver_min_max;
 171        u8 multifunction_device;
 172        u8 cache_valid;
 173        u8 hba_status;
 174        u8 max_domains_supported;
 175        u8 phy_port;
 176        u32 firmware_post_status;
 177        u32 hba_mtu[8];
 178        u32 future_u32[4];
 179} __packed;
 180
 181struct mgmt_controller_attributes {
 182        struct mgmt_hba_attributes hba_attribs;
 183        u16 pci_vendor_id;
 184        u16 pci_device_id;
 185        u16 pci_sub_vendor_id;
 186        u16 pci_sub_system_id;
 187        u8 pci_bus_number;
 188        u8 pci_device_number;
 189        u8 pci_function_number;
 190        u8 interface_type;
 191        u64 unique_identifier;
 192        u8 netfilters;
 193        u8 rsvd0[3];
 194        u8 future_u32[4];
 195} __packed;
 196
 197struct be_mgmt_controller_attributes {
 198        struct be_cmd_req_hdr hdr;
 199        struct mgmt_controller_attributes params;
 200} __packed;
 201
 202struct be_mgmt_controller_attributes_resp {
 203        struct be_cmd_resp_hdr hdr;
 204        struct mgmt_controller_attributes params;
 205} __packed;
 206
 207/* configuration management */
 208
 209#define GET_MGMT_CONTROLLER_WS(phba)    (phba->pmgmt_ws)
 210
 211/* MGMT CMD flags */
 212
 213#define MGMT_CMDH_FREE                (1<<0)
 214
 215/*  --- MGMT_ERROR_CODES --- */
 216/*  Error Codes returned in the status field of the CMD response header */
 217#define MGMT_STATUS_SUCCESS 0   /* The CMD completed without errors */
 218#define MGMT_STATUS_FAILED 1    /* Error status in the Status field of */
 219                                /* the CMD_RESPONSE_HEADER  */
 220
 221#define ISCSI_GET_PDU_TEMPLATE_ADDRESS(pc, pa) {\
 222    pa->lo = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
 223                                        bus_address.u.a32.address_lo;  \
 224    pa->hi = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
 225                                        bus_address.u.a32.address_hi;  \
 226}
 227
 228struct beiscsi_endpoint {
 229        struct beiscsi_hba *phba;
 230        struct beiscsi_sess *sess;
 231        struct beiscsi_conn *conn;
 232        unsigned short ip_type;
 233        char dst6_addr[ISCSI_ADDRESS_BUF_LEN];
 234        unsigned long dst_addr;
 235        unsigned short ep_cid;
 236        unsigned int fw_handle;
 237        u16 dst_tcpport;
 238        u16 cid_vld;
 239};
 240
 241unsigned char mgmt_get_fw_config(struct be_ctrl_info *ctrl,
 242                                 struct beiscsi_hba *phba);
 243
 244unsigned char mgmt_invalidate_connection(struct beiscsi_hba *phba,
 245                                         struct beiscsi_endpoint *beiscsi_ep,
 246                                         unsigned short cid,
 247                                         unsigned short issue_reset,
 248                                         unsigned short savecfg_flag);
 249#endif
 250