701 lines
19 KiB
ReStructuredText
701 lines
19 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0+
|
|
|
|
==============================================================
|
|
Linux Driver for the Synopsys(R) Ethernet Controllers "stmmac"
|
|
==============================================================
|
|
|
|
Authors: Giuseppe Cavallaro <peppe.cavallaro@st.com>,
|
|
Alexandre Torgue <alexandre.torgue@st.com>, Jose Abreu <joabreu@synopsys.com>
|
|
|
|
Contents
|
|
========
|
|
|
|
- In This Release
|
|
- Feature List
|
|
- Kernel Configuration
|
|
- Command Line Parameters
|
|
- Driver Information and Notes
|
|
- Debug Information
|
|
- Support
|
|
|
|
In This Release
|
|
===============
|
|
|
|
This file describes the stmmac Linux Driver for all the Synopsys(R) Ethernet
|
|
Controllers.
|
|
|
|
Currently, this network device driver is for all STi embedded MAC/GMAC
|
|
(i.e. 7xxx/5xxx SoCs), SPEAr (arm), Loongson1B (mips) and XILINX XC2V3000
|
|
FF1152AMT0221 D1215994A VIRTEX FPGA board. The Synopsys Ethernet QoS 5.0 IPK
|
|
is also supported.
|
|
|
|
DesignWare(R) Cores Ethernet MAC 10/100/1000 Universal version 3.70a
|
|
(and older) and DesignWare(R) Cores Ethernet Quality-of-Service version 4.0
|
|
(and upper) have been used for developing this driver as well as
|
|
DesignWare(R) Cores XGMAC - 10G Ethernet MAC and DesignWare(R) Cores
|
|
Enterprise MAC - 100G Ethernet MAC.
|
|
|
|
This driver supports both the platform bus and PCI.
|
|
|
|
This driver includes support for the following Synopsys(R) DesignWare(R)
|
|
Cores Ethernet Controllers and corresponding minimum and maximum versions:
|
|
|
|
+-------------------------------+--------------+--------------+--------------+
|
|
| Controller Name | Min. Version | Max. Version | Abbrev. Name |
|
|
+===============================+==============+==============+==============+
|
|
| Ethernet MAC Universal | N/A | 3.73a | GMAC |
|
|
+-------------------------------+--------------+--------------+--------------+
|
|
| Ethernet Quality-of-Service | 4.00a | N/A | GMAC4+ |
|
|
+-------------------------------+--------------+--------------+--------------+
|
|
| XGMAC - 10G Ethernet MAC | 2.10a | N/A | XGMAC2+ |
|
|
+-------------------------------+--------------+--------------+--------------+
|
|
| XLGMAC - 100G Ethernet MAC | 2.00a | N/A | XLGMAC2+ |
|
|
+-------------------------------+--------------+--------------+--------------+
|
|
|
|
For questions related to hardware requirements, refer to the documentation
|
|
supplied with your Ethernet adapter. All hardware requirements listed apply
|
|
to use with Linux.
|
|
|
|
Feature List
|
|
============
|
|
|
|
The following features are available in this driver:
|
|
- GMII/MII/RGMII/SGMII/RMII/XGMII/XLGMII Interface
|
|
- Half-Duplex / Full-Duplex Operation
|
|
- Energy Efficient Ethernet (EEE)
|
|
- IEEE 802.3x PAUSE Packets (Flow Control)
|
|
- RMON/MIB Counters
|
|
- IEEE 1588 Timestamping (PTP)
|
|
- Pulse-Per-Second Output (PPS)
|
|
- MDIO Clause 22 / Clause 45 Interface
|
|
- MAC Loopback
|
|
- ARP Offloading
|
|
- Automatic CRC / PAD Insertion and Checking
|
|
- Checksum Offload for Received and Transmitted Packets
|
|
- Standard or Jumbo Ethernet Packets
|
|
- Source Address Insertion / Replacement
|
|
- VLAN TAG Insertion / Replacement / Deletion / Filtering (HASH and PERFECT)
|
|
- Programmable TX and RX Watchdog and Coalesce Settings
|
|
- Destination Address Filtering (PERFECT)
|
|
- HASH Filtering (Multicast)
|
|
- Layer 3 / Layer 4 Filtering
|
|
- Remote Wake-Up Detection
|
|
- Receive Side Scaling (RSS)
|
|
- Frame Preemption for TX and RX
|
|
- Programmable Burst Length, Threshold, Queue Size
|
|
- Multiple Queues (up to 8)
|
|
- Multiple Scheduling Algorithms (TX: WRR, DWRR, WFQ, SP, CBS, EST, TBS;
|
|
RX: WRR, SP)
|
|
- Flexible RX Parser
|
|
- TCP / UDP Segmentation Offload (TSO, USO)
|
|
- Split Header (SPH)
|
|
- Safety Features (ECC Protection, Data Parity Protection)
|
|
- Selftests using Ethtool
|
|
|
|
Kernel Configuration
|
|
====================
|
|
|
|
The kernel configuration option is ``CONFIG_STMMAC_ETH``:
|
|
- ``CONFIG_STMMAC_PLATFORM``: is to enable the platform driver.
|
|
- ``CONFIG_STMMAC_PCI``: is to enable the pci driver.
|
|
|
|
Command Line Parameters
|
|
=======================
|
|
|
|
If the driver is built as a module the following optional parameters are used
|
|
by entering them on the command line with the modprobe command using this
|
|
syntax (e.g. for PCI module)::
|
|
|
|
modprobe stmmac_pci [<option>=<VAL1>,<VAL2>,...]
|
|
|
|
Driver parameters can be also passed in command line by using::
|
|
|
|
stmmaceth=watchdog:100,chain_mode=1
|
|
|
|
The default value for each parameter is generally the recommended setting,
|
|
unless otherwise noted.
|
|
|
|
watchdog
|
|
--------
|
|
:Valid Range: 5000-None
|
|
:Default Value: 5000
|
|
|
|
This parameter overrides the transmit timeout in milliseconds.
|
|
|
|
debug
|
|
-----
|
|
:Valid Range: 0-16 (0=none,...,16=all)
|
|
:Default Value: 0
|
|
|
|
This parameter adjusts the level of debug messages displayed in the system
|
|
logs.
|
|
|
|
phyaddr
|
|
-------
|
|
:Valid Range: 0-31
|
|
:Default Value: -1
|
|
|
|
This parameter overrides the physical address of the PHY device.
|
|
|
|
flow_ctrl
|
|
---------
|
|
:Valid Range: 0-3 (0=off,1=rx,2=tx,3=rx/tx)
|
|
:Default Value: 3
|
|
|
|
This parameter changes the default Flow Control ability.
|
|
|
|
pause
|
|
-----
|
|
:Valid Range: 0-65535
|
|
:Default Value: 65535
|
|
|
|
This parameter changes the default Flow Control Pause time.
|
|
|
|
tc
|
|
--
|
|
:Valid Range: 64-256
|
|
:Default Value: 64
|
|
|
|
This parameter changes the default HW FIFO Threshold control value.
|
|
|
|
buf_sz
|
|
------
|
|
:Valid Range: 1536-16384
|
|
:Default Value: 1536
|
|
|
|
This parameter changes the default RX DMA packet buffer size.
|
|
|
|
eee_timer
|
|
---------
|
|
:Valid Range: 0-None
|
|
:Default Value: 1000
|
|
|
|
This parameter changes the default LPI TX Expiration time in milliseconds.
|
|
|
|
chain_mode
|
|
----------
|
|
:Valid Range: 0-1 (0=off,1=on)
|
|
:Default Value: 0
|
|
|
|
This parameter changes the default mode of operation from Ring Mode to
|
|
Chain Mode.
|
|
|
|
Driver Information and Notes
|
|
============================
|
|
|
|
Transmit Process
|
|
----------------
|
|
|
|
The xmit method is invoked when the kernel needs to transmit a packet; it sets
|
|
the descriptors in the ring and informs the DMA engine that there is a packet
|
|
ready to be transmitted.
|
|
|
|
By default, the driver sets the ``NETIF_F_SG`` bit in the features field of
|
|
the ``net_device`` structure, enabling the scatter-gather feature. This is
|
|
true on chips and configurations where the checksum can be done in hardware.
|
|
|
|
Once the controller has finished transmitting the packet, timer will be
|
|
scheduled to release the transmit resources.
|
|
|
|
Receive Process
|
|
---------------
|
|
|
|
When one or more packets are received, an interrupt happens. The interrupts
|
|
are not queued, so the driver has to scan all the descriptors in the ring
|
|
during the receive process.
|
|
|
|
This is based on NAPI, so the interrupt handler signals only if there is work
|
|
to be done, and it exits. Then the poll method will be scheduled at some
|
|
future point.
|
|
|
|
The incoming packets are stored, by the DMA, in a list of pre-allocated socket
|
|
buffers in order to avoid the memcpy (zero-copy).
|
|
|
|
Interrupt Mitigation
|
|
--------------------
|
|
|
|
The driver is able to mitigate the number of its DMA interrupts using NAPI for
|
|
the reception on chips older than the 3.50. New chips have an HW RX Watchdog
|
|
used for this mitigation.
|
|
|
|
Mitigation parameters can be tuned by ethtool.
|
|
|
|
WoL
|
|
---
|
|
|
|
Wake up on Lan feature through Magic and Unicast frames are supported for the
|
|
GMAC, GMAC4/5 and XGMAC core.
|
|
|
|
DMA Descriptors
|
|
---------------
|
|
|
|
Driver handles both normal and alternate descriptors. The latter has been only
|
|
tested on DesignWare(R) Cores Ethernet MAC Universal version 3.41a and later.
|
|
|
|
stmmac supports DMA descriptor to operate both in dual buffer (RING) and
|
|
linked-list(CHAINED) mode. In RING each descriptor points to two data buffer
|
|
pointers whereas in CHAINED mode they point to only one data buffer pointer.
|
|
RING mode is the default.
|
|
|
|
In CHAINED mode each descriptor will have pointer to next descriptor in the
|
|
list, hence creating the explicit chaining in the descriptor itself, whereas
|
|
such explicit chaining is not possible in RING mode.
|
|
|
|
Extended Descriptors
|
|
--------------------
|
|
|
|
The extended descriptors give us information about the Ethernet payload when
|
|
it is carrying PTP packets or TCP/UDP/ICMP over IP. These are not available on
|
|
GMAC Synopsys(R) chips older than the 3.50. At probe time the driver will
|
|
decide if these can be actually used. This support also is mandatory for PTPv2
|
|
because the extra descriptors are used for saving the hardware timestamps and
|
|
Extended Status.
|
|
|
|
Ethtool Support
|
|
---------------
|
|
|
|
Ethtool is supported. For example, driver statistics (including RMON),
|
|
internal errors can be taken using::
|
|
|
|
ethtool -S ethX
|
|
|
|
Ethtool selftests are also supported. This allows to do some early sanity
|
|
checks to the HW using MAC and PHY loopback mechanisms::
|
|
|
|
ethtool -t ethX
|
|
|
|
Jumbo and Segmentation Offloading
|
|
---------------------------------
|
|
|
|
Jumbo frames are supported and tested for the GMAC. The GSO has been also
|
|
added but it's performed in software. LRO is not supported.
|
|
|
|
TSO Support
|
|
-----------
|
|
|
|
TSO (TCP Segmentation Offload) feature is supported by GMAC > 4.x and XGMAC
|
|
chip family. When a packet is sent through TCP protocol, the TCP stack ensures
|
|
that the SKB provided to the low level driver (stmmac in our case) matches
|
|
with the maximum frame len (IP header + TCP header + payload <= 1500 bytes
|
|
(for MTU set to 1500)). It means that if an application using TCP want to send
|
|
a packet which will have a length (after adding headers) > 1514 the packet
|
|
will be split in several TCP packets: The data payload is split and headers
|
|
(TCP/IP ..) are added. It is done by software.
|
|
|
|
When TSO is enabled, the TCP stack doesn't care about the maximum frame length
|
|
and provide SKB packet to stmmac as it is. The GMAC IP will have to perform
|
|
the segmentation by it self to match with maximum frame length.
|
|
|
|
This feature can be enabled in device tree through ``snps,tso`` entry.
|
|
|
|
Energy Efficient Ethernet
|
|
-------------------------
|
|
|
|
Energy Efficient Ethernet (EEE) enables IEEE 802.3 MAC sublayer along with a
|
|
family of Physical layer to operate in the Low Power Idle (LPI) mode. The EEE
|
|
mode supports the IEEE 802.3 MAC operation at 100Mbps, 1000Mbps and 1Gbps.
|
|
|
|
The LPI mode allows power saving by switching off parts of the communication
|
|
device functionality when there is no data to be transmitted & received.
|
|
The system on both the side of the link can disable some functionalities and
|
|
save power during the period of low-link utilization. The MAC controls whether
|
|
the system should enter or exit the LPI mode and communicate this to PHY.
|
|
|
|
As soon as the interface is opened, the driver verifies if the EEE can be
|
|
supported. This is done by looking at both the DMA HW capability register and
|
|
the PHY devices MCD registers.
|
|
|
|
To enter in TX LPI mode the driver needs to have a software timer that enable
|
|
and disable the LPI mode when there is nothing to be transmitted.
|
|
|
|
Precision Time Protocol (PTP)
|
|
-----------------------------
|
|
|
|
The driver supports the IEEE 1588-2002, Precision Time Protocol (PTP), which
|
|
enables precise synchronization of clocks in measurement and control systems
|
|
implemented with technologies such as network communication.
|
|
|
|
In addition to the basic timestamp features mentioned in IEEE 1588-2002
|
|
Timestamps, new GMAC cores support the advanced timestamp features.
|
|
IEEE 1588-2008 can be enabled when configuring the Kernel.
|
|
|
|
SGMII/RGMII Support
|
|
-------------------
|
|
|
|
New GMAC devices provide own way to manage RGMII/SGMII. This information is
|
|
available at run-time by looking at the HW capability register. This means
|
|
that the stmmac can manage auto-negotiation and link status w/o using the
|
|
PHYLIB stuff. In fact, the HW provides a subset of extended registers to
|
|
restart the ANE, verify Full/Half duplex mode and Speed. Thanks to these
|
|
registers, it is possible to look at the Auto-negotiated Link Parter Ability.
|
|
|
|
Physical
|
|
--------
|
|
|
|
The driver is compatible with Physical Abstraction Layer to be connected with
|
|
PHY and GPHY devices.
|
|
|
|
Platform Information
|
|
--------------------
|
|
|
|
Several information can be passed through the platform and device-tree.
|
|
|
|
::
|
|
|
|
struct plat_stmmacenet_data {
|
|
|
|
1) Bus identifier::
|
|
|
|
int bus_id;
|
|
|
|
2) PHY Physical Address. If set to -1 the driver will pick the first PHY it
|
|
finds::
|
|
|
|
int phy_addr;
|
|
|
|
3) PHY Device Interface::
|
|
|
|
int interface;
|
|
|
|
4) Specific platform fields for the MDIO bus::
|
|
|
|
struct stmmac_mdio_bus_data *mdio_bus_data;
|
|
|
|
5) Internal DMA parameters::
|
|
|
|
struct stmmac_dma_cfg *dma_cfg;
|
|
|
|
6) Fixed CSR Clock Range selection::
|
|
|
|
int clk_csr;
|
|
|
|
7) HW uses the GMAC core::
|
|
|
|
int has_gmac;
|
|
|
|
8) If set the MAC will use Enhanced Descriptors::
|
|
|
|
int enh_desc;
|
|
|
|
9) Core is able to perform TX Checksum and/or RX Checksum in HW::
|
|
|
|
int tx_coe;
|
|
int rx_coe;
|
|
|
|
11) Some HWs are not able to perform the csum in HW for over-sized frames due
|
|
to limited buffer sizes. Setting this flag the csum will be done in SW on
|
|
JUMBO frames::
|
|
|
|
int bugged_jumbo;
|
|
|
|
12) Core has the embedded power module::
|
|
|
|
int pmt;
|
|
|
|
13) Force DMA to use the Store and Forward mode or Threshold mode::
|
|
|
|
int force_sf_dma_mode;
|
|
int force_thresh_dma_mode;
|
|
|
|
15) Force to disable the RX Watchdog feature and switch to NAPI mode::
|
|
|
|
int riwt_off;
|
|
|
|
16) Limit the maximum operating speed and MTU::
|
|
|
|
int max_speed;
|
|
int maxmtu;
|
|
|
|
18) Number of Multicast/Unicast filters::
|
|
|
|
int multicast_filter_bins;
|
|
int unicast_filter_entries;
|
|
|
|
20) Limit the maximum TX and RX FIFO size::
|
|
|
|
int tx_fifo_size;
|
|
int rx_fifo_size;
|
|
|
|
21) Use the specified number of TX and RX Queues::
|
|
|
|
u32 rx_queues_to_use;
|
|
u32 tx_queues_to_use;
|
|
|
|
22) Use the specified TX and RX scheduling algorithm::
|
|
|
|
u8 rx_sched_algorithm;
|
|
u8 tx_sched_algorithm;
|
|
|
|
23) Internal TX and RX Queue parameters::
|
|
|
|
struct stmmac_rxq_cfg rx_queues_cfg[MTL_MAX_RX_QUEUES];
|
|
struct stmmac_txq_cfg tx_queues_cfg[MTL_MAX_TX_QUEUES];
|
|
|
|
24) This callback is used for modifying some syscfg registers (on ST SoCs)
|
|
according to the link speed negotiated by the physical layer::
|
|
|
|
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
|
|
|
25) Callbacks used for calling a custom initialization; This is sometimes
|
|
necessary on some platforms (e.g. ST boxes) where the HW needs to have set
|
|
some PIO lines or system cfg registers. init/exit callbacks should not use
|
|
or modify platform data::
|
|
|
|
int (*init)(struct platform_device *pdev, void *priv);
|
|
void (*exit)(struct platform_device *pdev, void *priv);
|
|
|
|
26) Perform HW setup of the bus. For example, on some ST platforms this field
|
|
is used to configure the AMBA bridge to generate more efficient STBus traffic::
|
|
|
|
struct mac_device_info *(*setup)(void *priv);
|
|
void *bsp_priv;
|
|
|
|
27) Internal clocks and rates::
|
|
|
|
struct clk *stmmac_clk;
|
|
struct clk *pclk;
|
|
struct clk *clk_ptp_ref;
|
|
unsigned int clk_ptp_rate;
|
|
unsigned int clk_ref_rate;
|
|
s32 ptp_max_adj;
|
|
|
|
28) Main reset::
|
|
|
|
struct reset_control *stmmac_rst;
|
|
|
|
29) AXI Internal Parameters::
|
|
|
|
struct stmmac_axi *axi;
|
|
|
|
30) HW uses GMAC>4 cores::
|
|
|
|
int has_gmac4;
|
|
|
|
31) HW is sun8i based::
|
|
|
|
bool has_sun8i;
|
|
|
|
32) Enables TSO feature::
|
|
|
|
bool tso_en;
|
|
|
|
33) Enables Receive Side Scaling (RSS) feature::
|
|
|
|
int rss_en;
|
|
|
|
34) MAC Port selection::
|
|
|
|
int mac_port_sel_speed;
|
|
|
|
35) Enables TX LPI Clock Gating::
|
|
|
|
bool en_tx_lpi_clockgating;
|
|
|
|
36) HW uses XGMAC>2.10 cores::
|
|
|
|
int has_xgmac;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
For MDIO bus data, we have:
|
|
|
|
::
|
|
|
|
struct stmmac_mdio_bus_data {
|
|
|
|
1) PHY mask passed when MDIO bus is registered::
|
|
|
|
unsigned int phy_mask;
|
|
|
|
2) List of IRQs, one per PHY::
|
|
|
|
int *irqs;
|
|
|
|
3) If IRQs is NULL, use this for probed PHY::
|
|
|
|
int probed_phy_irq;
|
|
|
|
4) Set to true if PHY needs reset::
|
|
|
|
bool needs_reset;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
For DMA engine configuration, we have:
|
|
|
|
::
|
|
|
|
struct stmmac_dma_cfg {
|
|
|
|
1) Programmable Burst Length (TX and RX)::
|
|
|
|
int pbl;
|
|
|
|
2) If set, DMA TX / RX will use this value rather than pbl::
|
|
|
|
int txpbl;
|
|
int rxpbl;
|
|
|
|
3) Enable 8xPBL::
|
|
|
|
bool pblx8;
|
|
|
|
4) Enable Fixed or Mixed burst::
|
|
|
|
int fixed_burst;
|
|
int mixed_burst;
|
|
|
|
5) Enable Address Aligned Beats::
|
|
|
|
bool aal;
|
|
|
|
6) Enable Enhanced Addressing (> 32 bits)::
|
|
|
|
bool eame;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
For DMA AXI parameters, we have:
|
|
|
|
::
|
|
|
|
struct stmmac_axi {
|
|
|
|
1) Enable AXI LPI::
|
|
|
|
bool axi_lpi_en;
|
|
bool axi_xit_frm;
|
|
|
|
2) Set AXI Write / Read maximum outstanding requests::
|
|
|
|
u32 axi_wr_osr_lmt;
|
|
u32 axi_rd_osr_lmt;
|
|
|
|
3) Set AXI 4KB bursts::
|
|
|
|
bool axi_kbbe;
|
|
|
|
4) Set AXI maximum burst length map::
|
|
|
|
u32 axi_blen[AXI_BLEN];
|
|
|
|
5) Set AXI Fixed burst / mixed burst::
|
|
|
|
bool axi_fb;
|
|
bool axi_mb;
|
|
|
|
6) Set AXI rebuild incrx mode::
|
|
|
|
bool axi_rb;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
For the RX Queues configuration, we have:
|
|
|
|
::
|
|
|
|
struct stmmac_rxq_cfg {
|
|
|
|
1) Mode to use (DCB or AVB)::
|
|
|
|
u8 mode_to_use;
|
|
|
|
2) DMA channel to use::
|
|
|
|
u32 chan;
|
|
|
|
3) Packet routing, if applicable::
|
|
|
|
u8 pkt_route;
|
|
|
|
4) Use priority routing, and priority to route::
|
|
|
|
bool use_prio;
|
|
u32 prio;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
For the TX Queues configuration, we have:
|
|
|
|
::
|
|
|
|
struct stmmac_txq_cfg {
|
|
|
|
1) Queue weight in scheduler::
|
|
|
|
u32 weight;
|
|
|
|
2) Mode to use (DCB or AVB)::
|
|
|
|
u8 mode_to_use;
|
|
|
|
3) Credit Base Shaper Parameters::
|
|
|
|
u32 send_slope;
|
|
u32 idle_slope;
|
|
u32 high_credit;
|
|
u32 low_credit;
|
|
|
|
4) Use priority scheduling, and priority::
|
|
|
|
bool use_prio;
|
|
u32 prio;
|
|
|
|
::
|
|
|
|
}
|
|
|
|
Device Tree Information
|
|
-----------------------
|
|
|
|
Please refer to the following document:
|
|
Documentation/devicetree/bindings/net/snps,dwmac.yaml
|
|
|
|
HW Capabilities
|
|
---------------
|
|
|
|
Note that, starting from new chips, where it is available the HW capability
|
|
register, many configurations are discovered at run-time for example to
|
|
understand if EEE, HW csum, PTP, enhanced descriptor etc are actually
|
|
available. As strategy adopted in this driver, the information from the HW
|
|
capability register can replace what has been passed from the platform.
|
|
|
|
Debug Information
|
|
=================
|
|
|
|
The driver exports many information i.e. internal statistics, debug
|
|
information, MAC and DMA registers etc.
|
|
|
|
These can be read in several ways depending on the type of the information
|
|
actually needed.
|
|
|
|
For example a user can be use the ethtool support to get statistics: e.g.
|
|
using: ``ethtool -S ethX`` (that shows the Management counters (MMC) if
|
|
supported) or sees the MAC/DMA registers: e.g. using: ``ethtool -d ethX``
|
|
|
|
Compiling the Kernel with ``CONFIG_DEBUG_FS`` the driver will export the
|
|
following debugfs entries:
|
|
|
|
- ``descriptors_status``: To show the DMA TX/RX descriptor rings
|
|
- ``dma_cap``: To show the HW Capabilities
|
|
|
|
Developer can also use the ``debug`` module parameter to get further debug
|
|
information (please see: NETIF Msg Level).
|
|
|
|
Support
|
|
=======
|
|
|
|
If an issue is identified with the released source code on a supported kernel
|
|
with a supported adapter, email the specific information related to the
|
|
issue to netdev@vger.kernel.org
|