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(4I) 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 */ 158