Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15cbc70e authored by Alexander Duyck's avatar Alexander Duyck Committed by Jeff Kirsher
Browse files

ixgbe: Simplify logic for getting traffic class from user priority



This patch is meant to help simplify the logic for getting traffic classes
from user priorities. To do this I am adding a function named
ixgbe_dcb_get_tc_from_up that will go through the traffic classes in
reverse order in order to determine which traffic class contains a bit for
a given user priority.

Adding a declaration for this new function to the header so that
we have a centralized means for sorting out traffic classes belonging to
features such as FCoE.

Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 22a4cca2
Loading
Loading
Loading
Loading
+23 −7
Original line number Original line Diff line number Diff line
@@ -231,16 +231,32 @@ void ixgbe_dcb_unpack_prio(struct ixgbe_dcb_config *cfg, int direction,
	}
	}
}
}


void ixgbe_dcb_unpack_map(struct ixgbe_dcb_config *cfg, int direction, u8 *map)
static u8 ixgbe_dcb_get_tc_from_up(struct ixgbe_dcb_config *cfg,
				   int direction, u8 up)
{
{
	int i, up;
	struct tc_configuration *tc_config = &cfg->tc_config[0];
	unsigned long bitmap;
	u8 prio_mask = 1 << up;
	u8 tc;


	for (i = 0; i < MAX_TRAFFIC_CLASS; i++) {
	/*
		bitmap = cfg->tc_config[i].path[direction].up_to_tc_bitmap;
	 * Test for TCs 7 through 1 and report the first match we find.  If
		for_each_set_bit(up, &bitmap, MAX_USER_PRIORITY)
	 * we find no match we can assume that the TC is 0 since the TC must
			map[up] = i;
	 * be set for all user priorities
	 */
	for (tc = MAX_TRAFFIC_CLASS - 1; tc; tc--) {
		if (prio_mask & tc_config[tc].path[direction].up_to_tc_bitmap)
			break;
	}
	}

	return tc;
}

void ixgbe_dcb_unpack_map(struct ixgbe_dcb_config *cfg, int direction, u8 *map)
{
	u8 up;

	for (up = 0; up < MAX_USER_PRIORITY; up++)
		map[up] = ixgbe_dcb_get_tc_from_up(cfg, direction, up);
}
}


/**
/**