To determine the mode, el_autosense_thread( ) tries to send a test data
packet in each of the possible modes. When it successfully transmits the data
packet, it sets the network interface to that mode. The lm_media_mode,
lm_media, and lm_media_state members of the el_softc data structure
keep track of the progress of the autosensing procedure, as follows:
• The value of the lm_media_mode member determines whether the
el_autosense_thread( ) will automatically determine the network
interface, or whether the user specified the type of media.
• The lm_media member specifies the current media. This member
changes each time that the driver uses a different medium to try to
transmit a packet. The if_el device driver can set this member to any
of the following values:
LAN_MEDIA_UTP
The media is unshielded twisted-pair cable.
LAN_MEDIA_BNC
The media is thin wire.
LAN_MEDIA_AUI
The media is the attachment unit
interface (AUI).
• The lm_media_state member specifies the current state of the
autosensing procedure, as follows:
LAN_MEDIA_STATE_SENSING
The driver is trying to determine
the media mode.
LAN_MEDIA_STATE_DETERMINED
The media state has been determined.
The el_autosense_thread( ) routine is implemented as a kernel thread.
It performs the following tasks:
• Blocks until awakened (Section 5.3.2)
• Tests for the termination flag (Section 5.3.3)
• Starts up statistics (Section 5.3.4)
• Enters the packet transmit loop (Section 5.3.5)
• Saves counters prior to the transmit operation (Section 5.3.6)
• Allocates memory for a test packet (Section 5.3.7)
• Uses the default from the ROM (Section 5.3.8)
• Sets the media setting in the hardware (Section 5.3.9)
• Builds a test packet to transmit (Section 5.3.10)
• Transmits the test packet (Section 5.3.11)
• Sets a timer for the current kernel thread (Section 5.3.12)
• Tests for loss of carrier (Section 5.3.13)
5–18 Implementing the Autoconfiguration Support Section (probe)