Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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
 40void 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
 73void 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
111void 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
126void 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
139void 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
172void 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