11 #include <linux/module.h>
13 #include <linux/kernel.h>
15 #include <linux/types.h>
16 #include <linux/fcntl.h>
18 #include <linux/ptrace.h>
21 #include <linux/string.h>
23 #include <linux/errno.h>
25 #include <linux/bitops.h>
28 #include <linux/mii.h>
29 #include <linux/netdevice.h>
32 #include <linux/ethtool.h>
39 #include <asm/cache.h>
50 static const char* cardname =
"ETRAX 100LX built-in ethernet controller";
54 static struct sockaddr default_mac = {
56 { 0x00, 0x40, 0x8C, 0xCD, 0x00, 0x00 }
98 #define MAX_MEDIA_DATA_SIZE 1522
100 #define MIN_PACKET_LEN 46
101 #define ETHER_HEAD_LEN 14
106 #define MDIO_START 0x1
107 #define MDIO_READ 0x2
108 #define MDIO_WRITE 0x1
109 #define MDIO_PREAMBLE 0xfffffffful
112 #define MDIO_AUX_CTRL_STATUS_REG 0x18
113 #define MDIO_BC_FULL_DUPLEX_IND 0x1
114 #define MDIO_BC_SPEED 0x2
117 #define MDIO_TDK_DIAGNOSTIC_REG 18
118 #define MDIO_TDK_DIAGNOSTIC_RATE 0x400
119 #define MDIO_TDK_DIAGNOSTIC_DPLX 0x800
122 #define MDIO_INT_STATUS_REG_2 0x0011
123 #define MDIO_INT_FULL_DUPLEX_IND (1 << 9)
124 #define MDIO_INT_SPEED (1 << 14)
127 #define NET_FLASH_TIME (HZ/50)
128 #define NET_FLASH_PAUSE (HZ/100)
129 #define NET_LINK_UP_CHECK_INTERVAL (2*HZ)
130 #define NET_DUPLEX_CHECK_INTERVAL (2*HZ)
132 #define NO_NETWORK_ACTIVITY 0
133 #define NETWORK_ACTIVITY 1
135 #define NBR_OF_RX_DESC 32
136 #define NBR_OF_TX_DESC 16
140 #define RX_COPYBREAK 256
145 #define RX_QUEUE_THRESHOLD NBR_OF_RX_DESC/2
147 #define GET_BIT(bit,val) (((val) >> (bit)) & 0x01)
150 #define SETF(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \
151 IO_FIELD_(reg##_, field##_, val)
152 #define SETS(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \
153 IO_STATE_(reg##_, field##_, _##val)
166 static unsigned int network_rec_config_shadow = 0;
168 static unsigned int network_tr_ctrl_shadow = 0;
173 static int current_speed;
174 static int current_speed_selection;
175 static unsigned long led_next_time;
176 static int led_active;
177 static int rx_queue_len;
181 static int full_duplex;
182 static enum duplex current_duplex;
186 static int etrax_ethernet_init(
void);
205 static void e100_check_speed(
unsigned long priv);
206 static void e100_set_speed(
struct net_device*
dev,
unsigned long speed);
207 static void e100_check_duplex(
unsigned long priv);
214 static void e100_send_mdio_cmd(
unsigned short cmd,
int write_cmd);
215 static void e100_send_mdio_bit(
unsigned char bit);
216 static unsigned char e100_receive_mdio_bit(
void);
219 static void e100_clear_network_leds(
unsigned long dummy);
220 static void e100_set_network_leds(
int active);
223 #if defined(CONFIG_ETRAX_NO_PHY)
236 #ifdef CONFIG_NET_POLL_CONTROLLER
240 static int autoneg_normal = 1;
244 #if defined(CONFIG_ETRAX_NO_PHY)
245 {0x0000, dummy_check_speed, dummy_check_duplex}
247 {0x1018, broadcom_check_speed, broadcom_check_duplex},
248 {0xC039, tdk_check_speed, tdk_check_duplex},
249 {0x039C, tdk_check_speed, tdk_check_duplex},
250 {0x04de, intel_check_speed, intel_check_duplex},
251 {0x0000, generic_check_speed, generic_check_duplex}
258 .ndo_open = e100_open,
259 .ndo_stop = e100_close,
260 .ndo_start_xmit = e100_send_packet,
261 .ndo_tx_timeout = e100_tx_timeout,
262 .ndo_get_stats = e100_get_stats,
263 .ndo_set_rx_mode = set_multicast_list,
264 .ndo_do_ioctl = e100_ioctl,
265 .ndo_set_mac_address = e100_set_mac_address,
268 .ndo_set_config = e100_set_config,
269 #ifdef CONFIG_NET_POLL_CONTROLLER
270 .ndo_poll_controller = e100_netpoll,
274 #define tx_done(dev) (*R_DMA_CH0_CMD == 0)
285 etrax_ethernet_init(
void)
292 "ETRAX 100LX 10/100MBit ethernet v2.0 (c) 1998-2007 Axis Communications AB\n");
299 dev = alloc_etherdev(
sizeof(
struct net_local));
303 np = netdev_priv(dev);
334 if (!RxDescList[i].
skb)
336 RxDescList[
i].descr.ctrl = 0;
340 RxDescList[
i].descr.status = 0;
341 RxDescList[
i].descr.hw_len = 0;
345 RxDescList[NBR_OF_RX_DESC - 1].descr.ctrl =
d_eol;
346 RxDescList[NBR_OF_RX_DESC - 1].descr.next =
virt_to_phys(&RxDescList[0]);
351 TxDescList[
i].descr.ctrl = 0;
352 TxDescList[
i].descr.sw_len = 0;
354 TxDescList[
i].descr.buf = 0;
355 TxDescList[
i].descr.status = 0;
356 TxDescList[
i].descr.hw_len = 0;
357 TxDescList[
i].skb = 0;
360 TxDescList[NBR_OF_TX_DESC - 1].descr.ctrl =
d_eol;
365 myNextRxDesc = &RxDescList[0];
366 myLastRxDesc = &RxDescList[NBR_OF_RX_DESC - 1];
367 myFirstTxDesc = &TxDescList[0];
368 myNextTxDesc = &TxDescList[0];
369 myLastTxDesc = &TxDescList[NBR_OF_TX_DESC - 1];
380 e100_set_mac_address(dev, &default_mac);
385 current_speed_selection = 0;
387 speed_timer.data = (
unsigned long)dev;
388 speed_timer.function = e100_check_speed;
390 clear_led_timer.function = e100_clear_network_leds;
391 clear_led_timer.data = (
unsigned long)dev;
396 duplex_timer.data = (
unsigned long)dev;
397 duplex_timer.function = e100_check_duplex;
400 np->
mii_if.phy_id_mask = 0x1f;
401 np->
mii_if.reg_num_mask = 0x1f;
403 np->
mii_if.mdio_read = e100_get_mdio_reg;
404 np->
mii_if.mdio_write = e100_set_mdio_reg;
408 *R_NETWORK_GA_0 = 0x00000000;
409 *R_NETWORK_GA_1 = 0x00000000;
426 spin_lock(&np->
lock);
447 spin_unlock(&np->
lock);
472 IO_STATE(R_IRQ_MASK0_CLR, underrun, clr) |
473 IO_STATE(R_IRQ_MASK0_CLR, excessive_col, clr);
477 IO_STATE(R_IRQ_MASK2_CLR, dma0_descr, clr) |
478 IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr) |
479 IO_STATE(R_IRQ_MASK2_CLR, dma1_descr, clr) |
480 IO_STATE(R_IRQ_MASK2_CLR, dma1_eop, clr);
501 cardname, (
void *)dev)) {
508 cardname, (
void *)dev)) {
540 *R_NETWORK_GA_0 = 0xffffffff;
541 *R_NETWORK_GA_1 = 0xffffffff;
543 *R_NETWORK_REC_CONFIG = 0xd;
545 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG,
max_size, size1522);
546 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, broadcast, receive);
547 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, ma0,
enable);
548 SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG,
duplex, full_duplex);
549 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
552 *R_NETWORK_GEN_CONFIG =
556 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
557 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL,
delay,
none);
558 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL,
cancel, dont);
559 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL,
cd,
enable);
561 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL,
pad,
enable);
562 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL,
crc,
enable);
563 *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
570 IO_STATE(R_IRQ_MASK2_SET, dma0_eop,
set) |
571 IO_STATE(R_IRQ_MASK2_SET, dma1_eop,
set);
575 IO_STATE(R_IRQ_MASK0_SET, underrun,
set) |
576 IO_STATE(R_IRQ_MASK0_SET, excessive_col,
set);
580 *R_DMA_CH0_CLR_INTR =
IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop,
do);
581 *R_DMA_CH1_CLR_INTR =
IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop,
do);
585 (
void)*R_REC_COUNTERS;
586 (
void)*R_TR_COUNTERS;
595 *R_DMA_CH0_FIRST = 0;
597 netif_start_queue(dev);
602 if (e100_probe_transceiver(dev))
630 #if defined(CONFIG_ETRAX_NO_PHY)
657 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
668 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
679 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
685 e100_check_speed(
unsigned long priv)
689 static int led_initiated = 0;
691 int old_speed = current_speed;
703 if ((old_speed != current_speed) || !led_initiated) {
724 unsigned short data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
731 switch (current_speed_selection) {
733 if (current_duplex ==
full)
735 else if (current_duplex ==
half)
742 if (current_duplex ==
full)
744 else if (current_duplex ==
half)
751 if (current_duplex ==
full)
753 else if (current_duplex ==
half)
769 if (autoneg_normal) {
777 if (current_speed_selection == 10)
782 if (current_duplex !=
full)
791 e100_set_speed(
struct net_device* dev,
unsigned long speed)
796 if (speed != current_speed_selection) {
797 current_speed_selection = speed;
804 e100_check_duplex(
unsigned long priv)
811 old_duplex = full_duplex;
813 if (old_duplex != full_duplex) {
815 SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG,
duplex, full_duplex);
816 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
822 np->
mii_if.full_duplex = full_duplex;
825 #if defined(CONFIG_ETRAX_NO_PHY)
840 (data & ADVERTISE_100FULL))
852 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
863 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
874 data = e100_get_mdio_reg(dev, np->
mii_if.phy_id,
885 if (new_duplex != current_duplex) {
886 current_duplex = new_duplex;
893 e100_probe_transceiver(
struct net_device* dev)
897 #if !defined(CONFIG_ETRAX_NO_PHY)
898 unsigned int phyid_high;
899 unsigned int phyid_low;
909 if (e100_get_mdio_reg(dev,
913 if (np->
mii_if.phy_id == 32) {
921 oui = (phyid_high << 6) | (phyid_low >> 10);
923 for (ops = &transceivers[0]; ops->
oui; ops++) {
945 e100_send_mdio_cmd(cmd, 0);
950 for (bitCounter=15; bitCounter>=0 ; bitCounter--) {
951 data |= (e100_receive_mdio_bit() << bitCounter);
958 e100_set_mdio_reg(
struct net_device *dev,
int phy_id,
int location,
int value)
966 e100_send_mdio_cmd(cmd, 1);
969 for (bitCounter=15; bitCounter>=0 ; bitCounter--) {
970 e100_send_mdio_bit(
GET_BIT(bitCounter, value));
976 e100_send_mdio_cmd(
unsigned short cmd,
int write_cmd)
979 unsigned char data = 0x2;
982 for (bitCounter = 31; bitCounter>= 0; bitCounter--)
985 for (bitCounter = 15; bitCounter >= 2; bitCounter--)
986 e100_send_mdio_bit(
GET_BIT(bitCounter, cmd));
989 for (bitCounter = 1; bitCounter >= 0 ; bitCounter--)
991 e100_send_mdio_bit(
GET_BIT(bitCounter, data));
993 e100_receive_mdio_bit();
997 e100_send_mdio_bit(
unsigned char bit)
999 *R_NETWORK_MGM_CTRL =
1001 IO_FIELD(R_NETWORK_MGM_CTRL, mdio, bit);
1003 *R_NETWORK_MGM_CTRL =
1005 IO_MASK(R_NETWORK_MGM_CTRL, mdck) |
1006 IO_FIELD(R_NETWORK_MGM_CTRL, mdio, bit);
1010 static unsigned char
1011 e100_receive_mdio_bit(
void)
1014 *R_NETWORK_MGM_CTRL = 0;
1015 bit =
IO_EXTRACT(R_NETWORK_STAT, mdio, *R_NETWORK_STAT);
1017 *R_NETWORK_MGM_CTRL =
IO_MASK(R_NETWORK_MGM_CTRL, mdck);
1023 e100_reset_transceiver(
struct net_device* dev)
1025 struct net_local *np = netdev_priv(dev);
1027 unsigned short data;
1034 e100_send_mdio_cmd(cmd, 1);
1038 for (bitCounter = 15; bitCounter >= 0 ; bitCounter--) {
1039 e100_send_mdio_bit(
GET_BIT(bitCounter, data));
1050 struct net_local *np = netdev_priv(dev);
1051 unsigned long flags;
1056 tx_done(dev) ?
"IRQ problem" :
"network cable problem");
1060 dev->
stats.tx_errors++;
1069 e100_reset_transceiver(dev);
1072 while (myFirstTxDesc != myNextTxDesc) {
1073 dev_kfree_skb(myFirstTxDesc->
skb);
1074 myFirstTxDesc->
skb = 0;
1079 *R_DMA_CH0_FIRST = 0;
1084 netif_wake_queue(dev);
1085 spin_unlock_irqrestore(&np->
lock, flags);
1098 struct net_local *np = netdev_priv(dev);
1099 unsigned char *
buf = skb->
data;
1100 unsigned long flags;
1111 e100_hardware_send_packet(np, buf, skb->
len);
1116 if (myNextTxDesc == myFirstTxDesc) {
1117 netif_stop_queue(dev);
1120 spin_unlock_irqrestore(&np->
lock, flags);
1131 e100rxtx_interrupt(
int irq,
void *
dev_id)
1134 unsigned long irqbits;
1141 irqbits = *R_IRQ_MASK2_RD;
1147 *R_DMA_CH1_CLR_INTR =
IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop,
do);
1151 while ((*R_DMA_CH1_FIRST !=
virt_to_phys(myNextRxDesc)) &&
1152 (myNextRxDesc != myLastRxDesc)) {
1157 dev->
stats.rx_packets++;
1161 *R_DMA_CH1_CLR_INTR =
1162 IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop,
do) |
1163 IO_STATE(R_DMA_CH1_CLR_INTR, clr_descr,
do);
1171 while (
virt_to_phys(myFirstTxDesc) != *R_DMA_CH0_FIRST &&
1172 (netif_queue_stopped(dev) || myFirstTxDesc != myNextTxDesc)) {
1173 dev->
stats.tx_bytes += myFirstTxDesc->
skb->len;
1174 dev->
stats.tx_packets++;
1179 myFirstTxDesc->
skb = 0;
1182 netif_wake_queue(dev);
1187 *R_DMA_CH0_CLR_INTR =
IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop,
do);
1194 e100nw_interrupt(
int irq,
void *dev_id)
1197 unsigned long irqbits = *R_IRQ_MASK0_RD;
1201 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
1202 *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
1203 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error,
nop);
1204 dev->
stats.tx_errors++;
1205 D(
printk(
"ethernet receiver underrun!\n"));
1210 update_rx_stats(&dev->
stats);
1211 D(
printk(
"ethernet receiver overrun!\n"));
1215 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
1216 *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
1217 SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error,
nop);
1218 dev->
stats.tx_errors++;
1219 D(
printk(
"ethernet excessive collisions!\n"));
1230 struct net_local *np = netdev_priv(dev);
1231 unsigned char *skb_data_ptr;
1237 if (!led_active &&
time_after(jiffies, led_next_time)) {
1252 printk(
"Got a packet of length %d:\n", length);
1255 for (i = 0; i < 8; i++) {
1256 printk(
"%d: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", i * 8,
1257 skb_data_ptr[0],skb_data_ptr[1],skb_data_ptr[2],skb_data_ptr[3],
1258 skb_data_ptr[4],skb_data_ptr[5],skb_data_ptr[6],skb_data_ptr[7]);
1267 dev->
stats.rx_errors++;
1269 goto update_nextrxdesc;
1276 printk(
"head = 0x%x, data = 0x%x, tail = 0x%x, end = 0x%x\n",
1277 skb->
head, skb->
data, skb_tail_pointer(skb),
1278 skb_end_pointer(skb));
1279 printk(
"copying packet to 0x%x.\n", skb_data_ptr);
1293 dev->
stats.rx_errors++;
1295 goto update_nextrxdesc;
1297 skb = myNextRxDesc->
skb;
1301 myNextRxDesc->
skb = new_skb;
1313 prevRxDesc = myNextRxDesc;
1323 myLastRxDesc = prevRxDesc;
1334 netif_stop_queue(dev);
1338 IO_STATE(R_IRQ_MASK0_CLR, underrun, clr) |
1339 IO_STATE(R_IRQ_MASK0_CLR, excessive_col, clr);
1342 IO_STATE(R_IRQ_MASK2_CLR, dma0_descr, clr) |
1343 IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr) |
1344 IO_STATE(R_IRQ_MASK2_CLR, dma1_descr, clr) |
1345 IO_STATE(R_IRQ_MASK2_CLR, dma1_eop, clr);
1363 update_rx_stats(&dev->
stats);
1364 update_tx_stats(&dev->
stats);
1377 struct net_local *np = netdev_priv(dev);
1381 spin_lock(&np->
lock);
1386 e100_set_speed(dev, 10);
1389 e100_set_speed(dev, 100);
1392 e100_set_speed(dev, 0);
1395 e100_set_duplex(dev,
half);
1398 e100_set_duplex(dev,
full);
1401 e100_set_duplex(dev,
autoneg);
1404 old_autoneg = autoneg_normal;
1405 autoneg_normal = *(
int*)data;
1406 if (autoneg_normal != old_autoneg)
1407 e100_negotiate(dev);
1414 spin_unlock(&np->
lock);
1418 static int e100_get_settings(
struct net_device *dev,
1421 struct net_local *np = netdev_priv(dev);
1424 spin_lock_irq(&np->
lock);
1426 spin_unlock_irq(&np->
lock);
1434 static int e100_set_settings(
struct net_device *dev,
1438 e100_set_duplex(dev,
autoneg);
1439 e100_set_speed(dev, 0);
1448 static void e100_get_drvinfo(
struct net_device *dev,
1457 static int e100_nway_reset(
struct net_device *dev)
1459 if (current_duplex ==
autoneg && current_speed_selection == 0)
1460 e100_negotiate(dev);
1464 static const struct ethtool_ops e100_ethtool_ops = {
1465 .get_settings = e100_get_settings,
1466 .set_settings = e100_set_settings,
1467 .get_drvinfo = e100_get_drvinfo,
1468 .nway_reset = e100_nway_reset,
1475 struct net_local *np = netdev_priv(dev);
1477 spin_lock(&np->
lock);
1482 e100_set_speed(dev, 0);
1483 e100_set_duplex(dev,
autoneg);
1486 e100_set_speed(dev, 10);
1487 e100_set_duplex(dev,
autoneg);
1491 e100_set_speed(dev, 100);
1492 e100_set_duplex(dev,
autoneg);
1497 spin_unlock(&np->
lock);
1502 spin_unlock(&np->
lock);
1505 spin_unlock(&np->
lock);
1512 unsigned long r = *R_REC_COUNTERS;
1523 unsigned long r = *R_TR_COUNTERS;
1538 unsigned long flags;
1542 update_rx_stats(&dev->
stats);
1543 update_tx_stats(&dev->
stats);
1545 spin_unlock_irqrestore(&lp->
lock, flags);
1561 unsigned long int lo_bits;
1562 unsigned long int hi_bits;
1564 spin_lock(&lp->
lock);
1567 lo_bits = 0xfffffffful;
1568 hi_bits = 0xfffffffful;
1571 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual, receive);
1572 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
1575 lo_bits = 0xfffffffful;
1576 hi_bits = 0xfffffffful;
1579 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual,
discard);
1580 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
1581 }
else if (num_addr == 0) {
1583 lo_bits = 0x00000000ul;
1584 hi_bits = 0x00000000ul;
1587 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual,
discard);
1588 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
1595 lo_bits = 0x00000000ul;
1596 hi_bits = 0x00000000ul;
1602 hash_ix ^= (*baddr) & 0x3f;
1603 hash_ix ^= ((*baddr) >> 6) & 0x03;
1605 hash_ix ^= ((*baddr) << 2) & 0x03c;
1606 hash_ix ^= ((*baddr) >> 4) & 0xf;
1608 hash_ix ^= ((*baddr) << 4) & 0x30;
1609 hash_ix ^= ((*baddr) >> 2) & 0x3f;
1611 hash_ix ^= (*baddr) & 0x3f;
1612 hash_ix ^= ((*baddr) >> 6) & 0x03;
1614 hash_ix ^= ((*baddr) << 2) & 0x03c;
1615 hash_ix ^= ((*baddr) >> 4) & 0xf;
1617 hash_ix ^= ((*baddr) << 4) & 0x30;
1618 hash_ix ^= ((*baddr) >> 2) & 0x3f;
1622 if (hash_ix >= 32) {
1623 hi_bits |= (1 << (hash_ix-32));
1625 lo_bits |= (1 << hash_ix);
1629 SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual,
discard);
1630 *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
1632 *R_NETWORK_GA_0 = lo_bits;
1633 *R_NETWORK_GA_1 = hi_bits;
1634 spin_unlock(&lp->
lock);
1638 e100_hardware_send_packet(
struct net_local *np,
char *buf,
int length)
1640 D(
printk(
"e100 send pack, buf 0x%x len %d\n", buf, length));
1643 if (!led_active &&
time_after(jiffies, led_next_time)) {
1661 myLastTxDesc = myNextTxDesc;
1668 e100_clear_network_leds(
unsigned long dummy)
1671 struct net_local *np = netdev_priv(dev);
1675 if (led_active &&
time_after(jiffies, led_next_time)) {
1687 e100_set_network_leds(
int active)
1689 #if defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK)
1691 #elif defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY)
1694 #error "Define either CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK or CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY"
1697 if (!current_speed) {
1700 }
else if (light_leds) {
1701 if (current_speed == 10) {
1711 #ifdef CONFIG_NET_POLL_CONTROLLER
1720 etrax_init_module(
void)
1722 return etrax_ethernet_init();
1726 e100_boot_setup(
char*
str)
1734 if (
sscanf(str + 3*i,
"%2x", &tmp) != 1) {
1745 __setup(
"etrax100_eth=", e100_boot_setup);