Lines Matching +full:half +full:- +full:length
1 // SPDX-License-Identifier: GPL-2.0+
8 (C)Copyright 1997-1998 DAVICOM Semiconductor,Inc. All Rights Reserved.
15 E5: R25 = ((R24 + NF - 3) & 0x00ff) | 0xc200
28 --------------------------------------
30 12/15/2003 Initial port to u-boot by
34 - Fixed the driver to work with DM9000A.
38 - Added autodetect of databus width.
39 - Made debug code compile again.
40 - Adapt eth_send such that it matches the DM9000*
43 - Adapted reset procedure to match DM9000 application
45 - some minor code cleanups
60 /* Board/System/Debug information/definition ---------------- */
66 #define DM9000_DMP_PACKET(func,packet,length) \ argument
69 printf("%s: length: %d\n", func, length); \
70 for (i = 0; i < length; i++) { \
78 #define DM9000_DMP_PACKET(func,packet,length) argument
81 /* Structure/enum declaration ------------------------------- */
83 u32 runt_length_counter; /* counter: RX length < 64byte */
84 u32 long_length_counter; /* counter: RX length > 1514byte */
102 /* function declaration ------------------------------------- */
109 /* DM9000 network board routine ---------------------------- */
240 return -1; in dm9000_probe()
276 printf("ERROR: resetting DM9000 -> not responding\n"); in dm9000_reset()
293 return -1; in dm9000_init()
295 /* Auto-detect 8/16/32 bit mode, ISR Bit 6+7 indicate bus width */ in dm9000_init()
299 case 0x0: /* 16-bit mode */ in dm9000_init()
301 db->outblk = dm9000_outblk_16bit; in dm9000_init()
302 db->inblk = dm9000_inblk_16bit; in dm9000_init()
303 db->rx_status = dm9000_rx_status_16bit; in dm9000_init()
305 case 0x01: /* 32-bit mode */ in dm9000_init()
307 db->outblk = dm9000_outblk_32bit; in dm9000_init()
308 db->inblk = dm9000_inblk_32bit; in dm9000_init()
309 db->rx_status = dm9000_rx_status_32bit; in dm9000_init()
313 db->outblk = dm9000_outblk_8bit; in dm9000_init()
314 db->inblk = dm9000_inblk_8bit; in dm9000_init()
315 db->rx_status = dm9000_rx_status_8bit; in dm9000_init()
319 printf("DM9000: Undefined IO-mode:0x%x\n", io_mode); in dm9000_init()
320 db->outblk = dm9000_outblk_8bit; in dm9000_init()
321 db->inblk = dm9000_inblk_8bit; in dm9000_init()
322 db->rx_status = dm9000_rx_status_8bit; in dm9000_init()
343 printf("MAC: %pM\n", dev->enetaddr); in dm9000_init()
344 if (!is_valid_ethaddr(dev->enetaddr)) { in dm9000_init()
350 DM9000_iow(oft, dev->enetaddr[i]); in dm9000_init()
380 printf("10M half duplex "); in dm9000_init()
386 printf("100M half duplex "); in dm9000_init()
403 static int dm9000_send(struct eth_device *netdev, void *packet, int length) in dm9000_send() argument
408 DM9000_DMP_PACKET(__func__ , packet, length); in dm9000_send()
413 DM9000_outb(DM9000_MWCMD, DM9000_IO); /* Prepare for TX-data */ in dm9000_send()
415 /* push the data to the TX-fifo */ in dm9000_send()
416 (db->outblk)(packet, length); in dm9000_send()
418 /* Set TX length to DM9000 */ in dm9000_send()
419 DM9000_iow(DM9000_TXPLL, length & 0xff); in dm9000_send()
420 DM9000_iow(DM9000_TXPLH, (length >> 8) & 0xff); in dm9000_send()
450 DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */ in dm9000_halt()
467 if (!(DM9000_ior(DM9000_ISR) & 0x01)) /* Rx-ISR bit must be set. */ in dm9000_rx()
494 /* A packet ready now & Get status/length */ in dm9000_rx()
495 (db->rx_status)(&RxStatus, &RxLen); in dm9000_rx()
501 (db->inblk)(rdptr, RxLen); in dm9000_rx()
512 printf("rx length error\n"); in dm9000_rx()
515 printf("rx length too big\n"); in dm9000_rx()
558 dm9000_read_srom_word(i, dev->enetaddr + (2 * i)); in dm9000_get_enetaddr()
628 dev->init = dm9000_init; in dm9000_initialize()
629 dev->halt = dm9000_halt; in dm9000_initialize()
630 dev->send = dm9000_send; in dm9000_initialize()
631 dev->recv = dm9000_rx; in dm9000_initialize()
632 strcpy(dev->name, "dm9000"); in dm9000_initialize()