Using RealTek interrupts We construct a prototype driver packets

Download Report

Transcript Using RealTek interrupts We construct a prototype driver packets

Using RealTek interrupts
We construct a prototype driver
that supports receiving of network
packets
Interrupt Mask Register
15
0x3C
S
E
R
R
14 13
T
L
i
e
m
n
e
C
O
h
u
g
t
reserved
6
5
4
3
2
1
0
R
X
F
O
V
F
P
U
N
/
L
C
R
X
B
O
V
F
T
E
R
T
O
K
R
E
R
R
O
K
Legend
ROK (Received OK packet)
TOK (Transmit completed OK)
RER (Received Error packet)
TER (Transmit was aborted)
RxBOvf (Receive Buffer Overflowed)
SERR (System Error on PCI bus)
RxFOvf (Receive FIFO Overflowed)
LenChg (Cable Length changed)
TimeOut (Timer Count == Timer Intr)
PUN/LC (Packet Underrun/Link Changed)
(0 = masked, 1=unmasked)
Interrupt Status Register
15
0x3E
S
E
R
R
14 13
T
L
i
e
m
n
e
C
O
h
u
g
t
reserved
6
5
4
3
2
1
0
R
X
F
O
V
F
P
U
N
/
L
C
R
X
B
O
V
F
T
E
R
T
O
K
R
E
R
R
O
K
Legend
ROK (Received OK packet)
TOK (Transmit completed OK)
RER (Received Error packet)
TER (Transmit was aborted)
RxBOvf (Receive Buffer Overflowed)
SERR (System Error on PCI bus)
RxFOvf (Receive FIFO Overflowed)
LenChg (Cable Length changed)
TimeOut (Timer Count == Timer Intr)
PUN/LC (Packet Underrun/Link Changed)
(0 = inactive, 1=active)
NOTE: An ‘active’ bit is cleared by writing ‘1’ to that bit
A code ‘walkthrough’
• We have written an initial ‘prototype’ for a
character-mode device-driver for the 8139
• It supports packet-reception (w/ interrupts)
• A companion application (‘nicread.cpp’) is
useful for testing this device driver
• We will walk through the driver’s design
• Can you spot any ‘bugs’ in this driver?
• Can you implement packet-transmission?