iPXE
Functions | Variables
atl_hw.c File Reference

Marvell AQtion family network card driver, hardware-specific functions. More...

#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <byteswap.h>
#include <ipxe/pci.h>
#include "aqc1xx.h"
#include "atl_hw.h"
#include <compiler.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (BSD2)
 
int atl_hw_reset_flb_ (struct atl_nic *nic)
 
int atl_hw_reset_rbl_ (struct atl_nic *nic)
 
int atl_hw_reset (struct atl_nic *nic)
 
int atl_hw_start (struct atl_nic *nic)
 
int atl_hw_stop (struct atl_nic *nic)
 
int atl_hw_get_link (struct atl_nic *nic)
 
int atl_hw_read_mem (struct atl_nic *nic, uint32_t addr, uint32_t *buffer, uint32_t size)
 
int atl_hw_get_mac (struct atl_nic *nic, uint8_t *mac)
 

Variables

struct atl_hw_ops atl_hw
 

Detailed Description

Marvell AQtion family network card driver, hardware-specific functions.

Copyright(C) 2017-2024 Marvell

SPDX-License-Identifier: BSD-2-Clause

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition in file atl_hw.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( BSD2  )

◆ atl_hw_reset_flb_()

int atl_hw_reset_flb_ ( struct atl_nic nic)

Definition at line 45 of file atl_hw.c.

45  {
46  uint32_t val;
47  int k = 0;
48 
51 
52  /* Cleanup SPI */
55 
59 
60  /* Kickstart MAC */
64 
66 
67  /* Reset SPI again because of possible interrupted SPI burst */
71  /* Clear SPI reset state */
73 
74  /* MAC Kickstart */
76 
77  for (k = 0; k < 1000; k++) {
79 
80  flb_status = flb_status & FLB_LOAD_STS;
81  if ( flb_status )
82  break;
84  }
85  if ( k == 1000 ) {
86  DBGC (nic, "MAC kickstart failed\n" );
87  return -EIO;
88  }
89 
90  /* FW reset */
93 
95 
96  /* Global software reset*/
101 
104 
108 
109  for (k = 0; k < 1000; k++) {
110  u32 fw_state = ATL_READ_REG ( ATL_FW_VER );
111 
112  if ( fw_state )
113  break;
115  }
116  if ( k == 1000 ) {
117  DBGC ( nic, "FW kickstart failed\n" );
118  return -EIO;
119  }
120  /* Old FW requires fixed delay after init */
122 
123  return 0;
124 }
#define ATL_GEN_PROV9
Definition: atl_hw.h:60
#define ATL_MAC_PHY_CTRL_RST_DIS
Definition: atl_hw.h:63
void __asmcall int val
Definition: setjmp.h:12
#define FLB_LOAD_STS
Definition: atl_hw.h:40
#define ATL_MIF_PWR_GATING_EN_CTRL_RESET
Definition: atl_hw.h:65
#define ATL_GLB_CTRL_RST_DIS
Definition: atl_hw.h:34
#define ATL_RX_CTRL_RST_DIS
Definition: aqc1xx.h:80
#define DBGC(...)
Definition: compiler.h:505
#define ATL_GEN_PROV9_ENABLE
Definition: atl_hw.h:66
#define ATL_DELAY_15_MNS
Definition: atl_hw.h:76
#define ATL_MIF_PWR_GATING_EN_CTRL
Definition: atl_hw.h:54
#define ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_STALL
Definition: atl_hw.h:69
#define ATL_FW_VER
Definition: atl_hw.h:35
#define ATL_GLB_CTRL2_MAC_KICK_START
Definition: atl_hw.h:67
#define ATL_GBL_MCP_SEM1_RELEASE
Definition: atl_hw.h:49
#define ATL_TX_CTRL
Definition: aqc1xx.h:81
#define ATL_WRITE_REG(VAL, REG)
Definition: aqc1xx.h:180
#define ATL_DELAY_50_MNS
Definition: atl_hw.h:77
#define ATL_GLB_CTRL2_FW_RESET
Definition: atl_hw.h:68
#define ATL_GLB_MCP_SEM1
Definition: atl_hw.h:48
#define ATL_RX_CTRL
Definition: aqc1xx.h:79
#define ATL_DELAY_10_MNS
Definition: atl_hw.h:75
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181
static const uint32_t k[64]
MD5 constants.
Definition: md5.c:53
Definition: nic.h:49
unsigned int uint32_t
Definition: stdint.h:12
#define ATL_GLB_CTRL2
Definition: atl_hw.h:47
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
#define ATL_MPI_DAISY_CHAIN_STS
Definition: atl_hw.h:37
#define EIO
Input/output error.
Definition: errno.h:433
#define ATL_GBL_NVR_PROV4_RESET
Definition: atl_hw.h:57
#define ATL_TX_CTRL_RST_DIS
Definition: aqc1xx.h:82
#define ATL_MAC_PHY_CTRL
Definition: atl_hw.h:62
#define ATL_GLB_NVR_PROV4
Definition: atl_hw.h:56
#define ATL_GLB_STD_CTRL
Definition: atl_hw.h:33
uint32_t u32
Definition: stdint.h:23
#define ATL_GLB_STD_CTRL_RESET
Definition: atl_hw.h:71

References ATL_DELAY_10_MNS, ATL_DELAY_15_MNS, ATL_DELAY_50_MNS, ATL_FW_VER, ATL_GBL_MCP_SEM1_RELEASE, ATL_GBL_NVR_PROV4_RESET, ATL_GEN_PROV9, ATL_GEN_PROV9_ENABLE, ATL_GLB_CTRL2, ATL_GLB_CTRL2_FW_RESET, ATL_GLB_CTRL2_MAC_KICK_START, ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_STALL, ATL_GLB_CTRL_RST_DIS, ATL_GLB_MCP_SEM1, ATL_GLB_NVR_PROV4, ATL_GLB_STD_CTRL, ATL_GLB_STD_CTRL_RESET, ATL_MAC_PHY_CTRL, ATL_MAC_PHY_CTRL_RST_DIS, ATL_MIF_PWR_GATING_EN_CTRL, ATL_MIF_PWR_GATING_EN_CTRL_RESET, ATL_MPI_DAISY_CHAIN_STS, ATL_READ_REG, ATL_RX_CTRL, ATL_RX_CTRL_RST_DIS, ATL_TX_CTRL, ATL_TX_CTRL_RST_DIS, ATL_WRITE_REG, DBGC, EIO, FLB_LOAD_STS, k, mdelay(), and val.

Referenced by atl_hw_reset().

◆ atl_hw_reset_rbl_()

int atl_hw_reset_rbl_ ( struct atl_nic nic)

Definition at line 126 of file atl_hw.c.

126  {
127  uint32_t val, rbl_status;
128  int k;
129 
134 
135  /* Alter RBL status */
137 
138  /* Cleanup SPI */
141 
142  /* Global software reset*/
144  ATL_RX_CTRL );
146  ATL_TX_CTRL );
149 
153 
155 
156  /* Wait for RBL boot */
157  for ( k = 0; k < 1000; k++ ) {
158  rbl_status = ATL_READ_REG ( ATL_MPI_BOOT_EXIT_CODE ) & 0xFFFF;
159  if ( rbl_status && rbl_status != POISON_SIGN )
160  break;
162  }
163  if ( !rbl_status || rbl_status == POISON_SIGN ) {
164  DBGC ( nic, "RBL Restart failed\n" );
165  return -EIO;
166  }
167 
168  if ( rbl_status == FW_NOT_SUPPORT )
169  return -ENOTSUP;
170 
171  for ( k = 0; k < 1000; k++ ) {
172  u32 fw_state = ATL_READ_REG ( ATL_FW_VER );
173 
174  if ( fw_state )
175  break;
177  }
178  if ( k == 1000 ) {
179  DBGC ( nic, "FW kickstart failed\n" );
180  return -EIO;
181  }
182  /* Old FW requires fixed delay after init */
184 
185  return 0;
186 }
#define ATL_MAC_PHY_CTRL_RST_DIS
Definition: atl_hw.h:63
void __asmcall int val
Definition: setjmp.h:12
#define ATL_MPI_BOOT_EXIT_CODE
Definition: atl_hw.h:42
#define ATL_MIF_PWR_GATING_EN_CTRL_RESET
Definition: atl_hw.h:65
#define ATL_GLB_CTRL_RST_DIS
Definition: atl_hw.h:34
#define ATL_RX_CTRL_RST_DIS
Definition: aqc1xx.h:80
#define DBGC(...)
Definition: compiler.h:505
#define ATL_DELAY_15_MNS
Definition: atl_hw.h:76
#define ENOTSUP
Operation not supported.
Definition: errno.h:589
#define ATL_MIF_PWR_GATING_EN_CTRL
Definition: atl_hw.h:54
#define ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_STALL
Definition: atl_hw.h:69
#define ATL_FW_VER
Definition: atl_hw.h:35
#define ATL_GBL_MCP_SEM1_RELEASE
Definition: atl_hw.h:49
#define ATL_TX_CTRL
Definition: aqc1xx.h:81
#define FW_NOT_SUPPORT
Definition: atl_hw.h:81
#define ATL_WRITE_REG(VAL, REG)
Definition: aqc1xx.h:180
#define ATL_GLB_MCP_SEM1
Definition: atl_hw.h:48
#define ATL_RX_CTRL
Definition: aqc1xx.h:79
#define ATL_DELAY_10_MNS
Definition: atl_hw.h:75
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181
static const uint32_t k[64]
MD5 constants.
Definition: md5.c:53
Definition: nic.h:49
unsigned int uint32_t
Definition: stdint.h:12
#define ATL_GLB_CTRL2
Definition: atl_hw.h:47
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
#define POISON_SIGN
Definition: atl_hw.h:80
#define EIO
Input/output error.
Definition: errno.h:433
#define ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_NORMAL
Definition: atl_hw.h:70
#define ATL_GBL_NVR_PROV4_RESET
Definition: atl_hw.h:57
#define ATL_TX_CTRL_RST_DIS
Definition: aqc1xx.h:82
#define ATL_MAC_PHY_CTRL
Definition: atl_hw.h:62
#define ATL_GLB_NVR_PROV4
Definition: atl_hw.h:56
#define ATL_GLB_STD_CTRL
Definition: atl_hw.h:33
uint32_t u32
Definition: stdint.h:23
#define ATL_GLB_STD_CTRL_RESET
Definition: atl_hw.h:71

References ATL_DELAY_10_MNS, ATL_DELAY_15_MNS, ATL_FW_VER, ATL_GBL_MCP_SEM1_RELEASE, ATL_GBL_NVR_PROV4_RESET, ATL_GLB_CTRL2, ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_NORMAL, ATL_GLB_CTRL2_MBOX_ERR_UP_RUN_STALL, ATL_GLB_CTRL_RST_DIS, ATL_GLB_MCP_SEM1, ATL_GLB_NVR_PROV4, ATL_GLB_STD_CTRL, ATL_GLB_STD_CTRL_RESET, ATL_MAC_PHY_CTRL, ATL_MAC_PHY_CTRL_RST_DIS, ATL_MIF_PWR_GATING_EN_CTRL, ATL_MIF_PWR_GATING_EN_CTRL_RESET, ATL_MPI_BOOT_EXIT_CODE, ATL_READ_REG, ATL_RX_CTRL, ATL_RX_CTRL_RST_DIS, ATL_TX_CTRL, ATL_TX_CTRL_RST_DIS, ATL_WRITE_REG, DBGC, EIO, ENOTSUP, FW_NOT_SUPPORT, k, mdelay(), POISON_SIGN, and val.

Referenced by atl_hw_reset().

◆ atl_hw_reset()

int atl_hw_reset ( struct atl_nic nic)

Definition at line 188 of file atl_hw.c.

188  {
189  uint32_t boot_exit_code = 0;
190  uint32_t k;
191  int rbl_enabled;
193  uint32_t sem_timeout;
194 
195  for ( k = 0; k < 1000; ++k ) {
197  boot_exit_code = ATL_READ_REG ( ATL_MPI_BOOT_EXIT_CODE );
198  if ( flb_status != ATL_MPI_DAISY_CHAIN_STS_ERROR_STATUS ||
199  boot_exit_code != 0 )
200  break;
201  }
202 
203  if ( k == 1000 ) {
204  DBGC ( nic, "Neither RBL nor FLB firmware started\n" );
205  return -ENOTSUP;
206  }
207 
208  rbl_enabled = ( boot_exit_code != 0 );
209 
211  if ( ( ( fw_ver >> 24 ) & 0xFF ) >= 4 ) {
212  sem_timeout = ATL_READ_REG ( ATL_SEM_TIMEOUT );
213  if ( sem_timeout > ATL_SEM_MAX_TIMEOUT )
214  sem_timeout = ATL_SEM_MAX_TIMEOUT;
215 
216  for ( k = 0; k < sem_timeout; ++k ) {
217  if ( ATL_READ_REG ( ATL_GLB_MCP_SEM4 ) )
218  break;
219 
221  }
222  for ( k = 0; k < sem_timeout; ++k ) {
223  if ( ATL_READ_REG ( ATL_GLB_MCP_SEM5 ) )
224  break;
225 
227  }
228  }
229 
230 
231  if ( rbl_enabled )
232  return atl_hw_reset_rbl_ ( nic );
233  else
234  return atl_hw_reset_flb_ ( nic );
235 }
#define ATL_MPI_BOOT_EXIT_CODE
Definition: atl_hw.h:42
#define ATL_GLB_MCP_SEM5
Definition: atl_hw.h:52
__be32 fw_ver
Definition: CIB_PRM.h:33
#define DBGC(...)
Definition: compiler.h:505
#define ATL_GLB_MCP_SEM4
Definition: atl_hw.h:51
#define ENOTSUP
Operation not supported.
Definition: errno.h:589
#define ATL_FW_VER
Definition: atl_hw.h:35
int atl_hw_reset_flb_(struct atl_nic *nic)
Definition: atl_hw.c:45
#define ATL_SEM_MAX_TIMEOUT
Definition: atl_hw.h:45
#define ATL_DELAY_1_MNS
Definition: atl_hw.h:74
#define ATL_MPI_DAISY_CHAIN_STS_ERROR_STATUS
Definition: atl_hw.h:72
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181
static const uint32_t k[64]
MD5 constants.
Definition: md5.c:53
Definition: nic.h:49
unsigned int uint32_t
Definition: stdint.h:12
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
#define ATL_MPI_DAISY_CHAIN_STS
Definition: atl_hw.h:37
int atl_hw_reset_rbl_(struct atl_nic *nic)
Definition: atl_hw.c:126
#define ATL_SEM_TIMEOUT
Definition: atl_hw.h:44

References ATL_DELAY_1_MNS, ATL_FW_VER, ATL_GLB_MCP_SEM4, ATL_GLB_MCP_SEM5, atl_hw_reset_flb_(), atl_hw_reset_rbl_(), ATL_MPI_BOOT_EXIT_CODE, ATL_MPI_DAISY_CHAIN_STS, ATL_MPI_DAISY_CHAIN_STS_ERROR_STATUS, ATL_READ_REG, ATL_SEM_MAX_TIMEOUT, ATL_SEM_TIMEOUT, DBGC, ENOTSUP, fw_ver, k, and mdelay().

◆ atl_hw_start()

int atl_hw_start ( struct atl_nic nic)

Definition at line 237 of file atl_hw.c.

237  {
239  return 0;
240 }
#define ATL_LINK_ADV_AUTONEG
Definition: aqc1xx.h:160
#define ATL_LINK_ADV
Definition: aqc1xx.h:158
#define ATL_WRITE_REG(VAL, REG)
Definition: aqc1xx.h:180

References ATL_LINK_ADV, ATL_LINK_ADV_AUTONEG, and ATL_WRITE_REG.

◆ atl_hw_stop()

int atl_hw_stop ( struct atl_nic nic)

Definition at line 242 of file atl_hw.c.

242  {
244  return 0;
245 }
#define ATL_SHUT_LINK
Definition: aqc1xx.h:159
#define ATL_LINK_ADV
Definition: aqc1xx.h:158
#define ATL_WRITE_REG(VAL, REG)
Definition: aqc1xx.h:180

References ATL_LINK_ADV, ATL_SHUT_LINK, and ATL_WRITE_REG.

◆ atl_hw_get_link()

int atl_hw_get_link ( struct atl_nic nic)

Definition at line 247 of file atl_hw.c.

247  {
248  return ( ATL_READ_REG ( ATL_LINK_ST) & ATL_LINK_ADV_AUTONEG ) != 0;
249 }
#define ATL_LINK_ADV_AUTONEG
Definition: aqc1xx.h:160
#define ATL_LINK_ST
Definition: aqc1xx.h:162
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181

References ATL_LINK_ADV_AUTONEG, ATL_LINK_ST, and ATL_READ_REG.

◆ atl_hw_read_mem()

int atl_hw_read_mem ( struct atl_nic nic,
uint32_t  addr,
uint32_t buffer,
uint32_t  size 
)

Definition at line 251 of file atl_hw.c.

252  {
253  uint32_t i;
254 
255  for ( i = 0; i < 100; ++i ) {
256  if ( ATL_READ_REG( ATL_SEM_RAM ) )
257  break;
259  }
260  if ( i == 100 ) {
261  DBGC ( nic, "Semaphore Register not set\n" );
262  return -EIO;
263  }
264 
266 
267  for ( i = 0; i < size; ++i, addr += 4 ) {
268  uint32_t j;
269 
271  for ( j = 0; j < 10000; ++j ) {
272  if ( ATL_READ_REG (ATL_MBOX_CTRL3 ) != addr )
273  break;
275  }
276  if ( j == 10000 ) {
277  DBGC ( nic, "Reading from CTRL3 Register Failed\n" );
278  return -EIO;
279  }
280 
282  }
283 
285 
286  return 0;
287 }
#define ATL_MBOX_CTRL3
Definition: aqc1xx.h:173
uint16_t size
Buffer size.
Definition: dwmac.h:14
#define DBGC(...)
Definition: compiler.h:505
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
Definition: netvsc.h:16
#define ATL_MBOX_CTRL1
Definition: aqc1xx.h:170
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
Definition: timer.c:60
#define ATL_WRITE_REG(VAL, REG)
Definition: aqc1xx.h:180
#define ATL_DELAY_1_MNS
Definition: atl_hw.h:74
uint32_t addr
Buffer address.
Definition: dwmac.h:20
#define ATL_SEM_RAM_RESET
Definition: aqc1xx.h:166
#define ATL_DELAY_10_MNS
Definition: atl_hw.h:75
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181
Definition: nic.h:49
unsigned int uint32_t
Definition: stdint.h:12
#define ATL_MBOX_CTRL5
Definition: aqc1xx.h:174
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
#define EIO
Input/output error.
Definition: errno.h:433
#define ATL_SEM_RAM
Definition: aqc1xx.h:165
#define ATL_MBOX_CTRL1_START_MBOX_OPT
Definition: aqc1xx.h:171

References addr, ATL_DELAY_10_MNS, ATL_DELAY_1_MNS, ATL_MBOX_CTRL1, ATL_MBOX_CTRL1_START_MBOX_OPT, ATL_MBOX_CTRL3, ATL_MBOX_CTRL5, ATL_READ_REG, ATL_SEM_RAM, ATL_SEM_RAM_RESET, ATL_WRITE_REG, buffer, DBGC, EIO, mdelay(), size, and udelay().

Referenced by atl_hw_get_mac().

◆ atl_hw_get_mac()

int atl_hw_get_mac ( struct atl_nic nic,
uint8_t mac 
)

Definition at line 289 of file atl_hw.c.

289  {
290  uint32_t mac_addr[2] = {0};
291  int err = 0;
292  uint32_t efuse_addr = ATL_READ_REG ( ATL_GLB_MCP_SP26 );
293 
294  if ( efuse_addr != 0) {
295  uint32_t mac_efuse_addr = efuse_addr + 40 * sizeof ( uint32_t );
296  err = atl_hw_read_mem ( nic, mac_efuse_addr, mac_addr, 2 );
297  if ( err != 0 )
298  return err;
299 
300  mac_addr[0] = cpu_to_be32 ( mac_addr[0] );
301  mac_addr[1] = cpu_to_be32 ( mac_addr[1] );
302 
303  memcpy ( mac, ( uint8_t * )mac_addr, ATL_MAC_ADDRESS_SIZE );
304  }
305  return 0;
306 }
uint8_t mac[ETH_ALEN]
MAC address.
Definition: ena.h:24
#define ATL_MAC_ADDRESS_SIZE
Definition: atl_hw.h:79
void * memcpy(void *dest, const void *src, size_t len) __nonnull
unsigned char uint8_t
Definition: stdint.h:10
#define ATL_READ_REG(REG)
Definition: aqc1xx.h:181
Definition: nic.h:49
unsigned int uint32_t
Definition: stdint.h:12
#define cpu_to_be32(value)
Definition: byteswap.h:110
int atl_hw_read_mem(struct atl_nic *nic, uint32_t addr, uint32_t *buffer, uint32_t size)
Definition: atl_hw.c:251
#define ATL_GLB_MCP_SP26
Definition: atl_hw.h:53

References ATL_GLB_MCP_SP26, atl_hw_read_mem(), ATL_MAC_ADDRESS_SIZE, ATL_READ_REG, cpu_to_be32, mac, and memcpy().

Variable Documentation

◆ atl_hw

struct atl_hw_ops atl_hw
Initial value:
= {
.reset = atl_hw_reset,
.start = atl_hw_start,
.stop = atl_hw_stop,
.get_link = atl_hw_get_link,
.get_mac = atl_hw_get_mac,
}
int atl_hw_start(struct atl_nic *nic)
Definition: atl_hw.c:237
int atl_hw_get_link(struct atl_nic *nic)
Definition: atl_hw.c:247
int atl_hw_get_mac(struct atl_nic *nic, uint8_t *mac)
Definition: atl_hw.c:289
int atl_hw_reset(struct atl_nic *nic)
Definition: atl_hw.c:188
int atl_hw_stop(struct atl_nic *nic)
Definition: atl_hw.c:242

Definition at line 308 of file atl_hw.c.

Referenced by atl_probe().