The U-Boot Driver Model Project
===============================
Net system analysis
===================
Marek Vasut <marek.vasut@gmail.com>
2012-03-03

I) Overview
-----------

The networking subsystem already supports multiple devices. Therefore the
conversion shall not be very hard.

The network subsystem is operated from net/eth.c, which tracks all registered
ethernet interfaces and calls their particular functions registered via
eth_register().

The eth_register() is called from the network driver initialization function,
which in turn is called most often either from "board_net_init()" or
"cpu_net_init()". This function has one important argument, which is the
"struct eth_device", defined at include/net.h:

struct eth_device {
  /* DRIVER: Name of the device */
  char name[NAMESIZE];
  /* DRIVER: MAC address */
  unsigned char enetaddr[6];
  /* DRIVER: Register base address */
  int iobase;
  /* CORE: state of the device */
  int state;

  /* DRIVER: Device initialization function */
  int  (*init) (struct eth_device*, bd_t*);
  /* DRIVER: Function for sending packets */
  int  (*send) (struct eth_device*, volatile void* packet, int length);
  /* DRIVER: Function for receiving packets */
  int  (*recv) (struct eth_device*);
  /* DRIVER: Function to cease operation of the device */
  void (*halt) (struct eth_device*);
  /* DRIVER: Function to send multicast packet (OPTIONAL) */
  int (*mcast) (struct eth_device*, u32 ip, u8 set);
  /* DRIVER: Function to change ethernet MAC address */
  int  (*write_hwaddr) (struct eth_device*);
  /* CORE: Next device in the linked list of devices managed by net core */
  struct eth_device *next;
  /* CORE: Device index */
  int index;
  /* DRIVER: Driver's private data */
  void *priv;
};

This structure defines the particular driver, though also contains elements that
should not be exposed to the driver, like core state.

Small, but important part of the networking subsystem is the PHY management
layer, whose drivers are contained in drivers/net/phy. These drivers register in
a very similar manner to network drivers, by calling "phy_register()" with the
argument of "struct phy_driver":

struct phy_driver {
  /* DRIVER: Name of the PHY driver */
  char *name;
  /* DRIVER: UID of the PHY driver */
  unsigned int uid;
  /* DRIVER: Mask for UID of the PHY driver */
  unsigned int mask;
  /* DRIVER: MMDS of the PHY driver */
  unsigned int mmds;
  /* DRIVER: Features the PHY driver supports */
  u32 features;
  /* DRIVER: Initialize the PHY hardware */
  int (*probe)(struct phy_device *phydev);
  /* DRIVER: Reconfigure the PHY hardware */
  int (*config)(struct phy_device *phydev);
  /* DRIVER: Turn on the PHY hardware, allow it to send/receive */
  int (*startup)(struct phy_device *phydev);
  /* DRIVER: Turn off the PHY hardware */
  int (*shutdown)(struct phy_device *phydev);
  /* CORE: Allows this driver to be part of list of drivers */
  struct list_head list;
};

II) Approach
------------

To convert the elements of network subsystem to proper driver model method, the
"struct eth_device" will have to be split into multiple components. The first
will be a structure defining the driver operations:

struct eth_driver_ops {
  int  (*init)(struct instance*, bd_t*);
  int  (*send)(struct instance*, void *packet, int length);
  int  (*recv)(struct instance*);
  void (*halt)(struct instance*);
  int  (*mcast)(struct instance*, u32 ip, u8 set);
  int  (*write_hwaddr)(struct instance*);
};

Next, there'll be platform data which will be per-driver and will replace the
"priv" part of "struct eth_device". Last part will be the per-device core state.

With regards to the PHY part of the API, the "struct phy_driver" is almost ready
to be used with the new driver model approach. The only change will be the
replacement of per-driver initialization functions and removal of
"phy_register()" function in favor or driver model approach.

III) Analysis of in-tree drivers
--------------------------------

  1) drivers/net/4xx_enet.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  2) drivers/net/altera_tse.c
  ---------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  3) drivers/net/armada100_fec.c
  ------------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  4) drivers/net/at91_emac.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  5) drivers/net/ax88180.c
  ------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  6) drivers/net/ax88796.c
  ------------------------

  This file contains a components of the NE2000 driver, implementing only
  different parts on the NE2000 clone AX88796. This being no standalone driver,
  no conversion will be done here.

  7) drivers/net/bfin_mac.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  8) drivers/net/calxedaxgmac.c
  -----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  9) drivers/net/cs8900.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  10) drivers/net/davinci_emac.c
  ------------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  11) drivers/net/dc2114x.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  12) drivers/net/designware.c
  ----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  13) drivers/net/dm9000x.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  14) drivers/net/dnet.c
  ----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  15) drivers/net/e1000.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  16) drivers/net/e1000_spi.c
  ---------------------------

  Driver for the SPI bus integrated on the Intel E1000. This is not part of the
  network stack.

  17) drivers/net/eepro100.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  18) drivers/net/enc28j60.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  19) drivers/net/ep93xx_eth.c
  ----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  20) drivers/net/ethoc.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  21) drivers/net/fec_mxc.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  22) drivers/net/fsl_mcdmafec.c
  ------------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  23) drivers/net/fsl_mdio.c
  --------------------------

  This file contains driver for FSL MDIO interface, which is not part of the
  networking stack.

  24) drivers/net/ftgmac100.c
  ---------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  25) drivers/net/ftmac100.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  26) drivers/net/greth.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  27) drivers/net/inca-ip_sw.c
  ----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  28) drivers/net/ks8695eth.c
  ---------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  29) drivers/net/lan91c96.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  30) drivers/net/macb.c
  ----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  31) drivers/net/mcffec.c
  ------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  32) drivers/net/mcfmii.c
  ------------------------

  This file contains MII interface driver for MCF FEC.

  33) drivers/net/mpc512x_fec.c
  -----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  34) drivers/net/mpc5xxx_fec.c
  -----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  35) drivers/net/mvgbe.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  36) drivers/net/natsemi.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  37) drivers/net/ne2000_base.c
  -----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process. This driver contains the core
  implementation of NE2000, which needs a few external functions, implemented by
  AX88796, NE2000 etc.

  38) drivers/net/ne2000.c
  ------------------------

  This file implements external functions necessary for native NE2000 compatible
  networking card to work.

  39) drivers/net/netarm_eth.c
  ----------------------------

  This driver uses the old, legacy, network API and will either have to be
  converted or removed.

  40) drivers/net/netconsole.c
  ----------------------------

  This is actually an STDIO driver.

  41) drivers/net/ns8382x.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  42) drivers/net/pcnet.c
  -----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  43) drivers/net/plb2800_eth.c
  -----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  44) drivers/net/rtl8139.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  45) drivers/net/rtl8169.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  46) drivers/net/sh_eth.c
  ------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  47) drivers/net/smc91111.c
  --------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  48) drivers/net/smc911x.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  49) drivers/net/tsec.c
  ----------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  50) drivers/net/tsi108_eth.c
  ----------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  51) drivers/net/uli526x.c
  -------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  52) drivers/net/vsc7385.c
  -------------------------

  This is a driver that only uploads firmware to a switch. This is not subject
  of conversion.

  53) drivers/net/xilinx_axi_emac.c
  ---------------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.

  54) drivers/net/xilinx_emaclite.c
  ---------------------------------

  This driver uses the standard new networking API, therefore there should be no
  obstacles throughout the conversion process.
