Lines Matching +full:full +full:- +full:length

2  * rtl8139.c : U-Boot driver for the RealTek RTL8139
10 /* rtl8139.c - etherboot driver for the Realtek 8139 chipset
13 by Rainer Bawidamann (Rainer.Bawidamann@informatik.uni-ulm.de) 1999
19 - removed support for interrupts, switching to polling mode (yuck!)
20 - removed support for the 8129 chip (external MII)
33 Following email from Hyun-Joon Cha, added a disable routine, otherwise
36 4 Feb 2000 espenlaub@informatik.uni-ulm.de (Klaus Espenlaub)
40 0x98000-0x9ffff range. This is a bit of a hack, but currently the only
44 which reserves the ranges 0x00000-0x10000 and 0x98000-0xA0000. My
51 hunting session. It took me about a week full time work - poking around
53 driver and even the FreeBSD driver (what a piece of crap!) - and
67 28 Jul 1999 (Matthias Meixner - meixner@rbg.informatik.tu-darmstadt.de)
70 transmission performace - below 1kBytes/s.
91 #define RX_BUF_LEN_IDX 0 /* 0, 1, 2 is allowed - 8,16,32K rx buffer */
97 #define bus_to_phys(a) pci_mem_to_phys((pci_dev_t)dev->priv, a)
98 #define phys_to_bus(a) pci_phys_to_mem((pci_dev_t)dev->priv, a)
110 Timer=0x48, /* general-purpose counter. */
183 static int rtl_transmit(struct eth_device *dev, void *packet, int length);
222 sprintf (dev->name, "RTL8139#%d", card_number); in rtl8139_initialize()
224 dev->priv = (void *) devno; in rtl8139_initialize()
225 dev->iobase = (int)bus_to_phys(iobase); in rtl8139_initialize()
226 dev->init = rtl8139_probe; in rtl8139_initialize()
227 dev->halt = rtl_disable; in rtl8139_initialize()
228 dev->send = rtl_transmit; in rtl8139_initialize()
229 dev->recv = rtl_poll; in rtl8139_initialize()
230 dev->mcast = rtl_bcast_addr; in rtl8139_initialize()
248 unsigned short *ap = (unsigned short *)dev->enetaddr; in rtl8139_probe()
250 ioaddr = dev->iobase; in rtl8139_probe()
252 /* Bring the chip out of low-power mode. */ in rtl8139_probe()
263 return -1 ; in rtl8139_probe()
287 /* The EEPROM commands include the alway-set leading bit. */
304 for (i = 4 + addr_len; i >= 0; i--) { in read_eeprom()
314 for (i = 16; i > 0; i--) { in read_eeprom()
363 outb(dev->enetaddr[i], ioaddr + MAC0 + i); in rtl_reset()
372 * for half duplex or full/autodetect duplex (for full/autodetect, the in rtl_reset()
373 * outputs are TX/RX, Link10/100, FULL, while for half duplex it uses in rtl_reset()
402 static int rtl_transmit(struct eth_device *dev, void *packet, int length) in rtl_transmit() argument
406 unsigned int len = length; in rtl_transmit()
409 ioaddr = dev->iobase; in rtl_transmit()
411 memcpy((char *)tx_buffer, (char *)packet, (int)length); in rtl_transmit()
415 /* Note: RTL8139 doesn't auto-pad, send minimum payload (another 4 in rtl_transmit()
421 flush_cache((unsigned long)tx_buffer, length); in rtl_transmit()
429 * here - the RxOverflow/RxFIFOOver MUST be handled in the in rtl_transmit()
445 return length; in rtl_transmit()
463 int length=0; in rtl_poll() local
465 ioaddr = dev->iobase; in rtl_poll()
478 /* ring_offs is guaranteed being 4-byte aligned */ in rtl_poll()
491 length = rx_size - 4; /* no one cares about the FCS */ in rtl_poll()
492 if (ring_offs+4+rx_size-4 > RX_BUF_LEN) { in rtl_poll()
493 int semi_count = RX_BUF_LEN - ring_offs - 4; in rtl_poll()
497 memcpy(&(rxdata[semi_count]), rx_ring, rx_size-4-semi_count); in rtl_poll()
499 net_process_received_packet(rxdata, length); in rtl_poll()
501 semi_count, rx_size-4-semi_count); in rtl_poll()
503 net_process_received_packet(rx_ring + ring_offs + 4, length); in rtl_poll()
504 debug_cond(DEBUG_RX, "rx packet %d bytes", rx_size-4); in rtl_poll()
509 outw(cur_rx - 16, ioaddr + RxBufPtr); in rtl_poll()
514 return length; in rtl_poll()
521 ioaddr = dev->iobase; in rtl_disable()