2 * Copyright (c) 2004-2011 Atheros Communications Inc.
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 int ath6kl_printk(const char *level
, const char *fmt
, ...)
31 rtn
= printk("%sath6kl: %pV", level
, &vaf
);
38 #ifdef CONFIG_ATH6KL_DEBUG
39 void ath6kl_dump_registers(struct ath6kl_device
*dev
,
40 struct ath6kl_irq_proc_registers
*irq_proc_reg
,
41 struct ath6kl_irq_enable_reg
*irq_enable_reg
)
44 ath6kl_dbg(ATH6KL_DBG_ANY
, ("<------- Register Table -------->\n"));
46 if (irq_proc_reg
!= NULL
) {
47 ath6kl_dbg(ATH6KL_DBG_ANY
,
48 "Host Int status: 0x%x\n",
49 irq_proc_reg
->host_int_status
);
50 ath6kl_dbg(ATH6KL_DBG_ANY
,
51 "CPU Int status: 0x%x\n",
52 irq_proc_reg
->cpu_int_status
);
53 ath6kl_dbg(ATH6KL_DBG_ANY
,
54 "Error Int status: 0x%x\n",
55 irq_proc_reg
->error_int_status
);
56 ath6kl_dbg(ATH6KL_DBG_ANY
,
57 "Counter Int status: 0x%x\n",
58 irq_proc_reg
->counter_int_status
);
59 ath6kl_dbg(ATH6KL_DBG_ANY
,
61 irq_proc_reg
->mbox_frame
);
62 ath6kl_dbg(ATH6KL_DBG_ANY
,
63 "Rx Lookahead Valid: 0x%x\n",
64 irq_proc_reg
->rx_lkahd_valid
);
65 ath6kl_dbg(ATH6KL_DBG_ANY
,
66 "Rx Lookahead 0: 0x%x\n",
67 irq_proc_reg
->rx_lkahd
[0]);
68 ath6kl_dbg(ATH6KL_DBG_ANY
,
69 "Rx Lookahead 1: 0x%x\n",
70 irq_proc_reg
->rx_lkahd
[1]);
72 if (dev
->ar
->mbox_info
.gmbox_addr
!= 0) {
74 * If the target supports GMBOX hardware, dump some
77 ath6kl_dbg(ATH6KL_DBG_ANY
,
78 "GMBOX Host Int status 2: 0x%x\n",
79 irq_proc_reg
->host_int_status2
);
80 ath6kl_dbg(ATH6KL_DBG_ANY
,
81 "GMBOX RX Avail: 0x%x\n",
82 irq_proc_reg
->gmbox_rx_avail
);
83 ath6kl_dbg(ATH6KL_DBG_ANY
,
84 "GMBOX lookahead alias 0: 0x%x\n",
85 irq_proc_reg
->rx_gmbox_lkahd_alias
[0]);
86 ath6kl_dbg(ATH6KL_DBG_ANY
,
87 "GMBOX lookahead alias 1: 0x%x\n",
88 irq_proc_reg
->rx_gmbox_lkahd_alias
[1]);
93 if (irq_enable_reg
!= NULL
) {
94 ath6kl_dbg(ATH6KL_DBG_ANY
,
95 "Int status Enable: 0x%x\n",
96 irq_enable_reg
->int_status_en
);
97 ath6kl_dbg(ATH6KL_DBG_ANY
, "Counter Int status Enable: 0x%x\n",
98 irq_enable_reg
->cntr_int_status_en
);
100 ath6kl_dbg(ATH6KL_DBG_ANY
, "<------------------------------->\n");
103 static void dump_cred_dist(struct htc_endpoint_credit_dist
*ep_dist
)
105 ath6kl_dbg(ATH6KL_DBG_ANY
,
106 "--- endpoint: %d svc_id: 0x%X ---\n",
107 ep_dist
->endpoint
, ep_dist
->svc_id
);
108 ath6kl_dbg(ATH6KL_DBG_ANY
, " dist_flags : 0x%X\n",
109 ep_dist
->dist_flags
);
110 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_norm : %d\n",
112 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_min : %d\n",
114 ath6kl_dbg(ATH6KL_DBG_ANY
, " credits : %d\n",
116 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_assngd : %d\n",
117 ep_dist
->cred_assngd
);
118 ath6kl_dbg(ATH6KL_DBG_ANY
, " seek_cred : %d\n",
120 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_sz : %d\n",
122 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_per_msg : %d\n",
123 ep_dist
->cred_per_msg
);
124 ath6kl_dbg(ATH6KL_DBG_ANY
, " cred_to_dist : %d\n",
125 ep_dist
->cred_to_dist
);
126 ath6kl_dbg(ATH6KL_DBG_ANY
, " txq_depth : %d\n",
127 get_queue_depth(&((struct htc_endpoint
*)
128 ep_dist
->htc_rsvd
)->txq
));
129 ath6kl_dbg(ATH6KL_DBG_ANY
,
130 "----------------------------------\n");
133 void dump_cred_dist_stats(struct htc_target
*target
)
135 struct htc_endpoint_credit_dist
*ep_list
;
137 if (!AR_DBG_LVL_CHECK(ATH6KL_DBG_TRC
))
140 list_for_each_entry(ep_list
, &target
->cred_dist_list
, list
)
141 dump_cred_dist(ep_list
);
143 ath6kl_dbg(ATH6KL_DBG_HTC_SEND
, "ctxt:%p dist:%p\n",
144 target
->cred_dist_cntxt
, NULL
);
145 ath6kl_dbg(ATH6KL_DBG_TRC
, "credit distribution, total : %d, free : %d\n",
146 target
->cred_dist_cntxt
->total_avail_credits
,
147 target
->cred_dist_cntxt
->cur_free_credits
);