Netboot Mailing List (by thread)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Question for LNE100TX and MX98715 Etherboot users





While debugging some Etherboot (http://www.slug.org.au/etherboot/) tulip 
code, I noticed that when using LNE100TX and MX98715 cards, there seemed 
to be a very long delay (10 seconds) when getting their DHCP/BOOTP 
information from the server, while the FA310TX (LC82C168) cards got the 
same information in a small fraction of a second.

I tracked the source of the delay down to this code sequence in 
ntulip_reset:

  /* Start Tx */
  outl(inl(ioaddr + CSR6) |  0x00002000, ioaddr + CSR6);
  /* immediate transmit demand */
  outl(0, ioaddr + CSR1);

  to = currticks() + TICKS_PER_SEC;
  while ((txd.status & 0x80000000) && (currticks() < to))
    /* wait */ ;

Essentially, we turn on the transmitter, force an immediate transmission 
demand to process the setup packet, and then wait for the packet status 
to clear or for 1 second to elapse.

What I noticed with MX98715 and LNE100TX (LC82C115) cards was that they 
didn't transmit the first BOOTP request.  This is true of the Linux 
driver as well -- The cards seem to take far longer than other cards to 
get BOOTP/DHCP information from the server, because even though the 
driver thinks it is transmitting the first packet, it never actually gets 
out of the card, so after 10 seconds (in the case of Etherboot) the 
packet is retransmitted, and responded to instantly.

I found that by changing the above code to add an arbitrary 1 second 
delay after starting the transmitter, the first BOOTP request was not 
dropped, and it saved 9 seconds in the network booting sequence.

  /* Start Tx */
  outl(inl(ioaddr + CSR6) |  0x00002000, ioaddr + CSR6);
  /* immediate transmit demand */
  outl(0, ioaddr + CSR1);

  /* 1 second delay inserted to allow some cards to process the setup 
packet */
  to = currticks() + TICKS_PER_SEC;
  while (currticks() < to)
    /* wait */ ;

  to = currticks() + TICKS_PER_SEC;
  while ((txd.status & 0x80000000) && (currticks() < to))
    /* wait */ ;

QUESTIONS:

Is anyone else seeing this delay with LNE100TX, MX98715  or other 
tulip-based cards (brand names like LinkSys, Lite-ON, SOHOWare)?

If you are currently using the ntulip.c driver for Etherboot, could you 
download the ntulip-0.75b6 from http://www.thinguin.org/ to see if you 
get faster boot times with this beta version?

Thanks and Regards,

Marty

---
   Name: Martin D. Connor
US Mail: Entity Cyber, Inc.; P.O. Box 391827; Cambridge, MA 02139; USA
  Voice: (617) 491-6935, Fax: (617) 491-7046 
  Email: mdc@thinguin.org
    Web: http://www.thinguin.org/


===========================================================================
This Mail was sent to netboot mailing list by:
Marty Connor <mdc@thinguin.org>
To get help about this list, send a mail with 'help' as the only string in
it's body to majordomo@baghira.han.de. If you have problems with this list,
send a mail to netboot-owner@baghira.han.de.



For requests or suggestions regarding this mailing list archive please write to netboot@gkminix.han.de.