• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/infiniband/hw/qib/

Lines Matching refs:rcd

117 	dd->rcd = kzalloc(sizeof(*dd->rcd) * dd->ctxtcnt, GFP_KERNEL);
118 if (!dd->rcd) {
128 struct qib_ctxtdata *rcd;
134 rcd = qib_create_ctxtdata(ppd, i);
135 if (!rcd) {
141 rcd->pkeys[0] = QIB_DEFAULT_P_KEY;
142 rcd->seq_cnt = 1;
155 struct qib_ctxtdata *rcd;
157 rcd = kzalloc(sizeof(*rcd), GFP_KERNEL);
158 if (rcd) {
159 INIT_LIST_HEAD(&rcd->qp_wait_list);
160 rcd->ppd = ppd;
161 rcd->dd = dd;
162 rcd->cnt = 1;
163 rcd->ctxt = ctxt;
164 dd->rcd[ctxt] = rcd;
166 dd->f_init_ctxt(rcd);
179 rcd->rcvegrbuf_size = 0x8000;
180 rcd->rcvegrbufs_perchunk =
181 rcd->rcvegrbuf_size / dd->rcvegrbufsize;
182 rcd->rcvegrbuf_chunks = (rcd->rcvegrcnt +
183 rcd->rcvegrbufs_perchunk - 1) /
184 rcd->rcvegrbufs_perchunk;
186 return rcd;
397 for (i = 0; dd->rcd && i < dd->first_user_ctxt; ++i) {
398 struct qib_ctxtdata *rcd = dd->rcd[i];
400 if (rcd)
401 dd->f_rcvctrl(rcd->ppd, rcvmask, i);
501 struct qib_ctxtdata *rcd;
530 /* dd->rcd can be NULL if early init failed */
531 for (i = 0; dd->rcd && i < dd->first_user_ctxt; ++i) {
538 rcd = dd->rcd[i];
539 if (!rcd)
542 lastfail = qib_create_rcvhdrq(dd, rcd);
544 lastfail = qib_setup_eagerbufs(rcd);
775 * @rcd: the ctxtdata structure
783 void qib_free_ctxtdata(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
785 if (!rcd)
788 if (rcd->rcvhdrq) {
789 dma_free_coherent(&dd->pcidev->dev, rcd->rcvhdrq_size,
790 rcd->rcvhdrq, rcd->rcvhdrq_phys);
791 rcd->rcvhdrq = NULL;
792 if (rcd->rcvhdrtail_kvaddr) {
794 rcd->rcvhdrtail_kvaddr,
795 rcd->rcvhdrqtailaddr_phys);
796 rcd->rcvhdrtail_kvaddr = NULL;
799 if (rcd->rcvegrbuf) {
802 for (e = 0; e < rcd->rcvegrbuf_chunks; e++) {
803 void *base = rcd->rcvegrbuf[e];
804 size_t size = rcd->rcvegrbuf_size;
807 base, rcd->rcvegrbuf_phys[e]);
809 kfree(rcd->rcvegrbuf);
810 rcd->rcvegrbuf = NULL;
811 kfree(rcd->rcvegrbuf_phys);
812 rcd->rcvegrbuf_phys = NULL;
813 rcd->rcvegrbuf_chunks = 0;
816 kfree(rcd->tid_pg_list);
817 vfree(rcd->user_event_mask);
818 vfree(rcd->subctxt_uregbase);
819 vfree(rcd->subctxt_rcvegrbuf);
820 vfree(rcd->subctxt_rcvhdr_base);
821 kfree(rcd);
1183 * We acquire lock to be really paranoid that rcd isn't being
1188 tmp = dd->rcd;
1189 dd->rcd = NULL;
1192 struct qib_ctxtdata *rcd = tmp[ctxt];
1195 qib_free_ctxtdata(dd, rcd);
1357 * @rcd: the context data
1363 int qib_create_rcvhdrq(struct qib_devdata *dd, struct qib_ctxtdata *rcd)
1367 if (!rcd->rcvhdrq) {
1373 gfp_flags = (rcd->ctxt >= dd->first_user_ctxt) ?
1375 rcd->rcvhdrq = dma_alloc_coherent(
1376 &dd->pcidev->dev, amt, &rcd->rcvhdrq_phys,
1379 if (!rcd->rcvhdrq) {
1382 amt, rcd->ctxt);
1386 if (rcd->ctxt >= dd->first_user_ctxt) {
1387 rcd->user_event_mask = vmalloc_user(PAGE_SIZE);
1388 if (!rcd->user_event_mask)
1393 rcd->rcvhdrtail_kvaddr = dma_alloc_coherent(
1396 if (!rcd->rcvhdrtail_kvaddr)
1398 rcd->rcvhdrqtailaddr_phys = phys_hdrqtail;
1401 rcd->rcvhdrq_size = amt;
1405 memset(rcd->rcvhdrq, 0, rcd->rcvhdrq_size);
1406 if (rcd->rcvhdrtail_kvaddr)
1407 memset(rcd->rcvhdrtail_kvaddr, 0, PAGE_SIZE);
1412 "rcvhdrqtailaddr failed\n", rcd->ctxt);
1413 vfree(rcd->user_event_mask);
1414 rcd->user_event_mask = NULL;
1416 dma_free_coherent(&dd->pcidev->dev, amt, rcd->rcvhdrq,
1417 rcd->rcvhdrq_phys);
1418 rcd->rcvhdrq = NULL;
1425 * @rcd: the context we are setting up.
1432 int qib_setup_eagerbufs(struct qib_ctxtdata *rcd)
1434 struct qib_devdata *dd = rcd->dd;
1447 egrcnt = rcd->rcvegrcnt;
1448 egroff = rcd->rcvegr_tid_base;
1451 chunk = rcd->rcvegrbuf_chunks;
1452 egrperchunk = rcd->rcvegrbufs_perchunk;
1453 size = rcd->rcvegrbuf_size;
1454 if (!rcd->rcvegrbuf) {
1455 rcd->rcvegrbuf =
1456 kzalloc(chunk * sizeof(rcd->rcvegrbuf[0]),
1458 if (!rcd->rcvegrbuf)
1461 if (!rcd->rcvegrbuf_phys) {
1462 rcd->rcvegrbuf_phys =
1463 kmalloc(chunk * sizeof(rcd->rcvegrbuf_phys[0]),
1465 if (!rcd->rcvegrbuf_phys)
1468 for (e = 0; e < rcd->rcvegrbuf_chunks; e++) {
1469 if (rcd->rcvegrbuf[e])
1471 rcd->rcvegrbuf[e] =
1473 &rcd->rcvegrbuf_phys[e],
1475 if (!rcd->rcvegrbuf[e])
1479 rcd->rcvegr_phys = rcd->rcvegrbuf_phys[0];
1481 for (e = chunk = 0; chunk < rcd->rcvegrbuf_chunks; chunk++) {
1482 dma_addr_t pa = rcd->rcvegrbuf_phys[chunk];
1486 memset(rcd->rcvegrbuf[chunk], 0, size);
1503 for (e = 0; e < rcd->rcvegrbuf_chunks && rcd->rcvegrbuf[e]; e++)
1505 rcd->rcvegrbuf[e], rcd->rcvegrbuf_phys[e]);
1506 kfree(rcd->rcvegrbuf_phys);
1507 rcd->rcvegrbuf_phys = NULL;
1509 kfree(rcd->rcvegrbuf);
1510 rcd->rcvegrbuf = NULL;