|  | This patch rewrites the miiphybb ( Bit-banged MII bus driver ) in order to | 
|  | support an arbitrary number of mii buses. This feature is useful when your | 
|  | board uses different mii buses for different phys and all (or a part) of these | 
|  | buses are implemented via bit-banging mode. | 
|  |  | 
|  | The driver requires that the following macros should be defined into the board | 
|  | configuration file: | 
|  |  | 
|  | CONFIG_BITBANGMII	- Enable the miiphybb driver | 
|  | CONFIG_BITBANGMII_MULTI - Enable the multi bus support | 
|  |  | 
|  | If the CONFIG_BITBANGMII_MULTI is not defined, the board's config file needs | 
|  | to define at least the following macros: | 
|  |  | 
|  | MII_INIT      - Generic code to enable the MII bus (optional) | 
|  | MDIO_DECLARE  - Declaration needed to access to the MDIO pin (optional) | 
|  | MDIO_ACTIVE   - Activate the MDIO pin as out pin | 
|  | MDIO_TRISTATE - Activate the MDIO pin as input/tristate pin | 
|  | MDIO_READ     - Read the MDIO pin | 
|  | MDIO(v)       - Write v on the MDIO pin | 
|  | MDC_DECLARE   - Declaration needed to access to the MDC pin (optional) | 
|  | MDC(v)	      - Write v on the MDC pin | 
|  |  | 
|  | The previous macros make the driver compatible with the previous version | 
|  | (that didn't support the multi-bus). | 
|  |  | 
|  | When the CONFIG_BITBANGMII_MULTI is also defined, the board code needs to fill | 
|  | the bb_miiphy_buses[] array with a record for each required bus and declare | 
|  | the bb_miiphy_buses_num variable with the number of mii buses. | 
|  | The record (struct bb_miiphy_bus) has the following fields/callbacks (see | 
|  | miiphy.h for details): | 
|  |  | 
|  | char name[]	       - The symbolic name that must be equal to the MII bus | 
|  | registered name | 
|  | int (*init)()	       - Initialization function called at startup time (just | 
|  | before the Ethernet initialization) | 
|  | int (*mdio_active)()   - Activate the MDIO pin as output | 
|  | int (*mdio_tristate)() - Activate the MDIO pin as input/tristate pin | 
|  | int (*set_mdio)()      - Write the MDIO pin | 
|  | int (*get_mdio)()      - Read the MDIO pin | 
|  | int (*set_mdc)()       - Write the MDC pin | 
|  | int (*delay)()	       - Delay function | 
|  | void *priv	       - Private data used by board specific code | 
|  |  | 
|  | The board code will look like: | 
|  |  | 
|  | struct bb_miiphy_bus bb_miiphy_buses[] = { | 
|  | { .name = "miibus#1", .init = b1_init, .mdio_active = b1_mdio_active, ... }, | 
|  | { .name = "miibus#2", .init = b2_init, .mdio_active = b2_mdio_active, ... }, | 
|  | ... | 
|  | }; | 
|  | int bb_miiphy_buses_num = sizeof(bb_miiphy_buses) / | 
|  | sizeof(bb_miiphy_buses[0]); | 
|  |  | 
|  | 2009 Industrie Dial Face S.p.A. | 
|  | Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com> |