1ef270ab1SKenneth D. Merry /*- 2ef270ab1SKenneth D. Merry * Copyright (c) 2017 Broadcom. All rights reserved. 3ef270ab1SKenneth D. Merry * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries. 4ef270ab1SKenneth D. Merry * 5ef270ab1SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 6ef270ab1SKenneth D. Merry * modification, are permitted provided that the following conditions are met: 7ef270ab1SKenneth D. Merry * 8ef270ab1SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright notice, 9ef270ab1SKenneth D. Merry * this list of conditions and the following disclaimer. 10ef270ab1SKenneth D. Merry * 11ef270ab1SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright notice, 12ef270ab1SKenneth D. Merry * this list of conditions and the following disclaimer in the documentation 13ef270ab1SKenneth D. Merry * and/or other materials provided with the distribution. 14ef270ab1SKenneth D. Merry * 15ef270ab1SKenneth D. Merry * 3. Neither the name of the copyright holder nor the names of its contributors 16ef270ab1SKenneth D. Merry * may be used to endorse or promote products derived from this software 17ef270ab1SKenneth D. Merry * without specific prior written permission. 18ef270ab1SKenneth D. Merry * 19ef270ab1SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20ef270ab1SKenneth D. Merry * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21ef270ab1SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22ef270ab1SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23ef270ab1SKenneth D. Merry * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24ef270ab1SKenneth D. Merry * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25ef270ab1SKenneth D. Merry * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26ef270ab1SKenneth D. Merry * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27ef270ab1SKenneth D. Merry * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28ef270ab1SKenneth D. Merry * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29ef270ab1SKenneth D. Merry * POSSIBILITY OF SUCH DAMAGE. 30ef270ab1SKenneth D. Merry */ 31ef270ab1SKenneth D. Merry 32ef270ab1SKenneth D. Merry /** 33ef270ab1SKenneth D. Merry * @file 34ef270ab1SKenneth D. Merry * Common declartaions for the driver's IOCTL interface 35ef270ab1SKenneth D. Merry */ 36ef270ab1SKenneth D. Merry 37ef270ab1SKenneth D. Merry #if !defined(__OCS_IOCTL_H__) 38ef270ab1SKenneth D. Merry #define __OCS_IOCTL_H__ 39ef270ab1SKenneth D. Merry 40ef270ab1SKenneth D. Merry /** 41ef270ab1SKenneth D. Merry * @brief OCS test ioctl 42ef270ab1SKenneth D. Merry * 43ef270ab1SKenneth D. Merry * Simple structure for testing the IOCTL interface 44ef270ab1SKenneth D. Merry */ 45ef270ab1SKenneth D. Merry 46ef270ab1SKenneth D. Merry typedef struct { 47ef270ab1SKenneth D. Merry char string[32]; /**< fixed string buffer */ 48ef270ab1SKenneth D. Merry } ocs_ioctl_test_t; 49ef270ab1SKenneth D. Merry 50ef270ab1SKenneth D. Merry /** 51ef270ab1SKenneth D. Merry * @brief DRIVER_INFO ioctl structure 52ef270ab1SKenneth D. Merry * 53ef270ab1SKenneth D. Merry * Structure is returned whtn the OCS_IOCTL_CMD_DRIVER_INFO is issued by a user space program. 54ef270ab1SKenneth D. Merry */ 55ef270ab1SKenneth D. Merry 56ef270ab1SKenneth D. Merry typedef struct { 57ef270ab1SKenneth D. Merry uint16_t pci_vendor; /**< PCI vender ID value (binary) */ 58ef270ab1SKenneth D. Merry uint16_t pci_device; /**< PCI device ID value (binary) */ 59ef270ab1SKenneth D. Merry char businfo[16]; /**< Bus information (text) */ 60ef270ab1SKenneth D. Merry uint32_t sli_intf; /**< SLI_INTF register value (binary) */ 61ef270ab1SKenneth D. Merry char desc[64]; /**< description (text) */ 62ef270ab1SKenneth D. Merry char fw_rev[32]; /**< firmware revision (text) */ 63ef270ab1SKenneth D. Merry union { 64ef270ab1SKenneth D. Merry struct { 65ef270ab1SKenneth D. Merry uint8_t wwnn[8]; /**< WWNN (binary) */ 66ef270ab1SKenneth D. Merry uint8_t wwpn[8]; /**< WWPN (binary) */ 67ef270ab1SKenneth D. Merry } fc; 68ef270ab1SKenneth D. Merry struct { 69ef270ab1SKenneth D. Merry uint8_t mac_addr[6]; /**< MAC address (binary) */ 70ef270ab1SKenneth D. Merry uint8_t reserved[10]; 71ef270ab1SKenneth D. Merry } iscsi; 72ef270ab1SKenneth D. Merry } hw_addr; 73ef270ab1SKenneth D. Merry char serialnum[32]; /**< board serial number (text) */ 74ef270ab1SKenneth D. Merry } ocs_ioctl_driver_info_t; 75ef270ab1SKenneth D. Merry 76ef270ab1SKenneth D. Merry #define ELXU_BSD_MAGIC 0x30584c45 77ef270ab1SKenneth D. Merry 78ef270ab1SKenneth D. Merry /** 79ef270ab1SKenneth D. Merry * @brief IOCTL_CMD_IOCTL_ELXU_MBOX ioctl structure 80ef270ab1SKenneth D. Merry * 81ef270ab1SKenneth D. Merry * Structure used to submit elxsdkutil mailbox requests for firmware download and 82ef270ab1SKenneth D. Merry * dump file retrieveal. 83ef270ab1SKenneth D. Merry */ 84ef270ab1SKenneth D. Merry 85ef270ab1SKenneth D. Merry typedef struct { 86ef270ab1SKenneth D. Merry uint32_t magic; /**< magic number */ 87ef270ab1SKenneth D. Merry uint32_t size; /**< size of MBX command */ 88ef270ab1SKenneth D. Merry uint8_t payload[256]; /**< MBX command in/out payload buffer */ 89ef270ab1SKenneth D. Merry uint64_t in_addr; /**< user space address of input buffer */ 90ef270ab1SKenneth D. Merry uint64_t in_bytes; /**< length of user space input buffer in bytes */ 91ef270ab1SKenneth D. Merry uint64_t out_addr; /**< user space address of output buffer */ 92ef270ab1SKenneth D. Merry uint64_t out_bytes; /**< length of user space output buffer in bytes */ 93ef270ab1SKenneth D. Merry } ocs_ioctl_elxu_mbox_t; 94ef270ab1SKenneth D. Merry 95ef270ab1SKenneth D. Merry enum { 96ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_loop, /**< Start command loop */ 97ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_loop_wait, /**< Start command loop and wait for completion */ 98ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_stop, /**< Stop command loop */ 99ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd, /**< Start one command */ 100ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_wait, /**< Wait for a command to complete */ 101ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_abort, /**< Start an abort */ 102ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_tmf, /**< Start a tmf */ 103ef270ab1SKenneth D. Merry ocs_ioctl_els_send, /**< Start an ELS */ 104ef270ab1SKenneth D. Merry ocs_ioctl_tgt_logout, /**< logout of a target */ 105ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_wait_any, /**< Wait for any command to complete */ 106ef270ab1SKenneth D. Merry }; 107ef270ab1SKenneth D. Merry 108ef270ab1SKenneth D. Merry enum { 109ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_rd = (1U << 0), /**< direction is read */ 110ef270ab1SKenneth D. Merry ocs_ioctl_scsi_cmd_wr = (1U << 1), /**< direction is write */ 111ef270ab1SKenneth D. Merry }; 112ef270ab1SKenneth D. Merry 113ef270ab1SKenneth D. Merry /** 114ef270ab1SKenneth D. Merry * @brief OCS_IOCTL_CMD_SCSI_CMD ioctl command structure 115ef270ab1SKenneth D. Merry */ 116ef270ab1SKenneth D. Merry 117ef270ab1SKenneth D. Merry typedef enum { 118ef270ab1SKenneth D. Merry DIF_OP_DISABLE = 0, 119ef270ab1SKenneth D. Merry DIF_OP_IN_NODIF_OUT_CRC, 120ef270ab1SKenneth D. Merry DIF_OP_IN_CRC_OUT_NODIF, 121ef270ab1SKenneth D. Merry DIF_OP_IN_NODIF_OUT_CHKSUM, 122ef270ab1SKenneth D. Merry DIF_OP_IN_CHKSUM_OUT_NODIF, 123ef270ab1SKenneth D. Merry DIF_OP_IN_CRC_OUT_CRC, 124ef270ab1SKenneth D. Merry DIF_OP_IN_CHKSUM_OUT_CHKSUM, 125ef270ab1SKenneth D. Merry DIF_OP_IN_CRC_OUT_CHKSUM, 126ef270ab1SKenneth D. Merry DIF_OP_IN_CHKSUM_OUT_CRC, 127ef270ab1SKenneth D. Merry DIF_OP_IN_RAW_OUT_RAW, 128ef270ab1SKenneth D. Merry } dif_op_t; 129ef270ab1SKenneth D. Merry 130ef270ab1SKenneth D. Merry #define DIF_OP_PASS_THRU DIF_OP_IN_CRC_OUT_CRC 131ef270ab1SKenneth D. Merry #define DIF_OP_STRIP DIF_OP_IN_CRC_OUT_NODIF 132ef270ab1SKenneth D. Merry #define DIF_OP_INSERT DIF_OP_IN_NODIF_OUT_CRC 133ef270ab1SKenneth D. Merry 134ef270ab1SKenneth D. Merry typedef struct { 135ef270ab1SKenneth D. Merry dif_op_t dif_op; 136ef270ab1SKenneth D. Merry uint32_t 137ef270ab1SKenneth D. Merry check_ref_tag:1, /* check reference tag on initiator writes */ 138ef270ab1SKenneth D. Merry check_app_tag:1, /* check application tag on initiator writes */ 139ef270ab1SKenneth D. Merry check_guard:1, /* check CRC on initiator writes */ 140ef270ab1SKenneth D. Merry dif_separate:1; /* use DIF separate transfers */ 141ef270ab1SKenneth D. Merry uint32_t ref_tag; /* DIF reference tag */ 142ef270ab1SKenneth D. Merry uint16_t app_tag; /* DIF application tag */ 143ef270ab1SKenneth D. Merry uint32_t blocksize; /* DIF blocksize */ 144ef270ab1SKenneth D. Merry } dif_info_t; 145ef270ab1SKenneth D. Merry 146ef270ab1SKenneth D. Merry typedef struct { 147ef270ab1SKenneth D. Merry int command; /**< SCSI command request command */ 148ef270ab1SKenneth D. Merry uint32_t target_idx; /**< Target device index */ 149ef270ab1SKenneth D. Merry uint32_t dir; /**< rd or wr */ 150ef270ab1SKenneth D. Merry uint32_t lun; /**< lun value */ 151ef270ab1SKenneth D. Merry int32_t tmf; /**< TMF */ 152ef270ab1SKenneth D. Merry uint8_t cdb[32]; /**< SCSI CDB */ 153ef270ab1SKenneth D. Merry uint32_t cdb_len; /**< SCSI CDB length in bytes */ 154ef270ab1SKenneth D. Merry uint32_t els_cmd; /**< ELS command */ 155ef270ab1SKenneth D. Merry uint32_t flags; /**< command flags */ 156ef270ab1SKenneth D. Merry uint32_t queue_depth; /**< queue depth for command looping */ 157ef270ab1SKenneth D. Merry uint32_t payload_length; /**< payload length for command */ 158ef270ab1SKenneth D. Merry uint32_t dif_payload_length; /**< DIF payload length for command if separate */ 159ef270ab1SKenneth D. Merry uint32_t io_count; /**< command count for looping */ 160ef270ab1SKenneth D. Merry uint32_t io_timeout; /**< IO timeout in seconds (0 = no timeout) */ 161ef270ab1SKenneth D. Merry 162ef270ab1SKenneth D. Merry uint32_t directio; /**< If set, DMA to and from user buffers */ 163ef270ab1SKenneth D. Merry 164ef270ab1SKenneth D. Merry uint32_t first_burst:1; /**< If true send IO writes with first burst */ 165ef270ab1SKenneth D. Merry uint32_t first_burst_size; /**< If first burst is enabled, then this size */ 166ef270ab1SKenneth D. Merry 167ef270ab1SKenneth D. Merry int32_t wait_timeout_usec; /**< Wait timeout (usec) for wait, wait_any */ 168ef270ab1SKenneth D. Merry 169ef270ab1SKenneth D. Merry /* T10-PI */ 170ef270ab1SKenneth D. Merry dif_info_t dif; /* DIF info */ 171ef270ab1SKenneth D. Merry 172ef270ab1SKenneth D. Merry /* user space buffers */ 173ef270ab1SKenneth D. Merry void *payload; /**< pointer to user space payload buffer */ 174ef270ab1SKenneth D. Merry void *dif_payload; /**< pointer to DIF block data if separate */ 175ef270ab1SKenneth D. Merry uint8_t scsi_status; /**< SCSI status */ 176ef270ab1SKenneth D. Merry uint16_t scsi_status_qualifier; /**< SCSI status qualifier */ 177ef270ab1SKenneth D. Merry void *sense_data; /**< pointer to sense data buffer */ 178ef270ab1SKenneth D. Merry uint32_t sense_data_length; /**< length of sense data buffer (call=buffer leng, return=data written) */ 179ef270ab1SKenneth D. Merry int32_t residual; /**< residual */ 180ef270ab1SKenneth D. Merry uint32_t tag_to_abort; /**< tag to abort for an abort task request */ 181ef270ab1SKenneth D. Merry 182ef270ab1SKenneth D. Merry /* return value */ 183ef270ab1SKenneth D. Merry int32_t status; /**< returned status */ 184ef270ab1SKenneth D. Merry uint32_t data_transferred; /**< updated with data transferred */ 185ef270ab1SKenneth D. Merry uint32_t tag; /**< returned unique I/O context tag */ 186ef270ab1SKenneth D. Merry 187ef270ab1SKenneth D. Merry /* for scsi loop */ 188ef270ab1SKenneth D. Merry uint32_t submit_count; /**< count of submitted IOs */ 189ef270ab1SKenneth D. Merry uint32_t complete_count; /**< count of completed IOs */ 190ef270ab1SKenneth D. Merry } ocs_ioctl_scsi_cmd_t; 191ef270ab1SKenneth D. Merry 192ef270ab1SKenneth D. Merry /** 193ef270ab1SKenneth D. Merry * @brief coredump helper function command values 194ef270ab1SKenneth D. Merry */ 195ef270ab1SKenneth D. Merry 196ef270ab1SKenneth D. Merry typedef enum { 197ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_READ8, 198ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_READ16, 199ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_READ32, 200ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_WRITE8, 201ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_WRITE16, 202ef270ab1SKenneth D. Merry OCS_ECD_HELPER_CFG_WRITE32, 203ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_READ8, 204ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_READ16, 205ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_READ32, 206ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_WRITE8, 207ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_WRITE16, 208ef270ab1SKenneth D. Merry OCS_ECD_HELPER_BAR_WRITE32, 209ef270ab1SKenneth D. Merry } ocs_ecd_helper_cmd_t; 210ef270ab1SKenneth D. Merry 211ef270ab1SKenneth D. Merry /** 212ef270ab1SKenneth D. Merry * @brief OCS_IOCTL_CMD_ECD_HELPER ioctl structure 213ef270ab1SKenneth D. Merry */ 214ef270ab1SKenneth D. Merry 215ef270ab1SKenneth D. Merry typedef struct { 216ef270ab1SKenneth D. Merry ocs_ecd_helper_cmd_t cmd; /*<< coredump helper function command */ 217ef270ab1SKenneth D. Merry uint32_t bar; /*<< BAR value to use */ 218ef270ab1SKenneth D. Merry uint32_t offset; /*<< offset value to use */ 219ef270ab1SKenneth D. Merry uint32_t data; /*<< 32 bit data value to write or return read data in */ 220ef270ab1SKenneth D. Merry int status; /*<< status of helper function request */ 221ef270ab1SKenneth D. Merry } ocs_ioctl_ecd_helper_t; 222ef270ab1SKenneth D. Merry 223ef270ab1SKenneth D. Merry /** 224ef270ab1SKenneth D. Merry * @brief OCS_IOCTL_CMD_VPORT ioctl structure 225ef270ab1SKenneth D. Merry */ 226ef270ab1SKenneth D. Merry 227ef270ab1SKenneth D. Merry typedef struct { 228ef270ab1SKenneth D. Merry uint32_t domain_index; /*<< domain instance index */ 229ef270ab1SKenneth D. Merry uint32_t req_create:1, /*<< 1 = create vport, zero = remove vport */ 230ef270ab1SKenneth D. Merry enable_ini:1, /*<< 1 = enable vport as an initiator */ 231ef270ab1SKenneth D. Merry enable_tgt:1; /*<< 1 = enable vport as a target */ 232ef270ab1SKenneth D. Merry uint64_t wwpn; /*<< wwpn to create or delete */ 233ef270ab1SKenneth D. Merry uint64_t wwnn; /*<< wwnn to create or delete */ 234ef270ab1SKenneth D. Merry int status; /*<< status of helper function request */ 235ef270ab1SKenneth D. Merry } ocs_ioctl_vport_t; 236ef270ab1SKenneth D. Merry 237ef270ab1SKenneth D. Merry /** 238ef270ab1SKenneth D. Merry * @brief connection info ioctl structure 239ef270ab1SKenneth D. Merry * 240ef270ab1SKenneth D. Merry * Structure is returned when the OCS_IOCTL_CMD_CONNECTION_INFO is issued by a user space program. 241ef270ab1SKenneth D. Merry */ 242ef270ab1SKenneth D. Merry typedef struct { 243ef270ab1SKenneth D. Merry uint32_t connection_handle; 244ef270ab1SKenneth D. Merry uint16_t connection_id; 245ef270ab1SKenneth D. Merry uint8_t source_ip_type; 246ef270ab1SKenneth D. Merry uint8_t source_ip[16]; 247ef270ab1SKenneth D. Merry uint16_t source_port; 248ef270ab1SKenneth D. Merry uint8_t dest_ip_type; 249ef270ab1SKenneth D. Merry uint8_t dest_ip[16]; 250ef270ab1SKenneth D. Merry uint16_t dest_port; 251ef270ab1SKenneth D. Merry } ocs_ioctl_connection_info_t; 252ef270ab1SKenneth D. Merry 253ef270ab1SKenneth D. Merry typedef struct { 254ef270ab1SKenneth D. Merry uint32_t max_connections; 255ef270ab1SKenneth D. Merry uint32_t num_connections; 256ef270ab1SKenneth D. Merry ocs_ioctl_connection_info_t *connections; 257ef270ab1SKenneth D. Merry } ocs_ioctl_connections_t; 258ef270ab1SKenneth D. Merry 259ef270ab1SKenneth D. Merry /** 260ef270ab1SKenneth D. Merry * @brief driver-dump actions 261ef270ab1SKenneth D. Merry */ 262ef270ab1SKenneth D. Merry 263ef270ab1SKenneth D. Merry typedef enum { 264ef270ab1SKenneth D. Merry OCS_IOCTL_DDUMP_GET, 265ef270ab1SKenneth D. Merry OCS_IOCTL_DDUMP_GET_SAVED, 266ef270ab1SKenneth D. Merry OCS_IOCTL_DDUMP_CLR_SAVED, 267ef270ab1SKenneth D. Merry } ocs_ddump_action_t; 268ef270ab1SKenneth D. Merry 269ef270ab1SKenneth D. Merry #define OCS_IOCTL_DDUMP_FLAGS_WQES (1U << 0) 270ef270ab1SKenneth D. Merry #define OCS_IOCTL_DDUMP_FLAGS_CQES (1U << 1) 271ef270ab1SKenneth D. Merry #define OCS_IOCTL_DDUMP_FLAGS_MQES (1U << 2) 272ef270ab1SKenneth D. Merry #define OCS_IOCTL_DDUMP_FLAGS_RQES (1U << 3) 273ef270ab1SKenneth D. Merry #define OCS_IOCTL_DDUMP_FLAGS_EQES (1U << 4) 274ef270ab1SKenneth D. Merry 275ef270ab1SKenneth D. Merry typedef struct { 276ef270ab1SKenneth D. Merry ocs_ddump_action_t action; 277ef270ab1SKenneth D. Merry uint32_t flags; 278ef270ab1SKenneth D. Merry uint32_t q_entries; 279ef270ab1SKenneth D. Merry } ocs_ioctl_ddump_arg_t; 280ef270ab1SKenneth D. Merry 281ef270ab1SKenneth D. Merry /** 282ef270ab1SKenneth D. Merry * @brief OCS_CTL_CMD_GET_DDUMP ioctl structure 283ef270ab1SKenneth D. Merry */ 284ef270ab1SKenneth D. Merry 285ef270ab1SKenneth D. Merry typedef struct { 286ef270ab1SKenneth D. Merry ocs_ioctl_ddump_arg_t args; /*<< arguments for ddump */ 287ef270ab1SKenneth D. Merry uint8_t *user_buffer; /*<< pointer to user space buffer */ 288ef270ab1SKenneth D. Merry uint32_t user_buffer_len; /*<< length in bytes of user space buffer */ 289ef270ab1SKenneth D. Merry uint32_t bytes_written; /*<< number of bytes written */ 290ef270ab1SKenneth D. Merry } ocs_ioctl_ddump_t; 291ef270ab1SKenneth D. Merry 292ef270ab1SKenneth D. Merry /** 293ef270ab1SKenneth D. Merry * @brief OCS_CTL_CMD_GET_STATUS, OCS_CTL_CMD_GET_CONFIG 294ef270ab1SKenneth D. Merry */ 295ef270ab1SKenneth D. Merry 296ef270ab1SKenneth D. Merry typedef struct { 297ef270ab1SKenneth D. Merry uint8_t *user_buffer; /*<< pointer to user space buffer */ 298ef270ab1SKenneth D. Merry uint32_t user_buffer_len; /*<< length in bytes of user space buffer */ 299ef270ab1SKenneth D. Merry uint32_t bytes_written; /*<< number of bytes written */ 300ef270ab1SKenneth D. Merry } ocs_ioctl_mgmt_buffer_t; 301ef270ab1SKenneth D. Merry 302ef270ab1SKenneth D. Merry typedef struct { 303ef270ab1SKenneth D. Merry uint8_t *name; /*<< Input: name of property to retrieve */ 30429e2dbd4SRam Kishore Vegesna uint16_t name_len; /*<< Input: Length of name */ 305ef270ab1SKenneth D. Merry uint8_t *value; /*<< Output: user space buffer in which to place the response */ 306ef270ab1SKenneth D. Merry uint32_t value_length; /*<< Input: size of the user space buffer */ 307*6f78736cSRam Kishore Vegesna int status; /*<< Output: command execution status */ 308ef270ab1SKenneth D. Merry } ocs_ioctl_cmd_get_t; 309ef270ab1SKenneth D. Merry 310ef270ab1SKenneth D. Merry typedef struct { 311ef270ab1SKenneth D. Merry uint8_t *name; /*<< Input: name of property to set */ 31229e2dbd4SRam Kishore Vegesna uint16_t name_len; /*<< Input: Length of name */ 313ef270ab1SKenneth D. Merry uint8_t *value; /*<< Input: user space buffer which contains the new value */ 314ef270ab1SKenneth D. Merry int32_t result; /*<< Output: result */ 315ef270ab1SKenneth D. Merry } ocs_ioctl_cmd_set_t; 316ef270ab1SKenneth D. Merry 317ef270ab1SKenneth D. Merry typedef struct { 318ef270ab1SKenneth D. Merry uint8_t *name; /*<< Input: name of action to execute */ 31929e2dbd4SRam Kishore Vegesna uint16_t name_len; /*<< Input: Length of name */ 320ef270ab1SKenneth D. Merry void *arg_in; /*<< Input: pointer to argument in user space */ 321ef270ab1SKenneth D. Merry uint32_t arg_in_length; /*<< Input: size of arg_in in bytes */ 322ef270ab1SKenneth D. Merry void *arg_out; /*<< Output: pointer to argument from kernel to user */ 323ef270ab1SKenneth D. Merry uint32_t arg_out_length; /*<< Input: size of arg_out in bytes */ 324ef270ab1SKenneth D. Merry int32_t result; /*<< Output: result */ 325ef270ab1SKenneth D. Merry } ocs_ioctl_action_t; 326ef270ab1SKenneth D. Merry 327ef270ab1SKenneth D. Merry #define FC_HEADER_LEN 24 328ef270ab1SKenneth D. Merry typedef struct { 329ef270ab1SKenneth D. Merry uint8_t fc_header[FC_HEADER_LEN]; /*<< FC Header to send */ 330ef270ab1SKenneth D. Merry uint8_t *payload; /*<< payload */ 331ef270ab1SKenneth D. Merry uint32_t payload_len; /*<< payload length (bytes) */ 332ef270ab1SKenneth D. Merry uint8_t sof; /*<< SOF value */ 333ef270ab1SKenneth D. Merry uint8_t eof; /*<< EOF Value */ 334ef270ab1SKenneth D. Merry } ocs_ioctl_send_frame_t; 335ef270ab1SKenneth D. Merry 336*6f78736cSRam Kishore Vegesna /* 337*6f78736cSRam Kishore Vegesna * boardtemp (DUMP_TYPE4_WKI_TAG_SAT_TEM) response buffer length. 338*6f78736cSRam Kishore Vegesna */ 339*6f78736cSRam Kishore Vegesna #define OCS_DUMP_TYPE4_WKI_TAG_SAT_TEM_RESP_LEN (6 * 4) 340*6f78736cSRam Kishore Vegesna 341ef270ab1SKenneth D. Merry /** 342ef270ab1SKenneth D. Merry * @brief linkcfg strings 343ef270ab1SKenneth D. Merry */ 344ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_4X10G "ETH_4x10G" 345ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_1X40G "ETH_1x40G" 346ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_2X16G "FC_2x16G" 347ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_4X8G "FC_4x8G" 348ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_4X1G "FC_4x1G" 349ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_2X10G "ETH_2x10G" 350ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_2X10G_2X8G "ETH_2x10G_FC_2x8G" 351ef270ab1SKenneth D. Merry #define OCS_CONFIG_LINKCFG_UNKNOWN "UNKNOWN" 352ef270ab1SKenneth D. Merry 353ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_BASE 'o' 354ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_TEST _IOWR(OCS_IOCTL_CMD_BASE, 1, ocs_ioctl_test_t) 355ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_ELXU_MBOX _IOWR(OCS_IOCTL_CMD_BASE, 2, ocs_ioctl_elxu_mbox_t) 356ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_SCSI_CMD _IOWR(OCS_IOCTL_CMD_BASE, 3, ocs_ioctl_scsi_cmd_t) 357ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_DRIVER_INFO _IOWR(OCS_IOCTL_CMD_BASE, 4, ocs_ioctl_driver_info_t) 358ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_ECD_HELPER _IOWR(OCS_IOCTL_CMD_BASE, 5, ocs_ioctl_ecd_helper_t) 359ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_CONNECTION_INFO _IOWR(OCS_IOCTL_CMD_BASE, 6, ocs_ioctl_connection_info_t) 360ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_VPORT _IOWR(OCS_IOCTL_CMD_BASE, 7, ocs_ioctl_vport_t) 361ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_GET_DDUMP _IOWR(OCS_IOCTL_CMD_BASE, 8, ocs_ioctl_ddump_t) 362ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_MGMT_GET _IOWR(OCS_IOCTL_CMD_BASE, 9, ocs_ioctl_cmd_get_t) 363ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_MGMT_GET_ALL _IOWR(OCS_IOCTL_CMD_BASE, 10, ocs_ioctl_mgmt_buffer_t) 364ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_MGMT_SET _IOWR(OCS_IOCTL_CMD_BASE, 11, ocs_ioctl_cmd_set_t) 365ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_MGMT_LIST _IOWR(OCS_IOCTL_CMD_BASE, 12, ocs_ioctl_mgmt_buffer_t) 366ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_MGMT_EXEC _IOWR(OCS_IOCTL_CMD_BASE, 13, ocs_ioctl_action_t) 367ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_LINK_ONLINE _IOWR(OCS_IOCTL_CMD_BASE, 16, int) 368ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_GEN_DUMP _IOWR(OCS_IOCTL_CMD_BASE, 17, int) 369ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_UNLOAD _IO(OCS_IOCTL_CMD_BASE, 18) 370ef270ab1SKenneth D. Merry #define OCS_IOCTL_CMD_SEND_FRAME _IOWR(OCS_IOCTL_CMD_BASE, 19, ocs_ioctl_send_frame_t) 371ef270ab1SKenneth D. Merry 372ef270ab1SKenneth D. Merry #endif 373