Lines Matching refs:ppd
326 struct qib_pportdata *ppd = dd->pport + pidx;
327 struct qib_ibport *ibp = &ppd->ibport_data;
328 __be64 g = ppd->guid;
346 static void set_link_width_enabled(struct qib_pportdata *ppd, u32 w)
348 (void) ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_LWID_ENB, w);
351 static void set_link_speed_enabled(struct qib_pportdata *ppd, u32 s)
353 (void) ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_SPD_ENB, s);
356 static int get_overrunthreshold(struct qib_pportdata *ppd)
358 return ppd->dd->f_get_ib_cfg(ppd, QIB_IB_CFG_OVERRUN_THRESH);
363 * @ppd: the physical port data
368 static int set_overrunthreshold(struct qib_pportdata *ppd, unsigned n)
370 (void) ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_OVERRUN_THRESH,
375 static int get_phyerrthreshold(struct qib_pportdata *ppd)
377 return ppd->dd->f_get_ib_cfg(ppd, QIB_IB_CFG_PHYERR_THRESH);
382 * @ppd: the physical port data
387 static int set_phyerrthreshold(struct qib_pportdata *ppd, unsigned n)
389 (void) ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_PHYERR_THRESH,
396 * @ppd: the physical port data
400 static int get_linkdowndefaultstate(struct qib_pportdata *ppd)
402 return ppd->dd->f_get_ib_cfg(ppd, QIB_IB_CFG_LINKDEFAULT) ==
458 struct qib_pportdata *ppd;
486 ppd = dd->pport + (port_num - 1);
487 ibp = &ppd->ibport_data;
498 pip->lid = cpu_to_be16(ppd->lid);
504 pip->link_width_enabled = ppd->link_width_enabled;
505 pip->link_width_supported = ppd->link_width_supported;
506 pip->link_width_active = ppd->link_width_active;
507 state = dd->f_iblink_state(ppd->lastibcstat);
508 pip->linkspeed_portstate = ppd->link_speed_supported << 4 | state;
511 (dd->f_ibphys_portstate(ppd->lastibcstat) << 4) |
512 (get_linkdowndefaultstate(ppd) ? 1 : 2);
513 pip->mkeyprot_resv_lmc = (ibp->rvp.mkeyprot << 6) | ppd->lmc;
514 pip->linkspeedactive_enabled = (ppd->link_speed_active << 4) |
515 ppd->link_speed_enabled;
516 switch (ppd->ibmtu) {
535 pip->vlcap_inittype = ppd->vls_supported << 4; /* InitType = 0 */
538 dd->f_get_ib_cfg(ppd, QIB_IB_CFG_VL_HIGH_CAP);
540 dd->f_get_ib_cfg(ppd, QIB_IB_CFG_VL_LOW_CAP);
546 dd->f_get_ib_cfg(ppd, QIB_IB_CFG_OP_VLS) << 4;
557 (get_phyerrthreshold(ppd) << 4) |
558 get_overrunthreshold(ppd);
563 v = dd->f_get_ib_cfg(ppd, QIB_IB_CFG_LINKLATENCY);
583 struct qib_pportdata *ppd = dd->pport + port - 1;
586 * If we get here with ppd setup, no need to check
589 struct qib_ctxtdata *rcd = dd->rcd[ppd->hw_pidx];
631 struct qib_pportdata *ppd = dd->pport + pidx;
632 struct qib_ibport *ibp = &ppd->ibport_data;
659 struct qib_pportdata *ppd;
685 ppd = dd->pport + (port_num - 1);
686 ibp = &ppd->ibport_data;
698 else if (ppd->lid != lid || ppd->lmc != (pip->mkeyprot_resv_lmc & 7)) {
699 if (ppd->lid != lid)
700 qib_set_uevent_bits(ppd, _QIB_EVENT_LID_CHANGE_BIT);
701 if (ppd->lmc != (pip->mkeyprot_resv_lmc & 7))
702 qib_set_uevent_bits(ppd, _QIB_EVENT_LMC_CHANGE_BIT);
703 qib_set_lid(ppd, lid, pip->mkeyprot_resv_lmc & 7);
735 set_link_width_enabled(ppd, ppd->link_width_supported);
736 else if (lwe >= 16 || (lwe & ~ppd->link_width_supported))
738 else if (lwe != ppd->link_width_enabled)
739 set_link_width_enabled(ppd, lwe);
750 set_link_speed_enabled(ppd,
751 ppd->link_speed_supported);
752 else if (lse >= 8 || (lse & ~ppd->link_speed_supported))
754 else if (lse != ppd->link_speed_enabled)
755 set_link_speed_enabled(ppd, lse);
763 (void) dd->f_set_ib_cfg(ppd, QIB_IB_CFG_LINKDEFAULT,
767 (void) dd->f_set_ib_cfg(ppd, QIB_IB_CFG_LINKDEFAULT,
776 (void) dd->f_set_ib_cfg(ppd, QIB_IB_CFG_VL_HIGH_LIMIT,
783 qib_set_mtu(ppd, mtu);
788 if (vls > ppd->vls_supported)
791 (void) dd->f_set_ib_cfg(ppd, QIB_IB_CFG_OP_VLS, vls);
804 if (set_phyerrthreshold(ppd, (ore >> 4) & 0xF))
807 if (set_overrunthreshold(ppd, (ore & 0xF)))
845 spin_lock_irqsave(&ppd->lflags_lock, flags);
846 ppd->lflags &= ~QIBL_LINKV;
847 spin_unlock_irqrestore(&ppd->lflags_lock, flags);
848 qib_set_linkstate(ppd, lstate);
857 qib_wait_linkstate(ppd, QIBL_LINKV, 10);
860 qib_set_linkstate(ppd, QIB_IB_LINKARM);
863 qib_set_linkstate(ppd, QIB_IB_LINKACTIVE);
895 static int rm_pkey(struct qib_pportdata *ppd, u16 key)
900 for (i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
901 if (ppd->pkeys[i] != key)
903 if (atomic_dec_and_test(&ppd->pkeyrefs[i])) {
904 ppd->pkeys[i] = 0;
925 static int add_pkey(struct qib_pportdata *ppd, u16 key)
938 for (i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
939 if (!ppd->pkeys[i]) {
944 if (ppd->pkeys[i] == key) {
945 if (atomic_inc_return(&ppd->pkeyrefs[i]) > 1) {
950 atomic_dec(&ppd->pkeyrefs[i]);
958 if ((ppd->pkeys[i] & 0x7FFF) == lkey) {
967 for (i = 0; i < ARRAY_SIZE(ppd->pkeys); i++) {
968 if (!ppd->pkeys[i] &&
969 atomic_inc_return(&ppd->pkeyrefs[i]) == 1) {
971 ppd->pkeys[i] = key;
990 struct qib_pportdata *ppd;
998 * If we get here with ppd setup, no need to check
1001 ppd = dd->pport + (port - 1);
1002 rcd = dd->rcd[ppd->hw_pidx];
1015 changed |= rm_pkey(ppd, okey);
1017 int ret = add_pkey(ppd, key);
1029 (void) dd->f_set_ib_cfg(ppd, QIB_IB_CFG_PKEYS, 0);
1101 struct qib_pportdata *ppd = ppd_from_ibp(to_iport(ibdev, port));
1105 if (ppd->vls_supported == IB_VL_VL0)
1108 (void) ppd->dd->f_get_ib_table(ppd, QIB_IB_TBL_VL_LOW_ARB,
1111 (void) ppd->dd->f_get_ib_table(ppd, QIB_IB_TBL_VL_HIGH_ARB,
1123 struct qib_pportdata *ppd = ppd_from_ibp(to_iport(ibdev, port));
1125 if (ppd->vls_supported == IB_VL_VL0)
1128 (void) ppd->dd->f_set_ib_table(ppd, QIB_IB_TBL_VL_LOW_ARB,
1131 (void) ppd->dd->f_set_ib_table(ppd, QIB_IB_TBL_VL_HIGH_ARB,
1190 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1202 p->tick = dd->f_get_ib_cfg(ppd, QIB_IB_CFG_PMA_TICKS);
1203 p->sample_status = dd->f_portcntr(ppd, QIBPORTCNTR_PSSTAT);
1228 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1242 xmit_flags = ppd->cong_stats.flags;
1243 ppd->cong_stats.flags = IB_PMA_CONG_HW_CONTROL_SAMPLE;
1244 status = dd->f_portcntr(ppd, QIBPORTCNTR_PSSTAT);
1256 dd->f_set_cntr_sample(ppd, ibp->rvp.pma_sample_interval,
1267 static u64 get_counter(struct qib_ibport *ibp, struct qib_pportdata *ppd,
1274 ret = ppd->dd->f_portcntr(ppd, QIBPORTCNTR_PSXMITDATA);
1277 ret = ppd->dd->f_portcntr(ppd, QIBPORTCNTR_PSRCVDATA);
1280 ret = ppd->dd->f_portcntr(ppd, QIBPORTCNTR_PSXMITPKTS);
1283 ret = ppd->dd->f_portcntr(ppd, QIBPORTCNTR_PSRCVPKTS);
1286 ret = ppd->dd->f_portcntr(ppd, QIBPORTCNTR_PSXMITWAIT);
1296 static u64 xmit_wait_get_value_delta(struct qib_pportdata *ppd)
1300 delta = get_counter(&ppd->ibport_data, ppd,
1302 return ppd->cong_stats.counter + delta;
1305 static void cache_hw_sample_counters(struct qib_pportdata *ppd)
1307 struct qib_ibport *ibp = &ppd->ibport_data;
1309 ppd->cong_stats.counter_cache.psxmitdata =
1310 get_counter(ibp, ppd, IB_PMA_PORT_XMIT_DATA);
1311 ppd->cong_stats.counter_cache.psrcvdata =
1312 get_counter(ibp, ppd, IB_PMA_PORT_RCV_DATA);
1313 ppd->cong_stats.counter_cache.psxmitpkts =
1314 get_counter(ibp, ppd, IB_PMA_PORT_XMIT_PKTS);
1315 ppd->cong_stats.counter_cache.psrcvpkts =
1316 get_counter(ibp, ppd, IB_PMA_PORT_RCV_PKTS);
1317 ppd->cong_stats.counter_cache.psxmitwait =
1318 get_counter(ibp, ppd, IB_PMA_PORT_XMIT_WAIT);
1321 static u64 get_cache_hw_sample_counters(struct qib_pportdata *ppd,
1328 ret = ppd->cong_stats.counter_cache.psxmitdata;
1331 ret = ppd->cong_stats.counter_cache.psrcvdata;
1334 ret = ppd->cong_stats.counter_cache.psxmitpkts;
1337 ret = ppd->cong_stats.counter_cache.psrcvpkts;
1340 ret = ppd->cong_stats.counter_cache.psxmitwait;
1357 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1365 if (ppd->cong_stats.flags == IB_PMA_CONG_HW_CONTROL_TIMER)
1368 status = dd->f_portcntr(ppd, QIBPORTCNTR_PSSTAT);
1371 cache_hw_sample_counters(ppd);
1372 ppd->cong_stats.counter =
1373 xmit_wait_get_value_delta(ppd);
1374 dd->f_set_cntr_sample(ppd,
1376 ppd->cong_stats.flags = IB_PMA_CONG_HW_CONTROL_TIMER;
1382 ppd, ibp->rvp.pma_counter_select[i]));
1396 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1405 if (ppd->cong_stats.flags == IB_PMA_CONG_HW_CONTROL_TIMER)
1408 status = dd->f_portcntr(ppd, QIBPORTCNTR_PSSTAT);
1413 cache_hw_sample_counters(ppd);
1414 ppd->cong_stats.counter =
1415 xmit_wait_get_value_delta(ppd);
1416 dd->f_set_cntr_sample(ppd,
1418 ppd->cong_stats.flags = IB_PMA_CONG_HW_CONTROL_TIMER;
1424 ppd, ibp->rvp.pma_counter_select[i]));
1436 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1440 qib_get_counters(ppd, &cntrs);
1536 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1537 struct qib_devdata *dd = dd_from_ppd(ppd);
1551 qib_get_counters(ppd, &cntrs);
1552 spin_lock_irqsave(&ppd->ibport_data.rvp.lock, flags);
1553 xmit_wait_counter = xmit_wait_get_value_delta(ppd);
1554 spin_unlock_irqrestore(&ppd->ibport_data.rvp.lock, flags);
1664 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1677 qib_snapshot_counters(ppd, &swords, &rwords, &spkts, &rpkts, &xwait);
1711 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1718 qib_get_counters(ppd, &cntrs);
1772 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1773 struct qib_devdata *dd = dd_from_ppd(ppd);
1779 qib_get_counters(ppd, &cntrs);
1784 spin_lock_irqsave(&ppd->ibport_data.rvp.lock, flags);
1785 ppd->cong_stats.counter = 0;
1786 dd->f_set_cntr_sample(ppd, QIB_CONG_TIMER_PSINTERVAL,
1788 spin_unlock_irqrestore(&ppd->ibport_data.rvp.lock, flags);
1825 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1829 qib_snapshot_counters(ppd, &swords, &rwords, &spkts, &rpkts, &xwait);
1866 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
1996 ppd->dd->f_set_ib_cfg(ppd, QIB_IB_CFG_PORT,
2119 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2122 p->control_table_cap = ppd->cc_max_table_entries;
2134 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2137 spin_lock(&ppd->cc_shadow_lock);
2139 entries = ppd->congestion_entries_shadow->entries;
2141 ppd->congestion_entries_shadow->port_control);
2143 ppd->congestion_entries_shadow->control_map);
2151 spin_unlock(&ppd->cc_shadow_lock);
2162 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2173 spin_lock(&ppd->cc_shadow_lock);
2176 (ppd->ccti_entries_shadow->ccti_last_entry + 1)/IB_CCT_ENTRIES;
2180 spin_unlock(&ppd->cc_shadow_lock);
2192 entries = &ppd->ccti_entries_shadow->
2199 spin_unlock(&ppd->cc_shadow_lock);
2213 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2216 ppd->cc_sl_control_map = be16_to_cpu(p->control_map);
2219 ppd->congestion_entries[i].ccti_increase =
2222 ppd->congestion_entries[i].ccti_timer =
2225 ppd->congestion_entries[i].trigger_threshold =
2228 ppd->congestion_entries[i].ccti_min =
2241 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2255 ppd->total_cct_entry = 0;
2260 ppd->total_cct_entry += (cct_entry + 1);
2262 if (ppd->total_cct_entry > ppd->cc_supported_table_entries)
2265 ppd->ccti_limit = be16_to_cpu(p->ccti_limit);
2267 entries = ppd->ccti_entries + (IB_CCT_ENTRIES * cct_block_index);
2272 spin_lock(&ppd->cc_shadow_lock);
2274 ppd->ccti_entries_shadow->ccti_last_entry = ppd->total_cct_entry - 1;
2275 memcpy(ppd->ccti_entries_shadow->entries, ppd->ccti_entries,
2276 (ppd->total_cct_entry * sizeof(struct ib_cc_table_entry)));
2278 ppd->congestion_entries_shadow->port_control = IB_CC_CCS_PC_SL_BASED;
2279 ppd->congestion_entries_shadow->control_map = ppd->cc_sl_control_map;
2280 memcpy(ppd->congestion_entries_shadow->entries, ppd->congestion_entries,
2283 spin_unlock(&ppd->cc_shadow_lock);
2368 struct qib_pportdata *ppd = ppd_from_ibp(ibp);
2381 if (!ppd->congestion_entries_shadow ||
2399 struct qib_pportdata *ppd = from_timer(ppd, t, cong_stats.timer);
2400 struct qib_devdata *dd = dd_from_ppd(ppd);
2404 spin_lock_irqsave(&ppd->ibport_data.rvp.lock, flags);
2405 if (ppd->cong_stats.flags == IB_PMA_CONG_HW_CONTROL_SAMPLE) {
2406 status = dd->f_portcntr(ppd, QIBPORTCNTR_PSSTAT);
2409 cache_hw_sample_counters(ppd);
2410 ppd->cong_stats.flags = IB_PMA_CONG_HW_CONTROL_TIMER;
2414 ppd->cong_stats.counter = xmit_wait_get_value_delta(ppd);
2415 dd->f_set_cntr_sample(ppd, QIB_CONG_TIMER_PSINTERVAL, 0x0);
2417 spin_unlock_irqrestore(&ppd->ibport_data.rvp.lock, flags);
2418 mod_timer(&ppd->cong_stats.timer, jiffies + HZ);