qed: Add ll2 ability of opening a secondary queue
authorMichal Kalderon <Michal.Kalderon@cavium.com>
Mon, 9 Oct 2017 09:37:44 +0000 (12:37 +0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Oct 2017 17:21:26 +0000 (10:21 -0700)
When more than one ll2 queue is opened ( that is not an OOO queue )
ll2 code does not have enough information to determine whether
the queue is the main one or not, so a new field is added to the
acquire input data to expose the control of determining whether
the queue is the main queue or a secondary queue.

Signed-off-by: Michal Kalderon <Michal.Kalderon@cavium.com>
Signed-off-by: Ariel Elior <Ariel.Elior@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_ll2.c
drivers/net/ethernet/qlogic/qed/qed_ll2.h
include/linux/qed/qed_ll2_if.h

index 75af40a7690a8e6debc3606d933273025e637bdf..3c695da890dfd6488e9eb77a1c0798548a21f4de 100644 (file)
@@ -894,7 +894,7 @@ static int qed_sp_ll2_rx_queue_start(struct qed_hwfn *p_hwfn,
        p_ramrod->drop_ttl0_flg = p_ll2_conn->input.rx_drop_ttl0_flg;
        p_ramrod->inner_vlan_removal_en = p_ll2_conn->input.rx_vlan_removal_en;
        p_ramrod->queue_id = p_ll2_conn->queue_id;
-       p_ramrod->main_func_queue = (conn_type == QED_LL2_TYPE_OOO) ? 0 : 1;
+       p_ramrod->main_func_queue = p_ll2_conn->main_func_queue ? 1 : 0;
 
        if ((IS_MF_DEFAULT(p_hwfn) || IS_MF_SI(p_hwfn)) &&
            p_ramrod->main_func_queue && (conn_type != QED_LL2_TYPE_ROCE) &&
@@ -1265,6 +1265,11 @@ int qed_ll2_acquire_connection(void *cxt, struct qed_ll2_acquire_data *data)
 
        p_ll2_info->tx_dest = (data->input.tx_dest == QED_LL2_TX_DEST_NW) ?
                              CORE_TX_DEST_NW : CORE_TX_DEST_LB;
+       if (data->input.conn_type == QED_LL2_TYPE_OOO ||
+           data->input.secondary_queue)
+               p_ll2_info->main_func_queue = false;
+       else
+               p_ll2_info->main_func_queue = true;
 
        /* Correct maximum number of Tx BDs */
        p_tx_max = &p_ll2_info->input.tx_max_bds_per_packet;
index 9bdd08f15c793cd7bb70dbfdd6ea2895f74ddce5..f65817012e9722e5a47458d30a47ef79209075a7 100644 (file)
@@ -121,6 +121,7 @@ struct qed_ll2_info {
        bool b_active;
        enum core_tx_dest tx_dest;
        u8 tx_stats_en;
+       bool main_func_queue;
        struct qed_ll2_rx_queue rx_queue;
        struct qed_ll2_tx_queue tx_queue;
        struct qed_ll2_cbs cbs;
index 89fa0bbd54f328bb507fab5e5cce5a4222dead58..d7cca590b743f726d8abb17ed4380c13716ac29f 100644 (file)
@@ -171,6 +171,7 @@ struct qed_ll2_acquire_data_inputs {
        enum qed_ll2_tx_dest tx_dest;
        enum qed_ll2_error_handle ai_err_packet_too_big;
        enum qed_ll2_error_handle ai_err_no_buf;
+       bool secondary_queue;
        u8 gsi_enable;
 };