linux/drivers/scsi/be2iscsi/be_mgmt.h
<<
>>
Prefs
   1/**
   2 * Copyright (C) 2005 - 2011 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@emulex.com)
  11 *
  12 * Contact Information:
  13 * linux-drivers@emulex.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 <linux/types.h>
  24#include <linux/list.h>
  25#include "be_iscsi.h"
  26#include "be_main.h"
  27
  28/**
  29 * Pseudo amap definition in which each bit of the actual structure is defined
  30 * as a byte: used to calculate offset/shift/mask of each field
  31 */
  32struct amap_mcc_sge {
  33        u8 pa_lo[32];           /* dword 0 */
  34        u8 pa_hi[32];           /* dword 1 */
  35        u8 length[32];          /* DWORD 2 */
  36} __packed;
  37
  38/**
  39 * Pseudo amap definition in which each bit of the actual structure is defined
  40 * as a byte: used to calculate offset/shift/mask of each field
  41 */
  42struct amap_mcc_wrb_payload {
  43        union {
  44                struct amap_mcc_sge sgl[19];
  45                u8 embedded[59 * 32];   /* DWORDS 57 to 115 */
  46        } u;
  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 {
  54        u8 embedded;            /* DWORD 0 */
  55        u8 rsvd0[2];            /* DWORD 0 */
  56        u8 sge_count[5];        /* DWORD 0 */
  57        u8 rsvd1[16];           /* DWORD 0 */
  58        u8 special[8];          /* DWORD 0 */
  59        u8 payload_length[32];
  60        u8 tag[64];             /* DWORD 2 */
  61        u8 rsvd2[32];           /* DWORD 4 */
  62        struct amap_mcc_wrb_payload payload;
  63};
  64
  65struct mcc_sge {
  66        u32 pa_lo;              /* dword 0 */
  67        u32 pa_hi;              /* dword 1 */
  68        u32 length;             /* DWORD 2 */
  69} __packed;
  70
  71struct mcc_wrb_payload {
  72        union {
  73                struct mcc_sge sgl[19];
  74                u32 embedded[59];       /* DWORDS 57 to 115 */
  75        } u;
  76} __packed;
  77
  78#define MCC_WRB_EMBEDDED_MASK                0x00000001
  79
  80struct mcc_wrb {
  81        u32 dw[0];              /* DWORD 0 */
  82        u32 payload_length;
  83        u32 tag[2];             /* DWORD 2 */
  84        u32 rsvd2[1];           /* DWORD 4 */
  85        struct mcc_wrb_payload payload;
  86};
  87
  88int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute);
  89int mgmt_open_connection(struct beiscsi_hba *phba,
  90                         struct sockaddr *dst_addr,
  91                         struct beiscsi_endpoint *beiscsi_ep,
  92                         struct be_dma_mem *nonemb_cmd);
  93
  94unsigned int mgmt_upload_connection(struct beiscsi_hba *phba,
  95                                     unsigned short cid,
  96                                     unsigned int upload_flag);
  97unsigned int mgmt_invalidate_icds(struct beiscsi_hba *phba,
  98                                struct invalidate_command_table *inv_tbl,
  99                                unsigned int num_invalidate, unsigned int cid,
 100                                struct be_dma_mem *nonemb_cmd);
 101
 102struct iscsi_invalidate_connection_params_in {
 103        struct be_cmd_req_hdr hdr;
 104        unsigned int session_handle;
 105        unsigned short cid;
 106        unsigned short unused;
 107        unsigned short cleanup_type;
 108        unsigned short save_cfg;
 109} __packed;
 110
 111struct iscsi_invalidate_connection_params_out {
 112        unsigned int session_handle;
 113        unsigned short cid;
 114        unsigned short unused;
 115} __packed;
 116
 117union iscsi_invalidate_connection_params {
 118        struct iscsi_invalidate_connection_params_in request;
 119        struct iscsi_invalidate_connection_params_out response;
 120} __packed;
 121
 122struct invalidate_commands_params_in {
 123        struct be_cmd_req_hdr hdr;
 124        unsigned int ref_handle;
 125        unsigned int icd_count;
 126        struct invalidate_command_table table[128];
 127        unsigned short cleanup_type;
 128        unsigned short unused;
 129} __packed;
 130
 131struct invalidate_commands_params_out {
 132        unsigned int ref_handle;
 133        unsigned int icd_count;
 134        unsigned int icd_status[128];
 135} __packed;
 136
 137union invalidate_commands_params {
 138        struct invalidate_commands_params_in request;
 139        struct invalidate_commands_params_out response;
 140} __packed;
 141
 142struct mgmt_hba_attributes {
 143        u8 flashrom_version_string[32];
 144        u8 manufacturer_name[32];
 145        u32 supported_modes;
 146        u8 seeprom_version_lo;
 147        u8 seeprom_version_hi;
 148        u8 rsvd0[2];
 149        u32 fw_cmd_data_struct_version;
 150        u32 ep_fw_data_struct_version;
 151        u32 future_reserved[12];
 152        u32 default_extended_timeout;
 153        u8 controller_model_number[32];
 154        u8 controller_description[64];
 155        u8 controller_serial_number[32];
 156        u8 ip_version_string[32];
 157        u8 firmware_version_string[32];
 158        u8 bios_version_string[32];
 159        u8 redboot_version_string[32];
 160        u8 driver_version_string[32];
 161        u8 fw_on_flash_version_string[32];
 162        u32 functionalities_supported;
 163        u16 max_cdblength;
 164        u8 asic_revision;
 165        u8 generational_guid[16];
 166        u8 hba_port_count;
 167        u16 default_link_down_timeout;
 168        u8 iscsi_ver_min_max;
 169        u8 multifunction_device;
 170        u8 cache_valid;
 171        u8 hba_status;
 172        u8 max_domains_supported;
 173        u8 phy_port;
 174        u32 firmware_post_status;
 175        u32 hba_mtu[8];
 176        u8 iscsi_features;
 177        u8 future_u8[3];
 178        u32 future_u32[3];
 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        struct iscsi_endpoint *openiscsi_ep;
 233        unsigned short ip_type;
 234        char dst6_addr[ISCSI_ADDRESS_BUF_LEN];
 235        unsigned long dst_addr;
 236        unsigned short ep_cid;
 237        unsigned int fw_handle;
 238        u16 dst_tcpport;
 239        u16 cid_vld;
 240};
 241
 242int mgmt_get_fw_config(struct be_ctrl_info *ctrl,
 243                                 struct beiscsi_hba *phba);
 244
 245unsigned int mgmt_invalidate_connection(struct beiscsi_hba *phba,
 246                                         struct beiscsi_endpoint *beiscsi_ep,
 247                                         unsigned short cid,
 248                                         unsigned short issue_reset,
 249                                         unsigned short savecfg_flag);
 250
 251#endif
 252
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.