9.2.3
Transmitting the Buffer .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
9–6
9.2.4
Accounting for Outgoing Bytes . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
9–7
9.2.5
Updating Counters, Freeing the Transmit Buffer, and
Marking the Output Process as Active . .. . .. . .. . . .. . .. . .. . .. .
9–7
9.2.6
Indicating When to Start the Watchdog Routine .. . .. . .. . .. .
9–8
10
Implementing a Watchdog Section
10.1
Setting the IPL and Obtaining the Simple Lock . .. . . .. . .. . .. . .. .
10–1
10.2
Incrementing the Transmit Timeout Counter and Resetting
the Unit .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
10–2
10.3
Releasing the Simple Lock and Resetting the IPL . . . .. . .. . .. . .. .
10–2
11
Implementing the Reset Section
11.1
Implementing the el_reset Routine .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
11–1
11.2
Implementing the el_reset_locked Routine . .. . .. . .. . . .. . .. . .. . .. .
11–2
12
Implementing the ioctl Section
12.1
Setting Up the el_ioctl Routine . . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–2
12.2
Determining Whether the User Has Removed the PCMCIA
Card from the Slot . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–3
12.3
Setting the IPL and Obtaining the Simple Lock . .. . . .. . .. . .. . .. .
12–3
12.4
Enabling Loopback Mode (SIOCENABLBACK ioctl
Command) .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–4
12.5
Disabling Loopback Mode (SIOCDISABLBACK ioctl
Command) .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–4
12.6
Reading Current and Default MAC Addresses
(SIOCRPHYSADDR ioctl Command) . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–5
12.7
Setting the Local MAC Address (SIOCSPHYSADDR ioctl
Command) .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–5
12.8
Adding the Device to a Multicast Group (SIOCADDMULTI
ioctl Command) . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–6
12.9
Deleting the Device from a Multicast Group (SIOCDELMULTI
ioctl Command) . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–7
12.10
Accessing Network Counters (SIOCRDCTRS and
SIOCRDZCTRS ioctl Commands) . . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–8
12.11
Bringing Up the Device (SIOCSIFADDR ioctl Command) . . .. .
12–9
12.12
Using Currently Set Flags (SIOCSIFFLAGS ioctl Command)
12–10
12.13
Setting the IP MTU (SIOCSIPMTU ioctl Command) . . .. . .. . .. .
12–10
12.14
Setting the Media Speed (SIOCSMACSPEED ioctl
Command) .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. . .. . . .. . .. . .. . .. . . .. . .. . .. . .. .
12–10
Contents vii