blob: 097ed69600ea43a684a66445892986a819dbdb85 [file] [log] [blame]
Marek Vasut3d6885b2012-08-08 01:42:21 +00001The U-Boot Driver Model Project
2===============================
3Net system analysis
4===================
5Marek Vasut <marek.vasut@gmail.com>
62012-03-03
7
8I) Overview
9-----------
10
11The networking subsystem already supports multiple devices. Therefore the
12conversion shall not be very hard.
13
14The network subsystem is operated from net/eth.c, which tracks all registered
15ethernet interfaces and calls their particular functions registered via
16eth_register().
17
18The eth_register() is called from the network driver initialization function,
19which in turn is called most often either from "board_net_init()" or
20"cpu_net_init()". This function has one important argument, which is the
21"struct eth_device", defined at include/net.h:
22
23struct eth_device {
24 /* DRIVER: Name of the device */
25 char name[NAMESIZE];
26 /* DRIVER: MAC address */
27 unsigned char enetaddr[6];
28 /* DRIVER: Register base address */
29 int iobase;
30 /* CORE: state of the device */
31 int state;
32
33 /* DRIVER: Device initialization function */
34 int (*init) (struct eth_device*, bd_t*);
35 /* DRIVER: Function for sending packets */
36 int (*send) (struct eth_device*, volatile void* packet, int length);
37 /* DRIVER: Function for receiving packets */
38 int (*recv) (struct eth_device*);
39 /* DRIVER: Function to cease operation of the device */
40 void (*halt) (struct eth_device*);
41 /* DRIVER: Function to send multicast packet (OPTIONAL) */
42 int (*mcast) (struct eth_device*, u32 ip, u8 set);
43 /* DRIVER: Function to change ethernet MAC address */
44 int (*write_hwaddr) (struct eth_device*);
45 /* CORE: Next device in the linked list of devices managed by net core */
46 struct eth_device *next;
47 /* CORE: Device index */
48 int index;
49 /* DRIVER: Driver's private data */
50 void *priv;
51};
52
53This structure defines the particular driver, though also contains elements that
54should not be exposed to the driver, like core state.
55
56Small, but important part of the networking subsystem is the PHY management
57layer, whose drivers are contained in drivers/net/phy. These drivers register in
58a very similar manner to network drivers, by calling "phy_register()" with the
59argument of "struct phy_driver":
60
61struct phy_driver {
62 /* DRIVER: Name of the PHY driver */
63 char *name;
64 /* DRIVER: UID of the PHY driver */
65 unsigned int uid;
66 /* DRIVER: Mask for UID of the PHY driver */
67 unsigned int mask;
68 /* DRIVER: MMDS of the PHY driver */
69 unsigned int mmds;
70 /* DRIVER: Features the PHY driver supports */
71 u32 features;
72 /* DRIVER: Initialize the PHY hardware */
73 int (*probe)(struct phy_device *phydev);
74 /* DRIVER: Reconfigure the PHY hardware */
75 int (*config)(struct phy_device *phydev);
76 /* DRIVER: Turn on the PHY hardware, allow it to send/receive */
77 int (*startup)(struct phy_device *phydev);
78 /* DRIVER: Turn off the PHY hardware */
79 int (*shutdown)(struct phy_device *phydev);
80 /* CORE: Allows this driver to be part of list of drivers */
81 struct list_head list;
82};
83
84II) Approach
85------------
86
87To convert the elements of network subsystem to proper driver model method, the
88"struct eth_device" will have to be split into multiple components. The first
89will be a structure defining the driver operations:
90
91struct eth_driver_ops {
92 int (*init)(struct instance*, bd_t*);
93 int (*send)(struct instance*, void *packet, int length);
94 int (*recv)(struct instance*);
95 void (*halt)(struct instance*);
96 int (*mcast)(struct instance*, u32 ip, u8 set);
97 int (*write_hwaddr)(struct instance*);
98};
99
100Next, there'll be platform data which will be per-driver and will replace the
101"priv" part of "struct eth_device". Last part will be the per-device core state.
102
103With regards to the PHY part of the API, the "struct phy_driver" is almost ready
104to be used with the new driver model approach. The only change will be the
105replacement of per-driver initialization functions and removal of
106"phy_register()" function in favor or driver model approach.
107
108III) Analysis of in-tree drivers
109--------------------------------
110
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900111 drivers/net/4xx_enet.c
112 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000113
114 This driver uses the standard new networking API, therefore there should be no
115 obstacles throughout the conversion process.
116
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900117 drivers/net/altera_tse.c
118 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000119
120 This driver uses the standard new networking API, therefore there should be no
121 obstacles throughout the conversion process.
122
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900123 drivers/net/armada100_fec.c
124 ---------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000125
126 This driver uses the standard new networking API, therefore there should be no
127 obstacles throughout the conversion process.
128
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900129 drivers/net/at91_emac.c
130 -----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000131
132 This driver uses the standard new networking API, therefore there should be no
133 obstacles throughout the conversion process.
134
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900135 drivers/net/ax88180.c
136 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000137
138 This driver uses the standard new networking API, therefore there should be no
139 obstacles throughout the conversion process.
140
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900141 drivers/net/ax88796.c
142 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000143
144 This file contains a components of the NE2000 driver, implementing only
145 different parts on the NE2000 clone AX88796. This being no standalone driver,
146 no conversion will be done here.
147
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900148 drivers/net/bfin_mac.c
149 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000150
151 This driver uses the standard new networking API, therefore there should be no
152 obstacles throughout the conversion process.
153
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900154 drivers/net/calxedaxgmac.c
155 --------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000156
157 This driver uses the standard new networking API, therefore there should be no
158 obstacles throughout the conversion process.
159
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900160 drivers/net/cs8900.c
161 --------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000162
163 This driver uses the standard new networking API, therefore there should be no
164 obstacles throughout the conversion process.
165
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900166 drivers/net/davinci_emac.c
167 --------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000168
169 This driver uses the standard new networking API, therefore there should be no
170 obstacles throughout the conversion process.
171
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900172 drivers/net/dc2114x.c
173 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000174
175 This driver uses the standard new networking API, therefore there should be no
176 obstacles throughout the conversion process.
177
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900178 drivers/net/designware.c
179 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000180
181 This driver uses the standard new networking API, therefore there should be no
182 obstacles throughout the conversion process.
183
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900184 drivers/net/dm9000x.c
185 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000186
187 This driver uses the standard new networking API, therefore there should be no
188 obstacles throughout the conversion process.
189
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900190 drivers/net/dnet.c
191 ------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000192
193 This driver uses the standard new networking API, therefore there should be no
194 obstacles throughout the conversion process.
195
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900196 drivers/net/e1000.c
197 -------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000198
199 This driver uses the standard new networking API, therefore there should be no
200 obstacles throughout the conversion process.
201
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900202 drivers/net/e1000_spi.c
203 -----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000204
205 Driver for the SPI bus integrated on the Intel E1000. This is not part of the
206 network stack.
207
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900208 drivers/net/eepro100.c
209 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000210
211 This driver uses the standard new networking API, therefore there should be no
212 obstacles throughout the conversion process.
213
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900214 drivers/net/enc28j60.c
215 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000216
217 This driver uses the standard new networking API, therefore there should be no
218 obstacles throughout the conversion process.
219
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900220 drivers/net/ep93xx_eth.c
221 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000222
223 This driver uses the standard new networking API, therefore there should be no
224 obstacles throughout the conversion process.
225
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900226 drivers/net/ethoc.c
227 -------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000228
229 This driver uses the standard new networking API, therefore there should be no
230 obstacles throughout the conversion process.
231
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900232 drivers/net/fec_mxc.c
233 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000234
235 This driver uses the standard new networking API, therefore there should be no
236 obstacles throughout the conversion process.
237
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900238 drivers/net/fsl_mcdmafec.c
239 --------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000240
241 This driver uses the standard new networking API, therefore there should be no
242 obstacles throughout the conversion process.
243
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900244 drivers/net/fsl_mdio.c
245 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000246
247 This file contains driver for FSL MDIO interface, which is not part of the
248 networking stack.
249
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900250 drivers/net/ftgmac100.c
251 -----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000252
253 This driver uses the standard new networking API, therefore there should be no
254 obstacles throughout the conversion process.
255
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900256 drivers/net/ftmac100.c
257 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000258
259 This driver uses the standard new networking API, therefore there should be no
260 obstacles throughout the conversion process.
261
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900262 drivers/net/greth.c
263 -------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000264
265 This driver uses the standard new networking API, therefore there should be no
266 obstacles throughout the conversion process.
267
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900268 drivers/net/inca-ip_sw.c
269 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000270
271 This driver uses the standard new networking API, therefore there should be no
272 obstacles throughout the conversion process.
273
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900274 drivers/net/ks8695eth.c
275 -----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000276
277 This driver uses the standard new networking API, therefore there should be no
278 obstacles throughout the conversion process.
279
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900280 drivers/net/lan91c96.c
281 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000282
283 This driver uses the standard new networking API, therefore there should be no
284 obstacles throughout the conversion process.
285
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900286 drivers/net/macb.c
287 ------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000288
289 This driver uses the standard new networking API, therefore there should be no
290 obstacles throughout the conversion process.
291
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900292 drivers/net/mcffec.c
293 --------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000294
295 This driver uses the standard new networking API, therefore there should be no
296 obstacles throughout the conversion process.
297
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900298 drivers/net/mcfmii.c
299 --------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000300
301 This file contains MII interface driver for MCF FEC.
302
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900303 drivers/net/mpc512x_fec.c
304 -------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000305
306 This driver uses the standard new networking API, therefore there should be no
307 obstacles throughout the conversion process.
308
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900309 drivers/net/mpc5xxx_fec.c
310 -------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000311
312 This driver uses the standard new networking API, therefore there should be no
313 obstacles throughout the conversion process.
314
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900315 drivers/net/mvgbe.c
316 -------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000317
318 This driver uses the standard new networking API, therefore there should be no
319 obstacles throughout the conversion process.
320
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900321 drivers/net/natsemi.c
322 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000323
324 This driver uses the standard new networking API, therefore there should be no
325 obstacles throughout the conversion process.
326
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900327 drivers/net/ne2000_base.c
328 -------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000329
330 This driver uses the standard new networking API, therefore there should be no
331 obstacles throughout the conversion process. This driver contains the core
332 implementation of NE2000, which needs a few external functions, implemented by
333 AX88796, NE2000 etc.
334
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900335 drivers/net/ne2000.c
336 --------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000337
338 This file implements external functions necessary for native NE2000 compatible
339 networking card to work.
340
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900341 drivers/net/netconsole.c
342 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000343
344 This is actually an STDIO driver.
345
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900346 drivers/net/ns8382x.c
347 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000348
349 This driver uses the standard new networking API, therefore there should be no
350 obstacles throughout the conversion process.
351
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900352 drivers/net/pcnet.c
353 -------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000354
355 This driver uses the standard new networking API, therefore there should be no
356 obstacles throughout the conversion process.
357
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900358 drivers/net/plb2800_eth.c
359 -------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000360
361 This driver uses the standard new networking API, therefore there should be no
362 obstacles throughout the conversion process.
363
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900364 drivers/net/rtl8139.c
365 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000366
367 This driver uses the standard new networking API, therefore there should be no
368 obstacles throughout the conversion process.
369
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900370 drivers/net/rtl8169.c
371 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000372
373 This driver uses the standard new networking API, therefore there should be no
374 obstacles throughout the conversion process.
375
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900376 drivers/net/sh_eth.c
377 --------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000378
379 This driver uses the standard new networking API, therefore there should be no
380 obstacles throughout the conversion process.
381
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900382 drivers/net/smc91111.c
383 ----------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000384
385 This driver uses the standard new networking API, therefore there should be no
386 obstacles throughout the conversion process.
387
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900388 drivers/net/smc911x.c
389 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000390
391 This driver uses the standard new networking API, therefore there should be no
392 obstacles throughout the conversion process.
393
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900394 drivers/net/tsec.c
395 ------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000396
397 This driver uses the standard new networking API, therefore there should be no
398 obstacles throughout the conversion process.
399
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900400 drivers/net/tsi108_eth.c
401 ------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000402
403 This driver uses the standard new networking API, therefore there should be no
404 obstacles throughout the conversion process.
405
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900406 drivers/net/uli526x.c
407 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000408
409 This driver uses the standard new networking API, therefore there should be no
410 obstacles throughout the conversion process.
411
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900412 drivers/net/vsc7385.c
413 ---------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000414
415 This is a driver that only uploads firmware to a switch. This is not subject
416 of conversion.
417
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900418 drivers/net/xilinx_axi_emac.c
419 -----------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000420
421 This driver uses the standard new networking API, therefore there should be no
422 obstacles throughout the conversion process.
423
Masahiro Yamadaa756da92013-09-24 10:32:04 +0900424 drivers/net/xilinx_emaclite.c
425 -----------------------------
Marek Vasut3d6885b2012-08-08 01:42:21 +0000426
427 This driver uses the standard new networking API, therefore there should be no
428 obstacles throughout the conversion process.