162306a36Sopenharmony_ci/* Broadcom NetXtreme-C/E network driver. 262306a36Sopenharmony_ci * 362306a36Sopenharmony_ci * Copyright (c) 2017-2018 Broadcom Limited 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * This program is free software; you can redistribute it and/or modify 662306a36Sopenharmony_ci * it under the terms of the GNU General Public License as published by 762306a36Sopenharmony_ci * the Free Software Foundation. 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/dim.h> 1162306a36Sopenharmony_ci#include "bnxt_hsi.h" 1262306a36Sopenharmony_ci#include "bnxt.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_civoid bnxt_dim_work(struct work_struct *work) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci struct dim *dim = container_of(work, struct dim, work); 1762306a36Sopenharmony_ci struct bnxt_cp_ring_info *cpr = container_of(dim, 1862306a36Sopenharmony_ci struct bnxt_cp_ring_info, 1962306a36Sopenharmony_ci dim); 2062306a36Sopenharmony_ci struct bnxt_napi *bnapi = container_of(cpr, 2162306a36Sopenharmony_ci struct bnxt_napi, 2262306a36Sopenharmony_ci cp_ring); 2362306a36Sopenharmony_ci struct dim_cq_moder cur_moder = 2462306a36Sopenharmony_ci net_dim_get_rx_moderation(dim->mode, dim->profile_ix); 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci cpr->rx_ring_coal.coal_ticks = cur_moder.usec; 2762306a36Sopenharmony_ci cpr->rx_ring_coal.coal_bufs = cur_moder.pkts; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci bnxt_hwrm_set_ring_coal(bnapi->bp, bnapi); 3062306a36Sopenharmony_ci dim->state = DIM_START_MEASURE; 3162306a36Sopenharmony_ci} 32