Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8759cf76e9a6322fc68dcbfaa1cbad00c74b199e
Commit:     8759cf76e9a6322fc68dcbfaa1cbad00c74b199e
Parent:     026d7917e592f91063861e002adf1c806d7756ae
Author:     Jan-Bernd Themann <[EMAIL PROTECTED]>
AuthorDate: Fri Sep 7 12:30:17 2007 +0200
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Thu Sep 13 00:13:51 2007 -0400

    ehea: propagate physical port state
    
    Introduces a module parameter to decide whether the physical
    port link state is propagated to the network stack or not.
    It makes sense not to take the physical port state into account
    on machines with more logical partitions that communicate
    with each other. This is always possible no matter what the physical
    port state is. Thus eHEA can be considered as a switch there.
    
    Signed-off-by: Jan-Bernd Themann <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/ehea/ehea.h      |    5 ++++-
 drivers/net/ehea/ehea_main.c |   14 +++++++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h
index d67f97b..8d58be5 100644
--- a/drivers/net/ehea/ehea.h
+++ b/drivers/net/ehea/ehea.h
@@ -39,7 +39,7 @@
 #include <asm/io.h>
 
 #define DRV_NAME       "ehea"
-#define DRV_VERSION    "EHEA_0073"
+#define DRV_VERSION    "EHEA_0074"
 
 /* eHEA capability flags */
 #define DLPAR_PORT_ADD_REM 1
@@ -402,6 +402,8 @@ struct ehea_mc_list {
 
 #define EHEA_PORT_UP 1
 #define EHEA_PORT_DOWN 0
+#define EHEA_PHY_LINK_UP 1
+#define EHEA_PHY_LINK_DOWN 0
 #define EHEA_MAX_PORT_RES 16
 struct ehea_port {
        struct ehea_adapter *adapter;    /* adapter that owns this port */
@@ -427,6 +429,7 @@ struct ehea_port {
        u32 msg_enable;
        u32 sig_comp_iv;
        u32 state;
+       u8 phy_link;
        u8 full_duplex;
        u8 autoneg;
        u8 num_def_qps;
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c
index db57474..1e9fd6f 100644
--- a/drivers/net/ehea/ehea_main.c
+++ b/drivers/net/ehea/ehea_main.c
@@ -53,17 +53,21 @@ static int rq3_entries = EHEA_DEF_ENTRIES_RQ3;
 static int sq_entries = EHEA_DEF_ENTRIES_SQ;
 static int use_mcs = 0;
 static int num_tx_qps = EHEA_NUM_TX_QP;
+static int prop_carrier_state = 0;
 
 module_param(msg_level, int, 0);
 module_param(rq1_entries, int, 0);
 module_param(rq2_entries, int, 0);
 module_param(rq3_entries, int, 0);
 module_param(sq_entries, int, 0);
+module_param(prop_carrier_state, int, 0);
 module_param(use_mcs, int, 0);
 module_param(num_tx_qps, int, 0);
 
 MODULE_PARM_DESC(num_tx_qps, "Number of TX-QPS");
 MODULE_PARM_DESC(msg_level, "msg_level");
+MODULE_PARM_DESC(prop_carrier_state, "Propagate carrier state of physical "
+                "port to stack. 1:yes, 0:no.  Default = 0 ");
 MODULE_PARM_DESC(rq3_entries, "Number of entries for Receive Queue 3 "
                 "[2^x - 1], x = [6..14]. Default = "
                 __MODULE_STRING(EHEA_DEF_ENTRIES_RQ3) ")");
@@ -814,7 +818,9 @@ int ehea_set_portspeed(struct ehea_port *port, u32 
port_speed)
                        ehea_error("Failed setting port speed");
                }
        }
-       netif_carrier_on(port->netdev);
+       if (!prop_carrier_state || (port->phy_link == EHEA_PHY_LINK_UP))
+               netif_carrier_on(port->netdev);
+
        kfree(cb4);
 out:
        return ret;
@@ -869,13 +875,19 @@ static void ehea_parse_eqe(struct ehea_adapter *adapter, 
u64 eqe)
                        }
 
                if (EHEA_BMASK_GET(NEQE_EXTSWITCH_PORT_UP, eqe)) {
+                       port->phy_link = EHEA_PHY_LINK_UP;
                        if (netif_msg_link(port))
                                ehea_info("%s: Physical port up",
                                          port->netdev->name);
+                       if (prop_carrier_state)
+                               netif_carrier_on(port->netdev);
                } else {
+                       port->phy_link = EHEA_PHY_LINK_DOWN;
                        if (netif_msg_link(port))
                                ehea_info("%s: Physical port down",
                                          port->netdev->name);
+                       if (prop_carrier_state)
+                               netif_carrier_off(port->netdev);
                }
 
                if (EHEA_BMASK_GET(NEQE_EXTSWITCH_PRIMARY, eqe))
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to