Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/infiniband/hw/cxgb3/cxio_dbg.c
15112 views
1
/*
2
* Copyright (c) 2006 Chelsio, Inc. All rights reserved.
3
*
4
* This software is available to you under a choice of one of two
5
* licenses. You may choose to be licensed under the terms of the GNU
6
* General Public License (GPL) Version 2, available from the file
7
* COPYING in the main directory of this source tree, or the
8
* OpenIB.org BSD license below:
9
*
10
* Redistribution and use in source and binary forms, with or
11
* without modification, are permitted provided that the following
12
* conditions are met:
13
*
14
* - Redistributions of source code must retain the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer.
17
*
18
* - Redistributions in binary form must reproduce the above
19
* copyright notice, this list of conditions and the following
20
* disclaimer in the documentation and/or other materials
21
* provided with the distribution.
22
*
23
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
* SOFTWARE.
31
*/
32
#ifdef DEBUG
33
#include <linux/types.h>
34
#include <linux/slab.h>
35
#include "common.h"
36
#include "cxgb3_ioctl.h"
37
#include "cxio_hal.h"
38
#include "cxio_wr.h"
39
40
void cxio_dump_tpt(struct cxio_rdev *rdev, u32 stag)
41
{
42
struct ch_mem_range *m;
43
u64 *data;
44
int rc;
45
int size = 32;
46
47
m = kmalloc(sizeof(*m) + size, GFP_ATOMIC);
48
if (!m) {
49
PDBG("%s couldn't allocate memory.\n", __func__);
50
return;
51
}
52
m->mem_id = MEM_PMRX;
53
m->addr = (stag>>8) * 32 + rdev->rnic_info.tpt_base;
54
m->len = size;
55
PDBG("%s TPT addr 0x%x len %d\n", __func__, m->addr, m->len);
56
rc = rdev->t3cdev_p->ctl(rdev->t3cdev_p, RDMA_GET_MEM, m);
57
if (rc) {
58
PDBG("%s toectl returned error %d\n", __func__, rc);
59
kfree(m);
60
return;
61
}
62
63
data = (u64 *)m->buf;
64
while (size > 0) {
65
PDBG("TPT %08x: %016llx\n", m->addr, (unsigned long long) *data);
66
size -= 8;
67
data++;
68
m->addr += 8;
69
}
70
kfree(m);
71
}
72
73
void cxio_dump_pbl(struct cxio_rdev *rdev, u32 pbl_addr, uint len, u8 shift)
74
{
75
struct ch_mem_range *m;
76
u64 *data;
77
int rc;
78
int size, npages;
79
80
shift += 12;
81
npages = (len + (1ULL << shift) - 1) >> shift;
82
size = npages * sizeof(u64);
83
84
m = kmalloc(sizeof(*m) + size, GFP_ATOMIC);
85
if (!m) {
86
PDBG("%s couldn't allocate memory.\n", __func__);
87
return;
88
}
89
m->mem_id = MEM_PMRX;
90
m->addr = pbl_addr;
91
m->len = size;
92
PDBG("%s PBL addr 0x%x len %d depth %d\n",
93
__func__, m->addr, m->len, npages);
94
rc = rdev->t3cdev_p->ctl(rdev->t3cdev_p, RDMA_GET_MEM, m);
95
if (rc) {
96
PDBG("%s toectl returned error %d\n", __func__, rc);
97
kfree(m);
98
return;
99
}
100
101
data = (u64 *)m->buf;
102
while (size > 0) {
103
PDBG("PBL %08x: %016llx\n", m->addr, (unsigned long long) *data);
104
size -= 8;
105
data++;
106
m->addr += 8;
107
}
108
kfree(m);
109
}
110
111
void cxio_dump_wqe(union t3_wr *wqe)
112
{
113
__be64 *data = (__be64 *)wqe;
114
uint size = (uint)(be64_to_cpu(*data) & 0xff);
115
116
if (size == 0)
117
size = 8;
118
while (size > 0) {
119
PDBG("WQE %p: %016llx\n", data,
120
(unsigned long long) be64_to_cpu(*data));
121
size--;
122
data++;
123
}
124
}
125
126
void cxio_dump_wce(struct t3_cqe *wce)
127
{
128
__be64 *data = (__be64 *)wce;
129
int size = sizeof(*wce);
130
131
while (size > 0) {
132
PDBG("WCE %p: %016llx\n", data,
133
(unsigned long long) be64_to_cpu(*data));
134
size -= 8;
135
data++;
136
}
137
}
138
139
void cxio_dump_rqt(struct cxio_rdev *rdev, u32 hwtid, int nents)
140
{
141
struct ch_mem_range *m;
142
int size = nents * 64;
143
u64 *data;
144
int rc;
145
146
m = kmalloc(sizeof(*m) + size, GFP_ATOMIC);
147
if (!m) {
148
PDBG("%s couldn't allocate memory.\n", __func__);
149
return;
150
}
151
m->mem_id = MEM_PMRX;
152
m->addr = ((hwtid)<<10) + rdev->rnic_info.rqt_base;
153
m->len = size;
154
PDBG("%s RQT addr 0x%x len %d\n", __func__, m->addr, m->len);
155
rc = rdev->t3cdev_p->ctl(rdev->t3cdev_p, RDMA_GET_MEM, m);
156
if (rc) {
157
PDBG("%s toectl returned error %d\n", __func__, rc);
158
kfree(m);
159
return;
160
}
161
162
data = (u64 *)m->buf;
163
while (size > 0) {
164
PDBG("RQT %08x: %016llx\n", m->addr, (unsigned long long) *data);
165
size -= 8;
166
data++;
167
m->addr += 8;
168
}
169
kfree(m);
170
}
171
172
void cxio_dump_tcb(struct cxio_rdev *rdev, u32 hwtid)
173
{
174
struct ch_mem_range *m;
175
int size = TCB_SIZE;
176
u32 *data;
177
int rc;
178
179
m = kmalloc(sizeof(*m) + size, GFP_ATOMIC);
180
if (!m) {
181
PDBG("%s couldn't allocate memory.\n", __func__);
182
return;
183
}
184
m->mem_id = MEM_CM;
185
m->addr = hwtid * size;
186
m->len = size;
187
PDBG("%s TCB %d len %d\n", __func__, m->addr, m->len);
188
rc = rdev->t3cdev_p->ctl(rdev->t3cdev_p, RDMA_GET_MEM, m);
189
if (rc) {
190
PDBG("%s toectl returned error %d\n", __func__, rc);
191
kfree(m);
192
return;
193
}
194
195
data = (u32 *)m->buf;
196
while (size > 0) {
197
printk("%2u: %08x %08x %08x %08x %08x %08x %08x %08x\n",
198
m->addr,
199
*(data+2), *(data+3), *(data),*(data+1),
200
*(data+6), *(data+7), *(data+4), *(data+5));
201
size -= 32;
202
data += 8;
203
m->addr += 32;
204
}
205
kfree(m);
206
}
207
#endif
208
209