提交 13c54771 编写于 作者: M Mintz, Yuval 提交者: David S. Miller

qed: Cleaner seperation of LL2 inputs

A LL2 connection [qed_ll2_info] has a sub-structure of type qed_ll2_conn
that contain various inputs for ll2 acquisition, but the connection also
utilizes a couple of other inputs.

Restructure the input structure to include all the inputs and refactor
the code necessary to populate those.
Signed-off-by: NYuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 68be910c
...@@ -47,17 +47,6 @@ ...@@ -47,17 +47,6 @@
#define QED_MAX_NUM_OF_LL2_CONNECTIONS (4) #define QED_MAX_NUM_OF_LL2_CONNECTIONS (4)
enum qed_ll2_conn_type {
QED_LL2_TYPE_FCOE,
QED_LL2_TYPE_ISCSI,
QED_LL2_TYPE_TEST,
QED_LL2_TYPE_ISCSI_OOO,
QED_LL2_TYPE_RESERVED2,
QED_LL2_TYPE_ROCE,
QED_LL2_TYPE_RESERVED3,
MAX_QED_LL2_RX_CONN_TYPE
};
struct qed_ll2_rx_packet { struct qed_ll2_rx_packet {
struct list_head list_entry; struct list_head list_entry;
struct core_rx_bd_with_buff_len *rxq_bd; struct core_rx_bd_with_buff_len *rxq_bd;
...@@ -123,27 +112,17 @@ struct qed_ll2_tx_queue { ...@@ -123,27 +112,17 @@ struct qed_ll2_tx_queue {
bool b_completing_packet; bool b_completing_packet;
}; };
struct qed_ll2_conn {
enum qed_ll2_conn_type conn_type;
u16 mtu;
u8 rx_drop_ttl0_flg;
u8 rx_vlan_removal_en;
u8 tx_tc;
enum core_tx_dest tx_dest;
enum core_error_handle ai_err_packet_too_big;
enum core_error_handle ai_err_no_buf;
u8 gsi_enable;
};
struct qed_ll2_info { struct qed_ll2_info {
/* Lock protecting the state of LL2 */ /* Lock protecting the state of LL2 */
struct mutex mutex; struct mutex mutex;
struct qed_ll2_conn conn;
struct qed_ll2_acquire_data_inputs input;
u32 cid; u32 cid;
u8 my_id; u8 my_id;
u8 queue_id; u8 queue_id;
u8 tx_stats_id; u8 tx_stats_id;
bool b_active; bool b_active;
enum core_tx_dest tx_dest;
u8 tx_stats_en; u8 tx_stats_en;
struct qed_ll2_rx_queue rx_queue; struct qed_ll2_rx_queue rx_queue;
struct qed_ll2_tx_queue tx_queue; struct qed_ll2_tx_queue tx_queue;
...@@ -154,20 +133,13 @@ struct qed_ll2_info { ...@@ -154,20 +133,13 @@ struct qed_ll2_info {
* starts rx & tx (if relevant) queues pair. Provides * starts rx & tx (if relevant) queues pair. Provides
* connecion handler as output parameter. * connecion handler as output parameter.
* *
* @param p_hwfn
* @param p_params Contain various configuration properties
* @param rx_num_desc
* @param tx_num_desc
*
* @param p_connection_handle Output container for LL2 connection's handle
* *
* @return 0 on success, failure otherwise * @param p_hwfn
* @param data - describes connection parameters
* @return int
*/ */
int qed_ll2_acquire_connection(struct qed_hwfn *p_hwfn, int qed_ll2_acquire_connection(struct qed_hwfn *p_hwfn,
struct qed_ll2_conn *p_params, struct qed_ll2_acquire_data *data);
u16 rx_num_desc,
u16 tx_num_desc,
u8 *p_connection_handle);
/** /**
* @brief qed_ll2_establish_connection - start previously * @brief qed_ll2_establish_connection - start previously
......
...@@ -2818,7 +2818,7 @@ static int qed_roce_ll2_start(struct qed_dev *cdev, ...@@ -2818,7 +2818,7 @@ static int qed_roce_ll2_start(struct qed_dev *cdev,
{ {
struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev); struct qed_hwfn *hwfn = QED_LEADING_HWFN(cdev);
struct qed_roce_ll2_info *roce_ll2; struct qed_roce_ll2_info *roce_ll2;
struct qed_ll2_conn ll2_params; struct qed_ll2_acquire_data data;
int rc; int rc;
if (!params) { if (!params) {
...@@ -2844,25 +2844,26 @@ static int qed_roce_ll2_start(struct qed_dev *cdev, ...@@ -2844,25 +2844,26 @@ static int qed_roce_ll2_start(struct qed_dev *cdev,
DP_ERR(cdev, "qed roce ll2 start: failed memory allocation\n"); DP_ERR(cdev, "qed roce ll2 start: failed memory allocation\n");
return -ENOMEM; return -ENOMEM;
} }
roce_ll2->handle = QED_LL2_UNUSED_HANDLE; roce_ll2->handle = QED_LL2_UNUSED_HANDLE;
roce_ll2->cbs = params->cbs; roce_ll2->cbs = params->cbs;
roce_ll2->cb_cookie = params->cb_cookie; roce_ll2->cb_cookie = params->cb_cookie;
mutex_init(&roce_ll2->lock); mutex_init(&roce_ll2->lock);
memset(&ll2_params, 0, sizeof(ll2_params)); memset(&data, 0, sizeof(data));
ll2_params.conn_type = QED_LL2_TYPE_ROCE; data.input.conn_type = QED_LL2_TYPE_ROCE;
ll2_params.mtu = params->mtu; data.input.mtu = params->mtu;
ll2_params.rx_drop_ttl0_flg = true; data.input.rx_num_desc = params->max_rx_buffers;
ll2_params.rx_vlan_removal_en = false; data.input.tx_num_desc = params->max_tx_buffers;
ll2_params.tx_dest = CORE_TX_DEST_NW; data.input.rx_drop_ttl0_flg = true;
ll2_params.ai_err_packet_too_big = LL2_DROP_PACKET; data.input.rx_vlan_removal_en = false;
ll2_params.ai_err_no_buf = LL2_DROP_PACKET; data.input.tx_dest = QED_LL2_TX_DEST_NW;
ll2_params.gsi_enable = true; data.input.ai_err_packet_too_big = LL2_DROP_PACKET;
data.input.ai_err_no_buf = LL2_DROP_PACKET;
rc = qed_ll2_acquire_connection(QED_LEADING_HWFN(cdev), &ll2_params, data.p_connection_handle = &roce_ll2->handle;
params->max_rx_buffers, data.input.gsi_enable = true;
params->max_tx_buffers,
&roce_ll2->handle); rc = qed_ll2_acquire_connection(QED_LEADING_HWFN(cdev), &data);
if (rc) { if (rc) {
DP_ERR(cdev, DP_ERR(cdev,
"qed roce ll2 start: failed to acquire LL2 connection (rc=%d)\n", "qed roce ll2 start: failed to acquire LL2 connection (rc=%d)\n",
......
...@@ -43,6 +43,17 @@ ...@@ -43,6 +43,17 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/qed/qed_if.h> #include <linux/qed/qed_if.h>
enum qed_ll2_conn_type {
QED_LL2_TYPE_FCOE,
QED_LL2_TYPE_ISCSI,
QED_LL2_TYPE_TEST,
QED_LL2_TYPE_ISCSI_OOO,
QED_LL2_TYPE_RESERVED2,
QED_LL2_TYPE_ROCE,
QED_LL2_TYPE_RESERVED3,
MAX_QED_LL2_RX_CONN_TYPE
};
enum qed_ll2_roce_flavor_type { enum qed_ll2_roce_flavor_type {
QED_LL2_ROCE, QED_LL2_ROCE,
QED_LL2_RROCE, QED_LL2_RROCE,
...@@ -55,6 +66,12 @@ enum qed_ll2_tx_dest { ...@@ -55,6 +66,12 @@ enum qed_ll2_tx_dest {
QED_LL2_TX_DEST_MAX QED_LL2_TX_DEST_MAX
}; };
enum qed_ll2_error_handle {
QED_LL2_DROP_PACKET,
QED_LL2_DO_NOTHING,
QED_LL2_ASSERT,
};
struct qed_ll2_stats { struct qed_ll2_stats {
u64 gsi_invalid_hdr; u64 gsi_invalid_hdr;
u64 gsi_invalid_pkt_length; u64 gsi_invalid_pkt_length;
...@@ -105,6 +122,28 @@ struct qed_ll2_comp_rx_data { ...@@ -105,6 +122,28 @@ struct qed_ll2_comp_rx_data {
} u; } u;
}; };
struct qed_ll2_acquire_data_inputs {
enum qed_ll2_conn_type conn_type;
u16 mtu;
u16 rx_num_desc;
u16 rx_num_ooo_buffers;
u8 rx_drop_ttl0_flg;
u8 rx_vlan_removal_en;
u16 tx_num_desc;
u8 tx_max_bds_per_packet;
u8 tx_tc;
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;
u8 gsi_enable;
};
struct qed_ll2_acquire_data {
struct qed_ll2_acquire_data_inputs input;
/* Output container for LL2 connection's handle */
u8 *p_connection_handle;
};
struct qed_ll2_tx_pkt_info { struct qed_ll2_tx_pkt_info {
void *cookie; void *cookie;
dma_addr_t first_frag; dma_addr_t first_frag;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册