• Home
  • Raw
  • Download

Lines Matching refs:dd

157 static inline void read_bars(struct ipath_devdata *dd, struct pci_dev *dev,  in read_bars()  argument
164 ipath_dev_err(dd, "failed to read bar0 before enable: " in read_bars()
169 ipath_dev_err(dd, "failed to read bar1 before enable: " in read_bars()
176 struct ipath_devdata *dd) in ipath_free_devdata() argument
182 if (dd->ipath_unit != -1) { in ipath_free_devdata()
184 idr_remove(&unit_table, dd->ipath_unit); in ipath_free_devdata()
185 list_del(&dd->ipath_list); in ipath_free_devdata()
188 vfree(dd); in ipath_free_devdata()
194 struct ipath_devdata *dd; in ipath_alloc_devdata() local
197 dd = vzalloc(sizeof(*dd)); in ipath_alloc_devdata()
198 if (!dd) { in ipath_alloc_devdata()
199 dd = ERR_PTR(-ENOMEM); in ipath_alloc_devdata()
202 dd->ipath_unit = -1; in ipath_alloc_devdata()
207 ret = idr_alloc(&unit_table, dd, 0, 0, GFP_NOWAIT); in ipath_alloc_devdata()
211 ipath_free_devdata(pdev, dd); in ipath_alloc_devdata()
212 dd = ERR_PTR(ret); in ipath_alloc_devdata()
215 dd->ipath_unit = ret; in ipath_alloc_devdata()
217 dd->pcidev = pdev; in ipath_alloc_devdata()
218 pci_set_drvdata(pdev, dd); in ipath_alloc_devdata()
220 list_add(&dd->ipath_list, &ipath_dev_list); in ipath_alloc_devdata()
226 return dd; in ipath_alloc_devdata()
236 struct ipath_devdata *dd; in ipath_lookup() local
240 dd = __ipath_lookup(unit); in ipath_lookup()
243 return dd; in ipath_lookup()
249 struct ipath_devdata *dd; in ipath_count_units() local
257 list_for_each_entry(dd, &ipath_dev_list, ipath_list) { in ipath_count_units()
259 if ((dd->ipath_flags & IPATH_PRESENT) && dd->ipath_kregbase) in ipath_count_units()
261 if (dd->ipath_lid && in ipath_count_units()
262 !(dd->ipath_flags & (IPATH_DISABLED | IPATH_LINKDOWN in ipath_count_units()
265 if (dd->ipath_cfgports > maxports) in ipath_count_units()
266 maxports = dd->ipath_cfgports; in ipath_count_units()
287 int __attribute__((weak)) ipath_enable_wc(struct ipath_devdata *dd) in ipath_enable_wc() argument
292 void __attribute__((weak)) ipath_disable_wc(struct ipath_devdata *dd) in ipath_disable_wc() argument
309 static void ipath_verify_pioperf(struct ipath_devdata *dd) in ipath_verify_pioperf() argument
316 piobuf = ipath_getpiobuf(dd, 0, &pbnum); in ipath_verify_pioperf()
318 dev_info(&dd->pcidev->dev, in ipath_verify_pioperf()
331 dev_info(&dd->pcidev->dev, in ipath_verify_pioperf()
346 ipath_disable_armlaunch(dd); in ipath_verify_pioperf()
352 if ((dd->ipath_flags & IPATH_HAS_PBC_CNT)) in ipath_verify_pioperf()
371 ipath_dev_err(dd, in ipath_verify_pioperf()
385 ipath_disarm_piobufs(dd, pbnum, 1); in ipath_verify_pioperf()
386 ipath_enable_armlaunch(dd); in ipath_verify_pioperf()
389 static void cleanup_device(struct ipath_devdata *dd);
394 struct ipath_devdata *dd; in ipath_init_one() local
398 dd = ipath_alloc_devdata(pdev); in ipath_init_one()
399 if (IS_ERR(dd)) { in ipath_init_one()
400 ret = PTR_ERR(dd); in ipath_init_one()
406 ipath_cdbg(VERBOSE, "initializing unit #%u\n", dd->ipath_unit); in ipath_init_one()
422 ipath_dev_err(dd, "enable unit %d failed: error %d\n", in ipath_init_one()
423 dd->ipath_unit, -ret); in ipath_init_one()
432 read_bars(dd, pdev, &bar0, &bar1); in ipath_init_one()
441 ipath_dev_err(dd, "rewrite of BAR0 " in ipath_init_one()
448 ipath_dev_err(dd, "rewrite of BAR1 " in ipath_init_one()
453 ipath_dev_err(dd, "BAR is 0 (probable RESET), " in ipath_init_one()
463 "err %d\n", dd->ipath_unit, -ret); in ipath_init_one()
478 dd->ipath_unit, ret); in ipath_init_one()
488 dd->ipath_unit, ret); in ipath_init_one()
498 dd->ipath_unit, ret); in ipath_init_one()
507 dd->ipath_pcibar0 = addr; in ipath_init_one()
508 dd->ipath_pcibar1 = addr >> 32; in ipath_init_one()
509 dd->ipath_deviceid = ent->device; /* save for later use */ in ipath_init_one()
510 dd->ipath_vendorid = ent->vendor; in ipath_init_one()
515 ipath_init_iba6110_funcs(dd); in ipath_init_one()
519 ipath_dev_err(dd, "Found unknown QLogic deviceid 0x%x, " in ipath_init_one()
533 ipath_dev_err(dd, "No valid address in BAR 0!\n"); in ipath_init_one()
538 dd->ipath_pcirev = pdev->revision; in ipath_init_one()
542 dd->ipath_kregbase = __ioremap(addr, len, in ipath_init_one()
545 dd->ipath_kregbase = ioremap_nocache(addr, len); in ipath_init_one()
548 if (!dd->ipath_kregbase) { in ipath_init_one()
554 dd->ipath_kregend = (u64 __iomem *) in ipath_init_one()
555 ((void __iomem *)dd->ipath_kregbase + len); in ipath_init_one()
556 dd->ipath_physaddr = addr; /* used for io_remap, etc. */ in ipath_init_one()
559 addr, dd->ipath_kregbase); in ipath_init_one()
561 if (dd->ipath_f_bus(dd, pdev)) in ipath_init_one()
562 ipath_dev_err(dd, "Failed to setup config space; " in ipath_init_one()
571 if (!dd->ipath_irq) in ipath_init_one()
572 ipath_dev_err(dd, "irq is 0, BIOS error? Interrupts won't " in ipath_init_one()
575 ret = request_irq(dd->ipath_irq, ipath_intr, IRQF_SHARED, in ipath_init_one()
576 IPATH_DRV_NAME, dd); in ipath_init_one()
578 ipath_dev_err(dd, "Couldn't setup irq handler, " in ipath_init_one()
579 "irq=%d: %d\n", dd->ipath_irq, ret); in ipath_init_one()
584 ret = ipath_init_chip(dd, 0); /* do the chip-specific init */ in ipath_init_one()
588 ret = ipath_enable_wc(dd); in ipath_init_one()
591 ipath_dev_err(dd, "Write combining not enabled " in ipath_init_one()
597 ipath_verify_pioperf(dd); in ipath_init_one()
599 ipath_device_create_group(&pdev->dev, dd); in ipath_init_one()
600 ipathfs_add_device(dd); in ipath_init_one()
601 ipath_user_add(dd); in ipath_init_one()
602 ipath_diag_add(dd); in ipath_init_one()
603 ipath_register_ib_device(dd); in ipath_init_one()
608 cleanup_device(dd); in ipath_init_one()
610 if (dd->ipath_irq) in ipath_init_one()
611 dd->ipath_f_free_irq(dd); in ipath_init_one()
613 if (dd->ipath_f_cleanup) in ipath_init_one()
614 dd->ipath_f_cleanup(dd); in ipath_init_one()
617 iounmap((volatile void __iomem *) dd->ipath_kregbase); in ipath_init_one()
626 ipath_free_devdata(pdev, dd); in ipath_init_one()
632 static void cleanup_device(struct ipath_devdata *dd) in cleanup_device() argument
638 if (*dd->ipath_statusp & IPATH_STATUS_CHIP_PRESENT) { in cleanup_device()
640 *dd->ipath_statusp &= ~IPATH_STATUS_CHIP_PRESENT; in cleanup_device()
641 if (dd->ipath_kregbase) { in cleanup_device()
647 dd->ipath_kregbase = NULL; in cleanup_device()
648 dd->ipath_uregbase = 0; in cleanup_device()
649 dd->ipath_sregbase = 0; in cleanup_device()
650 dd->ipath_cregbase = 0; in cleanup_device()
651 dd->ipath_kregsize = 0; in cleanup_device()
653 ipath_disable_wc(dd); in cleanup_device()
656 if (dd->ipath_spectriggerhit) in cleanup_device()
657 dev_info(&dd->pcidev->dev, "%lu special trigger hits\n", in cleanup_device()
658 dd->ipath_spectriggerhit); in cleanup_device()
660 if (dd->ipath_pioavailregs_dma) { in cleanup_device()
661 dma_free_coherent(&dd->pcidev->dev, PAGE_SIZE, in cleanup_device()
662 (void *) dd->ipath_pioavailregs_dma, in cleanup_device()
663 dd->ipath_pioavailregs_phys); in cleanup_device()
664 dd->ipath_pioavailregs_dma = NULL; in cleanup_device()
666 if (dd->ipath_dummy_hdrq) { in cleanup_device()
667 dma_free_coherent(&dd->pcidev->dev, in cleanup_device()
668 dd->ipath_pd[0]->port_rcvhdrq_size, in cleanup_device()
669 dd->ipath_dummy_hdrq, dd->ipath_dummy_hdrq_phys); in cleanup_device()
670 dd->ipath_dummy_hdrq = NULL; in cleanup_device()
673 if (dd->ipath_pageshadow) { in cleanup_device()
674 struct page **tmpp = dd->ipath_pageshadow; in cleanup_device()
675 dma_addr_t *tmpd = dd->ipath_physshadow; in cleanup_device()
680 for (port = 0; port < dd->ipath_cfgports; port++) { in cleanup_device()
681 int port_tidbase = port * dd->ipath_rcvtidcnt; in cleanup_device()
682 int maxtid = port_tidbase + dd->ipath_rcvtidcnt; in cleanup_device()
686 pci_unmap_page(dd->pcidev, tmpd[i], in cleanup_device()
708 dd->ipath_pageshadow); in cleanup_device()
709 tmpp = dd->ipath_pageshadow; in cleanup_device()
710 dd->ipath_pageshadow = NULL; in cleanup_device()
713 dd->ipath_egrtidbase = NULL; in cleanup_device()
723 spin_lock_irqsave(&dd->ipath_uctxt_lock, flags); in cleanup_device()
724 tmp = dd->ipath_pd; in cleanup_device()
725 dd->ipath_pd = NULL; in cleanup_device()
726 spin_unlock_irqrestore(&dd->ipath_uctxt_lock, flags); in cleanup_device()
727 for (port = 0; port < dd->ipath_portcnt; port++) { in cleanup_device()
730 ipath_free_pddata(dd, pd); in cleanup_device()
737 struct ipath_devdata *dd = pci_get_drvdata(pdev); in ipath_remove_one() local
739 ipath_cdbg(VERBOSE, "removing, pdev=%p, dd=%p\n", pdev, dd); in ipath_remove_one()
745 ipath_shutdown_device(dd); in ipath_remove_one()
749 if (dd->verbs_dev) in ipath_remove_one()
750 ipath_unregister_ib_device(dd->verbs_dev); in ipath_remove_one()
752 ipath_diag_remove(dd); in ipath_remove_one()
753 ipath_user_remove(dd); in ipath_remove_one()
754 ipathfs_remove_device(dd); in ipath_remove_one()
755 ipath_device_remove_group(&pdev->dev, dd); in ipath_remove_one()
758 "unit %u\n", dd, (u32) dd->ipath_unit); in ipath_remove_one()
760 cleanup_device(dd); in ipath_remove_one()
768 if (dd->ipath_irq) { in ipath_remove_one()
770 dd->ipath_unit, dd->ipath_irq); in ipath_remove_one()
771 dd->ipath_f_free_irq(dd); in ipath_remove_one()
774 "for unit %u\n", dd->ipath_unit); in ipath_remove_one()
781 if (dd->ipath_f_cleanup) in ipath_remove_one()
783 dd->ipath_f_cleanup(dd); in ipath_remove_one()
785 ipath_cdbg(VERBOSE, "Unmapping kregbase %p\n", dd->ipath_kregbase); in ipath_remove_one()
786 iounmap((volatile void __iomem *) dd->ipath_kregbase); in ipath_remove_one()
791 ipath_free_devdata(pdev, dd); in ipath_remove_one()
810 void ipath_disarm_piobufs(struct ipath_devdata *dd, unsigned first, in ipath_disarm_piobufs() argument
818 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_disarm_piobufs()
824 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_disarm_piobufs()
825 dd->ipath_sendctrl | INFINIPATH_S_DISARM | in ipath_disarm_piobufs()
828 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_disarm_piobufs()
829 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_disarm_piobufs()
832 ipath_force_pio_avail_update(dd); in ipath_disarm_piobufs()
847 int ipath_wait_linkstate(struct ipath_devdata *dd, u32 state, int msecs) in ipath_wait_linkstate() argument
849 dd->ipath_state_wanted = state; in ipath_wait_linkstate()
851 (dd->ipath_flags & state), in ipath_wait_linkstate()
853 dd->ipath_state_wanted = 0; in ipath_wait_linkstate()
855 if (!(dd->ipath_flags & state)) { in ipath_wait_linkstate()
864 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_ibcstatus); in ipath_wait_linkstate()
867 dd, dd->ipath_kregs->kr_ibcctrl), in ipath_wait_linkstate()
869 ipath_ibcstatus_str[val & dd->ibcs_lts_mask]); in ipath_wait_linkstate()
871 return (dd->ipath_flags & state) ? 0 : -ETIMEDOUT; in ipath_wait_linkstate()
874 static void decode_sdma_errs(struct ipath_devdata *dd, ipath_err_t err, in decode_sdma_errs() argument
900 test_bit(IPATH_SDMA_ABORTING, &dd->ipath_sdma_status); in decode_sdma_errs()
913 int ipath_decode_err(struct ipath_devdata *dd, char *buf, size_t blen, in ipath_decode_err() argument
997 decode_sdma_errs(dd, err, buf, blen); in ipath_decode_err()
1050 static inline void *ipath_get_egrbuf(struct ipath_devdata *dd, u32 bufnum) in ipath_get_egrbuf() argument
1052 return dd->ipath_port0_skbinfo ? in ipath_get_egrbuf()
1053 (void *) dd->ipath_port0_skbinfo[bufnum].skb->data : NULL; in ipath_get_egrbuf()
1061 struct sk_buff *ipath_alloc_skb(struct ipath_devdata *dd, in ipath_alloc_skb() argument
1079 len = dd->ipath_ibmaxlen + 4; in ipath_alloc_skb()
1081 if (dd->ipath_flags & IPATH_4BYTE_TID) { in ipath_alloc_skb()
1091 ipath_dev_err(dd, "Failed to allocate skbuff, length %u\n", in ipath_alloc_skb()
1098 if (dd->ipath_flags & IPATH_4BYTE_TID) { in ipath_alloc_skb()
1108 static void ipath_rcv_hdrerr(struct ipath_devdata *dd, in ipath_rcv_hdrerr() argument
1128 u8 n = (dd->ipath_ibcctrl >> in ipath_rcv_hdrerr()
1132 if (++dd->ipath_lli_counter > n) { in ipath_rcv_hdrerr()
1133 dd->ipath_lli_counter = 0; in ipath_rcv_hdrerr()
1134 dd->ipath_lli_errors++; in ipath_rcv_hdrerr()
1147 struct ipath_devdata *dd = pd->port_dd; in ipath_kreceive() local
1150 const u32 rsize = dd->ipath_rcvhdrentsize; /* words */ in ipath_kreceive()
1151 const u32 maxcnt = dd->ipath_rcvhdrcnt * rsize; /* words */ in ipath_kreceive()
1159 rhf_addr = (__le32 *) pd->port_rcvhdrq + l + dd->ipath_rhf_offset; in ipath_kreceive()
1160 if (dd->ipath_flags & IPATH_NODMA_RTAIL) { in ipath_kreceive()
1175 hdr = dd->ipath_f_get_msgheader(dd, rhf_addr); in ipath_kreceive()
1181 if ((dd->ipath_flags & IPATH_NODMA_RTAIL) ? in ipath_kreceive()
1195 ebuf = ipath_get_egrbuf(dd, etail); in ipath_kreceive()
1211 ipath_rcv_hdrerr(dd, eflags, l, etail, rhf_addr, hdr); in ipath_kreceive()
1213 ipath_ib_rcv(dd->verbs_dev, (u32 *)hdr, ebuf, tlen); in ipath_kreceive()
1214 if (dd->ipath_lli_counter) in ipath_kreceive()
1215 dd->ipath_lli_counter--; in ipath_kreceive()
1255 l + dd->ipath_rhf_offset; in ipath_kreceive()
1256 if (dd->ipath_flags & IPATH_NODMA_RTAIL) { in ipath_kreceive()
1275 lval |= dd->ipath_rhdrhead_intr_off; in ipath_kreceive()
1276 ipath_write_ureg(dd, ur_rcvhdrhead, lval, in ipath_kreceive()
1279 ipath_write_ureg(dd, ur_rcvegrindexhead, in ipath_kreceive()
1286 if (!dd->ipath_rhdrhead_intr_off && !reloop && in ipath_kreceive()
1287 !(dd->ipath_flags & IPATH_NODMA_RTAIL)) { in ipath_kreceive()
1326 static void ipath_update_pio_bufs(struct ipath_devdata *dd) in ipath_update_pio_bufs() argument
1330 const unsigned piobregs = (unsigned)dd->ipath_pioavregs; in ipath_update_pio_bufs()
1349 if (!dd->ipath_pioavailregs_dma) { in ipath_update_pio_bufs()
1355 volatile __le64 *dma = dd->ipath_pioavailregs_dma; in ipath_update_pio_bufs()
1356 unsigned long *shadow = dd->ipath_pioavailshadow; in ipath_update_pio_bufs()
1389 if (i > 3 && (dd->ipath_flags & IPATH_SWAP_PIOBUFS)) in ipath_update_pio_bufs()
1390 piov = le64_to_cpu(dd->ipath_pioavailregs_dma[i ^ 1]); in ipath_update_pio_bufs()
1392 piov = le64_to_cpu(dd->ipath_pioavailregs_dma[i]); in ipath_update_pio_bufs()
1393 pchg = dd->ipath_pioavailkernel[i] & in ipath_update_pio_bufs()
1394 ~(dd->ipath_pioavailshadow[i] ^ piov); in ipath_update_pio_bufs()
1396 if (pchg && (pchbusy & dd->ipath_pioavailshadow[i])) { in ipath_update_pio_bufs()
1397 pnew = dd->ipath_pioavailshadow[i] & ~pchbusy; in ipath_update_pio_bufs()
1399 dd->ipath_pioavailshadow[i] = pnew; in ipath_update_pio_bufs()
1411 static void ipath_reset_availshadow(struct ipath_devdata *dd) in ipath_reset_availshadow() argument
1417 for (i = 0; i < dd->ipath_pioavregs; i++) { in ipath_reset_availshadow()
1420 im = (i > 3 && (dd->ipath_flags & IPATH_SWAP_PIOBUFS)) ? in ipath_reset_availshadow()
1422 val = le64_to_cpu(dd->ipath_pioavailregs_dma[im]); in ipath_reset_availshadow()
1427 oldval = dd->ipath_pioavailshadow[i]; in ipath_reset_availshadow()
1428 dd->ipath_pioavailshadow[i] = val | in ipath_reset_availshadow()
1429 ((~dd->ipath_pioavailkernel[i] << in ipath_reset_availshadow()
1432 if (oldval != dd->ipath_pioavailshadow[i]) in ipath_reset_availshadow()
1435 dd->ipath_pioavailshadow[i]); in ipath_reset_availshadow()
1447 int ipath_setrcvhdrsize(struct ipath_devdata *dd, unsigned rhdrsize) in ipath_setrcvhdrsize() argument
1451 if (dd->ipath_flags & IPATH_RCVHDRSZ_SET) { in ipath_setrcvhdrsize()
1452 if (dd->ipath_rcvhdrsize != rhdrsize) { in ipath_setrcvhdrsize()
1453 dev_info(&dd->pcidev->dev, in ipath_setrcvhdrsize()
1456 rhdrsize, dd->ipath_rcvhdrsize); in ipath_setrcvhdrsize()
1460 "size %u\n", dd->ipath_rcvhdrsize); in ipath_setrcvhdrsize()
1461 } else if (rhdrsize > (dd->ipath_rcvhdrentsize - in ipath_setrcvhdrsize()
1465 dd->ipath_rcvhdrentsize - in ipath_setrcvhdrsize()
1469 dd->ipath_flags |= IPATH_RCVHDRSZ_SET; in ipath_setrcvhdrsize()
1470 dd->ipath_rcvhdrsize = rhdrsize; in ipath_setrcvhdrsize()
1471 ipath_write_kreg(dd, dd->ipath_kregs->kr_rcvhdrsize, in ipath_setrcvhdrsize()
1472 dd->ipath_rcvhdrsize); in ipath_setrcvhdrsize()
1474 dd->ipath_rcvhdrsize); in ipath_setrcvhdrsize()
1482 static noinline void no_pio_bufs(struct ipath_devdata *dd) in no_pio_bufs() argument
1484 unsigned long *shadow = dd->ipath_pioavailshadow; in no_pio_bufs()
1485 __le64 *dma = (__le64 *)dd->ipath_pioavailregs_dma; in no_pio_bufs()
1487 dd->ipath_upd_pio_shadow = 1; in no_pio_bufs()
1493 if (!(++dd->ipath_consec_nopiobuf % 100000)) { in no_pio_bufs()
1494 ipath_force_pio_avail_update(dd); /* at start */ in no_pio_bufs()
1498 dd->ipath_consec_nopiobuf, in no_pio_bufs()
1509 if ((dd->ipath_piobcnt2k + dd->ipath_piobcnt4k) > in no_pio_bufs()
1521 ipath_reset_availshadow(dd); in no_pio_bufs()
1532 static u32 __iomem *ipath_getpiobuf_range(struct ipath_devdata *dd, in ipath_getpiobuf_range() argument
1538 unsigned long *shadow = dd->ipath_pioavailshadow; in ipath_getpiobuf_range()
1542 if (dd->ipath_upd_pio_shadow) { in ipath_getpiobuf_range()
1548 ipath_update_pio_bufs(dd); in ipath_getpiobuf_range()
1577 ipath_update_pio_bufs(dd); in ipath_getpiobuf_range()
1582 ((dd->ipath_sendctrl in ipath_getpiobuf_range()
1591 ipath_force_pio_avail_update(dd); in ipath_getpiobuf_range()
1592 ipath_update_pio_bufs(dd); in ipath_getpiobuf_range()
1598 no_pio_bufs(dd); in ipath_getpiobuf_range()
1601 if (i < dd->ipath_piobcnt2k) in ipath_getpiobuf_range()
1602 buf = (u32 __iomem *) (dd->ipath_pio2kbase + in ipath_getpiobuf_range()
1603 i * dd->ipath_palign); in ipath_getpiobuf_range()
1606 (dd->ipath_pio4kbase + in ipath_getpiobuf_range()
1607 (i - dd->ipath_piobcnt2k) * dd->ipath_4kalign); in ipath_getpiobuf_range()
1621 u32 __iomem *ipath_getpiobuf(struct ipath_devdata *dd, u32 plen, u32 *pbufnum) in ipath_getpiobuf() argument
1628 first = dd->ipath_piobcnt2k; in ipath_getpiobuf()
1629 lasti = dd->ipath_lastpioindexl; in ipath_getpiobuf()
1632 lasti = dd->ipath_lastpioindex; in ipath_getpiobuf()
1634 nbufs = dd->ipath_piobcnt2k + dd->ipath_piobcnt4k; in ipath_getpiobuf()
1635 buf = ipath_getpiobuf_range(dd, &pnum, first, nbufs, lasti); in ipath_getpiobuf()
1643 dd->ipath_lastpioindexl = pnum + 1; in ipath_getpiobuf()
1645 dd->ipath_lastpioindex = pnum + 1; in ipath_getpiobuf()
1646 if (dd->ipath_upd_pio_shadow) in ipath_getpiobuf()
1647 dd->ipath_upd_pio_shadow = 0; in ipath_getpiobuf()
1648 if (dd->ipath_consec_nopiobuf) in ipath_getpiobuf()
1649 dd->ipath_consec_nopiobuf = 0; in ipath_getpiobuf()
1651 pnum, (pnum < dd->ipath_piobcnt2k) ? 2 : 4, buf); in ipath_getpiobuf()
1666 void ipath_chg_pioavailkernel(struct ipath_devdata *dd, unsigned start, in ipath_chg_pioavailkernel() argument
1697 im = (i > 3 && (dd->ipath_flags & IPATH_SWAP_PIOBUFS)) ? in ipath_chg_pioavailkernel()
1700 + start, dd->ipath_pioavailshadow); in ipath_chg_pioavailkernel()
1702 dd->ipath_pioavailregs_dma[im]); in ipath_chg_pioavailkernel()
1706 + start, dd->ipath_pioavailshadow); in ipath_chg_pioavailkernel()
1709 + start, dd->ipath_pioavailshadow); in ipath_chg_pioavailkernel()
1710 __set_bit(start, dd->ipath_pioavailkernel); in ipath_chg_pioavailkernel()
1713 dd->ipath_pioavailshadow); in ipath_chg_pioavailkernel()
1714 __clear_bit(start, dd->ipath_pioavailkernel); in ipath_chg_pioavailkernel()
1719 if (dd->ipath_pioupd_thresh) { in ipath_chg_pioavailkernel()
1720 end = 2 * (dd->ipath_piobcnt2k + dd->ipath_piobcnt4k); in ipath_chg_pioavailkernel()
1721 cnt = bitmap_weight(dd->ipath_pioavailkernel, end); in ipath_chg_pioavailkernel()
1738 if (cnt < dd->ipath_pioupd_thresh) { in ipath_chg_pioavailkernel()
1739 dd->ipath_pioupd_thresh = cnt; in ipath_chg_pioavailkernel()
1741 dd->ipath_pioupd_thresh); in ipath_chg_pioavailkernel()
1742 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_chg_pioavailkernel()
1743 dd->ipath_sendctrl &= ~(INFINIPATH_S_UPDTHRESH_MASK in ipath_chg_pioavailkernel()
1745 dd->ipath_sendctrl |= dd->ipath_pioupd_thresh in ipath_chg_pioavailkernel()
1747 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_chg_pioavailkernel()
1748 dd->ipath_sendctrl); in ipath_chg_pioavailkernel()
1749 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_chg_pioavailkernel()
1762 int ipath_create_rcvhdrq(struct ipath_devdata *dd, in ipath_create_rcvhdrq() argument
1770 int amt = ALIGN(dd->ipath_rcvhdrcnt * dd->ipath_rcvhdrentsize * in ipath_create_rcvhdrq()
1774 &dd->pcidev->dev, amt, &pd->port_rcvhdrq_phys, in ipath_create_rcvhdrq()
1778 ipath_dev_err(dd, "attempt to allocate %d bytes " in ipath_create_rcvhdrq()
1785 if (!(dd->ipath_flags & IPATH_NODMA_RTAIL)) { in ipath_create_rcvhdrq()
1787 &dd->pcidev->dev, PAGE_SIZE, &phys_hdrqtail, in ipath_create_rcvhdrq()
1790 ipath_dev_err(dd, "attempt to allocate 1 page " in ipath_create_rcvhdrq()
1794 dma_free_coherent(&dd->pcidev->dev, amt, in ipath_create_rcvhdrq()
1832 ipath_write_kreg_port(dd, dd->ipath_kregs->kr_rcvhdrtailaddr, in ipath_create_rcvhdrq()
1834 ipath_write_kreg_port(dd, dd->ipath_kregs->kr_rcvhdraddr, in ipath_create_rcvhdrq()
1851 void ipath_cancel_sends(struct ipath_devdata *dd, int restore_sendctrl) in ipath_cancel_sends() argument
1855 if (dd->ipath_flags & IPATH_IB_AUTONEG_INPROG) { in ipath_cancel_sends()
1865 if (dd->ipath_flags & IPATH_HAS_SEND_DMA) { in ipath_cancel_sends()
1867 unsigned long *statp = &dd->ipath_sdma_status; in ipath_cancel_sends()
1869 spin_lock_irqsave(&dd->ipath_sdma_lock, flags); in ipath_cancel_sends()
1873 spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); in ipath_cancel_sends()
1881 dd->ipath_lastcancel = jiffies + HZ / 2; in ipath_cancel_sends()
1891 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_cancel_sends()
1892 dd->ipath_sendctrl &= ~(INFINIPATH_S_PIOBUFAVAILUPD in ipath_cancel_sends()
1894 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_cancel_sends()
1895 dd->ipath_sendctrl | INFINIPATH_S_ABORT); in ipath_cancel_sends()
1896 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_cancel_sends()
1897 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_cancel_sends()
1900 ipath_disarm_piobufs(dd, 0, in ipath_cancel_sends()
1901 dd->ipath_piobcnt2k + dd->ipath_piobcnt4k); in ipath_cancel_sends()
1903 if (dd->ipath_flags & IPATH_HAS_SEND_DMA) in ipath_cancel_sends()
1904 set_bit(IPATH_SDMA_DISARMED, &dd->ipath_sdma_status); in ipath_cancel_sends()
1908 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_cancel_sends()
1909 dd->ipath_sendctrl |= INFINIPATH_S_PIOBUFAVAILUPD | in ipath_cancel_sends()
1911 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_cancel_sends()
1912 dd->ipath_sendctrl); in ipath_cancel_sends()
1914 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_cancel_sends()
1915 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_cancel_sends()
1918 if ((dd->ipath_flags & IPATH_HAS_SEND_DMA) && in ipath_cancel_sends()
1919 !test_bit(IPATH_SDMA_DISABLED, &dd->ipath_sdma_status) && in ipath_cancel_sends()
1920 test_bit(IPATH_SDMA_RUNNING, &dd->ipath_sdma_status)) { in ipath_cancel_sends()
1921 spin_lock_irqsave(&dd->ipath_sdma_lock, flags); in ipath_cancel_sends()
1923 dd->ipath_sdma_abort_intr_timeout = jiffies + HZ; in ipath_cancel_sends()
1924 dd->ipath_sdma_reset_wait = 200; in ipath_cancel_sends()
1925 if (!test_bit(IPATH_SDMA_SHUTDOWN, &dd->ipath_sdma_status)) in ipath_cancel_sends()
1926 tasklet_hi_schedule(&dd->ipath_sdma_abort_task); in ipath_cancel_sends()
1927 spin_unlock_irqrestore(&dd->ipath_sdma_lock, flags); in ipath_cancel_sends()
1940 void ipath_force_pio_avail_update(struct ipath_devdata *dd) in ipath_force_pio_avail_update() argument
1944 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_force_pio_avail_update()
1945 if (dd->ipath_sendctrl & INFINIPATH_S_PIOBUFAVAILUPD) { in ipath_force_pio_avail_update()
1946 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_force_pio_avail_update()
1947 dd->ipath_sendctrl & ~INFINIPATH_S_PIOBUFAVAILUPD); in ipath_force_pio_avail_update()
1948 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_force_pio_avail_update()
1949 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, in ipath_force_pio_avail_update()
1950 dd->ipath_sendctrl); in ipath_force_pio_avail_update()
1951 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_force_pio_avail_update()
1953 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_force_pio_avail_update()
1956 static void ipath_set_ib_lstate(struct ipath_devdata *dd, int linkcmd, in ipath_set_ib_lstate() argument
1973 dd->ipath_flags |= IPATH_IB_LINK_DISABLED; in ipath_set_ib_lstate()
1982 dd->ipath_flags &= ~IPATH_IB_LINK_DISABLED; in ipath_set_ib_lstate()
1986 mod_wd = (linkcmd << dd->ibcc_lc_shift) | in ipath_set_ib_lstate()
1990 dd->ipath_unit, what[linkcmd], linitcmd, in ipath_set_ib_lstate()
1991 ipath_ibcstatus_str[ipath_ib_linktrstate(dd, in ipath_set_ib_lstate()
1992 ipath_read_kreg64(dd, dd->ipath_kregs->kr_ibcstatus))]); in ipath_set_ib_lstate()
1994 ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, in ipath_set_ib_lstate()
1995 dd->ipath_ibcctrl | mod_wd); in ipath_set_ib_lstate()
1997 (void) ipath_read_kreg64(dd, dd->ipath_kregs->kr_ibcstatus); in ipath_set_ib_lstate()
2000 int ipath_set_linkstate(struct ipath_devdata *dd, u8 newstate) in ipath_set_linkstate() argument
2007 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_DOWN, 0); in ipath_set_linkstate()
2013 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_DOWN, in ipath_set_linkstate()
2020 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_DOWN, in ipath_set_linkstate()
2027 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_DOWN, in ipath_set_linkstate()
2034 if (dd->ipath_flags & IPATH_LINKARMED) { in ipath_set_linkstate()
2038 if (!(dd->ipath_flags & in ipath_set_linkstate()
2043 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_ARMED, 0); in ipath_set_linkstate()
2053 if (dd->ipath_flags & IPATH_LINKACTIVE) { in ipath_set_linkstate()
2057 if (!(dd->ipath_flags & IPATH_LINKARMED)) { in ipath_set_linkstate()
2061 ipath_set_ib_lstate(dd, INFINIPATH_IBCC_LINKCMD_ACTIVE, 0); in ipath_set_linkstate()
2066 dev_info(&dd->pcidev->dev, "Enabling IB local loopback\n"); in ipath_set_linkstate()
2067 dd->ipath_ibcctrl |= INFINIPATH_IBCC_LOOPBACK; in ipath_set_linkstate()
2068 ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, in ipath_set_linkstate()
2069 dd->ipath_ibcctrl); in ipath_set_linkstate()
2072 dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT, in ipath_set_linkstate()
2079 dev_info(&dd->pcidev->dev, in ipath_set_linkstate()
2081 dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT, in ipath_set_linkstate()
2083 dd->ipath_ibcctrl &= ~INFINIPATH_IBCC_LOOPBACK; in ipath_set_linkstate()
2084 ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, in ipath_set_linkstate()
2085 dd->ipath_ibcctrl); in ipath_set_linkstate()
2097 ret = dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT, in ipath_set_linkstate()
2102 ret = dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_HRTBT, in ipath_set_linkstate()
2111 ret = ipath_wait_linkstate(dd, lstate, 2000); in ipath_set_linkstate()
2129 int ipath_set_mtu(struct ipath_devdata *dd, u16 arg) in ipath_set_mtu() argument
2147 if (dd->ipath_ibmtu == arg) { in ipath_set_mtu()
2152 piosize = dd->ipath_ibmaxlen; in ipath_set_mtu()
2153 dd->ipath_ibmtu = arg; in ipath_set_mtu()
2157 if (piosize != dd->ipath_init_ibmaxlen) { in ipath_set_mtu()
2158 if (arg > piosize && arg <= dd->ipath_init_ibmaxlen) in ipath_set_mtu()
2159 piosize = dd->ipath_init_ibmaxlen; in ipath_set_mtu()
2160 dd->ipath_ibmaxlen = piosize; in ipath_set_mtu()
2163 } else if ((arg + IPATH_PIO_MAXIBHDR) != dd->ipath_ibmaxlen) { in ipath_set_mtu()
2166 "(mtu 0x%x)\n", dd->ipath_ibmaxlen, piosize, in ipath_set_mtu()
2168 dd->ipath_ibmaxlen = piosize; in ipath_set_mtu()
2173 u64 ibc = dd->ipath_ibcctrl, ibdw; in ipath_set_mtu()
2179 dd->ipath_ibmaxlen = piosize - 2 * sizeof(u32); in ipath_set_mtu()
2180 ibdw = (dd->ipath_ibmaxlen >> 2) + 1; in ipath_set_mtu()
2182 dd->ibcc_mpl_shift); in ipath_set_mtu()
2183 ibc |= ibdw << dd->ibcc_mpl_shift; in ipath_set_mtu()
2184 dd->ipath_ibcctrl = ibc; in ipath_set_mtu()
2185 ipath_write_kreg(dd, dd->ipath_kregs->kr_ibcctrl, in ipath_set_mtu()
2186 dd->ipath_ibcctrl); in ipath_set_mtu()
2187 dd->ipath_f_tidtemplate(dd); in ipath_set_mtu()
2196 int ipath_set_lid(struct ipath_devdata *dd, u32 lid, u8 lmc) in ipath_set_lid() argument
2198 dd->ipath_lid = lid; in ipath_set_lid()
2199 dd->ipath_lmc = lmc; in ipath_set_lid()
2201 dd->ipath_f_set_ib_cfg(dd, IPATH_IB_CFG_LIDLMC, lid | in ipath_set_lid()
2204 dev_info(&dd->pcidev->dev, "We got a lid: 0x%x\n", lid); in ipath_set_lid()
2220 void ipath_write_kreg_port(const struct ipath_devdata *dd, ipath_kreg regno, in ipath_write_kreg_port() argument
2225 if (port < dd->ipath_portcnt && in ipath_write_kreg_port()
2226 (regno == dd->ipath_kregs->kr_rcvhdraddr || in ipath_write_kreg_port()
2227 regno == dd->ipath_kregs->kr_rcvhdrtailaddr)) in ipath_write_kreg_port()
2232 ipath_write_kreg(dd, where, value); in ipath_write_kreg_port()
2249 struct ipath_devdata *dd = (struct ipath_devdata *)opaque; in ipath_run_led_override() local
2254 if (!(dd->ipath_flags & IPATH_INITTED)) in ipath_run_led_override()
2257 pidx = dd->ipath_led_override_phase++ & 1; in ipath_run_led_override()
2258 dd->ipath_led_override = dd->ipath_led_override_vals[pidx]; in ipath_run_led_override()
2259 timeoff = dd->ipath_led_override_timeoff; in ipath_run_led_override()
2266 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_ibcstatus); in ipath_run_led_override()
2267 ltstate = ipath_ib_linktrstate(dd, val); in ipath_run_led_override()
2268 lstate = ipath_ib_linkstate(dd, val); in ipath_run_led_override()
2270 dd->ipath_f_setextled(dd, lstate, ltstate); in ipath_run_led_override()
2271 mod_timer(&dd->ipath_led_override_timer, jiffies + timeoff); in ipath_run_led_override()
2274 void ipath_set_led_override(struct ipath_devdata *dd, unsigned int val) in ipath_set_led_override() argument
2278 if (!(dd->ipath_flags & IPATH_INITTED)) in ipath_set_led_override()
2287 dd->ipath_led_override_vals[0] = val & 0xF; in ipath_set_led_override()
2288 dd->ipath_led_override_vals[1] = (val >> 4) & 0xF; in ipath_set_led_override()
2292 dd->ipath_led_override_vals[0] = val & 0xF; in ipath_set_led_override()
2293 dd->ipath_led_override_vals[1] = val & 0xF; in ipath_set_led_override()
2295 dd->ipath_led_override_timeoff = timeoff; in ipath_set_led_override()
2301 if (atomic_inc_return(&dd->ipath_led_override_timer_active) == 1) { in ipath_set_led_override()
2303 init_timer(&dd->ipath_led_override_timer); in ipath_set_led_override()
2304 dd->ipath_led_override_timer.function = in ipath_set_led_override()
2306 dd->ipath_led_override_timer.data = (unsigned long) dd; in ipath_set_led_override()
2307 dd->ipath_led_override_timer.expires = jiffies + 1; in ipath_set_led_override()
2308 add_timer(&dd->ipath_led_override_timer); in ipath_set_led_override()
2310 atomic_dec(&dd->ipath_led_override_timer_active); in ipath_set_led_override()
2322 void ipath_shutdown_device(struct ipath_devdata *dd) in ipath_shutdown_device() argument
2328 ipath_hol_up(dd); /* make sure user processes aren't suspended */ in ipath_shutdown_device()
2330 dd->ipath_flags |= IPATH_LINKUNK; in ipath_shutdown_device()
2331 dd->ipath_flags &= ~(IPATH_INITTED | IPATH_LINKDOWN | in ipath_shutdown_device()
2334 *dd->ipath_statusp &= ~(IPATH_STATUS_IB_CONF | in ipath_shutdown_device()
2338 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, 0ULL); in ipath_shutdown_device()
2340 dd->ipath_rcvctrl = 0; in ipath_shutdown_device()
2341 ipath_write_kreg(dd, dd->ipath_kregs->kr_rcvctrl, in ipath_shutdown_device()
2342 dd->ipath_rcvctrl); in ipath_shutdown_device()
2344 if (dd->ipath_flags & IPATH_HAS_SEND_DMA) in ipath_shutdown_device()
2345 teardown_sdma(dd); in ipath_shutdown_device()
2351 spin_lock_irqsave(&dd->ipath_sendctrl_lock, flags); in ipath_shutdown_device()
2352 dd->ipath_sendctrl = 0; in ipath_shutdown_device()
2353 ipath_write_kreg(dd, dd->ipath_kregs->kr_sendctrl, dd->ipath_sendctrl); in ipath_shutdown_device()
2355 ipath_read_kreg64(dd, dd->ipath_kregs->kr_scratch); in ipath_shutdown_device()
2356 spin_unlock_irqrestore(&dd->ipath_sendctrl_lock, flags); in ipath_shutdown_device()
2364 dd->ipath_f_setextled(dd, 0, 0); /* make sure LEDs are off */ in ipath_shutdown_device()
2366 ipath_set_ib_lstate(dd, 0, INFINIPATH_IBCC_LINKINITCMD_DISABLE); in ipath_shutdown_device()
2367 ipath_cancel_sends(dd, 0); in ipath_shutdown_device()
2374 signal_ib_event(dd, IB_EVENT_PORT_ERR); in ipath_shutdown_device()
2377 dd->ipath_control &= ~INFINIPATH_C_LINKENABLE; in ipath_shutdown_device()
2378 ipath_write_kreg(dd, dd->ipath_kregs->kr_control, in ipath_shutdown_device()
2379 dd->ipath_control | INFINIPATH_C_FREEZEMODE); in ipath_shutdown_device()
2386 dd->ipath_f_quiet_serdes(dd); in ipath_shutdown_device()
2389 del_timer_sync(&dd->ipath_hol_timer); in ipath_shutdown_device()
2390 if (dd->ipath_stats_timer_active) { in ipath_shutdown_device()
2391 del_timer_sync(&dd->ipath_stats_timer); in ipath_shutdown_device()
2392 dd->ipath_stats_timer_active = 0; in ipath_shutdown_device()
2394 if (dd->ipath_intrchk_timer.data) { in ipath_shutdown_device()
2395 del_timer_sync(&dd->ipath_intrchk_timer); in ipath_shutdown_device()
2396 dd->ipath_intrchk_timer.data = 0; in ipath_shutdown_device()
2398 if (atomic_read(&dd->ipath_led_override_timer_active)) { in ipath_shutdown_device()
2399 del_timer_sync(&dd->ipath_led_override_timer); in ipath_shutdown_device()
2400 atomic_set(&dd->ipath_led_override_timer_active, 0); in ipath_shutdown_device()
2408 ipath_write_kreg(dd, dd->ipath_kregs->kr_hwerrclear, in ipath_shutdown_device()
2410 ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, -1LL); in ipath_shutdown_device()
2411 ipath_write_kreg(dd, dd->ipath_kregs->kr_intclear, -1LL); in ipath_shutdown_device()
2414 ipath_update_eeprom_log(dd); in ipath_shutdown_device()
2429 void ipath_free_pddata(struct ipath_devdata *dd, struct ipath_portdata *pd) in ipath_free_pddata() argument
2438 dma_free_coherent(&dd->pcidev->dev, pd->port_rcvhdrq_size, in ipath_free_pddata()
2442 dma_free_coherent(&dd->pcidev->dev, PAGE_SIZE, in ipath_free_pddata()
2459 dma_free_coherent(&dd->pcidev->dev, size, in ipath_free_pddata()
2467 } else if (pd->port_port == 0 && dd->ipath_port0_skbinfo) { in ipath_free_pddata()
2469 struct ipath_skbinfo *skbinfo = dd->ipath_port0_skbinfo; in ipath_free_pddata()
2471 dd->ipath_port0_skbinfo = NULL; in ipath_free_pddata()
2475 for (e = 0; e < dd->ipath_p0_rcvegrcnt; e++) in ipath_free_pddata()
2477 pci_unmap_single(dd->pcidev, skbinfo[e].phys, in ipath_free_pddata()
2478 dd->ipath_ibmaxlen, in ipath_free_pddata()
2552 struct ipath_devdata *dd = ipath_lookup(unit); in ipath_reset_device() local
2555 if (!dd) { in ipath_reset_device()
2560 if (atomic_read(&dd->ipath_led_override_timer_active)) { in ipath_reset_device()
2562 del_timer_sync(&dd->ipath_led_override_timer); in ipath_reset_device()
2563 atomic_set(&dd->ipath_led_override_timer_active, 0); in ipath_reset_device()
2567 dd->ipath_led_override = LED_OVER_BOTH_OFF; in ipath_reset_device()
2568 dd->ipath_f_setextled(dd, 0, 0); in ipath_reset_device()
2570 dev_info(&dd->pcidev->dev, "Reset on unit %u requested\n", unit); in ipath_reset_device()
2572 if (!dd->ipath_kregbase || !(dd->ipath_flags & IPATH_PRESENT)) { in ipath_reset_device()
2573 dev_info(&dd->pcidev->dev, "Invalid unit number %u or " in ipath_reset_device()
2579 spin_lock_irqsave(&dd->ipath_uctxt_lock, flags); in ipath_reset_device()
2580 if (dd->ipath_pd) in ipath_reset_device()
2581 for (i = 1; i < dd->ipath_cfgports; i++) { in ipath_reset_device()
2582 if (!dd->ipath_pd[i] || !dd->ipath_pd[i]->port_cnt) in ipath_reset_device()
2584 spin_unlock_irqrestore(&dd->ipath_uctxt_lock, flags); in ipath_reset_device()
2588 pid_nr(dd->ipath_pd[i]->port_pid), in ipath_reset_device()
2589 dd->ipath_pd[i]->port_comm); in ipath_reset_device()
2593 spin_unlock_irqrestore(&dd->ipath_uctxt_lock, flags); in ipath_reset_device()
2595 if (dd->ipath_flags & IPATH_HAS_SEND_DMA) in ipath_reset_device()
2596 teardown_sdma(dd); in ipath_reset_device()
2598 dd->ipath_flags &= ~IPATH_INITTED; in ipath_reset_device()
2599 ipath_write_kreg(dd, dd->ipath_kregs->kr_intmask, 0ULL); in ipath_reset_device()
2600 ret = dd->ipath_f_reset(dd); in ipath_reset_device()
2604 ret = ipath_init_chip(dd, 1); in ipath_reset_device()
2608 ipath_dev_err(dd, "Reinitialize unit %u after " in ipath_reset_device()
2611 dev_info(&dd->pcidev->dev, "Reinitialized unit %u after " in ipath_reset_device()
2623 static int ipath_signal_procs(struct ipath_devdata *dd, int sig) in ipath_signal_procs() argument
2629 if (!dd->ipath_pd) in ipath_signal_procs()
2632 spin_lock_irqsave(&dd->ipath_uctxt_lock, flags); in ipath_signal_procs()
2633 for (i = 1; i < dd->ipath_cfgports; i++) { in ipath_signal_procs()
2634 if (!dd->ipath_pd[i] || !dd->ipath_pd[i]->port_cnt) in ipath_signal_procs()
2636 pid = dd->ipath_pd[i]->port_pid; in ipath_signal_procs()
2640 dev_info(&dd->pcidev->dev, "context %d in use " in ipath_signal_procs()
2646 pid = dd->ipath_pd[i]->port_subpid[sub]; in ipath_signal_procs()
2649 dev_info(&dd->pcidev->dev, "sub-context " in ipath_signal_procs()
2656 spin_unlock_irqrestore(&dd->ipath_uctxt_lock, flags); in ipath_signal_procs()
2660 static void ipath_hol_signal_down(struct ipath_devdata *dd) in ipath_hol_signal_down() argument
2662 if (ipath_signal_procs(dd, SIGSTOP)) in ipath_hol_signal_down()
2664 ipath_cancel_sends(dd, 1); in ipath_hol_signal_down()
2668 static void ipath_hol_signal_up(struct ipath_devdata *dd) in ipath_hol_signal_up() argument
2670 if (ipath_signal_procs(dd, SIGCONT)) in ipath_hol_signal_up()
2681 void ipath_hol_down(struct ipath_devdata *dd) in ipath_hol_down() argument
2683 dd->ipath_hol_state = IPATH_HOL_DOWN; in ipath_hol_down()
2684 ipath_hol_signal_down(dd); in ipath_hol_down()
2685 dd->ipath_hol_next = IPATH_HOL_DOWNCONT; in ipath_hol_down()
2686 dd->ipath_hol_timer.expires = jiffies + in ipath_hol_down()
2688 mod_timer(&dd->ipath_hol_timer, dd->ipath_hol_timer.expires); in ipath_hol_down()
2696 void ipath_hol_up(struct ipath_devdata *dd) in ipath_hol_up() argument
2698 ipath_hol_signal_up(dd); in ipath_hol_up()
2699 dd->ipath_hol_state = IPATH_HOL_UP; in ipath_hol_up()
2710 struct ipath_devdata *dd = (struct ipath_devdata *)opaque; in ipath_hol_event() local
2712 if (dd->ipath_hol_next == IPATH_HOL_DOWNSTOP in ipath_hol_event()
2713 && dd->ipath_hol_state != IPATH_HOL_UP) { in ipath_hol_event()
2714 dd->ipath_hol_next = IPATH_HOL_DOWNCONT; in ipath_hol_event()
2716 ipath_hol_signal_down(dd); in ipath_hol_event()
2718 dd->ipath_hol_next = IPATH_HOL_DOWNSTOP; in ipath_hol_event()
2720 ipath_hol_signal_up(dd); in ipath_hol_event()
2722 if (dd->ipath_hol_state == IPATH_HOL_UP) in ipath_hol_event()
2725 dd->ipath_hol_timer.expires = jiffies + in ipath_hol_event()
2727 mod_timer(&dd->ipath_hol_timer, in ipath_hol_event()
2728 dd->ipath_hol_timer.expires); in ipath_hol_event()
2732 int ipath_set_rx_pol_inv(struct ipath_devdata *dd, u8 new_pol_inv) in ipath_set_rx_pol_inv() argument
2738 if (dd->ipath_rx_pol_inv != new_pol_inv) { in ipath_set_rx_pol_inv()
2739 dd->ipath_rx_pol_inv = new_pol_inv; in ipath_set_rx_pol_inv()
2740 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_xgxsconfig); in ipath_set_rx_pol_inv()
2743 val |= ((u64)dd->ipath_rx_pol_inv) << in ipath_set_rx_pol_inv()
2745 ipath_write_kreg(dd, dd->ipath_kregs->kr_xgxsconfig, val); in ipath_set_rx_pol_inv()
2759 void ipath_enable_armlaunch(struct ipath_devdata *dd) in ipath_enable_armlaunch() argument
2761 dd->ipath_lasterror &= ~INFINIPATH_E_SPIOARMLAUNCH; in ipath_enable_armlaunch()
2762 ipath_write_kreg(dd, dd->ipath_kregs->kr_errorclear, in ipath_enable_armlaunch()
2764 dd->ipath_errormask |= INFINIPATH_E_SPIOARMLAUNCH; in ipath_enable_armlaunch()
2765 ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, in ipath_enable_armlaunch()
2766 dd->ipath_errormask); in ipath_enable_armlaunch()
2769 void ipath_disable_armlaunch(struct ipath_devdata *dd) in ipath_disable_armlaunch() argument
2772 dd->ipath_maskederrs &= ~INFINIPATH_E_SPIOARMLAUNCH; in ipath_disable_armlaunch()
2773 dd->ipath_errormask &= ~INFINIPATH_E_SPIOARMLAUNCH; in ipath_disable_armlaunch()
2774 ipath_write_kreg(dd, dd->ipath_kregs->kr_errormask, in ipath_disable_armlaunch()
2775 dd->ipath_errormask); in ipath_disable_armlaunch()