mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-21 05:14:52 +08:00
dpll: extend lock_status_get() op by status error and expose to user
Pass additional argunent status_error over lock_status_get() so drivers can fill it up. In case they do, expose the value over previously introduced attribute to user. Do it only in case the current lock_status is either "unlocked" or "holdover". Signed-off-by: Jiri Pirko <jiri@nvidia.com> Acked-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
cf4f0f1e1c
commit
e2ca9e7584
@ -121,14 +121,21 @@ dpll_msg_add_lock_status(struct sk_buff *msg, struct dpll_device *dpll,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct dpll_device_ops *ops = dpll_device_ops(dpll);
|
||||
enum dpll_lock_status_error status_error = 0;
|
||||
enum dpll_lock_status status;
|
||||
int ret;
|
||||
|
||||
ret = ops->lock_status_get(dpll, dpll_priv(dpll), &status, extack);
|
||||
ret = ops->lock_status_get(dpll, dpll_priv(dpll), &status,
|
||||
&status_error, extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (nla_put_u32(msg, DPLL_A_LOCK_STATUS, status))
|
||||
return -EMSGSIZE;
|
||||
if (status_error &&
|
||||
(status == DPLL_LOCK_STATUS_UNLOCKED ||
|
||||
status == DPLL_LOCK_STATUS_HOLDOVER) &&
|
||||
nla_put_u32(msg, DPLL_A_LOCK_STATUS_ERROR, status_error))
|
||||
return -EMSGSIZE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -488,6 +488,7 @@ ice_dpll_hw_input_prio_set(struct ice_pf *pf, struct ice_dpll *dpll,
|
||||
* @dpll: registered dpll pointer
|
||||
* @dpll_priv: private data pointer passed on dpll registration
|
||||
* @status: on success holds dpll's lock status
|
||||
* @status_error: status error value
|
||||
* @extack: error reporting
|
||||
*
|
||||
* Dpll subsystem callback, provides dpll's lock status.
|
||||
@ -500,6 +501,7 @@ ice_dpll_hw_input_prio_set(struct ice_pf *pf, struct ice_dpll *dpll,
|
||||
static int
|
||||
ice_dpll_lock_status_get(const struct dpll_device *dpll, void *dpll_priv,
|
||||
enum dpll_lock_status *status,
|
||||
enum dpll_lock_status_error *status_error,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ice_dpll *d = dpll_priv;
|
||||
|
@ -118,10 +118,11 @@ mlx5_dpll_pin_ffo_get(struct mlx5_dpll_synce_status *synce_status,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5_dpll_device_lock_status_get(const struct dpll_device *dpll,
|
||||
void *priv,
|
||||
enum dpll_lock_status *status,
|
||||
struct netlink_ext_ack *extack)
|
||||
static int
|
||||
mlx5_dpll_device_lock_status_get(const struct dpll_device *dpll, void *priv,
|
||||
enum dpll_lock_status *status,
|
||||
enum dpll_lock_status_error *status_error,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct mlx5_dpll_synce_status synce_status;
|
||||
struct mlx5_dpll *mdpll = priv;
|
||||
|
@ -4209,10 +4209,11 @@ ptp_ocp_detach(struct ptp_ocp *bp)
|
||||
device_unregister(&bp->dev);
|
||||
}
|
||||
|
||||
static int ptp_ocp_dpll_lock_status_get(const struct dpll_device *dpll,
|
||||
void *priv,
|
||||
enum dpll_lock_status *status,
|
||||
struct netlink_ext_ack *extack)
|
||||
static int
|
||||
ptp_ocp_dpll_lock_status_get(const struct dpll_device *dpll, void *priv,
|
||||
enum dpll_lock_status *status,
|
||||
enum dpll_lock_status_error *status_error,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ptp_ocp *bp = priv;
|
||||
|
||||
|
@ -19,6 +19,7 @@ struct dpll_device_ops {
|
||||
enum dpll_mode *mode, struct netlink_ext_ack *extack);
|
||||
int (*lock_status_get)(const struct dpll_device *dpll, void *dpll_priv,
|
||||
enum dpll_lock_status *status,
|
||||
enum dpll_lock_status_error *status_error,
|
||||
struct netlink_ext_ack *extack);
|
||||
int (*temp_get)(const struct dpll_device *dpll, void *dpll_priv,
|
||||
s32 *temp, struct netlink_ext_ack *extack);
|
||||
|
Loading…
Reference in New Issue
Block a user