1*fa34a514SAlejandro Lucero // SPDX-License-Identifier: GPL-2.0-only 2*fa34a514SAlejandro Lucero /**************************************************************************** 3*fa34a514SAlejandro Lucero * Driver for AMD network controllers and boards 4*fa34a514SAlejandro Lucero * Copyright (C) 2023, Advanced Micro Devices, Inc. 5*fa34a514SAlejandro Lucero * 6*fa34a514SAlejandro Lucero * This program is free software; you can redistribute it and/or modify it 7*fa34a514SAlejandro Lucero * under the terms of the GNU General Public License version 2 as published 8*fa34a514SAlejandro Lucero * by the Free Software Foundation, incorporated herein by reference. 9*fa34a514SAlejandro Lucero */ 10*fa34a514SAlejandro Lucero 11*fa34a514SAlejandro Lucero #include "net_driver.h" 12*fa34a514SAlejandro Lucero #include "efx_devlink.h" 13*fa34a514SAlejandro Lucero 14*fa34a514SAlejandro Lucero struct efx_devlink { 15*fa34a514SAlejandro Lucero struct efx_nic *efx; 16*fa34a514SAlejandro Lucero }; 17*fa34a514SAlejandro Lucero 18*fa34a514SAlejandro Lucero static const struct devlink_ops sfc_devlink_ops = { 19*fa34a514SAlejandro Lucero }; 20*fa34a514SAlejandro Lucero 21*fa34a514SAlejandro Lucero void efx_fini_devlink_lock(struct efx_nic *efx) 22*fa34a514SAlejandro Lucero { 23*fa34a514SAlejandro Lucero if (efx->devlink) 24*fa34a514SAlejandro Lucero devl_lock(efx->devlink); 25*fa34a514SAlejandro Lucero } 26*fa34a514SAlejandro Lucero 27*fa34a514SAlejandro Lucero void efx_fini_devlink_and_unlock(struct efx_nic *efx) 28*fa34a514SAlejandro Lucero { 29*fa34a514SAlejandro Lucero if (efx->devlink) { 30*fa34a514SAlejandro Lucero devl_unregister(efx->devlink); 31*fa34a514SAlejandro Lucero devl_unlock(efx->devlink); 32*fa34a514SAlejandro Lucero devlink_free(efx->devlink); 33*fa34a514SAlejandro Lucero efx->devlink = NULL; 34*fa34a514SAlejandro Lucero } 35*fa34a514SAlejandro Lucero } 36*fa34a514SAlejandro Lucero 37*fa34a514SAlejandro Lucero int efx_probe_devlink_and_lock(struct efx_nic *efx) 38*fa34a514SAlejandro Lucero { 39*fa34a514SAlejandro Lucero struct efx_devlink *devlink_private; 40*fa34a514SAlejandro Lucero 41*fa34a514SAlejandro Lucero if (efx->type->is_vf) 42*fa34a514SAlejandro Lucero return 0; 43*fa34a514SAlejandro Lucero 44*fa34a514SAlejandro Lucero efx->devlink = devlink_alloc(&sfc_devlink_ops, 45*fa34a514SAlejandro Lucero sizeof(struct efx_devlink), 46*fa34a514SAlejandro Lucero &efx->pci_dev->dev); 47*fa34a514SAlejandro Lucero if (!efx->devlink) 48*fa34a514SAlejandro Lucero return -ENOMEM; 49*fa34a514SAlejandro Lucero 50*fa34a514SAlejandro Lucero devl_lock(efx->devlink); 51*fa34a514SAlejandro Lucero devlink_private = devlink_priv(efx->devlink); 52*fa34a514SAlejandro Lucero devlink_private->efx = efx; 53*fa34a514SAlejandro Lucero 54*fa34a514SAlejandro Lucero devl_register(efx->devlink); 55*fa34a514SAlejandro Lucero 56*fa34a514SAlejandro Lucero return 0; 57*fa34a514SAlejandro Lucero } 58*fa34a514SAlejandro Lucero 59*fa34a514SAlejandro Lucero void efx_probe_devlink_unlock(struct efx_nic *efx) 60*fa34a514SAlejandro Lucero { 61*fa34a514SAlejandro Lucero if (!efx->devlink) 62*fa34a514SAlejandro Lucero return; 63*fa34a514SAlejandro Lucero 64*fa34a514SAlejandro Lucero devl_unlock(efx->devlink); 65*fa34a514SAlejandro Lucero } 66