1 /*
   2  * Copyright (c) 2008-2016 Solarflare Communications Inc.
   3  * All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions are met:
   7  *
   8  * 1. Redistributions of source code must retain the above copyright notice,
   9  *    this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright notice,
  11  *    this list of conditions and the following disclaimer in the documentation
  12  *    and/or other materials provided with the distribution.
  13  *
  14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  24  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25  *
  26  * The views and conclusions contained in the software and documentation are
  27  * those of the authors and should not be interpreted as representing official
  28  * policies, either expressed or implied, of the FreeBSD Project.
  29  */
  30 
  31 #ifndef _SYS_SFXGE_IOC_H
  32 #define _SYS_SFXGE_IOC_H
  33 
  34 #ifdef  __cplusplus
  35 extern "C" {
  36 #endif
  37 
  38 #include <sys/types.h>
  39 
  40 /* Ensure no ambiguity over structure layouts */
  41 #pragma pack(1)
  42 
  43 #define SFXGE_IOC       ('S' << 24 | 'F' << 16 | 'C' << 8)
  44 
  45 #define SFXGE_STOP_IOC  (SFXGE_IOC | 0x01)
  46 #define SFXGE_START_IOC (SFXGE_IOC | 0x02)
  47 
  48 /* MDIO was SFXGE_IOC 0x03 */
  49 
  50 /* I2C was SFXGE_IOC 0x04 */
  51 
  52 /* SPI was SFXGE_IOC 0x05 */
  53 
  54 /* BAR was SFXGE_IOC 0x06 */
  55 
  56 /* PCI was SFXGE_IOC 0x07 */
  57 
  58 /* MAC was SFXGE_IOC 0x08 */
  59 
  60 /* PHY was SFXGE_IOC 0x09 */
  61 
  62 /* SRAM was SFXGE_IOC 0x0a */
  63 
  64 /* TX was SFXGE_IOC 0x0b */
  65 
  66 /* RX was SFXGE_IOC 0x0c */
  67 
  68 /* NVRAM */
  69 
  70 #define SFXGE_NVRAM_IOC (SFXGE_IOC | 0x0d)
  71 
  72 typedef struct sfxge_nvram_ioc_s {
  73         uint32_t        sni_op;
  74         uint32_t        sni_type;
  75         uint32_t        sni_offset;
  76         uint32_t        sni_size;
  77         uint32_t        sni_subtype;
  78         uint16_t        sni_version[4];         /* get/set_ver */
  79         /*
  80          * Streams STRMSGSZ limit (default 64kb)
  81          * See write(2) and I_STR in streamio(7i)
  82          */
  83         uint8_t         sni_data[32*1024];      /* read/write */
  84 } sfxge_nvram_ioc_t;
  85 
  86 #define SFXGE_NVRAM_OP_SIZE             0x00000001
  87 #define SFXGE_NVRAM_OP_READ             0x00000002
  88 #define SFXGE_NVRAM_OP_WRITE            0x00000003
  89 #define SFXGE_NVRAM_OP_ERASE            0x00000004
  90 #define SFXGE_NVRAM_OP_GET_VER          0x00000005
  91 #define SFXGE_NVRAM_OP_SET_VER          0x00000006
  92 
  93 #define SFXGE_NVRAM_TYPE_BOOTROM        0x00000001
  94 #define SFXGE_NVRAM_TYPE_BOOTROM_CFG    0x00000002
  95 #define SFXGE_NVRAM_TYPE_MC             0x00000003
  96 #define SFXGE_NVRAM_TYPE_MC_GOLDEN      0x00000004
  97 #define SFXGE_NVRAM_TYPE_PHY            0x00000005
  98 #define SFXGE_NVRAM_TYPE_NULL_PHY       0x00000006
  99 #define SFXGE_NVRAM_TYPE_FPGA           0x00000007
 100 #define SFXGE_NVRAM_TYPE_FCFW           0x00000008
 101 #define SFXGE_NVRAM_TYPE_CPLD           0x00000009
 102 #define SFXGE_NVRAM_TYPE_FPGA_BACKUP    0x0000000a
 103 #define SFXGE_NVRAM_TYPE_DYNAMIC_CFG    0x0000000b
 104 
 105 
 106 /* PHY BIST was IOC 0x0e */
 107 
 108 /* Legacy IOC for MCDIv1 protocol - do not use in new code */
 109 #define SFXGE_MCDI_IOC  (SFXGE_IOC | 0x0f)
 110 
 111 typedef struct sfxge_mcdi_ioc_s {
 112         uint8_t         smi_payload[256];
 113         uint8_t         smi_cmd;
 114         uint8_t         smi_len; /* In and out */
 115         uint8_t         smi_rc;
 116 } sfxge_mcdi_ioc_t;
 117 
 118 /* Reset the NIC */
 119 
 120 #define SFXGE_NIC_RESET_IOC     (SFXGE_IOC | 0x10)
 121 
 122 /* VPD */
 123 
 124 #define SFXGE_VPD_IOC   (SFXGE_IOC | 0x11)
 125 
 126 #define SFXGE_VPD_MAX_PAYLOAD 0x100
 127 
 128 typedef struct sfxge_vpd_ioc_s {
 129         uint8_t         svi_op;
 130         uint8_t         svi_tag;
 131         uint16_t        svi_keyword;
 132         uint8_t         svi_len; /* In or out */
 133         uint8_t         svi_payload[SFXGE_VPD_MAX_PAYLOAD]; /* In or out */
 134 } sfxge_vpd_ioc_t;
 135 
 136 #define SFXGE_VPD_OP_GET_KEYWORD        0x00000001
 137 #define SFXGE_VPD_OP_SET_KEYWORD        0x00000002
 138 
 139 /* MCDIv2 */
 140 
 141 #define SFXGE_MCDI2_IOC (SFXGE_IOC | 0x12)
 142 
 143 typedef struct sfxge_mcdi2_ioc_s {
 144         uint8_t         smi_payload[1024];
 145         uint32_t        smi_cmd;
 146         uint32_t        smi_len; /* In and out */
 147         uint32_t        smi_rc;
 148 } sfxge_mcdi2_ioc_t;
 149 
 150 
 151 #pragma pack()
 152 
 153 #ifdef  __cplusplus
 154 }
 155 #endif
 156 
 157 #endif  /* _SYS_SFXGE_IOC_H */