source: rtems-docs/networking/dec_21140.rst @ d389819

4.115
Last change on this file since d389819 was d389819, checked in by Amar Takhar <amar@…>, on 01/18/16 at 05:37:40

Convert all Unicode to ASCII(128)

  • Property mode set to 100644
File size: 9.9 KB
Line 
1DEC 21140 Driver
2################
3
4DEC 21240 Driver Introduction
5=============================
6
7.. COMMENT: XXX add back in cross reference to list of boards.
8
9One aim of our project is to port RTEMS on a standard PowerPC platform.
10To achieve it, we have chosen a Motorola MCP750 board. This board includes
11an Ethernet controller based on a DEC21140 chip. Because RTEMS has a
12TCP/IP stack, we will
13have to develop the DEC21140 related ethernet driver for the PowerPC port of
14RTEMS. As this controller is able to support 100Mbps network and as there is
15a lot of PCI card using this DEC chip, we have decided to first
16implement this driver on an Intel PC386 target to provide a solution for using
17RTEMS on PC with the 100Mbps network and then to port this code on PowerPC in
18a second phase.
19
20The aim of this document is to give some PCI board generalities and
21to explain the software architecture of the RTEMS driver. Finally, we will see
22what will be done for ChorusOs and Netboot environment .
23
24Document Revision History
25=========================
26
27*Current release*:
28
29- Current applicable release is 1.0.
30
31*Existing releases*:
32
33- 1.0 : Released the 10/02/98. First version of this document.
34
35- 0.1 : First draft of this document
36
37*Planned releases*:
38
39- None planned today.
40
41DEC21140 PCI Board Generalities
42===============================
43
44.. COMMENT: XXX add crossreference to PCI Register Figure
45
46This chapter describes rapidely the PCI interface of this Ethernet controller.
47The board we have chosen for our PC386 implementation is a D-Link DFE-500TX.
48This is a dual-speed 10/100Mbps Ethernet PCI adapter with a DEC21140AF chip.
49Like other PCI devices, this board has a PCI device's header containing some
50required configuration registers, as shown in the PCI Register Figure.
51By reading
52or writing these registers, a driver can obtain information about the type of
53the board, the interrupt it uses, the mapping of the chip specific registers, ...
54
55On Intel target, the chip specific registers can be accessed via 2
56methods : I/O port access or PCI address mapped access. We have chosen to implement
57the PCI address access to obtain compatible source code to the port the driver
58on a PowerPC target.
59
60.. COMMENT: PCI Device's Configuration Header Space Format
61
62
63.. image:: images/PCIreg.jpg
64
65
66.. COMMENT: XXX add crossreference to PCI Register Figure
67
68On RTEMS, a PCI API exists. We have used it to configure the board. After initializing
69this PCI module via the ``pci_initialize()`` function, we try to detect
70the DEC21140 based ethernet board. This board is characterized by its Vendor
71ID (0x1011) and its Device ID (0x0009). We give these arguments to the``pcib_find_by_deviceid``
72function which returns , if the device is present, a pointer to the configuration
73header space (see PCI Registers Fgure). Once this operation performed,
74the driver
75is able to extract the information it needs to configure the board internal
76registers, like the interrupt line, the base address,... The board internal
77registers will not be detailled here. You can find them in *DIGITAL
78Semiconductor 21140A PCI Fast Ethernet LAN Controller
79- Hardware Reference Manual*.
80
81.. COMMENT: fix citation
82
83RTEMS Driver Software Architecture
84==================================
85
86In this chapter will see the initialization phase, how the controller uses the
87host memory and the 2 threads launched at the initialization time.
88
89Initialization phase
90--------------------
91
92The DEC21140 Ethernet driver keeps the same software architecture than the other
93RTEMS ethernet drivers. The only API the programmer can use is the ``rtems_dec21140_driver_attach````(struct rtems_bsdnet_ifconfig \*config)`` function which
94detects the board and initializes the associated data structure (with registers
95base address, entry points to low-level initialization function,...), if the
96board is found.
97
98Once the attach function executed, the driver initializes the DEC
99chip. Then the driver connects an interrupt handler to the interrupt line driven
100by the Ethernet controller (the only interrupt which will be treated is the
101receive interrupt) and launches 2 threads : a receiver thread and a transmitter
102thread. Then the driver waits for incoming frame to give to the protocol stack
103or outcoming frame to send on the physical link.
104
105Memory Buffer
106-------------
107
108.. COMMENT: XXX add cross reference to Problem
109
110This DEC chip uses the host memory to store the incoming Ethernet frames and
111the descriptor of these frames. We have chosen to use 7 receive buffers and
1121 transmit buffer to optimize memory allocation due to cache and paging problem
113that will be explained in the section *Encountered Problems*.
114
115To reference these buffers to the DEC chip we use a buffer descriptors
116ring. The descriptor structure is defined in the Buffer Descriptor Figure.
117Each descriptor
118can reference one or two memory buffers. We choose to use only one buffer of
1191520 bytes per descriptor.
120
121The difference between a receive and a transmit buffer descriptor
122is located in the status and control bits fields. We do not give details here,
123please refer to the \[DEC21140 Hardware Manual].
124
125.. COMMENT: Buffer Descriptor
126
127
128.. image:: images/recvbd.jpg
129
130
131Receiver Thread
132---------------
133
134This thread is event driven. Each time a DEC PCI board interrupt occurs, the
135handler checks if this is a receive interrupt and send an event "reception"
136to the receiver thread which looks into the entire buffer descriptors ring the
137ones that contain a valid incoming frame (bit OWN=0 means descriptor belongs
138to host processor). Each valid incoming ethernet frame is sent to the protocol
139stack and the buffer descriptor is given back to the DEC board (the host processor
140reset bit OWN, which means descriptor belongs to 21140).
141
142Transmitter Thread
143------------------
144
145This thread is also event driven. Each time an Ethernet frame is put in the
146transmit queue, an event is sent to the transmit thread, which empty the queue
147by sending each outcoming frame. Because we use only one transmit buffer, we
148are sure that the frame is well-sent before sending the next.
149
150Encountered Problems
151====================
152
153On Intel PC386 target, we were faced with a problem of memory cache management.
154Because the DEC chip uses the host memory to store the incoming frame and because
155the DEC21140 configuration registers are mapped into the PCI address space,
156we must ensure that the data read (or written) by the host processor are the
157ones written (or read) by the DEC21140 device in the host memory and not old
158data stored in the cache memory. Therefore, we had to provide a way to manage
159the cache. This module is described in the document *RTEMS
160Cache Management For Intel*. On Intel, the
161memory region cache management is available only if the paging unit is enabled.
162We have used this paging mechanism, with 4Kb page. All the buffers allocated
163to store the incoming or outcoming frames, buffer descriptor and also the PCI
164address space of the DEC board are located in a memory space with cache disable.
165
166Concerning the buffers and their descriptors, we have tried to optimize
167the memory space in term of allocated page. One buffer has 1520 bytes, one descriptor
168has 16 bytes. We have 7 receive buffers and 1 transmit buffer, and for each,
1691 descriptor : (7+1)*(1520+16) = 12288 bytes = 12Kb = 3 entire pages. This
170allows not to lose too much memory or not to disable cache memory for a page
171which contains other data than buffer, which could decrease performance.
172
173ChorusOs DEC Driver
174===================
175
176Because ChorusOs is used in several Canon CRF projects, we must provide such
177a driver on this OS to ensure compatibility between the RTEMS and ChorusOs developments.
178On ChorusOs, a DEC driver source code already exists but only for a PowerPC
179target. We plan to port this code (which uses ChorusOs API) on Intel target.
180This will allow us to have homogeneous developments. Moreover, the port of the
181development performed with ChorusOs environment to RTEMS environment will be
182easier for the developers.
183
184Netboot DEC driver
185==================
186
187We use Netboot tool to load our development from a server to the target via
188an ethernet network. Currently, this tool does not support the DEC board. We
189plan to port the DEC driver for the Netboot tool.
190
191But concerning the port of the DEC driver into Netboot, we are faced
192with a problem : in RTEMS environment, the DEC driver is interrupt or event
193driven, in Netboot environment, it must be used in polling mode. It means that
194we will have to re-write some mechanisms of this driver.
195
196List of Ethernet cards using the DEC chip
197=========================================
198
199Many Ethernet adapter cards use the Tulip chip. Here is a non exhaustive list
200of adapters which support this driver :
201
202- Accton EtherDuo PCI.
203
204- Accton EN1207 All three media types supported.
205
206- Adaptec ANA6911/TX 21140-AC.
207
208- Cogent EM110 21140-A with DP83840 N-Way MII transceiver.
209
210- Cogent EM400 EM100 with 4 21140 100mbps-only ports + PCI Bridge.
211
212- Danpex EN-9400P3.
213
214- D-Link DFE500-Tx 21140-A with DP83840 transceiver.
215
216- Kingston EtherX KNE100TX 21140AE.
217
218- Netgear FX310 TX 10/100 21140AE.
219
220- SMC EtherPower10/100 With DEC21140 and 68836 SYM transceiver.
221
222- SMC EtherPower10/100 With DEC21140-AC and DP83840 MII transceiver.
223  Note: The EtherPower II uses the EPIC chip, which requires a different driver.
224
225- Surecom EP-320X DEC 21140.
226
227- Thomas Conrad TC5048.
228
229- Znyx ZX345 21140-A, usually with the DP83840 N-Way MII transciever. Some ZX345
230  cards made in 1996 have an ICS 1890 transciver instead.
231
232- ZNYX ZX348 Two 21140-A chips using ICS 1890 transcievers and either a 21052
233  or 21152 bridge. Early versions used National 83840 transcievers, but later
234  versions are depopulated ZX346 boards.
235
236- ZNYX ZX351 21140 chip with a Broadcom 100BaseT4 transciever.
237
238Our DEC driver has not been tested with all these cards, only with the D-Link
239DFE500-TX.
240
241- *[DEC21140 Hardware Manual] DIGITAL, *DIGITAL
242  Semiconductor 21140A PCI Fast Ethernet LAN Controller - Hardware
243  Reference Manual**.
244
245- *[99.TA.0021.M.ER]Emmanuel Raguet,*RTEMS Cache Management For Intel**.
246
Note: See TracBrowser for help on using the repository browser.