Re: [PATCH net-next v2 2/8] ethtool: Expand Ethernet Power Equipment with c33 (PoE) alongside PoDL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 01, 2023 at 06:10:24PM +0100, Kory Maincent wrote:
> In the current PSE interface for Ethernet Power Equipment, support is
> limited to PoDL. This patch extends the interface to accommodate the
> objects specified in IEEE 802.3-2022 145.2 for Power sourcing
> Equipment (PSE).
> 
> The following objects are now supported and considered mandatory:
> - IEEE 802.3-2022 30.9.1.1.5 aPSEPowerDetectionStatus
> - IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState
> - IEEE 802.3-2022 30.9.1.2.1 aPSEAdminControl
> 
> To avoid confusion between "PoDL PSE" and "PoE PSE", which have similar
> names but distinct values, we have followed the suggestion of Oleksij
> Rempel and Andrew Lunn to maintain separate naming schemes for each,
> using c33 (clause 33) prefix for "PoE PSE".
> You can find more details in the discussion threads here:
> https://lore.kernel.org/netdev/20230912110637.GI780075@xxxxxxxxxxxxxx/
> https://lore.kernel.org/netdev/2539b109-72ad-470a-9dae-9f53de4f64ec@xxxxxxx/
> 
> Sponsored-by: Dent Project <dentproject@xxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Kory Maincent <kory.maincent@xxxxxxxxxxx>

Reviewed-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>

Thx!

> ---
> 
> Changes in v2:
> - Rename all the PoE variables and enum with a c33 prefix.
> - Add documentation, thanks to Oleksij for having written one.
> ---
>  Documentation/networking/pse-pd/introduction.rst | 73 ++++++++++++++++++++++++
>  include/linux/pse-pd/pse.h                       |  9 +++
>  include/uapi/linux/ethtool.h                     | 43 ++++++++++++++
>  include/uapi/linux/ethtool_netlink.h             |  3 +
>  4 files changed, 128 insertions(+)
> 
> diff --git a/Documentation/networking/pse-pd/introduction.rst b/Documentation/networking/pse-pd/introduction.rst
> new file mode 100644
> index 000000000000..e213083b9aff
> --- /dev/null
> +++ b/Documentation/networking/pse-pd/introduction.rst
> @@ -0,0 +1,73 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +Power Sourcing Equipment (PSE) in IEEE 802.3 Standard
> +=====================================================
> +
> +Overview
> +--------
> +
> +Power Sourcing Equipment (PSE) is essential in networks for delivering power
> +along with data over Ethernet cables. It usually refers to devices like
> +switches and hubs that supply power to Powered Devices (PDs) such as IP
> +cameras, VoIP phones, and wireless access points.
> +
> +PSE vs. PoDL PSE
> +----------------
> +
> +PSE in the IEEE 802.3 standard generally refers to equipment that provides
> +power alongside data over Ethernet cables, typically associated with Power over
> +Ethernet (PoE).
> +
> +PoDL PSE, or Power over Data Lines PSE, specifically denotes PSEs operating
> +with single balanced twisted-pair PHYs, as per Clause 104 of IEEE 802.3. PoDL
> +is significant in contexts like automotive and industrial controls where power
> +and data delivery over a single pair is advantageous.
> +
> +IEEE 802.3-2018 Addendums and Related Clauses
> +----------------------------------------------
> +
> +Key addenda to the IEEE 802.3-2018 standard relevant to power delivery over
> +Ethernet are as follows:
> +
> +- **802.3af (Approved in 2003-06-12)**: Known as PoE in the market, detailed in
> +  Clause 33, delivering up to 15.4W of power.
> +- **802.3at (Approved in 2009-09-11)**: Marketed as PoE+, enhancing PoE as
> +  covered in Clause 33, increasing power delivery to up to 30W.
> +- **802.3bt (Approved in 2018-09-27)**: Known as 4PPoE in the market, outlined
> +  in Clause 33. Type 3 delivers up to 60W, and Type 4 up to 100W.
> +- **802.3bu (Approved in 2016-12-07)**: Formerly referred to as PoDL, detailed
> +  in Clause 104. Introduces Classes 0 - 9. Class 9 PoDL PSE delivers up to ~65W
> +
> +Kernel Naming Convention Recommendations
> +----------------------------------------
> +
> +For clarity and consistency within the Linux kernel's networking subsystem, the
> +following naming conventions are recommended:
> +
> +- For general PSE (PoE) code, use "c33_pse" key words. For example:
> +  ``enum ethtool_c33_pse_admin_state c33_admin_control;``.
> +  This aligns with Clause 33, encompassing various PoE forms.
> +
> +- For PoDL PSE - specific code, use "podl_pse". For example:
> +  ``enum ethtool_podl_pse_admin_state podl_admin_control;`` to differentiate
> +  PoDL PSE settings according to Clause 104.
> +
> +Summary of Clause 33: Data Terminal Equipment (DTE) Power via Media Dependent Interface (MDI)
> +-------------------------------------------------------------------------------------------
> +
> +Clause 33 of the IEEE 802.3 standard defines the functional and electrical
> +characteristics of Powered Device (PD) and Power Sourcing Equipment (PSE).
> +These entities enable power delivery using the same generic cabling as for data
> +transmission, integrating power with data communication for devices such as
> +10BASE-T, 100BASE-TX, or 1000BASE-T.
> +
> +Summary of Clause 104: Power over Data Lines (PoDL) of Single Balanced Twisted-Pair Ethernet
> +-------------------------------------------------------------------------------------------
> +
> +Clause 104 of the IEEE 802.3 standard delineates the functional and electrical
> +characteristics of PoDL Powered Devices (PDs) and PoDL Power Sourcing Equipment
> +(PSEs). These are designed for use with single balanced twisted-pair Ethernet
> +Physical Layers. In this clause, 'PSE' refers specifically to PoDL PSE, and
> +'PD' to PoDL PD. The key intent is to provide devices with a unified interface
> +for both data and the power required to process this data over a single
> +balanced twisted-pair Ethernet connection.
> diff --git a/include/linux/pse-pd/pse.h b/include/linux/pse-pd/pse.h
> index 199cf4ae3cf2..be4e5754eb24 100644
> --- a/include/linux/pse-pd/pse.h
> +++ b/include/linux/pse-pd/pse.h
> @@ -17,9 +17,12 @@ struct pse_controller_dev;
>   *
>   * @podl_admin_control: set PoDL PSE admin control as described in
>   *	IEEE 802.3-2018 30.15.1.2.1 acPoDLPSEAdminControl
> + * @c33_admin_control: set PSE admin control as described in
> + *	IEEE 802.3-2022 30.9.1.2.1 acPSEAdminControl
>   */
>  struct pse_control_config {
>  	enum ethtool_podl_pse_admin_state podl_admin_control;
> +	enum ethtool_c33_pse_admin_state c33_admin_control;
>  };
>  
>  /**
> @@ -29,10 +32,16 @@ struct pse_control_config {
>   *	functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
>   * @podl_pw_status: power detection status of the PoDL PSE.
>   *	IEEE 802.3-2018 30.15.1.1.3 aPoDLPSEPowerDetectionStatus:
> + * @c33_admin_state: operational state of the PSE
> + *	functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState
> + * @c33_pw_status: power detection status of the PSE.
> + *	IEEE 802.3-2022 30.9.1.1.5 aPSEPowerDetectionStatus:
>   */
>  struct pse_control_status {
>  	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;
> +	enum ethtool_c33_pse_pw_d_status c33_pw_status;
>  };
>  
>  /**
> diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
> index f7fba0dc87e5..1d1631f009fa 100644
> --- a/include/uapi/linux/ethtool.h
> +++ b/include/uapi/linux/ethtool.h
> @@ -752,6 +752,49 @@ enum ethtool_module_power_mode {
>  	ETHTOOL_MODULE_POWER_MODE_HIGH,
>  };
>  
> +/**
> + * enum ethtool_c33_pse_admin_state - operational state of the PoDL PSE
> + *	functions. IEEE 802.3-2022 30.9.1.1.2 aPSEAdminState
> + * @ETHTOOL_C33_PSE_ADMIN_STATE_UNKNOWN: state of PSE functions is unknown
> + * @ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED: PSE functions are disabled
> + * @ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED: PSE functions are enabled
> + */
> +enum ethtool_c33_pse_admin_state {
> +	ETHTOOL_C33_PSE_ADMIN_STATE_UNKNOWN = 1,
> +	ETHTOOL_C33_PSE_ADMIN_STATE_DISABLED,
> +	ETHTOOL_C33_PSE_ADMIN_STATE_ENABLED,
> +};
> +
> +/**
> + * enum ethtool_c33_pse_pw_d_status - power detection status of the PSE.
> + *	IEEE 802.3-2022 30.9.1.1.3 aPoDLPSEPowerDetectionStatus:
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_UNKNOWN: PSE status is unknown
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_DISABLED: "The enumeration “disabled”
> + *	indicates that the PSE State diagram is in the state DISABLED."
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_SEARCHING: "The enumeration “searching”
> + *	indicates the PSE State diagram is in a state other than those
> + *	listed."
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_DELIVERING: "The enumeration
> + *	“deliveringPower” indicates that the PSE State diagram is in the
> + *	state POWER_ON."
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_TEST: "The enumeration “test” indicates that
> + *	the PSE State diagram is in the state TEST_MODE."
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_FAULT: "The enumeration “fault” indicates that
> + *	the PSE State diagram is in the state TEST_ERROR."
> + * @ETHTOOL_C33_PSE_PW_D_STATUS_OTHERFAULT: "The enumeration “otherFault”
> + *	indicates that the PSE State diagram is in the state IDLE due to
> + *	the variable error_condition = true."
> + */
> +enum ethtool_c33_pse_pw_d_status {
> +	ETHTOOL_C33_PSE_PW_D_STATUS_UNKNOWN = 1,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_DISABLED,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_SEARCHING,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_DELIVERING,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_TEST,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_FAULT,
> +	ETHTOOL_C33_PSE_PW_D_STATUS_OTHERFAULT,
> +};
> +
>  /**
>   * enum ethtool_podl_pse_admin_state - operational state of the PoDL PSE
>   *	functions. IEEE 802.3-2018 30.15.1.1.2 aPoDLPSEAdminState
> diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h
> index 73e2c10dc2cc..ba805285e408 100644
> --- a/include/uapi/linux/ethtool_netlink.h
> +++ b/include/uapi/linux/ethtool_netlink.h
> @@ -895,6 +895,9 @@ enum {
>  	ETHTOOL_A_PODL_PSE_ADMIN_STATE,		/* u32 */
>  	ETHTOOL_A_PODL_PSE_ADMIN_CONTROL,	/* u32 */
>  	ETHTOOL_A_PODL_PSE_PW_D_STATUS,		/* u32 */
> +	ETHTOOL_A_C33_PSE_ADMIN_STATE,		/* u32 */
> +	ETHTOOL_A_C33_PSE_ADMIN_CONTROL,	/* u32 */
> +	ETHTOOL_A_C33_PSE_PW_D_STATUS,		/* u32 */
>  
>  	/* add new constants above here */
>  	__ETHTOOL_A_PSE_CNT,
> 
> -- 
> 2.25.1
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux