1 /*-
   2  * Copyright 2007-2013 Solarflare Communications Inc.  All rights reserved.
   3  *
   4  * Redistribution and use in source and binary forms, with or without
   5  * modification, are permitted provided that the following conditions
   6  * are met:
   7  * 1. Redistributions of source code must retain the above copyright
   8  *    notice, this list of conditions and the following disclaimer.
   9  * 2. Redistributions in binary form must reproduce the above copyright
  10  *    notice, this list of conditions and the following disclaimer in the
  11  *    documentation and/or other materials provided with the distribution.
  12  *
  13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS AND
  14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  23  * SUCH DAMAGE.
  24  */
  25 
  26 #ifndef _SYS_SFX7101_H
  27 #define _SYS_SFX7101_H
  28 
  29 #include "efx.h"
  30 
  31 #ifdef  __cplusplus
  32 extern "C" {
  33 #endif
  34 
  35 #if EFSYS_OPT_PHY_SFX7101
  36 
  37 #define SFX7101_LOOPBACK_MASK                                           \
  38             ((1 << EFX_LOOPBACK_PHY_XS) |                         \
  39             (1 << EFX_LOOPBACK_PCS) |                                     \
  40             (1 << EFX_LOOPBACK_PMA_PMD) |                         \
  41             FALCON_XMAC_LOOPBACK_MASK)
  42 
  43 #define SFX7101_LED_MASK                                                \
  44             ((1 << EFX_PHY_LED_OFF) |                                     \
  45             (1 << EFX_PHY_LED_ON) |                                       \
  46             (1 << EFX_PHY_LED_FLASH))
  47 
  48 #define SFX7101_NPROPS          0
  49 
  50 #define SFX7101_ADV_CAP_MASK                                            \
  51             ((1 << EFX_PHY_CAP_AN) |                                      \
  52             (1 << EFX_PHY_CAP_10000FDX) |                         \
  53             (1 << EFX_PHY_CAP_ASYM) |                                     \
  54             (1 << EFX_PHY_CAP_PAUSE))
  55 
  56 #define SFX7101_ADV_CAP_PERM    0
  57 
  58 #define SFX7101_BIST_MASK       0
  59 
  60 extern  __checkReturn   int
  61 sfx7101_power(
  62         __in            efx_nic_t *enp,
  63         __in            boolean_t on);
  64 
  65 extern  __checkReturn   int
  66 sfx7101_reset(
  67         __in            efx_nic_t *enp);
  68 
  69 extern  __checkReturn   int
  70 sfx7101_reconfigure(
  71         __in            efx_nic_t *enp);
  72 
  73 extern  __checkReturn   int
  74 sfx7101_verify(
  75         __in            efx_nic_t *enp);
  76 
  77 extern  __checkReturn   int
  78 sfx7101_uplink_check(
  79         __in            efx_nic_t *enp,
  80         __out           boolean_t *upp);
  81 
  82 extern          void
  83 sfx7101_uplink_reset(
  84         __in    efx_nic_t *enp);
  85 
  86 extern  __checkReturn   int
  87 sfx7101_downlink_check(
  88         __in            efx_nic_t *enp,
  89         __out           efx_link_mode_t *modep,
  90         __out           unsigned int *fcntlp,
  91         __out           uint32_t *lp_cap_maskp);
  92 
  93 extern  __checkReturn   int
  94 sfx7101_oui_get(
  95         __in            efx_nic_t *enp,
  96         __out           uint32_t *ouip);
  97 
  98 #if EFSYS_OPT_PHY_STATS
  99 
 100 /* START MKCONFIG GENERATED Sfx7101PhyHeaderStatsMask edaf3cd6dfd8b815 */
 101 #define SFX7101_STAT_MASK \
 102         (1ULL << EFX_PHY_STAT_OUI) | \
 103         (1ULL << EFX_PHY_STAT_PMA_PMD_LINK_UP) | \
 104         (1ULL << EFX_PHY_STAT_PMA_PMD_RX_FAULT) | \
 105         (1ULL << EFX_PHY_STAT_PMA_PMD_TX_FAULT) | \
 106         (1ULL << EFX_PHY_STAT_PMA_PMD_REV_MAJOR) | \
 107         (1ULL << EFX_PHY_STAT_PMA_PMD_REV_MINOR) | \
 108         (1ULL << EFX_PHY_STAT_PMA_PMD_REV_MICRO) | \
 109         (1ULL << EFX_PHY_STAT_PCS_LINK_UP) | \
 110         (1ULL << EFX_PHY_STAT_PCS_RX_FAULT) | \
 111         (1ULL << EFX_PHY_STAT_PCS_TX_FAULT) | \
 112         (1ULL << EFX_PHY_STAT_PCS_BER) | \
 113         (1ULL << EFX_PHY_STAT_PCS_BLOCK_ERRORS) | \
 114         (1ULL << EFX_PHY_STAT_PHY_XS_LINK_UP) | \
 115         (1ULL << EFX_PHY_STAT_PHY_XS_RX_FAULT) | \
 116         (1ULL << EFX_PHY_STAT_PHY_XS_TX_FAULT) | \
 117         (1ULL << EFX_PHY_STAT_PHY_XS_ALIGN) | \
 118         (1ULL << EFX_PHY_STAT_PHY_XS_SYNC_A) | \
 119         (1ULL << EFX_PHY_STAT_PHY_XS_SYNC_B) | \
 120         (1ULL << EFX_PHY_STAT_PHY_XS_SYNC_C) | \
 121         (1ULL << EFX_PHY_STAT_PHY_XS_SYNC_D) | \
 122         (1ULL << EFX_PHY_STAT_AN_LINK_UP) | \
 123         (1ULL << EFX_PHY_STAT_AN_MASTER) | \
 124         (1ULL << EFX_PHY_STAT_AN_LOCAL_RX_OK) | \
 125         (1ULL << EFX_PHY_STAT_AN_REMOTE_RX_OK) | \
 126         (1ULL << EFX_PHY_STAT_SNR_A) | \
 127         (1ULL << EFX_PHY_STAT_SNR_B) | \
 128         (1ULL << EFX_PHY_STAT_SNR_C) | \
 129         (1ULL << EFX_PHY_STAT_SNR_D)
 130 
 131 /* END MKCONFIG GENERATED Sfx7101PhyHeaderStatsMask */
 132 
 133 extern  __checkReturn                   int
 134 sfx7101_stats_update(
 135         __in                            efx_nic_t *enp,
 136         __in                            efsys_mem_t *esmp,
 137         __out_ecount(EFX_PHY_NSTATS)    uint32_t *stat);
 138 
 139 #endif  /* EFSYS_OPT_PHY_STATS */
 140 
 141 #if EFSYS_OPT_PHY_PROPS
 142 
 143 #if EFSYS_OPT_NAMES
 144 
 145 extern          const char __cs *
 146 sfx7101_prop_name(
 147         __in    efx_nic_t *enp,
 148         __in    unsigned int id);
 149 
 150 #endif
 151 
 152 extern  __checkReturn   int
 153 sfx7101_prop_get(
 154         __in            efx_nic_t *enp,
 155         __in            unsigned int id,
 156         __in            uint32_t flags,
 157         __out           uint32_t *valp);
 158 
 159 extern  __checkReturn   int
 160 sfx7101_prop_set(
 161         __in            efx_nic_t *enp,
 162         __in            unsigned int id,
 163         __in            uint32_t val);
 164 
 165 #endif  /* EFSYS_OPT_PHY_PROPS */
 166 
 167 #if EFSYS_OPT_NVRAM_SFX7101
 168 
 169 extern  __checkReturn           int
 170 sfx7101_nvram_size(
 171         __in                    efx_nic_t *enp,
 172         __out                   size_t *sizep);
 173 
 174 extern  __checkReturn           int
 175 sfx7101_nvram_get_version(
 176         __in                    efx_nic_t *enp,
 177         __out                   uint32_t *subtypep,
 178         __out_ecount(4)         uint16_t version[4]);
 179 
 180 extern  __checkReturn           int
 181 sfx7101_nvram_rw_start(
 182         __in                    efx_nic_t *enp,
 183         __out                   size_t *block_sizep);
 184 
 185 extern  __checkReturn           int
 186 sfx7101_nvram_read_chunk(
 187         __in                    efx_nic_t *enp,
 188         __in                    unsigned int offset,
 189         __out_bcount(size)      caddr_t data,
 190         __in                    size_t size);
 191 
 192 extern  __checkReturn           int
 193 sfx7101_nvram_erase(
 194         __in                    efx_nic_t *enp);
 195 
 196 extern  __checkReturn           int
 197 sfx7101_nvram_write_chunk(
 198         __in                    efx_nic_t *enp,
 199         __in                    unsigned int offset,
 200         __in_bcount(size)       caddr_t data,
 201         __in                    size_t size);
 202 
 203 extern                          void
 204 sfx7101_nvram_rw_finish(
 205         __in                    efx_nic_t *enp);
 206 
 207 extern const uint8_t * const sfx7101_loader;
 208 extern const size_t sfx7101_loader_size;
 209 
 210 #pragma pack(1)
 211 
 212 typedef struct sfx7001_firmware_header_s {
 213         efx_dword_t code_length;
 214         efx_dword_t destination_address;
 215         efx_word_t code_checksum;
 216         efx_word_t boot_config;
 217         efx_word_t header_csum;
 218         efx_byte_t reserved[18];
 219 } sfx7101_firmware_header_t;
 220 
 221 #pragma pack()
 222 
 223 #endif  /* EFSYS_OPT_NVRAM_SFX7101 */
 224 
 225 #endif  /* EFSYS_OPT_PHY_SFX7101 */
 226 
 227 #ifdef  __cplusplus
 228 }
 229 #endif
 230 
 231 #endif  /* _SYS_SFX7101_H */