| .. | .. |
|---|
| 1 | | -/* |
|---|
| 2 | | - This file is provided under a dual BSD/GPLv2 license. When using or |
|---|
| 3 | | - redistributing this file, you may do so under either license. |
|---|
| 4 | | - |
|---|
| 5 | | - GPL LICENSE SUMMARY |
|---|
| 6 | | - Copyright(c) 2014 Intel Corporation. |
|---|
| 7 | | - This program is free software; you can redistribute it and/or modify |
|---|
| 8 | | - it under the terms of version 2 of the GNU General Public License as |
|---|
| 9 | | - published by the Free Software Foundation. |
|---|
| 10 | | - |
|---|
| 11 | | - This program is distributed in the hope that it will be useful, but |
|---|
| 12 | | - WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 13 | | - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|---|
| 14 | | - General Public License for more details. |
|---|
| 15 | | - |
|---|
| 16 | | - Contact Information: |
|---|
| 17 | | - qat-linux@intel.com |
|---|
| 18 | | - |
|---|
| 19 | | - BSD LICENSE |
|---|
| 20 | | - Copyright(c) 2014 Intel Corporation. |
|---|
| 21 | | - Redistribution and use in source and binary forms, with or without |
|---|
| 22 | | - modification, are permitted provided that the following conditions |
|---|
| 23 | | - are met: |
|---|
| 24 | | - |
|---|
| 25 | | - * Redistributions of source code must retain the above copyright |
|---|
| 26 | | - notice, this list of conditions and the following disclaimer. |
|---|
| 27 | | - * Redistributions in binary form must reproduce the above copyright |
|---|
| 28 | | - notice, this list of conditions and the following disclaimer in |
|---|
| 29 | | - the documentation and/or other materials provided with the |
|---|
| 30 | | - distribution. |
|---|
| 31 | | - * Neither the name of Intel Corporation nor the names of its |
|---|
| 32 | | - contributors may be used to endorse or promote products derived |
|---|
| 33 | | - from this software without specific prior written permission. |
|---|
| 34 | | - |
|---|
| 35 | | - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|---|
| 36 | | - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|---|
| 37 | | - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|---|
| 38 | | - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|---|
| 39 | | - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|---|
| 40 | | - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|---|
| 41 | | - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|---|
| 42 | | - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|---|
| 43 | | - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|---|
| 44 | | - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|---|
| 45 | | - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|---|
| 46 | | -*/ |
|---|
| 1 | +// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) |
|---|
| 2 | +/* Copyright(c) 2014 - 2020 Intel Corporation */ |
|---|
| 47 | 3 | #include <linux/mutex.h> |
|---|
| 48 | 4 | #include <linux/slab.h> |
|---|
| 49 | 5 | #include <linux/seq_file.h> |
|---|
| .. | .. |
|---|
| 121 | 77 | mutex_unlock(&ring_read_lock); |
|---|
| 122 | 78 | } |
|---|
| 123 | 79 | |
|---|
| 124 | | -static const struct seq_operations adf_ring_sops = { |
|---|
| 80 | +static const struct seq_operations adf_ring_debug_sops = { |
|---|
| 125 | 81 | .start = adf_ring_start, |
|---|
| 126 | 82 | .next = adf_ring_next, |
|---|
| 127 | 83 | .stop = adf_ring_stop, |
|---|
| 128 | 84 | .show = adf_ring_show |
|---|
| 129 | 85 | }; |
|---|
| 130 | 86 | |
|---|
| 131 | | -static int adf_ring_open(struct inode *inode, struct file *file) |
|---|
| 132 | | -{ |
|---|
| 133 | | - int ret = seq_open(file, &adf_ring_sops); |
|---|
| 134 | | - |
|---|
| 135 | | - if (!ret) { |
|---|
| 136 | | - struct seq_file *seq_f = file->private_data; |
|---|
| 137 | | - |
|---|
| 138 | | - seq_f->private = inode->i_private; |
|---|
| 139 | | - } |
|---|
| 140 | | - return ret; |
|---|
| 141 | | -} |
|---|
| 142 | | - |
|---|
| 143 | | -static const struct file_operations adf_ring_debug_fops = { |
|---|
| 144 | | - .open = adf_ring_open, |
|---|
| 145 | | - .read = seq_read, |
|---|
| 146 | | - .llseek = seq_lseek, |
|---|
| 147 | | - .release = seq_release |
|---|
| 148 | | -}; |
|---|
| 87 | +DEFINE_SEQ_ATTRIBUTE(adf_ring_debug); |
|---|
| 149 | 88 | |
|---|
| 150 | 89 | int adf_ring_debugfs_add(struct adf_etr_ring_data *ring, const char *name) |
|---|
| 151 | 90 | { |
|---|
| .. | .. |
|---|
| 163 | 102 | ring_debug->debug = debugfs_create_file(entry_name, S_IRUSR, |
|---|
| 164 | 103 | ring->bank->bank_debug_dir, |
|---|
| 165 | 104 | ring, &adf_ring_debug_fops); |
|---|
| 166 | | - if (!ring_debug->debug) { |
|---|
| 167 | | - pr_err("QAT: Failed to create ring debug entry.\n"); |
|---|
| 168 | | - kfree(ring_debug); |
|---|
| 169 | | - return -EFAULT; |
|---|
| 170 | | - } |
|---|
| 171 | 105 | ring->ring_debug = ring_debug; |
|---|
| 172 | 106 | return 0; |
|---|
| 173 | 107 | } |
|---|
| .. | .. |
|---|
| 237 | 171 | mutex_unlock(&bank_read_lock); |
|---|
| 238 | 172 | } |
|---|
| 239 | 173 | |
|---|
| 240 | | -static const struct seq_operations adf_bank_sops = { |
|---|
| 174 | +static const struct seq_operations adf_bank_debug_sops = { |
|---|
| 241 | 175 | .start = adf_bank_start, |
|---|
| 242 | 176 | .next = adf_bank_next, |
|---|
| 243 | 177 | .stop = adf_bank_stop, |
|---|
| 244 | 178 | .show = adf_bank_show |
|---|
| 245 | 179 | }; |
|---|
| 246 | 180 | |
|---|
| 247 | | -static int adf_bank_open(struct inode *inode, struct file *file) |
|---|
| 248 | | -{ |
|---|
| 249 | | - int ret = seq_open(file, &adf_bank_sops); |
|---|
| 250 | | - |
|---|
| 251 | | - if (!ret) { |
|---|
| 252 | | - struct seq_file *seq_f = file->private_data; |
|---|
| 253 | | - |
|---|
| 254 | | - seq_f->private = inode->i_private; |
|---|
| 255 | | - } |
|---|
| 256 | | - return ret; |
|---|
| 257 | | -} |
|---|
| 258 | | - |
|---|
| 259 | | -static const struct file_operations adf_bank_debug_fops = { |
|---|
| 260 | | - .open = adf_bank_open, |
|---|
| 261 | | - .read = seq_read, |
|---|
| 262 | | - .llseek = seq_lseek, |
|---|
| 263 | | - .release = seq_release |
|---|
| 264 | | -}; |
|---|
| 181 | +DEFINE_SEQ_ATTRIBUTE(adf_bank_debug); |
|---|
| 265 | 182 | |
|---|
| 266 | 183 | int adf_bank_debugfs_add(struct adf_etr_bank_data *bank) |
|---|
| 267 | 184 | { |
|---|
| .. | .. |
|---|
| 271 | 188 | |
|---|
| 272 | 189 | snprintf(name, sizeof(name), "bank_%02d", bank->bank_number); |
|---|
| 273 | 190 | bank->bank_debug_dir = debugfs_create_dir(name, parent); |
|---|
| 274 | | - if (!bank->bank_debug_dir) { |
|---|
| 275 | | - pr_err("QAT: Failed to create bank debug dir.\n"); |
|---|
| 276 | | - return -EFAULT; |
|---|
| 277 | | - } |
|---|
| 278 | | - |
|---|
| 279 | 191 | bank->bank_debug_cfg = debugfs_create_file("config", S_IRUSR, |
|---|
| 280 | 192 | bank->bank_debug_dir, bank, |
|---|
| 281 | 193 | &adf_bank_debug_fops); |
|---|
| 282 | | - if (!bank->bank_debug_cfg) { |
|---|
| 283 | | - pr_err("QAT: Failed to create bank debug entry.\n"); |
|---|
| 284 | | - debugfs_remove(bank->bank_debug_dir); |
|---|
| 285 | | - return -EFAULT; |
|---|
| 286 | | - } |
|---|
| 287 | 194 | return 0; |
|---|
| 288 | 195 | } |
|---|
| 289 | 196 | |
|---|