16733b39aSJayamohan Kallickal /** 2c4f39bdaSKetan Mukadam * Copyright (C) 2005 - 2015 Emulex 36733b39aSJayamohan Kallickal * All rights reserved. 46733b39aSJayamohan Kallickal * 56733b39aSJayamohan Kallickal * This program is free software; you can redistribute it and/or 66733b39aSJayamohan Kallickal * modify it under the terms of the GNU General Public License version 2 76733b39aSJayamohan Kallickal * as published by the Free Software Foundation. The full GNU General 86733b39aSJayamohan Kallickal * Public License is included in this distribution in the file called COPYING. 96733b39aSJayamohan Kallickal * 106733b39aSJayamohan Kallickal * Contact Information: 114627de93SMinh Tran * linux-drivers@avagotech.com 126733b39aSJayamohan Kallickal * 13c4f39bdaSKetan Mukadam * Emulex 14255fa9a3SJayamohan Kallickal * 3333 Susan Street 15255fa9a3SJayamohan Kallickal * Costa Mesa, CA 92626 166733b39aSJayamohan Kallickal */ 176733b39aSJayamohan Kallickal 186733b39aSJayamohan Kallickal #ifndef BEISCSI_CMDS_H 196733b39aSJayamohan Kallickal #define BEISCSI_CMDS_H 206733b39aSJayamohan Kallickal 216733b39aSJayamohan Kallickal /** 226733b39aSJayamohan Kallickal * The driver sends configuration and managements command requests to the 236733b39aSJayamohan Kallickal * firmware in the BE. These requests are communicated to the processor 246733b39aSJayamohan Kallickal * using Work Request Blocks (WRBs) submitted to the MCC-WRB ring or via one 256733b39aSJayamohan Kallickal * WRB inside a MAILBOX. 262f635883SJayamohan Kallickal * The commands are serviced by the ARM processor in the OneConnect's MPU. 276733b39aSJayamohan Kallickal */ 286733b39aSJayamohan Kallickal struct be_sge { 2939033413SJayamohan Kallickal __le32 pa_lo; 3039033413SJayamohan Kallickal __le32 pa_hi; 3139033413SJayamohan Kallickal __le32 len; 326733b39aSJayamohan Kallickal }; 336733b39aSJayamohan Kallickal 346733b39aSJayamohan Kallickal #define MCC_WRB_SGE_CNT_SHIFT 3 /* bits 3 - 7 of dword 0 */ 356733b39aSJayamohan Kallickal #define MCC_WRB_SGE_CNT_MASK 0x1F /* bits 3 - 7 of dword 0 */ 366733b39aSJayamohan Kallickal struct be_mcc_wrb { 376733b39aSJayamohan Kallickal u32 embedded; /* dword 0 */ 386733b39aSJayamohan Kallickal u32 payload_length; /* dword 1 */ 396733b39aSJayamohan Kallickal u32 tag0; /* dword 2 */ 406733b39aSJayamohan Kallickal u32 tag1; /* dword 3 */ 416733b39aSJayamohan Kallickal u32 rsvd; /* dword 4 */ 426733b39aSJayamohan Kallickal union { 43843ae752SJayamohan Kallickal #define EMBED_MBX_MAX_PAYLOAD_SIZE 220 446733b39aSJayamohan Kallickal u8 embedded_payload[236]; /* used by embedded cmds */ 456733b39aSJayamohan Kallickal struct be_sge sgl[19]; /* used by non-embedded cmds */ 466733b39aSJayamohan Kallickal } payload; 476733b39aSJayamohan Kallickal }; 486733b39aSJayamohan Kallickal 496733b39aSJayamohan Kallickal #define CQE_FLAGS_VALID_MASK (1 << 31) 506733b39aSJayamohan Kallickal #define CQE_FLAGS_ASYNC_MASK (1 << 30) 51bfead3b2SJayamohan Kallickal #define CQE_FLAGS_COMPLETED_MASK (1 << 28) 52bfead3b2SJayamohan Kallickal #define CQE_FLAGS_CONSUMED_MASK (1 << 27) 536733b39aSJayamohan Kallickal 546733b39aSJayamohan Kallickal /* Completion Status */ 556733b39aSJayamohan Kallickal #define MCC_STATUS_SUCCESS 0x0 56a8081e34SJayamohan Kallickal #define MCC_STATUS_FAILED 0x1 57a8081e34SJayamohan Kallickal #define MCC_STATUS_ILLEGAL_REQUEST 0x2 58a8081e34SJayamohan Kallickal #define MCC_STATUS_ILLEGAL_FIELD 0x3 59a8081e34SJayamohan Kallickal #define MCC_STATUS_INSUFFICIENT_BUFFER 0x4 60*6694095bSJitendra Bhivare #define MCC_STATUS_INVALID_LENGTH 0x74 616733b39aSJayamohan Kallickal 626733b39aSJayamohan Kallickal #define CQE_STATUS_COMPL_MASK 0xFFFF 636733b39aSJayamohan Kallickal #define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */ 646733b39aSJayamohan Kallickal #define CQE_STATUS_EXTD_MASK 0xFFFF 6567296ad9SJitendra Bhivare #define CQE_STATUS_EXTD_SHIFT 16 /* bits 31 - 16 */ 66e175defeSJohn Soni Jose #define CQE_STATUS_ADDL_MASK 0xFF00 6767296ad9SJitendra Bhivare #define CQE_STATUS_ADDL_SHIFT 8 68e175defeSJohn Soni Jose #define CQE_STATUS_MASK 0xFF 69e175defeSJohn Soni Jose #define CQE_STATUS_WRB_MASK 0xFF0000 70e175defeSJohn Soni Jose #define CQE_STATUS_WRB_SHIFT 16 7167296ad9SJitendra Bhivare 72e175defeSJohn Soni Jose #define BEISCSI_HOST_MBX_TIMEOUT (110 * 1000) 73e175defeSJohn Soni Jose #define BEISCSI_FW_MBX_TIMEOUT 100 746733b39aSJayamohan Kallickal 75eaae5267SJohn Soni Jose /* MBOX Command VER */ 76b3c202dcSJayamohan Kallickal #define MBX_CMD_VER1 0x01 77eaae5267SJohn Soni Jose #define MBX_CMD_VER2 0x02 78eaae5267SJohn Soni Jose 796733b39aSJayamohan Kallickal struct be_mcc_compl { 806733b39aSJayamohan Kallickal u32 status; /* dword 0 */ 816733b39aSJayamohan Kallickal u32 tag0; /* dword 1 */ 826733b39aSJayamohan Kallickal u32 tag1; /* dword 2 */ 836733b39aSJayamohan Kallickal u32 flags; /* dword 3 */ 846733b39aSJayamohan Kallickal }; 856733b39aSJayamohan Kallickal 866733b39aSJayamohan Kallickal /********* Mailbox door bell *************/ 876733b39aSJayamohan Kallickal /** 886733b39aSJayamohan Kallickal * Used for driver communication with the FW. 896733b39aSJayamohan Kallickal * The software must write this register twice to post any command. First, 906733b39aSJayamohan Kallickal * it writes the register with hi=1 and the upper bits of the physical address 916733b39aSJayamohan Kallickal * for the MAILBOX structure. Software must poll the ready bit until this 926733b39aSJayamohan Kallickal * is acknowledged. Then, sotware writes the register with hi=0 with the lower 936733b39aSJayamohan Kallickal * bits in the address. It must poll the ready bit until the command is 946733b39aSJayamohan Kallickal * complete. Upon completion, the MAILBOX will contain a valid completion 956733b39aSJayamohan Kallickal * queue entry. 966733b39aSJayamohan Kallickal */ 976733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_OFFSET 0x160 986733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_RDY_MASK 0x1 /* bit 0 */ 996733b39aSJayamohan Kallickal #define MPU_MAILBOX_DB_HI_MASK 0x2 /* bit 1 */ 1006733b39aSJayamohan Kallickal 1016733b39aSJayamohan Kallickal /********** MPU semphore ******************/ 1026733b39aSJayamohan Kallickal #define MPU_EP_SEMAPHORE_OFFSET 0xac 1036733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_STAGE_MASK 0x0000FFFF 1046733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_ERR_MASK 0x1 1056733b39aSJayamohan Kallickal #define EP_SEMAPHORE_POST_ERR_SHIFT 31 1066733b39aSJayamohan Kallickal 1076733b39aSJayamohan Kallickal /********** MCC door bell ************/ 1086733b39aSJayamohan Kallickal #define DB_MCCQ_OFFSET 0x140 109e08b3c8bSJayamohan Kallickal #define DB_MCCQ_RING_ID_MASK 0xFFFF /* bits 0 - 15 */ 1106733b39aSJayamohan Kallickal /* Number of entries posted */ 1116733b39aSJayamohan Kallickal #define DB_MCCQ_NUM_POSTED_SHIFT 16 /* bits 16 - 29 */ 1126733b39aSJayamohan Kallickal 1136733b39aSJayamohan Kallickal /* MPU semphore POST stage values */ 1146733b39aSJayamohan Kallickal #define POST_STAGE_ARMFW_RDY 0xc000 /* FW is done with POST */ 1156733b39aSJayamohan Kallickal 1166733b39aSJayamohan Kallickal /** 1176733b39aSJayamohan Kallickal * When the async bit of mcc_compl is set, the last 4 bytes of 1186733b39aSJayamohan Kallickal * mcc_compl is interpreted as follows: 1196733b39aSJayamohan Kallickal */ 1206733b39aSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_CODE_SHIFT 8 /* bits 8 - 15 */ 1216733b39aSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF 1226733b39aSJayamohan Kallickal #define ASYNC_EVENT_CODE_LINK_STATE 0x1 123a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_CODE_ISCSI 0x4 12453aefe25SJitendra Bhivare #define ASYNC_EVENT_CODE_SLI 0x11 125a3d313eaSJayamohan Kallickal 126a3d313eaSJayamohan Kallickal #define ASYNC_TRAILER_EVENT_TYPE_SHIFT 16 /* bits 16 - 23 */ 12753aefe25SJitendra Bhivare #define ASYNC_TRAILER_EVENT_TYPE_MASK 0xFF 12853aefe25SJitendra Bhivare 12953aefe25SJitendra Bhivare /* iSCSI events */ 130a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_ISCSI_TGT_DISC 0x4 131a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_ISCSI_CONN 0x5 132a3d313eaSJayamohan Kallickal #define ASYNC_EVENT_NEW_TCP_CONN 0x7 133a3d313eaSJayamohan Kallickal 13453aefe25SJitendra Bhivare /* SLI events */ 13553aefe25SJitendra Bhivare #define ASYNC_SLI_EVENT_TYPE_MISCONFIGURED 0x9 13653aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_VALID(le) (le & 0x80) 13753aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_SEV(le) ((le >> 1) & 0x03) 13853aefe25SJitendra Bhivare #define ASYNC_SLI_LINK_EFFECT_STATE(le) (le & 0x01) 13953aefe25SJitendra Bhivare 1406733b39aSJayamohan Kallickal struct be_async_event_trailer { 1416733b39aSJayamohan Kallickal u32 code; 1426733b39aSJayamohan Kallickal }; 1436733b39aSJayamohan Kallickal 1446733b39aSJayamohan Kallickal enum { 1456733b39aSJayamohan Kallickal ASYNC_EVENT_LINK_DOWN = 0x0, 1466ea9b3b0SJayamohan Kallickal ASYNC_EVENT_LINK_UP = 0x1, 1476733b39aSJayamohan Kallickal }; 1486733b39aSJayamohan Kallickal 1496733b39aSJayamohan Kallickal /** 1506733b39aSJayamohan Kallickal * When the event code of an async trailer is link-state, the mcc_compl 1516733b39aSJayamohan Kallickal * must be interpreted as follows 1526733b39aSJayamohan Kallickal */ 1536733b39aSJayamohan Kallickal struct be_async_event_link_state { 1546733b39aSJayamohan Kallickal u8 physical_port; 1556733b39aSJayamohan Kallickal u8 port_link_status; 1569c4f8b01SJitendra Bhivare /** 1579c4f8b01SJitendra Bhivare * ASYNC_EVENT_LINK_DOWN 0x0 1589c4f8b01SJitendra Bhivare * ASYNC_EVENT_LINK_UP 0x1 1599c4f8b01SJitendra Bhivare * ASYNC_EVENT_LINK_LOGICAL_DOWN 0x2 1609c4f8b01SJitendra Bhivare * ASYNC_EVENT_LINK_LOGICAL_UP 0x3 1619c4f8b01SJitendra Bhivare */ 1629c4f8b01SJitendra Bhivare #define BE_ASYNC_LINK_UP_MASK 0x01 1636733b39aSJayamohan Kallickal u8 port_duplex; 1649c4f8b01SJitendra Bhivare u8 port_speed; 165048084c2SJitendra Bhivare /* BE2ISCSI_LINK_SPEED_ZERO 0x00 - no link */ 166048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_10MBPS 0x01 167048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_100MBPS 0x02 168048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_1GBPS 0x03 169048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_10GBPS 0x04 170048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_25GBPS 0x06 171048084c2SJitendra Bhivare #define BE2ISCSI_LINK_SPEED_40GBPS 0x07 1726733b39aSJayamohan Kallickal u8 port_fault; 173048084c2SJitendra Bhivare u8 event_reason; 174048084c2SJitendra Bhivare u16 qos_link_speed; 175048084c2SJitendra Bhivare u32 event_tag; 1766733b39aSJayamohan Kallickal struct be_async_event_trailer trailer; 1776733b39aSJayamohan Kallickal } __packed; 1786733b39aSJayamohan Kallickal 17953aefe25SJitendra Bhivare /** 18053aefe25SJitendra Bhivare * When async-trailer is SLI event, mcc_compl is interpreted as 18153aefe25SJitendra Bhivare */ 18253aefe25SJitendra Bhivare struct be_async_event_sli { 18353aefe25SJitendra Bhivare u32 event_data1; 18453aefe25SJitendra Bhivare u32 event_data2; 18553aefe25SJitendra Bhivare u32 reserved; 18653aefe25SJitendra Bhivare u32 trailer; 18753aefe25SJitendra Bhivare } __packed; 18853aefe25SJitendra Bhivare 1896733b39aSJayamohan Kallickal struct be_mcc_mailbox { 1906733b39aSJayamohan Kallickal struct be_mcc_wrb wrb; 1916733b39aSJayamohan Kallickal struct be_mcc_compl compl; 1926733b39aSJayamohan Kallickal }; 1936733b39aSJayamohan Kallickal 1946733b39aSJayamohan Kallickal /* Type of subsystems supported by FW */ 1956733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_COMMON 0x1 1966733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ISCSI 0x2 1976733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ETH 0x3 1986733b39aSJayamohan Kallickal #define CMD_SUBSYSTEM_ISCSI_INI 0x6 1996733b39aSJayamohan Kallickal #define CMD_COMMON_TCP_UPLOAD 0x1 2006733b39aSJayamohan Kallickal 2016733b39aSJayamohan Kallickal /** 2026733b39aSJayamohan Kallickal * List of common opcodes subsystem CMD_SUBSYSTEM_COMMON 2036733b39aSJayamohan Kallickal * These opcodes are unique for each subsystem defined above 2046733b39aSJayamohan Kallickal */ 2056733b39aSJayamohan Kallickal #define OPCODE_COMMON_CQ_CREATE 12 2066733b39aSJayamohan Kallickal #define OPCODE_COMMON_EQ_CREATE 13 2076733b39aSJayamohan Kallickal #define OPCODE_COMMON_MCC_CREATE 21 20853aefe25SJitendra Bhivare #define OPCODE_COMMON_MCC_CREATE_EXT 90 20915a90fe0SJayamohan Kallickal #define OPCODE_COMMON_ADD_TEMPLATE_HEADER_BUFFERS 24 21015a90fe0SJayamohan Kallickal #define OPCODE_COMMON_REMOVE_TEMPLATE_HEADER_BUFFERS 25 2116733b39aSJayamohan Kallickal #define OPCODE_COMMON_GET_CNTL_ATTRIBUTES 32 2126733b39aSJayamohan Kallickal #define OPCODE_COMMON_GET_FW_VERSION 35 2136733b39aSJayamohan Kallickal #define OPCODE_COMMON_MODIFY_EQ_DELAY 41 2146733b39aSJayamohan Kallickal #define OPCODE_COMMON_FIRMWARE_CONFIG 42 2156733b39aSJayamohan Kallickal #define OPCODE_COMMON_MCC_DESTROY 53 2166733b39aSJayamohan Kallickal #define OPCODE_COMMON_CQ_DESTROY 54 2176733b39aSJayamohan Kallickal #define OPCODE_COMMON_EQ_DESTROY 55 2186733b39aSJayamohan Kallickal #define OPCODE_COMMON_QUERY_FIRMWARE_CONFIG 58 2196733b39aSJayamohan Kallickal #define OPCODE_COMMON_FUNCTION_RESET 61 22053aefe25SJitendra Bhivare #define OPCODE_COMMON_GET_PORT_NAME 77 221*6694095bSJitendra Bhivare #define OPCODE_COMMON_SET_FEATURES 191 2226733b39aSJayamohan Kallickal 2236733b39aSJayamohan Kallickal /** 2246733b39aSJayamohan Kallickal * LIST of opcodes that are common between Initiator and Target 2256733b39aSJayamohan Kallickal * used by CMD_SUBSYSTEM_ISCSI 2266733b39aSJayamohan Kallickal * These opcodes are unique for each subsystem defined above 2276733b39aSJayamohan Kallickal */ 2286733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CFG_POST_SGL_PAGES 2 2296733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CFG_REMOVE_SGL_PAGES 3 2306733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_NIC_CONFIG 7 231c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_SET_VLAN 14 2320e43895eSMike Christie #define OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR 17 2330e43895eSMike Christie #define OPCODE_COMMON_ISCSI_NTWK_REL_STATELESS_IP_ADDR 18 234c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_IP_ADDR 21 235c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_DEFAULT_GATEWAY 22 236c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_MODIFY_DEFAULT_GATEWAY 23 237c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_ALL_IF_ID 24 238c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_NTWK_GET_IF_INFO 25 2396733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_SET_FRAGNUM_BITS_FOR_SGL_CRA 61 2406733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_DEFQ_CREATE 64 2416733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_DEFQ_DESTROY 65 2426733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_WRBQ_CREATE 66 2436733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_WRBQ_DESTROY 67 2446733b39aSJayamohan Kallickal 2456733b39aSJayamohan Kallickal struct be_cmd_req_hdr { 2466733b39aSJayamohan Kallickal u8 opcode; /* dword 0 */ 2476733b39aSJayamohan Kallickal u8 subsystem; /* dword 0 */ 2486733b39aSJayamohan Kallickal u8 port_number; /* dword 0 */ 2496733b39aSJayamohan Kallickal u8 domain; /* dword 0 */ 2506733b39aSJayamohan Kallickal u32 timeout; /* dword 1 */ 2516733b39aSJayamohan Kallickal u32 request_length; /* dword 2 */ 252eaae5267SJohn Soni Jose u8 version; /* dword 3 */ 253eaae5267SJohn Soni Jose u8 rsvd0[3]; /* dword 3 */ 2546733b39aSJayamohan Kallickal }; 2556733b39aSJayamohan Kallickal 2566733b39aSJayamohan Kallickal struct be_cmd_resp_hdr { 2576733b39aSJayamohan Kallickal u32 info; /* dword 0 */ 2586733b39aSJayamohan Kallickal u32 status; /* dword 1 */ 2596733b39aSJayamohan Kallickal u32 response_length; /* dword 2 */ 2606733b39aSJayamohan Kallickal u32 actual_resp_len; /* dword 3 */ 2616733b39aSJayamohan Kallickal }; 2626733b39aSJayamohan Kallickal 2636733b39aSJayamohan Kallickal struct phys_addr { 2646733b39aSJayamohan Kallickal u32 lo; 2656733b39aSJayamohan Kallickal u32 hi; 2666733b39aSJayamohan Kallickal }; 2676733b39aSJayamohan Kallickal 26815a90fe0SJayamohan Kallickal struct virt_addr { 26915a90fe0SJayamohan Kallickal u32 lo; 27015a90fe0SJayamohan Kallickal u32 hi; 27115a90fe0SJayamohan Kallickal }; 2726733b39aSJayamohan Kallickal /************************** 2736733b39aSJayamohan Kallickal * BE Command definitions * 2746733b39aSJayamohan Kallickal **************************/ 2756733b39aSJayamohan Kallickal 2766733b39aSJayamohan Kallickal /** 2776733b39aSJayamohan Kallickal * Pseudo amap definition in which each bit of the actual structure is defined 2786733b39aSJayamohan Kallickal * as a byte - used to calculate offset/shift/mask of each field 2796733b39aSJayamohan Kallickal */ 2806733b39aSJayamohan Kallickal struct amap_eq_context { 2816733b39aSJayamohan Kallickal u8 cidx[13]; /* dword 0 */ 2826733b39aSJayamohan Kallickal u8 rsvd0[3]; /* dword 0 */ 2836733b39aSJayamohan Kallickal u8 epidx[13]; /* dword 0 */ 2846733b39aSJayamohan Kallickal u8 valid; /* dword 0 */ 2856733b39aSJayamohan Kallickal u8 rsvd1; /* dword 0 */ 2866733b39aSJayamohan Kallickal u8 size; /* dword 0 */ 2876733b39aSJayamohan Kallickal u8 pidx[13]; /* dword 1 */ 2886733b39aSJayamohan Kallickal u8 rsvd2[3]; /* dword 1 */ 2896733b39aSJayamohan Kallickal u8 pd[10]; /* dword 1 */ 2906733b39aSJayamohan Kallickal u8 count[3]; /* dword 1 */ 2916733b39aSJayamohan Kallickal u8 solevent; /* dword 1 */ 2926733b39aSJayamohan Kallickal u8 stalled; /* dword 1 */ 2936733b39aSJayamohan Kallickal u8 armed; /* dword 1 */ 2946733b39aSJayamohan Kallickal u8 rsvd3[4]; /* dword 2 */ 2956733b39aSJayamohan Kallickal u8 func[8]; /* dword 2 */ 2966733b39aSJayamohan Kallickal u8 rsvd4; /* dword 2 */ 2976733b39aSJayamohan Kallickal u8 delaymult[10]; /* dword 2 */ 2986733b39aSJayamohan Kallickal u8 rsvd5[2]; /* dword 2 */ 2996733b39aSJayamohan Kallickal u8 phase[2]; /* dword 2 */ 3006733b39aSJayamohan Kallickal u8 nodelay; /* dword 2 */ 3016733b39aSJayamohan Kallickal u8 rsvd6[4]; /* dword 2 */ 3026733b39aSJayamohan Kallickal u8 rsvd7[32]; /* dword 3 */ 3036733b39aSJayamohan Kallickal } __packed; 3046733b39aSJayamohan Kallickal 3056733b39aSJayamohan Kallickal struct be_cmd_req_eq_create { 3066733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; /* dw[4] */ 3076733b39aSJayamohan Kallickal u16 num_pages; /* sword */ 3086733b39aSJayamohan Kallickal u16 rsvd0; /* sword */ 3096733b39aSJayamohan Kallickal u8 context[sizeof(struct amap_eq_context) / 8]; /* dw[4] */ 3106733b39aSJayamohan Kallickal struct phys_addr pages[8]; 3116733b39aSJayamohan Kallickal } __packed; 3126733b39aSJayamohan Kallickal 3136733b39aSJayamohan Kallickal struct be_cmd_resp_eq_create { 3146733b39aSJayamohan Kallickal struct be_cmd_resp_hdr resp_hdr; 3156733b39aSJayamohan Kallickal u16 eq_id; /* sword */ 3166733b39aSJayamohan Kallickal u16 rsvd0; /* sword */ 3176733b39aSJayamohan Kallickal } __packed; 3186733b39aSJayamohan Kallickal 31973af08e1SJayamohan Kallickal struct be_set_eqd { 32073af08e1SJayamohan Kallickal u32 eq_id; 32173af08e1SJayamohan Kallickal u32 phase; 32273af08e1SJayamohan Kallickal u32 delay_multiplier; 32373af08e1SJayamohan Kallickal } __packed; 32473af08e1SJayamohan Kallickal 325c7acc5b8SJayamohan Kallickal struct mgmt_chap_format { 326c7acc5b8SJayamohan Kallickal u32 flags; 327c7acc5b8SJayamohan Kallickal u8 intr_chap_name[256]; 328c7acc5b8SJayamohan Kallickal u8 intr_secret[16]; 329c7acc5b8SJayamohan Kallickal u8 target_chap_name[256]; 330c7acc5b8SJayamohan Kallickal u8 target_secret[16]; 331c7acc5b8SJayamohan Kallickal u16 intr_chap_name_length; 332c7acc5b8SJayamohan Kallickal u16 intr_secret_length; 333c7acc5b8SJayamohan Kallickal u16 target_chap_name_length; 334c7acc5b8SJayamohan Kallickal u16 target_secret_length; 335c7acc5b8SJayamohan Kallickal } __packed; 336c7acc5b8SJayamohan Kallickal 337c7acc5b8SJayamohan Kallickal struct mgmt_auth_method_format { 338c7acc5b8SJayamohan Kallickal u8 auth_method_type; 339c7acc5b8SJayamohan Kallickal u8 padding[3]; 340c7acc5b8SJayamohan Kallickal struct mgmt_chap_format chap; 341c7acc5b8SJayamohan Kallickal } __packed; 342c7acc5b8SJayamohan Kallickal 3433f4134c1SJohn Soni Jose struct be_cmd_req_logout_fw_sess { 3443f4134c1SJohn Soni Jose struct be_cmd_req_hdr hdr; /* dw[4] */ 3453f4134c1SJohn Soni Jose uint32_t session_handle; 3463f4134c1SJohn Soni Jose } __packed; 3473f4134c1SJohn Soni Jose 3483f4134c1SJohn Soni Jose struct be_cmd_resp_logout_fw_sess { 3493f4134c1SJohn Soni Jose struct be_cmd_resp_hdr hdr; /* dw[4] */ 3503f4134c1SJohn Soni Jose uint32_t session_status; 35150a4b824SJitendra Bhivare #define BE_SESS_STATUS_CLOSE 0x20 3523f4134c1SJohn Soni Jose } __packed; 3533f4134c1SJohn Soni Jose 354c7acc5b8SJayamohan Kallickal struct mgmt_conn_login_options { 355c7acc5b8SJayamohan Kallickal u8 flags; 356c7acc5b8SJayamohan Kallickal u8 header_digest; 357c7acc5b8SJayamohan Kallickal u8 data_digest; 358c7acc5b8SJayamohan Kallickal u8 rsvd0; 359c7acc5b8SJayamohan Kallickal u32 max_recv_datasegment_len_ini; 360c7acc5b8SJayamohan Kallickal u32 max_recv_datasegment_len_tgt; 361c7acc5b8SJayamohan Kallickal u32 tcp_mss; 362c7acc5b8SJayamohan Kallickal u32 tcp_window_size; 363c7acc5b8SJayamohan Kallickal struct mgmt_auth_method_format auth_data; 364c7acc5b8SJayamohan Kallickal } __packed; 365c7acc5b8SJayamohan Kallickal 3660e43895eSMike Christie struct ip_addr_format { 367c7acc5b8SJayamohan Kallickal u16 size_of_structure; 368c7acc5b8SJayamohan Kallickal u8 reserved; 369c7acc5b8SJayamohan Kallickal u8 ip_type; 370290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_V4 0x1 371290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_STATIC_V4 0x3 372290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_DHCP_V4 0x5 373290aa376SJitendra Bhivare /* type v4 values < type v6 values */ 374290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_V6 0x10 375290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_ROUTABLE_V6 0x30 376290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_LINK_LOCAL_V6 0x50 377290aa376SJitendra Bhivare #define BEISCSI_IP_TYPE_AUTO_V6 0x90 3780e43895eSMike Christie u8 addr[16]; 379c7acc5b8SJayamohan Kallickal u32 rsvd0; 380c7acc5b8SJayamohan Kallickal } __packed; 381c7acc5b8SJayamohan Kallickal 382c7acc5b8SJayamohan Kallickal struct mgmt_conn_info { 383c7acc5b8SJayamohan Kallickal u32 connection_handle; 384c7acc5b8SJayamohan Kallickal u32 connection_status; 385c7acc5b8SJayamohan Kallickal u16 src_port; 386c7acc5b8SJayamohan Kallickal u16 dest_port; 387c7acc5b8SJayamohan Kallickal u16 dest_port_redirected; 388c7acc5b8SJayamohan Kallickal u16 cid; 389c7acc5b8SJayamohan Kallickal u32 estimated_throughput; 3900e43895eSMike Christie struct ip_addr_format src_ipaddr; 3910e43895eSMike Christie struct ip_addr_format dest_ipaddr; 3920e43895eSMike Christie struct ip_addr_format dest_ipaddr_redirected; 393c7acc5b8SJayamohan Kallickal struct mgmt_conn_login_options negotiated_login_options; 394c7acc5b8SJayamohan Kallickal } __packed; 395c7acc5b8SJayamohan Kallickal 396c7acc5b8SJayamohan Kallickal struct mgmt_session_login_options { 397c7acc5b8SJayamohan Kallickal u8 flags; 398c7acc5b8SJayamohan Kallickal u8 error_recovery_level; 399c7acc5b8SJayamohan Kallickal u16 rsvd0; 400c7acc5b8SJayamohan Kallickal u32 first_burst_length; 401c7acc5b8SJayamohan Kallickal u32 max_burst_length; 402c7acc5b8SJayamohan Kallickal u16 max_connections; 403c7acc5b8SJayamohan Kallickal u16 max_outstanding_r2t; 404c7acc5b8SJayamohan Kallickal u16 default_time2wait; 405c7acc5b8SJayamohan Kallickal u16 default_time2retain; 406c7acc5b8SJayamohan Kallickal } __packed; 407c7acc5b8SJayamohan Kallickal 408c7acc5b8SJayamohan Kallickal struct mgmt_session_info { 409c7acc5b8SJayamohan Kallickal u32 session_handle; 410c7acc5b8SJayamohan Kallickal u32 status; 411c7acc5b8SJayamohan Kallickal u8 isid[6]; 412c7acc5b8SJayamohan Kallickal u16 tsih; 413c7acc5b8SJayamohan Kallickal u32 session_flags; 414c7acc5b8SJayamohan Kallickal u16 conn_count; 415c7acc5b8SJayamohan Kallickal u16 pad; 416c7acc5b8SJayamohan Kallickal u8 target_name[224]; 417c7acc5b8SJayamohan Kallickal u8 initiator_iscsiname[224]; 418c7acc5b8SJayamohan Kallickal struct mgmt_session_login_options negotiated_login_options; 419c7acc5b8SJayamohan Kallickal struct mgmt_conn_info conn_list[1]; 420c7acc5b8SJayamohan Kallickal } __packed; 421c7acc5b8SJayamohan Kallickal 4220e43895eSMike Christie struct be_cmd_get_session_req { 423c7acc5b8SJayamohan Kallickal struct be_cmd_req_hdr hdr; 424c7acc5b8SJayamohan Kallickal u32 session_handle; 425c7acc5b8SJayamohan Kallickal } __packed; 426c7acc5b8SJayamohan Kallickal 4270e43895eSMike Christie struct be_cmd_get_session_resp { 428c7acc5b8SJayamohan Kallickal struct be_cmd_resp_hdr hdr; 429c7acc5b8SJayamohan Kallickal struct mgmt_session_info session_info; 430c7acc5b8SJayamohan Kallickal } __packed; 431c7acc5b8SJayamohan Kallickal 4326733b39aSJayamohan Kallickal struct mac_addr { 4330e43895eSMike Christie u16 size_of_structure; 4346733b39aSJayamohan Kallickal u8 addr[ETH_ALEN]; 4356733b39aSJayamohan Kallickal } __packed; 4366733b39aSJayamohan Kallickal 4370e43895eSMike Christie struct be_cmd_get_boot_target_req { 438c7acc5b8SJayamohan Kallickal struct be_cmd_req_hdr hdr; 439c7acc5b8SJayamohan Kallickal } __packed; 440c7acc5b8SJayamohan Kallickal 4410e43895eSMike Christie struct be_cmd_get_boot_target_resp { 442c7acc5b8SJayamohan Kallickal struct be_cmd_resp_hdr hdr; 443c7acc5b8SJayamohan Kallickal u32 boot_session_count; 44450a4b824SJitendra Bhivare u32 boot_session_handle; 44550a4b824SJitendra Bhivare /** 44650a4b824SJitendra Bhivare * FW returns 0xffffffff if it couldn't establish connection with 44750a4b824SJitendra Bhivare * configured boot target. 44850a4b824SJitendra Bhivare */ 44950a4b824SJitendra Bhivare #define BE_BOOT_INVALID_SHANDLE 0xffffffff 450c7acc5b8SJayamohan Kallickal }; 451c7acc5b8SJayamohan Kallickal 4529aef4200SJohn Soni Jose struct be_cmd_reopen_session_req { 4539aef4200SJohn Soni Jose struct be_cmd_req_hdr hdr; 4549aef4200SJohn Soni Jose #define BE_REOPEN_ALL_SESSIONS 0x00 4559aef4200SJohn Soni Jose #define BE_REOPEN_BOOT_SESSIONS 0x01 4569aef4200SJohn Soni Jose #define BE_REOPEN_A_SESSION 0x02 4579aef4200SJohn Soni Jose u16 reopen_type; 4589aef4200SJohn Soni Jose u16 rsvd; 4599aef4200SJohn Soni Jose u32 session_handle; 4609aef4200SJohn Soni Jose } __packed; 4619aef4200SJohn Soni Jose 4629aef4200SJohn Soni Jose struct be_cmd_reopen_session_resp { 4639aef4200SJohn Soni Jose struct be_cmd_resp_hdr hdr; 4649aef4200SJohn Soni Jose u32 rsvd; 4659aef4200SJohn Soni Jose u32 session_handle; 4669aef4200SJohn Soni Jose } __packed; 4679aef4200SJohn Soni Jose 4689aef4200SJohn Soni Jose 4690e43895eSMike Christie struct be_cmd_mac_query_req { 4706733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 4716733b39aSJayamohan Kallickal u8 type; 4726733b39aSJayamohan Kallickal u8 permanent; 4736733b39aSJayamohan Kallickal u16 if_id; 4746733b39aSJayamohan Kallickal } __packed; 4756733b39aSJayamohan Kallickal 4760e43895eSMike Christie struct be_cmd_get_mac_resp { 4776733b39aSJayamohan Kallickal struct be_cmd_resp_hdr hdr; 4786733b39aSJayamohan Kallickal struct mac_addr mac; 4796733b39aSJayamohan Kallickal }; 4806733b39aSJayamohan Kallickal 4810e43895eSMike Christie struct be_ip_addr_subnet_format { 4820e43895eSMike Christie u16 size_of_structure; 4830e43895eSMike Christie u8 ip_type; 4840e43895eSMike Christie u8 ipv6_prefix_length; 4850e43895eSMike Christie u8 addr[16]; 4860e43895eSMike Christie u8 subnet_mask[16]; 4870e43895eSMike Christie u32 rsvd0; 4880e43895eSMike Christie } __packed; 4890e43895eSMike Christie 4900e43895eSMike Christie struct be_cmd_get_if_info_req { 4910e43895eSMike Christie struct be_cmd_req_hdr hdr; 4920e43895eSMike Christie u32 interface_hndl; 4930e43895eSMike Christie u32 ip_type; 4940e43895eSMike Christie } __packed; 4950e43895eSMike Christie 4960e43895eSMike Christie struct be_cmd_get_if_info_resp { 4970e43895eSMike Christie struct be_cmd_req_hdr hdr; 4980e43895eSMike Christie u32 interface_hndl; 4990e43895eSMike Christie u32 vlan_priority; 5000e43895eSMike Christie u32 ip_addr_count; 5010e43895eSMike Christie u32 dhcp_state; 5020e43895eSMike Christie struct be_ip_addr_subnet_format ip_addr; 5030e43895eSMike Christie } __packed; 5040e43895eSMike Christie 5050e43895eSMike Christie struct be_ip_addr_record { 5060e43895eSMike Christie u32 action; 5070e43895eSMike Christie u32 interface_hndl; 5080e43895eSMike Christie struct be_ip_addr_subnet_format ip_addr; 5090e43895eSMike Christie u32 status; 5100e43895eSMike Christie } __packed; 5110e43895eSMike Christie 5120e43895eSMike Christie struct be_ip_addr_record_params { 5130e43895eSMike Christie u32 record_entry_count; 5140e43895eSMike Christie struct be_ip_addr_record ip_record; 5150e43895eSMike Christie } __packed; 5160e43895eSMike Christie 5170e43895eSMike Christie struct be_cmd_set_ip_addr_req { 5180e43895eSMike Christie struct be_cmd_req_hdr hdr; 5190e43895eSMike Christie struct be_ip_addr_record_params ip_params; 5200e43895eSMike Christie } __packed; 5210e43895eSMike Christie 5220e43895eSMike Christie 5230e43895eSMike Christie struct be_cmd_set_dhcp_req { 5240e43895eSMike Christie struct be_cmd_req_hdr hdr; 5250e43895eSMike Christie u32 interface_hndl; 5260e43895eSMike Christie u32 ip_type; 5270e43895eSMike Christie u32 flags; 5280e43895eSMike Christie u32 retry_count; 5290e43895eSMike Christie } __packed; 5300e43895eSMike Christie 5310e43895eSMike Christie struct be_cmd_rel_dhcp_req { 5320e43895eSMike Christie struct be_cmd_req_hdr hdr; 5330e43895eSMike Christie u32 interface_hndl; 5340e43895eSMike Christie u32 ip_type; 5350e43895eSMike Christie } __packed; 5360e43895eSMike Christie 5370e43895eSMike Christie struct be_cmd_set_def_gateway_req { 5380e43895eSMike Christie struct be_cmd_req_hdr hdr; 5390e43895eSMike Christie u32 action; 5400e43895eSMike Christie struct ip_addr_format ip_addr; 5410e43895eSMike Christie } __packed; 5420e43895eSMike Christie 5430e43895eSMike Christie struct be_cmd_get_def_gateway_req { 5440e43895eSMike Christie struct be_cmd_req_hdr hdr; 5450e43895eSMike Christie u32 ip_type; 5460e43895eSMike Christie } __packed; 5470e43895eSMike Christie 5480e43895eSMike Christie struct be_cmd_get_def_gateway_resp { 5490e43895eSMike Christie struct be_cmd_req_hdr hdr; 5500e43895eSMike Christie struct ip_addr_format ip_addr; 5510e43895eSMike Christie } __packed; 5520e43895eSMike Christie 5536f72238eSJohn Soni Jose #define BEISCSI_VLAN_DISABLE 0xFFFF 5546f72238eSJohn Soni Jose struct be_cmd_set_vlan_req { 5556f72238eSJohn Soni Jose struct be_cmd_req_hdr hdr; 5566f72238eSJohn Soni Jose u32 interface_hndl; 5576f72238eSJohn Soni Jose u32 vlan_priority; 5586f72238eSJohn Soni Jose } __packed; 5596733b39aSJayamohan Kallickal /******************** Create CQ ***************************/ 5606733b39aSJayamohan Kallickal /** 5616733b39aSJayamohan Kallickal * Pseudo amap definition in which each bit of the actual structure is defined 5626733b39aSJayamohan Kallickal * as a byte - used to calculate offset/shift/mask of each field 5636733b39aSJayamohan Kallickal */ 5646733b39aSJayamohan Kallickal struct amap_cq_context { 5656733b39aSJayamohan Kallickal u8 cidx[11]; /* dword 0 */ 5666733b39aSJayamohan Kallickal u8 rsvd0; /* dword 0 */ 5676733b39aSJayamohan Kallickal u8 coalescwm[2]; /* dword 0 */ 5686733b39aSJayamohan Kallickal u8 nodelay; /* dword 0 */ 5696733b39aSJayamohan Kallickal u8 epidx[11]; /* dword 0 */ 5706733b39aSJayamohan Kallickal u8 rsvd1; /* dword 0 */ 5716733b39aSJayamohan Kallickal u8 count[2]; /* dword 0 */ 5726733b39aSJayamohan Kallickal u8 valid; /* dword 0 */ 5736733b39aSJayamohan Kallickal u8 solevent; /* dword 0 */ 5746733b39aSJayamohan Kallickal u8 eventable; /* dword 0 */ 5756733b39aSJayamohan Kallickal u8 pidx[11]; /* dword 1 */ 5766733b39aSJayamohan Kallickal u8 rsvd2; /* dword 1 */ 5776733b39aSJayamohan Kallickal u8 pd[10]; /* dword 1 */ 5786733b39aSJayamohan Kallickal u8 eqid[8]; /* dword 1 */ 5796733b39aSJayamohan Kallickal u8 stalled; /* dword 1 */ 5806733b39aSJayamohan Kallickal u8 armed; /* dword 1 */ 5816733b39aSJayamohan Kallickal u8 rsvd3[4]; /* dword 2 */ 5826733b39aSJayamohan Kallickal u8 func[8]; /* dword 2 */ 5836733b39aSJayamohan Kallickal u8 rsvd4[20]; /* dword 2 */ 5846733b39aSJayamohan Kallickal u8 rsvd5[32]; /* dword 3 */ 5856733b39aSJayamohan Kallickal } __packed; 5866733b39aSJayamohan Kallickal 587eaae5267SJohn Soni Jose struct amap_cq_context_v2 { 588eaae5267SJohn Soni Jose u8 rsvd0[12]; /* dword 0 */ 589eaae5267SJohn Soni Jose u8 coalescwm[2]; /* dword 0 */ 590eaae5267SJohn Soni Jose u8 nodelay; /* dword 0 */ 591eaae5267SJohn Soni Jose u8 rsvd1[12]; /* dword 0 */ 592eaae5267SJohn Soni Jose u8 count[2]; /* dword 0 */ 593eaae5267SJohn Soni Jose u8 valid; /* dword 0 */ 594eaae5267SJohn Soni Jose u8 rsvd2; /* dword 0 */ 595eaae5267SJohn Soni Jose u8 eventable; /* dword 0 */ 596eaae5267SJohn Soni Jose u8 eqid[16]; /* dword 1 */ 597eaae5267SJohn Soni Jose u8 rsvd3[15]; /* dword 1 */ 598eaae5267SJohn Soni Jose u8 armed; /* dword 1 */ 599eaae5267SJohn Soni Jose u8 cqecount[16];/* dword 2 */ 600eaae5267SJohn Soni Jose u8 rsvd4[16]; /* dword 2 */ 601eaae5267SJohn Soni Jose u8 rsvd5[32]; /* dword 3 */ 602eaae5267SJohn Soni Jose }; 603eaae5267SJohn Soni Jose 6046733b39aSJayamohan Kallickal struct be_cmd_req_cq_create { 6056733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 6066733b39aSJayamohan Kallickal u16 num_pages; 607eaae5267SJohn Soni Jose u8 page_size; 608eaae5267SJohn Soni Jose u8 rsvd0; 6096733b39aSJayamohan Kallickal u8 context[sizeof(struct amap_cq_context) / 8]; 6106733b39aSJayamohan Kallickal struct phys_addr pages[4]; 6116733b39aSJayamohan Kallickal } __packed; 6126733b39aSJayamohan Kallickal 6136733b39aSJayamohan Kallickal struct be_cmd_resp_cq_create { 6146733b39aSJayamohan Kallickal struct be_cmd_resp_hdr hdr; 6156733b39aSJayamohan Kallickal u16 cq_id; 6166733b39aSJayamohan Kallickal u16 rsvd0; 6176733b39aSJayamohan Kallickal } __packed; 6186733b39aSJayamohan Kallickal 6196733b39aSJayamohan Kallickal /******************** Create MCCQ ***************************/ 6206733b39aSJayamohan Kallickal /** 6216733b39aSJayamohan Kallickal * Pseudo amap definition in which each bit of the actual structure is defined 6226733b39aSJayamohan Kallickal * as a byte - used to calculate offset/shift/mask of each field 6236733b39aSJayamohan Kallickal */ 6246733b39aSJayamohan Kallickal struct amap_mcc_context { 6256733b39aSJayamohan Kallickal u8 con_index[14]; 6266733b39aSJayamohan Kallickal u8 rsvd0[2]; 6276733b39aSJayamohan Kallickal u8 ring_size[4]; 6286733b39aSJayamohan Kallickal u8 fetch_wrb; 6296733b39aSJayamohan Kallickal u8 fetch_r2t; 6306733b39aSJayamohan Kallickal u8 cq_id[10]; 6316733b39aSJayamohan Kallickal u8 prod_index[14]; 6326733b39aSJayamohan Kallickal u8 fid[8]; 6336733b39aSJayamohan Kallickal u8 pdid[9]; 6346733b39aSJayamohan Kallickal u8 valid; 6356733b39aSJayamohan Kallickal u8 rsvd1[32]; 6366733b39aSJayamohan Kallickal u8 rsvd2[32]; 6376733b39aSJayamohan Kallickal } __packed; 6386733b39aSJayamohan Kallickal 63953aefe25SJitendra Bhivare struct be_cmd_req_mcc_create_ext { 6406733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 6416733b39aSJayamohan Kallickal u16 num_pages; 6426733b39aSJayamohan Kallickal u16 rsvd0; 64353aefe25SJitendra Bhivare u32 async_evt_bitmap; 6446733b39aSJayamohan Kallickal u8 context[sizeof(struct amap_mcc_context) / 8]; 6456733b39aSJayamohan Kallickal struct phys_addr pages[8]; 6466733b39aSJayamohan Kallickal } __packed; 6476733b39aSJayamohan Kallickal 6486733b39aSJayamohan Kallickal struct be_cmd_resp_mcc_create { 6496733b39aSJayamohan Kallickal struct be_cmd_resp_hdr hdr; 6506733b39aSJayamohan Kallickal u16 id; 6516733b39aSJayamohan Kallickal u16 rsvd0; 6526733b39aSJayamohan Kallickal } __packed; 6536733b39aSJayamohan Kallickal 6546733b39aSJayamohan Kallickal /******************** Q Destroy ***************************/ 6556733b39aSJayamohan Kallickal /* Type of Queue to be destroyed */ 6566733b39aSJayamohan Kallickal enum { 6576733b39aSJayamohan Kallickal QTYPE_EQ = 1, 6586733b39aSJayamohan Kallickal QTYPE_CQ, 6596733b39aSJayamohan Kallickal QTYPE_MCCQ, 6606733b39aSJayamohan Kallickal QTYPE_WRBQ, 6616733b39aSJayamohan Kallickal QTYPE_DPDUQ, 6626733b39aSJayamohan Kallickal QTYPE_SGL 6636733b39aSJayamohan Kallickal }; 6646733b39aSJayamohan Kallickal 6656733b39aSJayamohan Kallickal struct be_cmd_req_q_destroy { 6666733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 6676733b39aSJayamohan Kallickal u16 id; 6686733b39aSJayamohan Kallickal u16 bypass_flush; /* valid only for rx q destroy */ 6696733b39aSJayamohan Kallickal } __packed; 6706733b39aSJayamohan Kallickal 6716733b39aSJayamohan Kallickal struct macaddr { 6726733b39aSJayamohan Kallickal u8 byte[ETH_ALEN]; 6736733b39aSJayamohan Kallickal }; 6746733b39aSJayamohan Kallickal 6756733b39aSJayamohan Kallickal struct be_cmd_req_mcast_mac_config { 6766733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 6776733b39aSJayamohan Kallickal u16 num_mac; 6786733b39aSJayamohan Kallickal u8 promiscuous; 6796733b39aSJayamohan Kallickal u8 interface_id; 6806733b39aSJayamohan Kallickal struct macaddr mac[32]; 6816733b39aSJayamohan Kallickal } __packed; 6826733b39aSJayamohan Kallickal 6836733b39aSJayamohan Kallickal static inline void *embedded_payload(struct be_mcc_wrb *wrb) 6846733b39aSJayamohan Kallickal { 6856733b39aSJayamohan Kallickal return wrb->payload.embedded_payload; 6866733b39aSJayamohan Kallickal } 6876733b39aSJayamohan Kallickal 6886733b39aSJayamohan Kallickal static inline struct be_sge *nonembedded_sgl(struct be_mcc_wrb *wrb) 6896733b39aSJayamohan Kallickal { 6906733b39aSJayamohan Kallickal return &wrb->payload.sgl[0]; 6916733b39aSJayamohan Kallickal } 6926733b39aSJayamohan Kallickal 6936733b39aSJayamohan Kallickal /******************** Modify EQ Delay *******************/ 6946733b39aSJayamohan Kallickal struct be_cmd_req_modify_eq_delay { 6956733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 69639033413SJayamohan Kallickal __le32 num_eq; 6976733b39aSJayamohan Kallickal struct { 69839033413SJayamohan Kallickal __le32 eq_id; 69939033413SJayamohan Kallickal __le32 phase; 70039033413SJayamohan Kallickal __le32 delay_multiplier; 70173af08e1SJayamohan Kallickal } delay[MAX_CPUS]; 7026733b39aSJayamohan Kallickal } __packed; 7036733b39aSJayamohan Kallickal 7046733b39aSJayamohan Kallickal /******************** Get MAC ADDR *******************/ 7056733b39aSJayamohan Kallickal 7060e43895eSMike Christie struct be_cmd_get_nic_conf_resp { 7076733b39aSJayamohan Kallickal struct be_cmd_resp_hdr hdr; 7086733b39aSJayamohan Kallickal u32 nic_port_count; 7096733b39aSJayamohan Kallickal u32 speed; 7106733b39aSJayamohan Kallickal u32 max_speed; 7116733b39aSJayamohan Kallickal u32 link_state; 7126733b39aSJayamohan Kallickal u32 max_frame_size; 7136733b39aSJayamohan Kallickal u16 size_of_structure; 7149c4f8b01SJitendra Bhivare u8 mac_address[ETH_ALEN]; 7159c4f8b01SJitendra Bhivare } __packed; 7166733b39aSJayamohan Kallickal 717*6694095bSJitendra Bhivare /******************** Get HBA NAME *******************/ 718*6694095bSJitendra Bhivare 7192177199dSJohn Soni Jose #define BEISCSI_ALIAS_LEN 32 7202177199dSJohn Soni Jose 7212177199dSJohn Soni Jose struct be_cmd_hba_name { 7222177199dSJohn Soni Jose struct be_cmd_req_hdr hdr; 7232177199dSJohn Soni Jose u16 flags; 7242177199dSJohn Soni Jose u16 rsvd0; 7252177199dSJohn Soni Jose u8 initiator_name[ISCSI_NAME_LEN]; 7262177199dSJohn Soni Jose u8 initiator_alias[BEISCSI_ALIAS_LEN]; 7272177199dSJohn Soni Jose } __packed; 7282177199dSJohn Soni Jose 729*6694095bSJitendra Bhivare /******************** COMMON SET Features *******************/ 730*6694095bSJitendra Bhivare #define BE_CMD_SET_FEATURE_UER 0x10 731*6694095bSJitendra Bhivare #define BE_CMD_UER_SUPP_BIT 0x1 732*6694095bSJitendra Bhivare struct be_uer_req { 733*6694095bSJitendra Bhivare u32 uer; 734*6694095bSJitendra Bhivare u32 rsvd; 735*6694095bSJitendra Bhivare }; 736*6694095bSJitendra Bhivare 737*6694095bSJitendra Bhivare struct be_uer_resp { 738*6694095bSJitendra Bhivare u32 uer; 739*6694095bSJitendra Bhivare u16 ue2rp; 740*6694095bSJitendra Bhivare u16 ue2sr; 741*6694095bSJitendra Bhivare }; 742*6694095bSJitendra Bhivare 743*6694095bSJitendra Bhivare struct be_cmd_set_features { 744*6694095bSJitendra Bhivare union { 745*6694095bSJitendra Bhivare struct be_cmd_req_hdr req_hdr; 746*6694095bSJitendra Bhivare struct be_cmd_resp_hdr resp_hdr; 747*6694095bSJitendra Bhivare } h; 748*6694095bSJitendra Bhivare u32 feature; 749*6694095bSJitendra Bhivare u32 param_len; 750*6694095bSJitendra Bhivare union { 751*6694095bSJitendra Bhivare struct be_uer_req req; 752*6694095bSJitendra Bhivare struct be_uer_resp resp; 753*6694095bSJitendra Bhivare u32 rsvd[2]; 754*6694095bSJitendra Bhivare } param; 755*6694095bSJitendra Bhivare } __packed; 756*6694095bSJitendra Bhivare 7576733b39aSJayamohan Kallickal int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl, 7586733b39aSJayamohan Kallickal struct be_queue_info *eq, int eq_delay); 7596733b39aSJayamohan Kallickal 7606733b39aSJayamohan Kallickal int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl, 7616733b39aSJayamohan Kallickal struct be_queue_info *cq, struct be_queue_info *eq, 7626733b39aSJayamohan Kallickal bool sol_evts, bool no_delay, 7636733b39aSJayamohan Kallickal int num_cqe_dma_coalesce); 7646733b39aSJayamohan Kallickal 7656733b39aSJayamohan Kallickal int beiscsi_cmd_q_destroy(struct be_ctrl_info *ctrl, struct be_queue_info *q, 7666733b39aSJayamohan Kallickal int type); 76735e66019SJayamohan Kallickal int beiscsi_cmd_mccq_create(struct beiscsi_hba *phba, 768bfead3b2SJayamohan Kallickal struct be_queue_info *mccq, 769bfead3b2SJayamohan Kallickal struct be_queue_info *cq); 770bfead3b2SJayamohan Kallickal 7716733b39aSJayamohan Kallickal int be_poll_mcc(struct be_ctrl_info *ctrl); 77203a12310SJayamohan Kallickal int mgmt_check_supported_fw(struct be_ctrl_info *ctrl, 773bfead3b2SJayamohan Kallickal struct beiscsi_hba *phba); 7742177199dSJohn Soni Jose unsigned int be_cmd_get_initname(struct beiscsi_hba *phba); 775c7acc5b8SJayamohan Kallickal 776090e2184SJitendra Bhivare void free_mcc_wrb(struct be_ctrl_info *ctrl, unsigned int tag); 777e175defeSJohn Soni Jose 77810bcd47dSJitendra Bhivare int beiscsi_modify_eq_delay(struct beiscsi_hba *phba, struct be_set_eqd *, 77973af08e1SJayamohan Kallickal int num); 78088840332SJitendra Bhivare int beiscsi_mccq_compl_wait(struct beiscsi_hba *phba, 78150a4b824SJitendra Bhivare unsigned int tag, 78250a4b824SJitendra Bhivare struct be_mcc_wrb **wrb, 78350a4b824SJitendra Bhivare struct be_dma_mem *mbx_cmd_mem); 78450a4b824SJitendra Bhivare int __beiscsi_mcc_compl_status(struct beiscsi_hba *phba, 78550a4b824SJitendra Bhivare unsigned int tag, 78650a4b824SJitendra Bhivare struct be_mcc_wrb **wrb, 7871957aa7fSJayamohan Kallickal struct be_dma_mem *mbx_cmd_mem); 7886733b39aSJayamohan Kallickal /*ISCSI Functuions */ 7896733b39aSJayamohan Kallickal int be_cmd_fw_initialize(struct be_ctrl_info *ctrl); 7900283fbb1SJayamohan Kallickal int be_cmd_fw_uninit(struct be_ctrl_info *ctrl); 7916733b39aSJayamohan Kallickal 7926733b39aSJayamohan Kallickal struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem); 7932e4e8f65SJitendra Bhivare int be_mcc_compl_poll(struct beiscsi_hba *phba, unsigned int tag); 794cdde6682SJitendra Bhivare void be_mcc_notify(struct beiscsi_hba *phba, unsigned int tag); 795090e2184SJitendra Bhivare struct be_mcc_wrb *alloc_mcc_wrb(struct beiscsi_hba *phba, 796090e2184SJitendra Bhivare unsigned int *ref_tag); 79753aefe25SJitendra Bhivare void beiscsi_process_async_event(struct beiscsi_hba *phba, 79853aefe25SJitendra Bhivare struct be_mcc_compl *compl); 7992e4e8f65SJitendra Bhivare int beiscsi_process_mcc_compl(struct be_ctrl_info *ctrl, 800756d29c8SJayamohan Kallickal struct be_mcc_compl *compl); 8016733b39aSJayamohan Kallickal 8022e4e8f65SJitendra Bhivare 8036733b39aSJayamohan Kallickal int be_mbox_notify(struct be_ctrl_info *ctrl); 8046733b39aSJayamohan Kallickal 8056733b39aSJayamohan Kallickal int be_cmd_create_default_pdu_queue(struct be_ctrl_info *ctrl, 8066733b39aSJayamohan Kallickal struct be_queue_info *cq, 8076733b39aSJayamohan Kallickal struct be_queue_info *dq, int length, 8088a86e833SJayamohan Kallickal int entry_size, uint8_t is_header, 8098a86e833SJayamohan Kallickal uint8_t ulp_num); 8106733b39aSJayamohan Kallickal 81115a90fe0SJayamohan Kallickal int be_cmd_iscsi_post_template_hdr(struct be_ctrl_info *ctrl, 81215a90fe0SJayamohan Kallickal struct be_dma_mem *q_mem); 81315a90fe0SJayamohan Kallickal 81415a90fe0SJayamohan Kallickal int be_cmd_iscsi_remove_template_hdr(struct be_ctrl_info *ctrl); 81515a90fe0SJayamohan Kallickal 8166733b39aSJayamohan Kallickal int be_cmd_iscsi_post_sgl_pages(struct be_ctrl_info *ctrl, 8176733b39aSJayamohan Kallickal struct be_dma_mem *q_mem, u32 page_offset, 8186733b39aSJayamohan Kallickal u32 num_pages); 8196733b39aSJayamohan Kallickal 820e5285860SJayamohan Kallickal int beiscsi_cmd_reset_function(struct beiscsi_hba *phba); 821e5285860SJayamohan Kallickal 8226733b39aSJayamohan Kallickal int be_cmd_wrbq_create(struct be_ctrl_info *ctrl, struct be_dma_mem *q_mem, 8234eea99d5SJayamohan Kallickal struct be_queue_info *wrbq, 8244eea99d5SJayamohan Kallickal struct hwi_wrb_context *pwrb_context, 8254eea99d5SJayamohan Kallickal uint8_t ulp_num); 8266733b39aSJayamohan Kallickal 8276f72238eSJohn Soni Jose /* Configuration Functions */ 8286f72238eSJohn Soni Jose int be_cmd_set_vlan(struct beiscsi_hba *phba, uint16_t vlan_tag); 8296f72238eSJohn Soni Jose 830*6694095bSJitendra Bhivare int beiscsi_set_uer_feature(struct beiscsi_hba *phba); 831*6694095bSJitendra Bhivare 8326733b39aSJayamohan Kallickal struct be_default_pdu_context { 8336733b39aSJayamohan Kallickal u32 dw[4]; 8346733b39aSJayamohan Kallickal } __packed; 8356733b39aSJayamohan Kallickal 8366733b39aSJayamohan Kallickal struct amap_be_default_pdu_context { 8376733b39aSJayamohan Kallickal u8 dbuf_cindex[13]; /* dword 0 */ 8386733b39aSJayamohan Kallickal u8 rsvd0[3]; /* dword 0 */ 8396733b39aSJayamohan Kallickal u8 ring_size[4]; /* dword 0 */ 8406733b39aSJayamohan Kallickal u8 ring_state[4]; /* dword 0 */ 8416733b39aSJayamohan Kallickal u8 rsvd1[8]; /* dword 0 */ 8426733b39aSJayamohan Kallickal u8 dbuf_pindex[13]; /* dword 1 */ 8436733b39aSJayamohan Kallickal u8 rsvd2; /* dword 1 */ 8446733b39aSJayamohan Kallickal u8 pci_func_id[8]; /* dword 1 */ 8456733b39aSJayamohan Kallickal u8 rx_pdid[9]; /* dword 1 */ 8466733b39aSJayamohan Kallickal u8 rx_pdid_valid; /* dword 1 */ 8476733b39aSJayamohan Kallickal u8 default_buffer_size[16]; /* dword 2 */ 8486733b39aSJayamohan Kallickal u8 cq_id_recv[10]; /* dword 2 */ 8496733b39aSJayamohan Kallickal u8 rx_pdid_not_valid; /* dword 2 */ 8506733b39aSJayamohan Kallickal u8 rsvd3[5]; /* dword 2 */ 8516733b39aSJayamohan Kallickal u8 rsvd4[32]; /* dword 3 */ 8526733b39aSJayamohan Kallickal } __packed; 8536733b39aSJayamohan Kallickal 854ef9e1b9bSJayamohan Kallickal struct amap_default_pdu_context_ext { 855ef9e1b9bSJayamohan Kallickal u8 rsvd0[16]; /* dword 0 */ 856ef9e1b9bSJayamohan Kallickal u8 ring_size[4]; /* dword 0 */ 857ef9e1b9bSJayamohan Kallickal u8 rsvd1[12]; /* dword 0 */ 858ef9e1b9bSJayamohan Kallickal u8 rsvd2[22]; /* dword 1 */ 859ef9e1b9bSJayamohan Kallickal u8 rx_pdid[9]; /* dword 1 */ 860ef9e1b9bSJayamohan Kallickal u8 rx_pdid_valid; /* dword 1 */ 861ef9e1b9bSJayamohan Kallickal u8 default_buffer_size[16]; /* dword 2 */ 862ef9e1b9bSJayamohan Kallickal u8 cq_id_recv[16]; /* dword 2 */ 863ef9e1b9bSJayamohan Kallickal u8 rsvd3[32]; /* dword 3 */ 864ef9e1b9bSJayamohan Kallickal } __packed; 865ef9e1b9bSJayamohan Kallickal 8666733b39aSJayamohan Kallickal struct be_defq_create_req { 8676733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 8686733b39aSJayamohan Kallickal u16 num_pages; 8696733b39aSJayamohan Kallickal u8 ulp_num; 8708a86e833SJayamohan Kallickal #define BEISCSI_DUAL_ULP_AWARE_BIT 0 /* Byte 3 - Bit 0 */ 8718a86e833SJayamohan Kallickal #define BEISCSI_BIND_Q_TO_ULP_BIT 1 /* Byte 3 - Bit 1 */ 8728a86e833SJayamohan Kallickal u8 dua_feature; 8736733b39aSJayamohan Kallickal struct be_default_pdu_context context; 8746733b39aSJayamohan Kallickal struct phys_addr pages[8]; 8756733b39aSJayamohan Kallickal } __packed; 8766733b39aSJayamohan Kallickal 8776733b39aSJayamohan Kallickal struct be_defq_create_resp { 8786733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 8796733b39aSJayamohan Kallickal u16 id; 8808a86e833SJayamohan Kallickal u8 rsvd0; 8818a86e833SJayamohan Kallickal u8 ulp_num; 8828a86e833SJayamohan Kallickal u32 doorbell_offset; 8838a86e833SJayamohan Kallickal u16 register_set; 8848a86e833SJayamohan Kallickal u16 doorbell_format; 8856733b39aSJayamohan Kallickal } __packed; 8866733b39aSJayamohan Kallickal 88715a90fe0SJayamohan Kallickal struct be_post_template_pages_req { 88815a90fe0SJayamohan Kallickal struct be_cmd_req_hdr hdr; 88915a90fe0SJayamohan Kallickal u16 num_pages; 89015a90fe0SJayamohan Kallickal #define BEISCSI_TEMPLATE_HDR_TYPE_ISCSI 0x1 89115a90fe0SJayamohan Kallickal u16 type; 89215a90fe0SJayamohan Kallickal struct phys_addr scratch_pa; 89315a90fe0SJayamohan Kallickal struct virt_addr scratch_va; 89415a90fe0SJayamohan Kallickal struct virt_addr pages_va; 89515a90fe0SJayamohan Kallickal struct phys_addr pages[16]; 89615a90fe0SJayamohan Kallickal } __packed; 89715a90fe0SJayamohan Kallickal 89815a90fe0SJayamohan Kallickal struct be_remove_template_pages_req { 89915a90fe0SJayamohan Kallickal struct be_cmd_req_hdr hdr; 90015a90fe0SJayamohan Kallickal u16 type; 90115a90fe0SJayamohan Kallickal u16 rsvd0; 90215a90fe0SJayamohan Kallickal } __packed; 90315a90fe0SJayamohan Kallickal 9046733b39aSJayamohan Kallickal struct be_post_sgl_pages_req { 9056733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 9066733b39aSJayamohan Kallickal u16 num_pages; 9076733b39aSJayamohan Kallickal u16 page_offset; 9086733b39aSJayamohan Kallickal u32 rsvd0; 9096733b39aSJayamohan Kallickal struct phys_addr pages[26]; 9106733b39aSJayamohan Kallickal u32 rsvd1; 9116733b39aSJayamohan Kallickal } __packed; 9126733b39aSJayamohan Kallickal 9136733b39aSJayamohan Kallickal struct be_wrbq_create_req { 9146733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 9156733b39aSJayamohan Kallickal u16 num_pages; 9166733b39aSJayamohan Kallickal u8 ulp_num; 9174eea99d5SJayamohan Kallickal u8 dua_feature; 9186733b39aSJayamohan Kallickal struct phys_addr pages[8]; 9196733b39aSJayamohan Kallickal } __packed; 9206733b39aSJayamohan Kallickal 9216733b39aSJayamohan Kallickal struct be_wrbq_create_resp { 9226733b39aSJayamohan Kallickal struct be_cmd_resp_hdr resp_hdr; 9236733b39aSJayamohan Kallickal u16 cid; 9244eea99d5SJayamohan Kallickal u8 rsvd0; 9254eea99d5SJayamohan Kallickal u8 ulp_num; 9264eea99d5SJayamohan Kallickal u32 doorbell_offset; 9274eea99d5SJayamohan Kallickal u16 register_set; 9284eea99d5SJayamohan Kallickal u16 doorbell_format; 9296733b39aSJayamohan Kallickal } __packed; 9306733b39aSJayamohan Kallickal 9316733b39aSJayamohan Kallickal #define SOL_CID_MASK 0x0000FFC0 9326733b39aSJayamohan Kallickal #define SOL_CODE_MASK 0x0000003F 9336733b39aSJayamohan Kallickal #define SOL_WRB_INDEX_MASK 0x00FF0000 9346733b39aSJayamohan Kallickal #define SOL_CMD_WND_MASK 0xFF000000 9356733b39aSJayamohan Kallickal #define SOL_RES_CNT_MASK 0x7FFFFFFF 9366733b39aSJayamohan Kallickal #define SOL_EXP_CMD_SN_MASK 0xFFFFFFFF 9376733b39aSJayamohan Kallickal #define SOL_HW_STS_MASK 0x000000FF 9386733b39aSJayamohan Kallickal #define SOL_STS_MASK 0x0000FF00 9396733b39aSJayamohan Kallickal #define SOL_RESP_MASK 0x00FF0000 9406733b39aSJayamohan Kallickal #define SOL_FLAGS_MASK 0x7F000000 9416733b39aSJayamohan Kallickal #define SOL_S_MASK 0x80000000 9426733b39aSJayamohan Kallickal 9436733b39aSJayamohan Kallickal struct sol_cqe { 9446733b39aSJayamohan Kallickal u32 dw[4]; 9456733b39aSJayamohan Kallickal }; 9466733b39aSJayamohan Kallickal 9476733b39aSJayamohan Kallickal struct amap_sol_cqe { 9486733b39aSJayamohan Kallickal u8 hw_sts[8]; /* dword 0 */ 9496733b39aSJayamohan Kallickal u8 i_sts[8]; /* dword 0 */ 9506733b39aSJayamohan Kallickal u8 i_resp[8]; /* dword 0 */ 9516733b39aSJayamohan Kallickal u8 i_flags[7]; /* dword 0 */ 9526733b39aSJayamohan Kallickal u8 s; /* dword 0 */ 9536733b39aSJayamohan Kallickal u8 i_exp_cmd_sn[32]; /* dword 1 */ 9546733b39aSJayamohan Kallickal u8 code[6]; /* dword 2 */ 9556733b39aSJayamohan Kallickal u8 cid[10]; /* dword 2 */ 9566733b39aSJayamohan Kallickal u8 wrb_index[8]; /* dword 2 */ 9576733b39aSJayamohan Kallickal u8 i_cmd_wnd[8]; /* dword 2 */ 9586733b39aSJayamohan Kallickal u8 i_res_cnt[31]; /* dword 3 */ 9596733b39aSJayamohan Kallickal u8 valid; /* dword 3 */ 9606733b39aSJayamohan Kallickal } __packed; 9616733b39aSJayamohan Kallickal 962bfead3b2SJayamohan Kallickal #define SOL_ICD_INDEX_MASK 0x0003FFC0 963bfead3b2SJayamohan Kallickal struct amap_sol_cqe_ring { 964bfead3b2SJayamohan Kallickal u8 hw_sts[8]; /* dword 0 */ 965bfead3b2SJayamohan Kallickal u8 i_sts[8]; /* dword 0 */ 966bfead3b2SJayamohan Kallickal u8 i_resp[8]; /* dword 0 */ 967bfead3b2SJayamohan Kallickal u8 i_flags[7]; /* dword 0 */ 968bfead3b2SJayamohan Kallickal u8 s; /* dword 0 */ 969bfead3b2SJayamohan Kallickal u8 i_exp_cmd_sn[32]; /* dword 1 */ 970bfead3b2SJayamohan Kallickal u8 code[6]; /* dword 2 */ 971bfead3b2SJayamohan Kallickal u8 icd_index[12]; /* dword 2 */ 972bfead3b2SJayamohan Kallickal u8 rsvd[6]; /* dword 2 */ 973bfead3b2SJayamohan Kallickal u8 i_cmd_wnd[8]; /* dword 2 */ 974bfead3b2SJayamohan Kallickal u8 i_res_cnt[31]; /* dword 3 */ 975bfead3b2SJayamohan Kallickal u8 valid; /* dword 3 */ 976bfead3b2SJayamohan Kallickal } __packed; 977bfead3b2SJayamohan Kallickal 97873133261SJohn Soni Jose struct amap_sol_cqe_v2 { 97973133261SJohn Soni Jose u8 hw_sts[8]; /* dword 0 */ 98073133261SJohn Soni Jose u8 i_sts[8]; /* dword 0 */ 98173133261SJohn Soni Jose u8 wrb_index[16]; /* dword 0 */ 98273133261SJohn Soni Jose u8 i_exp_cmd_sn[32]; /* dword 1 */ 98373133261SJohn Soni Jose u8 code[6]; /* dword 2 */ 98473133261SJohn Soni Jose u8 cmd_cmpl; /* dword 2 */ 98573133261SJohn Soni Jose u8 rsvd0; /* dword 2 */ 98673133261SJohn Soni Jose u8 i_cmd_wnd[8]; /* dword 2 */ 98773133261SJohn Soni Jose u8 cid[13]; /* dword 2 */ 98873133261SJohn Soni Jose u8 u; /* dword 2 */ 98973133261SJohn Soni Jose u8 o; /* dword 2 */ 99073133261SJohn Soni Jose u8 s; /* dword 2 */ 99173133261SJohn Soni Jose u8 i_res_cnt[31]; /* dword 3 */ 99273133261SJohn Soni Jose u8 valid; /* dword 3 */ 99373133261SJohn Soni Jose } __packed; 99473133261SJohn Soni Jose 99573133261SJohn Soni Jose struct common_sol_cqe { 99673133261SJohn Soni Jose u32 exp_cmdsn; 99773133261SJohn Soni Jose u32 res_cnt; 99873133261SJohn Soni Jose u16 wrb_index; 99973133261SJohn Soni Jose u16 cid; 100073133261SJohn Soni Jose u8 hw_sts; 100173133261SJohn Soni Jose u8 cmd_wnd; 100273133261SJohn Soni Jose u8 res_flag; /* the s feild of structure */ 100373133261SJohn Soni Jose u8 i_resp; /* for skh if cmd_complete is set then i_sts is response */ 100473133261SJohn Soni Jose u8 i_flags; /* for skh or the u and o feilds */ 100573133261SJohn Soni Jose u8 i_sts; /* for skh if cmd_complete is not-set then i_sts is status */ 100673133261SJohn Soni Jose }; 100773133261SJohn Soni Jose 100873133261SJohn Soni Jose /*** iSCSI ack/driver message completions ***/ 100973133261SJohn Soni Jose struct amap_it_dmsg_cqe { 101073133261SJohn Soni Jose u8 ack_num[32]; /* DWORD 0 */ 101173133261SJohn Soni Jose u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 101273133261SJohn Soni Jose u8 code[6]; /* DWORD 2 */ 101373133261SJohn Soni Jose u8 cid[10]; /* DWORD 2 */ 101473133261SJohn Soni Jose u8 wrb_idx[8]; /* DWORD 2 */ 101573133261SJohn Soni Jose u8 rsvd0[8]; /* DWORD 2*/ 101673133261SJohn Soni Jose u8 rsvd1[31]; /* DWORD 3*/ 101773133261SJohn Soni Jose u8 valid; /* DWORD 3 */ 101873133261SJohn Soni Jose } __packed; 101973133261SJohn Soni Jose 102073133261SJohn Soni Jose struct amap_it_dmsg_cqe_v2 { 102173133261SJohn Soni Jose u8 ack_num[32]; /* DWORD 0 */ 102273133261SJohn Soni Jose u8 pdu_bytes_rcvd[32]; /* DWORD 1 */ 102373133261SJohn Soni Jose u8 code[6]; /* DWORD 2 */ 102473133261SJohn Soni Jose u8 rsvd0[10]; /* DWORD 2 */ 102573133261SJohn Soni Jose u8 wrb_idx[16]; /* DWORD 2 */ 102673133261SJohn Soni Jose u8 rsvd1[16]; /* DWORD 3 */ 102773133261SJohn Soni Jose u8 cid[13]; /* DWORD 3 */ 102873133261SJohn Soni Jose u8 rsvd2[2]; /* DWORD 3 */ 102973133261SJohn Soni Jose u8 valid; /* DWORD 3 */ 103073133261SJohn Soni Jose } __packed; 1031bfead3b2SJayamohan Kallickal 10326733b39aSJayamohan Kallickal 10336733b39aSJayamohan Kallickal /** 10346733b39aSJayamohan Kallickal * Post WRB Queue Doorbell Register used by the host Storage 10356733b39aSJayamohan Kallickal * stack to notify the 10366733b39aSJayamohan Kallickal * controller of a posted Work Request Block 10376733b39aSJayamohan Kallickal */ 1038ef9e1b9bSJayamohan Kallickal #define DB_WRB_POST_CID_MASK 0xFFFF /* bits 0 - 16 */ 10396733b39aSJayamohan Kallickal #define DB_DEF_PDU_WRB_INDEX_MASK 0xFF /* bits 0 - 9 */ 10406733b39aSJayamohan Kallickal 10416733b39aSJayamohan Kallickal #define DB_DEF_PDU_WRB_INDEX_SHIFT 16 10426733b39aSJayamohan Kallickal #define DB_DEF_PDU_NUM_POSTED_SHIFT 24 10436733b39aSJayamohan Kallickal 10446733b39aSJayamohan Kallickal struct fragnum_bits_for_sgl_cra_in { 10456733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 10466733b39aSJayamohan Kallickal u32 num_bits; 10476733b39aSJayamohan Kallickal } __packed; 10486733b39aSJayamohan Kallickal 10496733b39aSJayamohan Kallickal struct iscsi_cleanup_req { 10506733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 10516733b39aSJayamohan Kallickal u16 chute; 10526733b39aSJayamohan Kallickal u8 hdr_ring_id; 10536733b39aSJayamohan Kallickal u8 data_ring_id; 10546733b39aSJayamohan Kallickal 10556733b39aSJayamohan Kallickal } __packed; 10566733b39aSJayamohan Kallickal 10576733b39aSJayamohan Kallickal struct eq_delay { 10586733b39aSJayamohan Kallickal u32 eq_id; 10596733b39aSJayamohan Kallickal u32 phase; 10606733b39aSJayamohan Kallickal u32 delay_multiplier; 10616733b39aSJayamohan Kallickal } __packed; 10626733b39aSJayamohan Kallickal 10636733b39aSJayamohan Kallickal struct be_eq_delay_params_in { 10646733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 10656733b39aSJayamohan Kallickal u32 num_eq; 10666733b39aSJayamohan Kallickal struct eq_delay delay[8]; 10676733b39aSJayamohan Kallickal } __packed; 10686733b39aSJayamohan Kallickal 10696733b39aSJayamohan Kallickal struct tcp_connect_and_offload_in { 10706733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 10710e43895eSMike Christie struct ip_addr_format ip_address; 10726733b39aSJayamohan Kallickal u16 tcp_port; 10736733b39aSJayamohan Kallickal u16 cid; 10746733b39aSJayamohan Kallickal u16 cq_id; 10756733b39aSJayamohan Kallickal u16 defq_id; 10766733b39aSJayamohan Kallickal struct phys_addr dataout_template_pa; 10776733b39aSJayamohan Kallickal u16 hdr_ring_id; 10786733b39aSJayamohan Kallickal u16 data_ring_id; 10796733b39aSJayamohan Kallickal u8 do_offload; 10806733b39aSJayamohan Kallickal u8 rsvd0[3]; 10816733b39aSJayamohan Kallickal } __packed; 10826733b39aSJayamohan Kallickal 1083b3c202dcSJayamohan Kallickal struct tcp_connect_and_offload_in_v1 { 1084b3c202dcSJayamohan Kallickal struct be_cmd_req_hdr hdr; 1085b3c202dcSJayamohan Kallickal struct ip_addr_format ip_address; 1086b3c202dcSJayamohan Kallickal u16 tcp_port; 1087b3c202dcSJayamohan Kallickal u16 cid; 1088b3c202dcSJayamohan Kallickal u16 cq_id; 1089b3c202dcSJayamohan Kallickal u16 defq_id; 1090b3c202dcSJayamohan Kallickal struct phys_addr dataout_template_pa; 1091b3c202dcSJayamohan Kallickal u16 hdr_ring_id; 1092b3c202dcSJayamohan Kallickal u16 data_ring_id; 1093b3c202dcSJayamohan Kallickal u8 do_offload; 1094b3c202dcSJayamohan Kallickal u8 ifd_state; 1095b3c202dcSJayamohan Kallickal u8 rsvd0[2]; 1096b3c202dcSJayamohan Kallickal u16 tcp_window_size; 1097b3c202dcSJayamohan Kallickal u8 tcp_window_scale_count; 1098b3c202dcSJayamohan Kallickal u8 rsvd1; 1099b3c202dcSJayamohan Kallickal u32 tcp_mss:24; 1100b3c202dcSJayamohan Kallickal u8 rsvd2; 1101b3c202dcSJayamohan Kallickal } __packed; 1102b3c202dcSJayamohan Kallickal 11036733b39aSJayamohan Kallickal struct tcp_connect_and_offload_out { 11046733b39aSJayamohan Kallickal struct be_cmd_resp_hdr hdr; 11056733b39aSJayamohan Kallickal u32 connection_handle; 11066733b39aSJayamohan Kallickal u16 cid; 11076733b39aSJayamohan Kallickal u16 rsvd0; 11086733b39aSJayamohan Kallickal 11096733b39aSJayamohan Kallickal } __packed; 11106733b39aSJayamohan Kallickal 11116733b39aSJayamohan Kallickal struct be_mcc_wrb_context { 11126733b39aSJayamohan Kallickal struct MCC_WRB *wrb; 11136733b39aSJayamohan Kallickal int *users_final_status; 11146733b39aSJayamohan Kallickal } __packed; 11156733b39aSJayamohan Kallickal 1116e08b3c8bSJayamohan Kallickal #define DB_DEF_PDU_RING_ID_MASK 0x3FFF /* bits 0 - 13 */ 1117e08b3c8bSJayamohan Kallickal #define DB_DEF_PDU_CQPROC_MASK 0x3FFF /* bits 16 - 29 */ 11186733b39aSJayamohan Kallickal #define DB_DEF_PDU_REARM_SHIFT 14 11196733b39aSJayamohan Kallickal #define DB_DEF_PDU_EVENT_SHIFT 15 11206733b39aSJayamohan Kallickal #define DB_DEF_PDU_CQPROC_SHIFT 16 11216733b39aSJayamohan Kallickal 11226733b39aSJayamohan Kallickal struct dmsg_cqe { 11236733b39aSJayamohan Kallickal u32 dw[4]; 11246733b39aSJayamohan Kallickal } __packed; 11256733b39aSJayamohan Kallickal 11266733b39aSJayamohan Kallickal struct tcp_upload_params_in { 11276733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 11286733b39aSJayamohan Kallickal u16 id; 11296733b39aSJayamohan Kallickal u16 upload_type; 11306733b39aSJayamohan Kallickal u32 reset_seq; 11316733b39aSJayamohan Kallickal } __packed; 11326733b39aSJayamohan Kallickal 11336733b39aSJayamohan Kallickal struct tcp_upload_params_out { 11346733b39aSJayamohan Kallickal u32 dw[32]; 11356733b39aSJayamohan Kallickal } __packed; 11366733b39aSJayamohan Kallickal 11376733b39aSJayamohan Kallickal union tcp_upload_params { 11386733b39aSJayamohan Kallickal struct tcp_upload_params_in request; 11396733b39aSJayamohan Kallickal struct tcp_upload_params_out response; 11406733b39aSJayamohan Kallickal } __packed; 11416733b39aSJayamohan Kallickal 11426733b39aSJayamohan Kallickal struct be_ulp_fw_cfg { 1143843ae752SJayamohan Kallickal #define BEISCSI_ULP_ISCSI_INI_MODE 0x10 11446733b39aSJayamohan Kallickal u32 ulp_mode; 11456733b39aSJayamohan Kallickal u32 etx_base; 11466733b39aSJayamohan Kallickal u32 etx_count; 11476733b39aSJayamohan Kallickal u32 sq_base; 11486733b39aSJayamohan Kallickal u32 sq_count; 11496733b39aSJayamohan Kallickal u32 rq_base; 11506733b39aSJayamohan Kallickal u32 rq_count; 11516733b39aSJayamohan Kallickal u32 dq_base; 11526733b39aSJayamohan Kallickal u32 dq_count; 11536733b39aSJayamohan Kallickal u32 lro_base; 11546733b39aSJayamohan Kallickal u32 lro_count; 11556733b39aSJayamohan Kallickal u32 icd_base; 11566733b39aSJayamohan Kallickal u32 icd_count; 11576733b39aSJayamohan Kallickal }; 11586733b39aSJayamohan Kallickal 1159843ae752SJayamohan Kallickal struct be_ulp_chain_icd { 1160843ae752SJayamohan Kallickal u32 chain_base; 1161843ae752SJayamohan Kallickal u32 chain_count; 1162843ae752SJayamohan Kallickal }; 1163843ae752SJayamohan Kallickal 11646733b39aSJayamohan Kallickal struct be_fw_cfg { 11656733b39aSJayamohan Kallickal struct be_cmd_req_hdr hdr; 11666733b39aSJayamohan Kallickal u32 be_config_number; 11676733b39aSJayamohan Kallickal u32 asic_revision; 11686733b39aSJayamohan Kallickal u32 phys_port; 1169843ae752SJayamohan Kallickal #define BEISCSI_FUNC_ISCSI_INI_MODE 0x10 1170843ae752SJayamohan Kallickal #define BEISCSI_FUNC_DUA_MODE 0x800 11716733b39aSJayamohan Kallickal u32 function_mode; 11726733b39aSJayamohan Kallickal struct be_ulp_fw_cfg ulp[2]; 11736733b39aSJayamohan Kallickal u32 function_caps; 1174843ae752SJayamohan Kallickal u32 cqid_base; 1175843ae752SJayamohan Kallickal u32 cqid_count; 1176843ae752SJayamohan Kallickal u32 eqid_base; 1177843ae752SJayamohan Kallickal u32 eqid_count; 1178843ae752SJayamohan Kallickal struct be_ulp_chain_icd chain_icd[2]; 11796733b39aSJayamohan Kallickal } __packed; 11806733b39aSJayamohan Kallickal 11810e43895eSMike Christie struct be_cmd_get_all_if_id_req { 1182c7acc5b8SJayamohan Kallickal struct be_cmd_req_hdr hdr; 1183c7acc5b8SJayamohan Kallickal u32 if_count; 1184c7acc5b8SJayamohan Kallickal u32 if_hndl_list[1]; 1185c7acc5b8SJayamohan Kallickal } __packed; 1186c7acc5b8SJayamohan Kallickal 118753aefe25SJitendra Bhivare struct be_cmd_get_port_name { 118853aefe25SJitendra Bhivare union { 118953aefe25SJitendra Bhivare struct be_cmd_req_hdr req_hdr; 119053aefe25SJitendra Bhivare struct be_cmd_resp_hdr resp_hdr; 119153aefe25SJitendra Bhivare } h; 119253aefe25SJitendra Bhivare union { 119353aefe25SJitendra Bhivare struct { 119453aefe25SJitendra Bhivare u32 reserved; 119553aefe25SJitendra Bhivare } req; 119653aefe25SJitendra Bhivare struct { 119753aefe25SJitendra Bhivare u32 port_names; 119853aefe25SJitendra Bhivare } resp; 119953aefe25SJitendra Bhivare } p; 120053aefe25SJitendra Bhivare } __packed; 120153aefe25SJitendra Bhivare 12026733b39aSJayamohan Kallickal #define ISCSI_OPCODE_SCSI_DATA_OUT 5 1203c62eef0dSJohn Soni Jose #define OPCODE_COMMON_NTWK_LINK_STATUS_QUERY 5 12046733b39aSJayamohan Kallickal #define OPCODE_COMMON_MODIFY_EQ_DELAY 41 12056733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_CLEANUP 59 12066733b39aSJayamohan Kallickal #define OPCODE_COMMON_TCP_UPLOAD 56 1207c7acc5b8SJayamohan Kallickal #define OPCODE_COMMON_ISCSI_TCP_CONNECT_AND_OFFLOAD 70 12086733b39aSJayamohan Kallickal #define OPCODE_COMMON_ISCSI_ERROR_RECOVERY_INVALIDATE_COMMANDS 1 1209c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_CFG_GET_HBA_NAME 6 1210c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_CFG_SET_HBA_NAME 7 1211c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_SESSION_GET_A_SESSION 14 12123f4134c1SJohn Soni Jose #define OPCODE_ISCSI_INI_SESSION_LOGOUT_TARGET 24 12139aef4200SJohn Soni Jose #define OPCODE_ISCSI_INI_DRIVER_REOPEN_ALL_SESSIONS 36 1214c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_DRIVER_OFFLOAD_SESSION 41 1215c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_DRIVER_INVALIDATE_CONNECTION 42 1216c7acc5b8SJayamohan Kallickal #define OPCODE_ISCSI_INI_BOOT_GET_BOOT_TARGET 52 1217ffce3e2eSJayamohan Kallickal #define OPCODE_COMMON_WRITE_FLASH 96 1218ffce3e2eSJayamohan Kallickal #define OPCODE_COMMON_READ_FLASH 97 1219c7acc5b8SJayamohan Kallickal 12206733b39aSJayamohan Kallickal /* --- CMD_ISCSI_INVALIDATE_CONNECTION_TYPE --- */ 1221c7acc5b8SJayamohan Kallickal #define CMD_ISCSI_COMMAND_INVALIDATE 1 1222bfead3b2SJayamohan Kallickal #define CMD_ISCSI_CONNECTION_INVALIDATE 0x8001 1223bfead3b2SJayamohan Kallickal #define CMD_ISCSI_CONNECTION_ISSUE_TCP_RST 0x8002 12246733b39aSJayamohan Kallickal 12256733b39aSJayamohan Kallickal #define INI_WR_CMD 1 /* Initiator write command */ 12266733b39aSJayamohan Kallickal #define INI_TMF_CMD 2 /* Initiator TMF command */ 12276733b39aSJayamohan Kallickal #define INI_NOPOUT_CMD 3 /* Initiator; Send a NOP-OUT */ 12286733b39aSJayamohan Kallickal #define INI_RD_CMD 5 /* Initiator requesting to send 12296733b39aSJayamohan Kallickal * a read command 12306733b39aSJayamohan Kallickal */ 12316733b39aSJayamohan Kallickal #define TGT_CTX_UPDT_CMD 7 /* Target context update */ 12326733b39aSJayamohan Kallickal #define TGT_STS_CMD 8 /* Target R2T and other BHS 12336733b39aSJayamohan Kallickal * where only the status number 12346733b39aSJayamohan Kallickal * need to be updated 12356733b39aSJayamohan Kallickal */ 12366733b39aSJayamohan Kallickal #define TGT_DATAIN_CMD 9 /* Target Data-Ins in response 12376733b39aSJayamohan Kallickal * to read command 12386733b39aSJayamohan Kallickal */ 12396733b39aSJayamohan Kallickal #define TGT_SOS_PDU 10 /* Target:standalone status 12406733b39aSJayamohan Kallickal * response 12416733b39aSJayamohan Kallickal */ 12426733b39aSJayamohan Kallickal #define TGT_DM_CMD 11 /* Indicates that the bhs 12436733b39aSJayamohan Kallickal * preparedby 12446733b39aSJayamohan Kallickal * driver should not be touched 12456733b39aSJayamohan Kallickal */ 12466733b39aSJayamohan Kallickal /* --- CMD_CHUTE_TYPE --- */ 12476733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_0 1 12486733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_1 2 12496733b39aSJayamohan Kallickal #define CMD_CONNECTION_CHUTE_2 3 12506733b39aSJayamohan Kallickal 12516733b39aSJayamohan Kallickal #define EQ_MAJOR_CODE_COMPLETION 0 12526733b39aSJayamohan Kallickal 12536733b39aSJayamohan Kallickal #define CMD_ISCSI_SESSION_DEL_CFG_FROM_FLASH 0 12546733b39aSJayamohan Kallickal #define CMD_ISCSI_SESSION_SAVE_CFG_ON_FLASH 1 12556733b39aSJayamohan Kallickal 12566733b39aSJayamohan Kallickal /* --- CONNECTION_UPLOAD_PARAMS --- */ 12576733b39aSJayamohan Kallickal /* These parameters are used to define the type of upload desired. */ 12586733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_GRACEFUL 1 /* Graceful upload */ 12596733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT_RESET 2 /* Abortive upload with 12606733b39aSJayamohan Kallickal * reset 12616733b39aSJayamohan Kallickal */ 12626733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT 3 /* Abortive upload without 12636733b39aSJayamohan Kallickal * reset 12646733b39aSJayamohan Kallickal */ 12656733b39aSJayamohan Kallickal #define CONNECTION_UPLOAD_ABORT_WITH_SEQ 4 /* Abortive upload with reset, 12666733b39aSJayamohan Kallickal * sequence number by driver */ 12676733b39aSJayamohan Kallickal 12686733b39aSJayamohan Kallickal /* Returns the number of items in the field array. */ 12696733b39aSJayamohan Kallickal #define BE_NUMBER_OF_FIELD(_type_, _field_) \ 12706733b39aSJayamohan Kallickal (FIELD_SIZEOF(_type_, _field_)/sizeof((((_type_ *)0)->_field_[0])))\ 12716733b39aSJayamohan Kallickal 12726733b39aSJayamohan Kallickal /** 12736733b39aSJayamohan Kallickal * Different types of iSCSI completions to host driver for both initiator 12746733b39aSJayamohan Kallickal * and taget mode 12756733b39aSJayamohan Kallickal * of operation. 12766733b39aSJayamohan Kallickal */ 12776733b39aSJayamohan Kallickal #define SOL_CMD_COMPLETE 1 /* Solicited command completed 12786733b39aSJayamohan Kallickal * normally 12796733b39aSJayamohan Kallickal */ 12806733b39aSJayamohan Kallickal #define SOL_CMD_KILLED_DATA_DIGEST_ERR 2 /* Solicited command got 12816733b39aSJayamohan Kallickal * invalidated internally due 12826733b39aSJayamohan Kallickal * to Data Digest error 12836733b39aSJayamohan Kallickal */ 12846733b39aSJayamohan Kallickal #define CXN_KILLED_PDU_SIZE_EXCEEDS_DSL 3 /* Connection got invalidated 12856733b39aSJayamohan Kallickal * internally 128625985edcSLucas De Marchi * due to a received PDU 12876733b39aSJayamohan Kallickal * size > DSL 12886733b39aSJayamohan Kallickal */ 12896733b39aSJayamohan Kallickal #define CXN_KILLED_BURST_LEN_MISMATCH 4 /* Connection got invalidated 12906733b39aSJayamohan Kallickal * internally due ti received 12916733b39aSJayamohan Kallickal * PDU sequence size > 12926733b39aSJayamohan Kallickal * FBL/MBL. 12936733b39aSJayamohan Kallickal */ 12946733b39aSJayamohan Kallickal #define CXN_KILLED_AHS_RCVD 5 /* Connection got invalidated 129525985edcSLucas De Marchi * internally due to a received 12966733b39aSJayamohan Kallickal * PDU Hdr that has 12976733b39aSJayamohan Kallickal * AHS */ 12986733b39aSJayamohan Kallickal #define CXN_KILLED_HDR_DIGEST_ERR 6 /* Connection got invalidated 12996733b39aSJayamohan Kallickal * internally due to Hdr Digest 13006733b39aSJayamohan Kallickal * error 13016733b39aSJayamohan Kallickal */ 13026733b39aSJayamohan Kallickal #define CXN_KILLED_UNKNOWN_HDR 7 /* Connection got invalidated 13036733b39aSJayamohan Kallickal * internally 13046733b39aSJayamohan Kallickal * due to a bad opcode in the 13056733b39aSJayamohan Kallickal * pdu hdr 13066733b39aSJayamohan Kallickal */ 13076733b39aSJayamohan Kallickal #define CXN_KILLED_STALE_ITT_TTT_RCVD 8 /* Connection got invalidated 130825985edcSLucas De Marchi * internally due to a received 13096733b39aSJayamohan Kallickal * ITT/TTT that does not belong 13106733b39aSJayamohan Kallickal * to this Connection 13116733b39aSJayamohan Kallickal */ 13126733b39aSJayamohan Kallickal #define CXN_KILLED_INVALID_ITT_TTT_RCVD 9 /* Connection got invalidated 131325985edcSLucas De Marchi * internally due to received 13146733b39aSJayamohan Kallickal * ITT/TTT value > Max 13156733b39aSJayamohan Kallickal * Supported ITTs/TTTs 13166733b39aSJayamohan Kallickal */ 13176733b39aSJayamohan Kallickal #define CXN_KILLED_RST_RCVD 10 /* Connection got invalidated 13186733b39aSJayamohan Kallickal * internally due to an 13196733b39aSJayamohan Kallickal * incoming TCP RST 13206733b39aSJayamohan Kallickal */ 13216733b39aSJayamohan Kallickal #define CXN_KILLED_TIMED_OUT 11 /* Connection got invalidated 13226733b39aSJayamohan Kallickal * internally due to timeout on 13236733b39aSJayamohan Kallickal * tcp segment 12 retransmit 13246733b39aSJayamohan Kallickal * attempts failed 13256733b39aSJayamohan Kallickal */ 13266733b39aSJayamohan Kallickal #define CXN_KILLED_RST_SENT 12 /* Connection got invalidated 13276733b39aSJayamohan Kallickal * internally due to TCP RST 13286733b39aSJayamohan Kallickal * sent by the Tx side 13296733b39aSJayamohan Kallickal */ 13306733b39aSJayamohan Kallickal #define CXN_KILLED_FIN_RCVD 13 /* Connection got invalidated 13316733b39aSJayamohan Kallickal * internally due to an 13326733b39aSJayamohan Kallickal * incoming TCP FIN. 13336733b39aSJayamohan Kallickal */ 13346733b39aSJayamohan Kallickal #define CXN_KILLED_BAD_UNSOL_PDU_RCVD 14 /* Connection got invalidated 13356733b39aSJayamohan Kallickal * internally due to bad 13366733b39aSJayamohan Kallickal * unsolicited PDU Unsolicited 13376733b39aSJayamohan Kallickal * PDUs are PDUs with 13386733b39aSJayamohan Kallickal * ITT=0xffffffff 13396733b39aSJayamohan Kallickal */ 13406733b39aSJayamohan Kallickal #define CXN_KILLED_BAD_WRB_INDEX_ERROR 15 /* Connection got invalidated 13416733b39aSJayamohan Kallickal * internally due to bad WRB 13426733b39aSJayamohan Kallickal * index. 13436733b39aSJayamohan Kallickal */ 13446733b39aSJayamohan Kallickal #define CXN_KILLED_OVER_RUN_RESIDUAL 16 /* Command got invalidated 134525985edcSLucas De Marchi * internally due to received 13466733b39aSJayamohan Kallickal * command has residual 13476733b39aSJayamohan Kallickal * over run bytes. 13486733b39aSJayamohan Kallickal */ 13496733b39aSJayamohan Kallickal #define CXN_KILLED_UNDER_RUN_RESIDUAL 17 /* Command got invalidated 135025985edcSLucas De Marchi * internally due to received 13516733b39aSJayamohan Kallickal * command has residual under 13526733b39aSJayamohan Kallickal * run bytes. 13536733b39aSJayamohan Kallickal */ 13546733b39aSJayamohan Kallickal #define CMD_KILLED_INVALID_STATSN_RCVD 18 /* Command got invalidated 135525985edcSLucas De Marchi * internally due to a received 13566733b39aSJayamohan Kallickal * PDU has an invalid StatusSN 13576733b39aSJayamohan Kallickal */ 13586733b39aSJayamohan Kallickal #define CMD_KILLED_INVALID_R2T_RCVD 19 /* Command got invalidated 135925985edcSLucas De Marchi * internally due to a received 13606733b39aSJayamohan Kallickal * an R2T with some invalid 13616733b39aSJayamohan Kallickal * fields in it 13626733b39aSJayamohan Kallickal */ 13636733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_LUN_INVALID 20 /* Command got invalidated 13646733b39aSJayamohan Kallickal * internally due to received 13656733b39aSJayamohan Kallickal * PDU has an invalid LUN. 13666733b39aSJayamohan Kallickal */ 13676733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_ICD_INVALID 21 /* Command got invalidated 13686733b39aSJayamohan Kallickal * internally due to the 13696733b39aSJayamohan Kallickal * corresponding ICD not in a 13706733b39aSJayamohan Kallickal * valid state 13716733b39aSJayamohan Kallickal */ 13726733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_ITT_INVALID 22 /* Command got invalidated due 13736733b39aSJayamohan Kallickal * to received PDU has an 13746733b39aSJayamohan Kallickal * invalid ITT. 13756733b39aSJayamohan Kallickal */ 13766733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_SEQ_OUTOFORDER 23 /* Command got invalidated due 13776733b39aSJayamohan Kallickal * to received sequence buffer 13786733b39aSJayamohan Kallickal * offset is out of order. 13796733b39aSJayamohan Kallickal */ 13806733b39aSJayamohan Kallickal #define CMD_CXN_KILLED_INVALID_DATASN_RCVD 24 /* Command got invalidated 13816733b39aSJayamohan Kallickal * internally due to a 138225985edcSLucas De Marchi * received PDU has an invalid 13836733b39aSJayamohan Kallickal * DataSN 13846733b39aSJayamohan Kallickal */ 13856733b39aSJayamohan Kallickal #define CXN_INVALIDATE_NOTIFY 25 /* Connection invalidation 13866733b39aSJayamohan Kallickal * completion notify. 13876733b39aSJayamohan Kallickal */ 13886733b39aSJayamohan Kallickal #define CXN_INVALIDATE_INDEX_NOTIFY 26 /* Connection invalidation 13896733b39aSJayamohan Kallickal * completion 13906733b39aSJayamohan Kallickal * with data PDU index. 13916733b39aSJayamohan Kallickal */ 13926733b39aSJayamohan Kallickal #define CMD_INVALIDATED_NOTIFY 27 /* Command invalidation 13936733b39aSJayamohan Kallickal * completionnotifify. 13946733b39aSJayamohan Kallickal */ 13956733b39aSJayamohan Kallickal #define UNSOL_HDR_NOTIFY 28 /* Unsolicited header notify.*/ 13966733b39aSJayamohan Kallickal #define UNSOL_DATA_NOTIFY 29 /* Unsolicited data notify.*/ 13976733b39aSJayamohan Kallickal #define UNSOL_DATA_DIGEST_ERROR_NOTIFY 30 /* Unsolicited data digest 13986733b39aSJayamohan Kallickal * error notify. 13996733b39aSJayamohan Kallickal */ 14006733b39aSJayamohan Kallickal #define DRIVERMSG_NOTIFY 31 /* TCP acknowledge based 14016733b39aSJayamohan Kallickal * notification. 14026733b39aSJayamohan Kallickal */ 14036733b39aSJayamohan Kallickal #define CXN_KILLED_CMND_DATA_NOT_ON_SAME_CONN 32 /* Connection got invalidated 14046733b39aSJayamohan Kallickal * internally due to command 14056733b39aSJayamohan Kallickal * and data are not on same 14066733b39aSJayamohan Kallickal * connection. 14076733b39aSJayamohan Kallickal */ 14086733b39aSJayamohan Kallickal #define SOL_CMD_KILLED_DIF_ERR 33 /* Solicited command got 14096733b39aSJayamohan Kallickal * invalidated internally due 14106733b39aSJayamohan Kallickal * to DIF error 14116733b39aSJayamohan Kallickal */ 14126733b39aSJayamohan Kallickal #define CXN_KILLED_SYN_RCVD 34 /* Connection got invalidated 14136733b39aSJayamohan Kallickal * internally due to incoming 14146733b39aSJayamohan Kallickal * TCP SYN 14156733b39aSJayamohan Kallickal */ 14166733b39aSJayamohan Kallickal #define CXN_KILLED_IMM_DATA_RCVD 35 /* Connection got invalidated 14176733b39aSJayamohan Kallickal * internally due to an 14186733b39aSJayamohan Kallickal * incoming Unsolicited PDU 14196733b39aSJayamohan Kallickal * that has immediate data on 14206733b39aSJayamohan Kallickal * the cxn 14216733b39aSJayamohan Kallickal */ 14226733b39aSJayamohan Kallickal 1423e9b91193SJayamohan Kallickal int be_chk_reset_complete(struct beiscsi_hba *phba); 1424e9b91193SJayamohan Kallickal 14256733b39aSJayamohan Kallickal void be_wrb_hdr_prepare(struct be_mcc_wrb *wrb, int payload_len, 14266733b39aSJayamohan Kallickal bool embedded, u8 sge_cnt); 14276733b39aSJayamohan Kallickal 14286733b39aSJayamohan Kallickal void be_cmd_hdr_prepare(struct be_cmd_req_hdr *req_hdr, 14296733b39aSJayamohan Kallickal u8 subsystem, u8 opcode, int cmd_len); 14306733b39aSJayamohan Kallickal 1431cdaa4dedSJitendra Bhivare void beiscsi_fail_session(struct iscsi_cls_session *cls_session); 14326733b39aSJayamohan Kallickal #endif /* !BEISCSI_CMDS_H */ 1433