Lines Matching refs:dd
69 struct qib_devdata *dd; member
78 static struct qib_diag_client *get_client(struct qib_devdata *dd) in get_client() argument
92 dc->dd = dd; in get_client()
104 struct qib_devdata *dd = dc->dd; in return_client() local
108 if (dc == dd->diag_client) { in return_client()
109 dd->diag_client = dc->next; in return_client()
112 tdc = dc->dd->diag_client; in return_client()
124 rdc->dd = NULL; in return_client()
160 int qib_diag_add(struct qib_devdata *dd) in qib_diag_add() argument
173 snprintf(name, sizeof(name), "ipath_diag%d", dd->unit); in qib_diag_add()
174 ret = qib_cdev_init(QIB_DIAG_MINOR_BASE + dd->unit, name, in qib_diag_add()
175 &diag_file_ops, &dd->diag_cdev, in qib_diag_add()
176 &dd->diag_device); in qib_diag_add()
181 static void qib_unregister_observers(struct qib_devdata *dd);
183 void qib_diag_remove(struct qib_devdata *dd) in qib_diag_remove() argument
190 qib_cdev_cleanup(&dd->diag_cdev, &dd->diag_device); in qib_diag_remove()
196 while (dd->diag_client) in qib_diag_remove()
197 return_client(dd->diag_client); in qib_diag_remove()
206 qib_unregister_observers(dd); in qib_diag_remove()
234 static u32 __iomem *qib_remap_ioaddr32(struct qib_devdata *dd, u32 offset, in qib_remap_ioaddr32() argument
239 u32 __iomem *krb32 = (u32 __iomem *)dd->kregbase; in qib_remap_ioaddr32()
245 kreglen = (dd->kregend - dd->kregbase) * sizeof(u64); in qib_remap_ioaddr32()
257 if (dd->userbase) { in qib_remap_ioaddr32()
259 u32 ulim = (dd->cfgctxts * dd->ureg_align) + dd->uregbase; in qib_remap_ioaddr32()
261 if (!dd->piovl15base) in qib_remap_ioaddr32()
262 snd_lim = dd->uregbase; in qib_remap_ioaddr32()
263 krb32 = (u32 __iomem *)dd->userbase; in qib_remap_ioaddr32()
264 if (offset >= dd->uregbase && offset < ulim) { in qib_remap_ioaddr32()
265 map = krb32 + (offset - dd->uregbase) / sizeof(u32); in qib_remap_ioaddr32()
281 snd_bottom = dd->pio2k_bufbase; in qib_remap_ioaddr32()
283 u32 tot2k = dd->piobcnt2k * ALIGN(dd->piosize2k, dd->palign); in qib_remap_ioaddr32()
290 tot4k = dd->piobcnt4k * dd->align4k; in qib_remap_ioaddr32()
291 offs4k = dd->piobufbase >> 32; in qib_remap_ioaddr32()
292 if (dd->piobcnt4k) { in qib_remap_ioaddr32()
297 if (!dd->userbase || dd->piovl15base) in qib_remap_ioaddr32()
307 map = (u32 __iomem *)dd->piobase + (offset / sizeof(u32)); in qib_remap_ioaddr32()
311 if (!map && offs4k && dd->piovl15base) { in qib_remap_ioaddr32()
312 snd_lim = offs4k + tot4k + 2 * dd->align4k; in qib_remap_ioaddr32()
314 map = (u32 __iomem *)dd->piovl15base + in qib_remap_ioaddr32()
339 static int qib_read_umem64(struct qib_devdata *dd, void __user *uaddr, in qib_read_umem64() argument
347 reg_addr = (const u64 __iomem *)qib_remap_ioaddr32(dd, regoffs, &limit); in qib_read_umem64()
348 if (reg_addr == NULL || limit == 0 || !(dd->flags & QIB_PRESENT)) { in qib_read_umem64()
383 static int qib_write_umem64(struct qib_devdata *dd, u32 regoffs, in qib_write_umem64() argument
391 reg_addr = (u64 __iomem *)qib_remap_ioaddr32(dd, regoffs, &limit); in qib_write_umem64()
392 if (reg_addr == NULL || limit == 0 || !(dd->flags & QIB_PRESENT)) { in qib_write_umem64()
428 static int qib_read_umem32(struct qib_devdata *dd, void __user *uaddr, in qib_read_umem32() argument
436 reg_addr = qib_remap_ioaddr32(dd, regoffs, &limit); in qib_read_umem32()
437 if (reg_addr == NULL || limit == 0 || !(dd->flags & QIB_PRESENT)) { in qib_read_umem32()
474 static int qib_write_umem32(struct qib_devdata *dd, u32 regoffs, in qib_write_umem32() argument
482 reg_addr = qib_remap_ioaddr32(dd, regoffs, &limit); in qib_write_umem32()
483 if (reg_addr == NULL || limit == 0 || !(dd->flags & QIB_PRESENT)) { in qib_write_umem32()
511 struct qib_devdata *dd; in qib_diag_open() local
517 dd = qib_lookup(unit); in qib_diag_open()
519 if (dd == NULL || !(dd->flags & QIB_PRESENT) || in qib_diag_open()
520 !dd->kregbase) { in qib_diag_open()
525 dc = get_client(dd); in qib_diag_open()
530 dc->next = dd->diag_client; in qib_diag_open()
531 dd->diag_client = dc; in qib_diag_open()
555 struct qib_devdata *dd; in qib_diagpkt_write() local
568 dd = qib_lookup(dp.unit); in qib_diagpkt_write()
569 if (!dd || !(dd->flags & QIB_PRESENT) || !dd->kregbase) { in qib_diagpkt_write()
573 if (!(dd->flags & QIB_INITTED)) { in qib_diagpkt_write()
580 qib_dev_err(dd, "Invalid version %u for diagpkt_write\n", in qib_diagpkt_write()
590 if (!dp.port || dp.port > dd->num_pports) { in qib_diagpkt_write()
594 ppd = &dd->pport[dp.port - 1]; in qib_diagpkt_write()
628 piobuf = dd->f_getsendbuf(ppd, dp.pbc_wd, &pbufn); in qib_diagpkt_write()
634 dd->f_sendctrl(dd->pport, QIB_SENDCTRL_DISARM_BUF(pbufn)); in qib_diagpkt_write()
637 dd->f_txchk_change(dd, pbufn, 1, TXCHK_CHG_TYPE_DIS1, NULL); in qib_diagpkt_write()
645 if (dd->flags & QIB_PIO_FLUSH_WC) { in qib_diagpkt_write()
653 if (dd->flags & QIB_USE_SPCL_TRIG) { in qib_diagpkt_write()
654 u32 spcl_off = (pbufn >= dd->piobcnt2k) ? 2047 : 1023; in qib_diagpkt_write()
666 qib_sendbuf_done(dd, pbufn); in qib_diagpkt_write()
667 dd->f_txchk_change(dd, pbufn, 1, TXCHK_CHG_TYPE_ENAB1, NULL); in qib_diagpkt_write()
694 int qib_register_observer(struct qib_devdata *dd, in qib_register_observer() argument
700 if (!dd || !op) in qib_register_observer()
706 spin_lock_irqsave(&dd->qib_diag_trans_lock, flags); in qib_register_observer()
708 olp->next = dd->diag_observer_list; in qib_register_observer()
709 dd->diag_observer_list = olp; in qib_register_observer()
710 spin_unlock_irqrestore(&dd->qib_diag_trans_lock, flags); in qib_register_observer()
716 static void qib_unregister_observers(struct qib_devdata *dd) in qib_unregister_observers() argument
721 spin_lock_irqsave(&dd->qib_diag_trans_lock, flags); in qib_unregister_observers()
722 olp = dd->diag_observer_list; in qib_unregister_observers()
725 dd->diag_observer_list = olp->next; in qib_unregister_observers()
726 spin_unlock_irqrestore(&dd->qib_diag_trans_lock, flags); in qib_unregister_observers()
729 spin_lock_irqsave(&dd->qib_diag_trans_lock, flags); in qib_unregister_observers()
730 olp = dd->diag_observer_list; in qib_unregister_observers()
732 spin_unlock_irqrestore(&dd->qib_diag_trans_lock, flags); in qib_unregister_observers()
740 static const struct diag_observer *diag_get_observer(struct qib_devdata *dd, in diag_get_observer() argument
746 olp = dd->diag_observer_list; in diag_get_observer()
763 struct qib_devdata *dd = dc->dd; in qib_diag_read() local
786 spin_lock_irqsave(&dd->qib_diag_trans_lock, flags); in qib_diag_read()
792 op = diag_get_observer(dd, *off); in qib_diag_read()
796 ret = op->hook(dd, op, offset, &data64, 0, use_32); in qib_diag_read()
802 spin_unlock_irqrestore(&dd->qib_diag_trans_lock, flags); in qib_diag_read()
809 ret = qib_read_umem32(dd, data, (u32) *off, in qib_diag_read()
812 ret = qib_read_umem64(dd, data, (u32) *off, in qib_diag_read()
837 struct qib_devdata *dd = dc->dd; in qib_diag_write() local
876 spin_lock_irqsave(&dd->qib_diag_trans_lock, flags); in qib_diag_write()
877 op = diag_get_observer(dd, *off); in qib_diag_write()
879 ret = op->hook(dd, op, offset, &data64, ~0Ull, in qib_diag_write()
881 spin_unlock_irqrestore(&dd->qib_diag_trans_lock, flags); in qib_diag_write()
890 ret = qib_write_umem32(dd, (u32) *off, data, in qib_diag_write()
893 ret = qib_write_umem64(dd, (u32) *off, data, in qib_diag_write()