|
@@ -910,6 +910,20 @@ static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2)
|
|
|
return le;
|
|
|
}
|
|
|
|
|
|
+static void tx_init(struct sky2_port *sky2)
|
|
|
+{
|
|
|
+ struct sky2_tx_le *le;
|
|
|
+
|
|
|
+ sky2->tx_prod = sky2->tx_cons = 0;
|
|
|
+ sky2->tx_tcpsum = 0;
|
|
|
+ sky2->tx_last_mss = 0;
|
|
|
+
|
|
|
+ le = get_tx_le(sky2);
|
|
|
+ le->addr = 0;
|
|
|
+ le->opcode = OP_ADDR64 | HW_OWNER;
|
|
|
+ sky2->tx_addr64 = 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline struct tx_ring_info *tx_le_re(struct sky2_port *sky2,
|
|
|
struct sky2_tx_le *le)
|
|
|
{
|
|
@@ -1320,7 +1334,8 @@ static int sky2_up(struct net_device *dev)
|
|
|
GFP_KERNEL);
|
|
|
if (!sky2->tx_ring)
|
|
|
goto err_out;
|
|
|
- sky2->tx_prod = sky2->tx_cons = 0;
|
|
|
+
|
|
|
+ tx_init(sky2);
|
|
|
|
|
|
sky2->rx_le = pci_alloc_consistent(hw->pdev, RX_LE_BYTES,
|
|
|
&sky2->rx_le_map);
|