mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
net: ethtool: Add support for new power domains index description
Report the index of the newly introduced PSE power domain to the user, enabling improved management of the power budget for PSE devices. Signed-off-by: Kory Maincent (Dent Project) <kory.maincent@bootlin.com> Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de> Link: https://patch.msgid.link/20250617-feature_poe_port_prio-v14-5-78a1a645e2ee@bootlin.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
50f8b341d2
commit
1176978ed8
@@ -1406,6 +1406,10 @@ attribute-sets:
|
||||
type: nest
|
||||
multi-attr: true
|
||||
nested-attributes: c33-pse-pw-limit
|
||||
-
|
||||
name: pse-pw-d-id
|
||||
type: u32
|
||||
name-prefix: ethtool-a-
|
||||
-
|
||||
name: rss
|
||||
attr-cnt-name: __ethtool-a-rss-cnt
|
||||
@@ -2229,6 +2233,7 @@ operations:
|
||||
- c33-pse-ext-substate
|
||||
- c33-pse-avail-pw-limit
|
||||
- c33-pse-pw-limit-ranges
|
||||
- pse-pw-d-id
|
||||
dump: *pse-get-op
|
||||
-
|
||||
name: pse-set
|
||||
|
||||
@@ -1789,6 +1789,7 @@ Kernel response contents:
|
||||
limit of the PoE PSE.
|
||||
``ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES`` nested Supported power limit
|
||||
configuration ranges.
|
||||
``ETHTOOL_A_PSE_PW_D_ID`` u32 Index of the PSE power domain
|
||||
========================================== ====== =============================
|
||||
|
||||
When set, the optional ``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` attribute identifies
|
||||
@@ -1862,6 +1863,9 @@ identifies the C33 PSE power limit ranges through
|
||||
If the controller works with fixed classes, the min and max values will be
|
||||
equal.
|
||||
|
||||
The ``ETHTOOL_A_PSE_PW_D_ID`` attribute identifies the index of PSE power
|
||||
domain.
|
||||
|
||||
PSE_SET
|
||||
=======
|
||||
|
||||
|
||||
@@ -1098,6 +1098,9 @@ int pse_ethtool_get_status(struct pse_control *psec,
|
||||
pcdev = psec->pcdev;
|
||||
ops = pcdev->ops;
|
||||
mutex_lock(&pcdev->lock);
|
||||
if (pcdev->pi[psec->id].pw_d)
|
||||
status->pw_d_id = pcdev->pi[psec->id].pw_d->id;
|
||||
|
||||
ret = ops->pi_get_admin_state(pcdev, psec->id, &admin_state);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
@@ -114,6 +114,7 @@ struct pse_pw_limit_ranges {
|
||||
/**
|
||||
* struct ethtool_pse_control_status - PSE control/channel status.
|
||||
*
|
||||
* @pw_d_id: PSE power domain index.
|
||||
* @podl_admin_state: operational state of the PoDL PSE
|
||||
* functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
|
||||
* @podl_pw_status: power detection status of the PoDL PSE.
|
||||
@@ -135,6 +136,7 @@ struct pse_pw_limit_ranges {
|
||||
* ranges
|
||||
*/
|
||||
struct ethtool_pse_control_status {
|
||||
u32 pw_d_id;
|
||||
enum ethtool_podl_pse_admin_state podl_admin_state;
|
||||
enum ethtool_podl_pse_pw_d_status podl_pw_status;
|
||||
enum ethtool_c33_pse_admin_state c33_admin_state;
|
||||
|
||||
@@ -652,6 +652,7 @@ enum {
|
||||
ETHTOOL_A_C33_PSE_EXT_SUBSTATE,
|
||||
ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT,
|
||||
ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES,
|
||||
ETHTOOL_A_PSE_PW_D_ID,
|
||||
|
||||
__ETHTOOL_A_PSE_CNT,
|
||||
ETHTOOL_A_PSE_MAX = (__ETHTOOL_A_PSE_CNT - 1)
|
||||
|
||||
@@ -83,6 +83,8 @@ static int pse_reply_size(const struct ethnl_req_info *req_base,
|
||||
const struct ethtool_pse_control_status *st = &data->status;
|
||||
int len = 0;
|
||||
|
||||
if (st->pw_d_id)
|
||||
len += nla_total_size(sizeof(u32)); /* _PSE_PW_D_ID */
|
||||
if (st->podl_admin_state > 0)
|
||||
len += nla_total_size(sizeof(u32)); /* _PODL_PSE_ADMIN_STATE */
|
||||
if (st->podl_pw_status > 0)
|
||||
@@ -148,6 +150,11 @@ static int pse_fill_reply(struct sk_buff *skb,
|
||||
const struct pse_reply_data *data = PSE_REPDATA(reply_base);
|
||||
const struct ethtool_pse_control_status *st = &data->status;
|
||||
|
||||
if (st->pw_d_id &&
|
||||
nla_put_u32(skb, ETHTOOL_A_PSE_PW_D_ID,
|
||||
st->pw_d_id))
|
||||
return -EMSGSIZE;
|
||||
|
||||
if (st->podl_admin_state > 0 &&
|
||||
nla_put_u32(skb, ETHTOOL_A_PODL_PSE_ADMIN_STATE,
|
||||
st->podl_admin_state))
|
||||
|
||||
Reference in New Issue
Block a user