be2net: Changes to use only priority codes allowed by f/w
Subsystems (2)
PATCH 1/1 be2net: Changes to use only priority codes allowed by f/w
Changes to use one of the priority codes allowed by CNA f/w for NIC traffic from host. The driver gets the bit map of the priority codes allowed for host traffic through a asynchronous message from the f/w that the driver subscribes to.
--- drivers/net/benet/be.h | 2 + drivers/net/benet/be_cmds.c | 60 +++++++++++++++++++++++++++++++++++++++++- drivers/net/benet/be_cmds.h | 31 ++++++++++++++++++++++ drivers/net/benet/be_main.c | 21 ++++++++++----- 4 files changed, 105 insertions(+), 9 deletions(-)
drivers/net/benet/be.h +2 -0
@@ -264,6 +264,8 @@ struct be_adapter {u16 vlans_added;u16 max_vlans;/* Number of vlans supported */ u8 vlan_tag[VLAN_GROUP_ARRAY_LEN ]; +u8 vlan_prio_bmap;/* Available priority BitMap */ +u16 recommended_prio;/* Recommended Priority */ struct be_dma_mem mc_cmd_mem;struct be_dma_mem stats_cmd;
drivers/net/benet/be_cmds.c +58 -2
92 lines not on this page · raw message
drivers/net/benet/be_cmds.h +31 -0
@@ -82,7 +82,12 @@ struct be_mcc_compl {*/ #define ASYNC_TRAILER_EVENT_CODE_SHIFT 8/* bits 8 - 15 */ #define ASYNC_TRAILER_EVENT_CODE_MASK 0xFF +#define ASYNC_TRAILER_EVENT_TYPE_SHIFT 16/* bits 16 - 23 */ +#define ASYNC_TRAILER_EVENT_TYPE_MASK 0xFF#define ASYNC_EVENT_CODE_LINK_STATE 0x1 +#define ASYNC_EVENT_CODE_GRP_5 0x5 +#define ASYNC_EVENT_QOS_SPEED 0x1 +#define ASYNC_EVENT_COS_PRIORITY 0x2struct be_async_event_trailer {u32 code; };
@@ -105,6 +110,30 @@ struct be_async_event_link_state {struct be_async_event_trailer trailer; } __packed; +/* When the event code of an async trailer is GRP-5 and event_type is QOS_SPEED +* the mcc_compl must be interpreted as follows +*/ +struct be_async_event_grp5_qos_link_speed { +u8 physical_port; +u8 rsvd[5 ]; +u16 qos_link_speed; +u32 event_tag; +struct be_async_event_trailer trailer; +} __packed; + +/* When the event code of an async trailer is GRP5 and event type is +* CoS-Priority, the mcc_compl must be interpreted as follows +*/ +struct be_async_event_grp5_cos_priority { +u8 physical_port; +u8 available_priority_bmap; +u8 reco_default_priority; +u8 valid; +u8 rsvd0; +u8 event_tag; +struct be_async_event_trailer trailer; +} __packed; +struct be_mcc_mailbox {struct be_mcc_wrb wrb;struct be_mcc_compl compl;
@@ -125,6 +154,7 @@ struct be_mcc_mailbox {#define OPCODE_COMMON_EQ_CREATE 13#define OPCODE_COMMON_MCC_CREATE 21#define OPCODE_COMMON_SET_QOS 28 +#define OPCODE_COMMON_MCC_CREATE_EXT 90#define OPCODE_COMMON_SEEPROM_READ 30#define OPCODE_COMMON_NTWK_RX_FILTER 34#define OPCODE_COMMON_GET_FW_VERSION 35
@@ -338,6 +368,7 @@ struct be_cmd_req_mcc_create {struct be_cmd_req_hdr hdr;u16 num_pages;u16 rsvd0; +u32 async_event_bitmap[1 ];u8 context[sizeof (struct amap_mcc_context ) /8 ];struct phys_addr pages[8 ]; } __packed;
drivers/net/benet/be_main.c +14 -7
@@ -429,9 +429,12 @@ static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len) wrb->frag_len = len Ð_WRB_FRAG_LEN_MASK ; } -static void wrb_fill_hdr (struct be_eth_hdr_wrb *hdr,struct sk_buff *skb, -bool vlan,u32 wrb_cnt,u32 len) +static void wrb_fill_hdr (struct be_adapter *adapter,struct be_eth_hdr_wrb *hdr, +struct sk_buff *skb,u32 wrb_cnt,u32 len) { +u8 vlan_prio =0 ; +u16 vlan_tag =0 ; +memset (hdr,0 ,sizeof (*hdr)); AMAP_SET_BITS(struct amap_eth_hdr_wrb, crc, hdr, 1);
@@ -449,10 +452,15 @@ static void wrb_fill_hdr(struct be_eth_hdr_wrb *hdr, struct sk_buff *skb, AMAP_SET_BITS(struct amap_eth_hdr_wrb, udpcs, hdr, 1); } -if (vlan &&vlan_tx_tag_present (skb)) { +if (adapter->vlan_grp &&vlan_tx_tag_present (skb)) { AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan, hdr, 1); - AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag, - hdr, vlan_tx_tag_get(skb)); + vlan_tag =vlan_tx_tag_get (skb); + vlan_prio = (vlan_tag &VLAN_PRIO_MASK ) >>VLAN_PRIO_SHIFT ; +/* If vlan priority provided by OS is NOT in available bmap */ +if (!(adapter->vlan_prio_bmap & (1 << vlan_prio))) + vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK ) | + adapter->recommended_prio; + AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag, hdr, vlan_tag); } AMAP_SET_BITS(struct amap_eth_hdr_wrb, event, hdr, 1);
@@ -532,8 +540,7 @@ static int make_tx_wrbs(struct be_adapter *adapter,queue_head_inc (txq); } -wrb_fill_hdr (hdr, first_skb, adapter->vlan_grp ? true : false, - wrb_cnt, copied); +wrb_fill_hdr (adapter, hdr, first_skb, wrb_cnt, copied);be_dws_cpu_to_le (hdr,sizeof (*hdr));return copied;
Signature · 1 line
1.5.6.1
David Miller
maintainerFrom: Somnath Kotur <[email protected]>
Date: Tue, 19 Oct 2010 14:21:14 +0530
Quoted 6 lines
Changes to use one of the priority codes allowed by CNA f/w for NIC traffic from host. The driver gets the bit map of the priority codes allowed for host traffic through a asynchronous message from the f/w that the driver subscribes to.
Signed-off-by Somnath Kotur <[email protected]>
This patch does not apply to the current tree.
Dave,
Looks like there was a patch applied across all drivers including be2net after i had cut the patch and sent it out .Made a fresh patch and sent it out again.
Thanks
Som
________________________________________
From: David Miller [[email protected]]
Sent: Thursday, October 21, 2010 4:57 PM
To: Kotur, Somnath
Cc: [email protected]
Subject: Re: [PATCH net-next-2.6] be2net: Changes to use only priority codes allowed by f/w
From: Somnath Kotur <[email protected]>
Date: Tue, 19 Oct 2010 14:21:14 +0530
Quoted 6 lines
Changes to use one of the priority codes allowed by CNA f/w for NIC traffic from host. The driver gets the bit map of the priority codes allowed for host traffic through a asynchronous message from the f/w that the driver subscribes to.
Signed-off-by Somnath Kotur <[email protected]>
This patch does not apply to the current tree.