1 | // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause |
2 | /* |
3 | * Copyright (C) 2005-2011, 2021-2022 Intel Corporation |
4 | */ |
5 | #include <linux/device.h> |
6 | #include <linux/interrupt.h> |
7 | #include <linux/export.h> |
8 | #include "iwl-drv.h" |
9 | #include "iwl-debug.h" |
10 | #include "iwl-devtrace.h" |
11 | |
12 | #define __iwl_fn(fn) \ |
13 | void __iwl_ ##fn(struct device *dev, const char *fmt, ...) \ |
14 | { \ |
15 | struct va_format vaf = { \ |
16 | .fmt = fmt, \ |
17 | }; \ |
18 | va_list args; \ |
19 | \ |
20 | va_start(args, fmt); \ |
21 | vaf.va = &args; \ |
22 | dev_ ##fn(dev, "%pV", &vaf); \ |
23 | trace_iwlwifi_ ##fn(&vaf); \ |
24 | va_end(args); \ |
25 | } |
26 | |
27 | __iwl_fn(warn) |
28 | IWL_EXPORT_SYMBOL(__iwl_warn); |
29 | __iwl_fn(info) |
30 | IWL_EXPORT_SYMBOL(__iwl_info); |
31 | __iwl_fn(crit) |
32 | IWL_EXPORT_SYMBOL(__iwl_crit); |
33 | |
34 | void __iwl_err(struct device *dev, enum iwl_err_mode mode, const char *fmt, ...) |
35 | { |
36 | struct va_format vaf = { |
37 | .fmt = fmt, |
38 | }; |
39 | va_list args, args2; |
40 | |
41 | va_start(args, fmt); |
42 | switch (mode) { |
43 | case IWL_ERR_MODE_RATELIMIT: |
44 | if (net_ratelimit()) |
45 | break; |
46 | fallthrough; |
47 | case IWL_ERR_MODE_REGULAR: |
48 | case IWL_ERR_MODE_RFKILL: |
49 | va_copy(args2, args); |
50 | vaf.va = &args2; |
51 | if (mode == IWL_ERR_MODE_RFKILL) |
52 | dev_err(dev, "(RFKILL) %pV" , &vaf); |
53 | else |
54 | dev_err(dev, "%pV" , &vaf); |
55 | va_end(args2); |
56 | break; |
57 | default: |
58 | break; |
59 | } |
60 | vaf.va = &args; |
61 | trace_iwlwifi_err(vaf: &vaf); |
62 | va_end(args); |
63 | } |
64 | IWL_EXPORT_SYMBOL(__iwl_err); |
65 | |
66 | #if defined(CONFIG_IWLWIFI_DEBUG) || defined(CONFIG_IWLWIFI_DEVICE_TRACING) |
67 | void __iwl_dbg(struct device *dev, |
68 | u32 level, bool limit, const char *function, |
69 | const char *fmt, ...) |
70 | { |
71 | struct va_format vaf = { |
72 | .fmt = fmt, |
73 | }; |
74 | va_list args; |
75 | |
76 | va_start(args, fmt); |
77 | vaf.va = &args; |
78 | #ifdef CONFIG_IWLWIFI_DEBUG |
79 | if (iwl_have_debug_level(level) && |
80 | (!limit || net_ratelimit())) |
81 | dev_printk(KERN_DEBUG, dev, "%s %pV" , function, &vaf); |
82 | #endif |
83 | trace_iwlwifi_dbg(level, function, vaf: &vaf); |
84 | va_end(args); |
85 | } |
86 | IWL_EXPORT_SYMBOL(__iwl_dbg); |
87 | #endif |
88 | |