1/* SPDX-License-Identifier: BSD-3-Clause */ 2/* Copyright(c) 2007-2022 Intel Corporation */ 3#include "adf_c4xxx_hw_data.h" 4#include "adf_c4xxx_pke_replay_stats.h" 5#include "adf_common_drv.h" 6#include "icp_qat_fw_init_admin.h" 7#include <sys/sbuf.h> 8#include <sys/sysctl.h> 9 10#define PKE_REPLAY_DBG_FILE "pke_replay_stats" 11#define LINE \ 12 "+-----------------------------------------------------------------+\n" 13#define BANNER \ 14 "| PKE Replay Statistics for Qat Device |\n" 15 16static int qat_pke_replay_counters_show(SYSCTL_HANDLER_ARGS) 17{ 18 struct sbuf sb; 19 struct adf_accel_dev *accel_dev = arg1; 20 int ret = 0; 21 u64 suc_counter = 0; 22 u64 unsuc_counter = 0; 23 24 sbuf_new_for_sysctl(&sb, NULL, 256, req); 25 26 sbuf_printf(&sb, "\n"); 27 sbuf_printf(&sb, LINE); 28 29 ret = adf_get_fw_pke_stats(accel_dev, &suc_counter, &unsuc_counter); 30 if (ret) 31 return ret; 32 33 sbuf_printf( 34 &sb, 35 "| Successful Replays: %40llu |\n| Unsuccessful Replays: %40llu |\n", 36 (unsigned long long)suc_counter, 37 (unsigned long long)unsuc_counter); 38 39 sbuf_finish(&sb); 40 SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb)); 41 sbuf_delete(&sb); 42 43 return 0; 44} 45 46/** 47 * adf_pke_replay_counters_add_c4xxx() - Create debugfs entry for 48 * acceleration device Freq counters. 49 * @accel_dev: Pointer to acceleration device. 50 * 51 * Return: 0 on success, error code otherwise. 52 */ 53int 54adf_pke_replay_counters_add_c4xxx(struct adf_accel_dev *accel_dev) 55{ 56 struct sysctl_ctx_list *qat_sysctl_ctx = NULL; 57 struct sysctl_oid *qat_sysctl_tree = NULL; 58 struct sysctl_oid *pke_rep_file = NULL; 59 60 qat_sysctl_ctx = 61 device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev); 62 qat_sysctl_tree = 63 device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev); 64 65 pke_rep_file = SYSCTL_ADD_PROC(qat_sysctl_ctx, 66 SYSCTL_CHILDREN(qat_sysctl_tree), 67 OID_AUTO, 68 PKE_REPLAY_DBG_FILE, 69 CTLTYPE_STRING | CTLFLAG_RD, 70 accel_dev, 71 0, 72 qat_pke_replay_counters_show, 73 "A", 74 "QAT PKE Replay Statistics"); 75 accel_dev->pke_replay_dbgfile = pke_rep_file; 76 if (!accel_dev->pke_replay_dbgfile) { 77 device_printf( 78 GET_DEV(accel_dev), 79 "Failed to create qat pke replay debugfs entry.\n"); 80 return ENOENT; 81 } 82 return 0; 83} 84 85/** 86 * adf_pke_replay_counters_remove_c4xxx() - Remove debugfs entry for 87 * acceleration device Freq counters. 88 * @accel_dev: Pointer to acceleration device. 89 * 90 * Return: void 91 */ 92void 93adf_pke_replay_counters_remove_c4xxx(struct adf_accel_dev *accel_dev) 94{ 95 if (accel_dev->pke_replay_dbgfile) { 96 remove_oid(accel_dev, accel_dev->pke_replay_dbgfile); 97 accel_dev->pke_replay_dbgfile = NULL; 98 } 99} 100