LCOV - code coverage report
Current view: top level - drivers/of - of_net.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 13 0.0 %
Date: 2014-02-18 Functions: 0 2 0.0 %
Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  * OF helpers for network devices.
       3                 :            :  *
       4                 :            :  * This file is released under the GPLv2
       5                 :            :  *
       6                 :            :  * Initially copied out of arch/powerpc/kernel/prom_parse.c
       7                 :            :  */
       8                 :            : #include <linux/etherdevice.h>
       9                 :            : #include <linux/kernel.h>
      10                 :            : #include <linux/of_net.h>
      11                 :            : #include <linux/phy.h>
      12                 :            : #include <linux/export.h>
      13                 :            : 
      14                 :            : /**
      15                 :            :  * It maps 'enum phy_interface_t' found in include/linux/phy.h
      16                 :            :  * into the device tree binding of 'phy-mode', so that Ethernet
      17                 :            :  * device driver can get phy interface from device tree.
      18                 :            :  */
      19                 :            : static const char *phy_modes[] = {
      20                 :            :         [PHY_INTERFACE_MODE_NA]         = "",
      21                 :            :         [PHY_INTERFACE_MODE_MII]        = "mii",
      22                 :            :         [PHY_INTERFACE_MODE_GMII]       = "gmii",
      23                 :            :         [PHY_INTERFACE_MODE_SGMII]      = "sgmii",
      24                 :            :         [PHY_INTERFACE_MODE_TBI]        = "tbi",
      25                 :            :         [PHY_INTERFACE_MODE_REVMII]     = "rev-mii",
      26                 :            :         [PHY_INTERFACE_MODE_RMII]       = "rmii",
      27                 :            :         [PHY_INTERFACE_MODE_RGMII]      = "rgmii",
      28                 :            :         [PHY_INTERFACE_MODE_RGMII_ID]   = "rgmii-id",
      29                 :            :         [PHY_INTERFACE_MODE_RGMII_RXID] = "rgmii-rxid",
      30                 :            :         [PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid",
      31                 :            :         [PHY_INTERFACE_MODE_RTBI]       = "rtbi",
      32                 :            :         [PHY_INTERFACE_MODE_SMII]       = "smii",
      33                 :            : };
      34                 :            : 
      35                 :            : /**
      36                 :            :  * of_get_phy_mode - Get phy mode for given device_node
      37                 :            :  * @np: Pointer to the given device_node
      38                 :            :  *
      39                 :            :  * The function gets phy interface string from property 'phy-mode',
      40                 :            :  * and return its index in phy_modes table, or errno in error case.
      41                 :            :  */
      42                 :          0 : int of_get_phy_mode(struct device_node *np)
      43                 :            : {
      44                 :            :         const char *pm;
      45                 :            :         int err, i;
      46                 :            : 
      47                 :          0 :         err = of_property_read_string(np, "phy-mode", &pm);
      48         [ #  # ]:          0 :         if (err < 0)
      49                 :            :                 return err;
      50                 :            : 
      51         [ #  # ]:          0 :         for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
      52         [ #  # ]:          0 :                 if (!strcasecmp(pm, phy_modes[i]))
      53                 :            :                         return i;
      54                 :            : 
      55                 :            :         return -ENODEV;
      56                 :            : }
      57                 :            : EXPORT_SYMBOL_GPL(of_get_phy_mode);
      58                 :            : 
      59                 :            : /**
      60                 :            :  * Search the device tree for the best MAC address to use.  'mac-address' is
      61                 :            :  * checked first, because that is supposed to contain to "most recent" MAC
      62                 :            :  * address. If that isn't set, then 'local-mac-address' is checked next,
      63                 :            :  * because that is the default address.  If that isn't set, then the obsolete
      64                 :            :  * 'address' is checked, just in case we're using an old device tree.
      65                 :            :  *
      66                 :            :  * Note that the 'address' property is supposed to contain a virtual address of
      67                 :            :  * the register set, but some DTS files have redefined that property to be the
      68                 :            :  * MAC address.
      69                 :            :  *
      70                 :            :  * All-zero MAC addresses are rejected, because those could be properties that
      71                 :            :  * exist in the device tree, but were not set by U-Boot.  For example, the
      72                 :            :  * DTS could define 'mac-address' and 'local-mac-address', with zero MAC
      73                 :            :  * addresses.  Some older U-Boots only initialized 'local-mac-address'.  In
      74                 :            :  * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
      75                 :            :  * but is all zeros.
      76                 :            : */
      77                 :          0 : const void *of_get_mac_address(struct device_node *np)
      78                 :            : {
      79                 :            :         struct property *pp;
      80                 :            : 
      81                 :          0 :         pp = of_find_property(np, "mac-address", NULL);
      82 [ #  # ][ #  # ]:          0 :         if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
                 [ #  # ]
      83                 :            :                 return pp->value;
      84                 :            : 
      85                 :          0 :         pp = of_find_property(np, "local-mac-address", NULL);
      86 [ #  # ][ #  # ]:          0 :         if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
                 [ #  # ]
      87                 :            :                 return pp->value;
      88                 :            : 
      89                 :          0 :         pp = of_find_property(np, "address", NULL);
      90 [ #  # ][ #  # ]:          0 :         if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value))
                 [ #  # ]
      91                 :          0 :                 return pp->value;
      92                 :            : 
      93                 :            :         return NULL;
      94                 :            : }
      95                 :            : EXPORT_SYMBOL(of_get_mac_address);

Generated by: LCOV version 1.9