bnx2x: extend DCBx support
This adds support for default application priority. Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: Ariel Elior <Ariel.Elior@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9c73267d2e
commit
e5d3a51cef
@ -195,6 +195,7 @@ static void bnx2x_dcbx_get_ap_feature(struct bnx2x *bp,
|
|||||||
u32 error) {
|
u32 error) {
|
||||||
u8 index;
|
u8 index;
|
||||||
u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority;
|
u32 *ttp = bp->dcbx_port_params.app.traffic_type_priority;
|
||||||
|
u8 iscsi_pri_found = 0, fcoe_pri_found = 0;
|
||||||
|
|
||||||
if (GET_FLAGS(error, DCBX_LOCAL_APP_ERROR))
|
if (GET_FLAGS(error, DCBX_LOCAL_APP_ERROR))
|
||||||
DP(BNX2X_MSG_DCB, "DCBX_LOCAL_APP_ERROR\n");
|
DP(BNX2X_MSG_DCB, "DCBX_LOCAL_APP_ERROR\n");
|
||||||
@ -210,29 +211,57 @@ static void bnx2x_dcbx_get_ap_feature(struct bnx2x *bp,
|
|||||||
|
|
||||||
bp->dcbx_port_params.app.enabled = true;
|
bp->dcbx_port_params.app.enabled = true;
|
||||||
|
|
||||||
|
/* Use 0 as the default application priority for all. */
|
||||||
for (index = 0 ; index < LLFC_DRIVER_TRAFFIC_TYPE_MAX; index++)
|
for (index = 0 ; index < LLFC_DRIVER_TRAFFIC_TYPE_MAX; index++)
|
||||||
ttp[index] = 0;
|
ttp[index] = 0;
|
||||||
|
|
||||||
if (app->default_pri < MAX_PFC_PRIORITIES)
|
|
||||||
ttp[LLFC_TRAFFIC_TYPE_NW] = app->default_pri;
|
|
||||||
|
|
||||||
for (index = 0 ; index < DCBX_MAX_APP_PROTOCOL; index++) {
|
for (index = 0 ; index < DCBX_MAX_APP_PROTOCOL; index++) {
|
||||||
struct dcbx_app_priority_entry *entry =
|
struct dcbx_app_priority_entry *entry =
|
||||||
app->app_pri_tbl;
|
app->app_pri_tbl;
|
||||||
|
enum traffic_type type = MAX_TRAFFIC_TYPE;
|
||||||
|
|
||||||
if (GET_FLAGS(entry[index].appBitfield,
|
if (GET_FLAGS(entry[index].appBitfield,
|
||||||
DCBX_APP_SF_ETH_TYPE) &&
|
DCBX_APP_SF_DEFAULT) &&
|
||||||
ETH_TYPE_FCOE == entry[index].app_id)
|
GET_FLAGS(entry[index].appBitfield,
|
||||||
bnx2x_dcbx_get_ap_priority(bp,
|
DCBX_APP_SF_ETH_TYPE)) {
|
||||||
entry[index].pri_bitmap,
|
type = LLFC_TRAFFIC_TYPE_NW;
|
||||||
LLFC_TRAFFIC_TYPE_FCOE);
|
} else if (GET_FLAGS(entry[index].appBitfield,
|
||||||
|
DCBX_APP_SF_PORT) &&
|
||||||
|
TCP_PORT_ISCSI == entry[index].app_id) {
|
||||||
|
type = LLFC_TRAFFIC_TYPE_ISCSI;
|
||||||
|
iscsi_pri_found = 1;
|
||||||
|
} else if (GET_FLAGS(entry[index].appBitfield,
|
||||||
|
DCBX_APP_SF_ETH_TYPE) &&
|
||||||
|
ETH_TYPE_FCOE == entry[index].app_id) {
|
||||||
|
type = LLFC_TRAFFIC_TYPE_FCOE;
|
||||||
|
fcoe_pri_found = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (GET_FLAGS(entry[index].appBitfield,
|
if (type == MAX_TRAFFIC_TYPE)
|
||||||
DCBX_APP_SF_PORT) &&
|
continue;
|
||||||
TCP_PORT_ISCSI == entry[index].app_id)
|
|
||||||
bnx2x_dcbx_get_ap_priority(bp,
|
bnx2x_dcbx_get_ap_priority(bp,
|
||||||
entry[index].pri_bitmap,
|
entry[index].pri_bitmap,
|
||||||
LLFC_TRAFFIC_TYPE_ISCSI);
|
type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we have received a non-zero default application
|
||||||
|
* priority, then use that for applications which are
|
||||||
|
* not configured with any priority.
|
||||||
|
*/
|
||||||
|
if (ttp[LLFC_TRAFFIC_TYPE_NW] != 0) {
|
||||||
|
if (!iscsi_pri_found) {
|
||||||
|
ttp[LLFC_TRAFFIC_TYPE_ISCSI] =
|
||||||
|
ttp[LLFC_TRAFFIC_TYPE_NW];
|
||||||
|
DP(BNX2X_MSG_DCB,
|
||||||
|
"ISCSI is using default priority.\n");
|
||||||
|
}
|
||||||
|
if (!fcoe_pri_found) {
|
||||||
|
ttp[LLFC_TRAFFIC_TYPE_FCOE] =
|
||||||
|
ttp[LLFC_TRAFFIC_TYPE_NW];
|
||||||
|
DP(BNX2X_MSG_DCB,
|
||||||
|
"FCoE is using default priority.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DP(BNX2X_MSG_DCB, "DCBX_LOCAL_APP_DISABLED\n");
|
DP(BNX2X_MSG_DCB, "DCBX_LOCAL_APP_DISABLED\n");
|
||||||
|
@ -1831,10 +1831,13 @@ struct dcbx_app_priority_entry {
|
|||||||
#elif defined(__LITTLE_ENDIAN)
|
#elif defined(__LITTLE_ENDIAN)
|
||||||
u8 appBitfield;
|
u8 appBitfield;
|
||||||
#define DCBX_APP_ENTRY_VALID 0x01
|
#define DCBX_APP_ENTRY_VALID 0x01
|
||||||
#define DCBX_APP_ENTRY_SF_MASK 0x30
|
#define DCBX_APP_ENTRY_SF_MASK 0xF0
|
||||||
#define DCBX_APP_ENTRY_SF_SHIFT 4
|
#define DCBX_APP_ENTRY_SF_SHIFT 4
|
||||||
|
#define DCBX_APP_ENTRY_VALID 0x01
|
||||||
#define DCBX_APP_SF_ETH_TYPE 0x10
|
#define DCBX_APP_SF_ETH_TYPE 0x10
|
||||||
#define DCBX_APP_SF_PORT 0x20
|
#define DCBX_APP_SF_PORT 0x20
|
||||||
|
#define DCBX_APP_SF_UDP 0x40
|
||||||
|
#define DCBX_APP_SF_DEFAULT 0x80
|
||||||
u8 pri_bitmap;
|
u8 pri_bitmap;
|
||||||
u16 app_id;
|
u16 app_id;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user