Commit 47e0dd53 authored by Kory Maincent (Dent Project)'s avatar Kory Maincent (Dent Project) Committed by Jakub Kicinski

net: pse-pd: Introduce PSE types enumeration

Introduce an enumeration to define PSE types (C33 or PoDL),
utilizing a bitfield for potential future support of both types.
Include 'pse_get_types' helper for external access to PSE type info.
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarKory Maincent <kory.maincent@bootlin.com>
Link: https://lore.kernel.org/r/20240417-feature_poe-v9-2-242293fd1900@bootlin.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b58be8db
...@@ -312,3 +312,15 @@ int pse_ethtool_set_config(struct pse_control *psec, ...@@ -312,3 +312,15 @@ int pse_ethtool_set_config(struct pse_control *psec,
return err; return err;
} }
EXPORT_SYMBOL_GPL(pse_ethtool_set_config); EXPORT_SYMBOL_GPL(pse_ethtool_set_config);
bool pse_has_podl(struct pse_control *psec)
{
return psec->pcdev->types & ETHTOOL_PSE_PODL;
}
EXPORT_SYMBOL_GPL(pse_has_podl);
bool pse_has_c33(struct pse_control *psec)
{
return psec->pcdev->types & ETHTOOL_PSE_C33;
}
EXPORT_SYMBOL_GPL(pse_has_c33);
...@@ -116,6 +116,7 @@ pse_reg_probe(struct platform_device *pdev) ...@@ -116,6 +116,7 @@ pse_reg_probe(struct platform_device *pdev)
priv->pcdev.owner = THIS_MODULE; priv->pcdev.owner = THIS_MODULE;
priv->pcdev.ops = &pse_reg_ops; priv->pcdev.ops = &pse_reg_ops;
priv->pcdev.dev = dev; priv->pcdev.dev = dev;
priv->pcdev.types = ETHTOOL_PSE_PODL;
ret = devm_pse_controller_register(dev, &priv->pcdev); ret = devm_pse_controller_register(dev, &priv->pcdev);
if (ret) { if (ret) {
dev_err(dev, "failed to register PSE controller (%pe)\n", dev_err(dev, "failed to register PSE controller (%pe)\n",
......
...@@ -77,6 +77,7 @@ struct pse_control; ...@@ -77,6 +77,7 @@ struct pse_control;
* device tree to id as given to the PSE control ops * device tree to id as given to the PSE control ops
* @nr_lines: number of PSE controls in this controller device * @nr_lines: number of PSE controls in this controller device
* @lock: Mutex for serialization access to the PSE controller * @lock: Mutex for serialization access to the PSE controller
* @types: types of the PSE controller
*/ */
struct pse_controller_dev { struct pse_controller_dev {
const struct pse_controller_ops *ops; const struct pse_controller_ops *ops;
...@@ -89,6 +90,7 @@ struct pse_controller_dev { ...@@ -89,6 +90,7 @@ struct pse_controller_dev {
const struct of_phandle_args *pse_spec); const struct of_phandle_args *pse_spec);
unsigned int nr_lines; unsigned int nr_lines;
struct mutex lock; struct mutex lock;
enum ethtool_pse_types types;
}; };
#if IS_ENABLED(CONFIG_PSE_CONTROLLER) #if IS_ENABLED(CONFIG_PSE_CONTROLLER)
...@@ -108,6 +110,9 @@ int pse_ethtool_set_config(struct pse_control *psec, ...@@ -108,6 +110,9 @@ int pse_ethtool_set_config(struct pse_control *psec,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack,
const struct pse_control_config *config); const struct pse_control_config *config);
bool pse_has_podl(struct pse_control *psec);
bool pse_has_c33(struct pse_control *psec);
#else #else
static inline struct pse_control *of_pse_control_get(struct device_node *node) static inline struct pse_control *of_pse_control_get(struct device_node *node)
...@@ -133,6 +138,16 @@ static inline int pse_ethtool_set_config(struct pse_control *psec, ...@@ -133,6 +138,16 @@ static inline int pse_ethtool_set_config(struct pse_control *psec,
return -ENOTSUPP; return -ENOTSUPP;
} }
static inline bool pse_has_podl(struct pse_control *psec)
{
return false;
}
static inline bool pse_has_c33(struct pse_control *psec)
{
return false;
}
#endif #endif
#endif #endif
...@@ -752,6 +752,18 @@ enum ethtool_module_power_mode { ...@@ -752,6 +752,18 @@ enum ethtool_module_power_mode {
ETHTOOL_MODULE_POWER_MODE_HIGH, ETHTOOL_MODULE_POWER_MODE_HIGH,
}; };
/**
* enum ethtool_pse_types - Types of PSE controller.
* @ETHTOOL_PSE_UNKNOWN: Type of PSE controller is unknown
* @ETHTOOL_PSE_PODL: PSE controller which support PoDL
* @ETHTOOL_PSE_C33: PSE controller which support Clause 33 (PoE)
*/
enum ethtool_pse_types {
ETHTOOL_PSE_UNKNOWN = 1 << 0,
ETHTOOL_PSE_PODL = 1 << 1,
ETHTOOL_PSE_C33 = 1 << 2,
};
/** /**
* enum ethtool_c33_pse_admin_state - operational state of the PoDL PSE * enum ethtool_c33_pse_admin_state - operational state of the PoDL PSE
* functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState * functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment