1827
1828 for (iov = he_vcc->iov_head;
1829 iov < he_vcc->iov_tail; ++iov) {
1830 if (iov->iov_base & RBP_SMALLBUF)
1831 rbp = &he_dev->rbps_base[RBP_INDEX(iov->iov_base)];
1832 else
1833 rbp = &he_dev->rbpl_base[RBP_INDEX(iov->iov_base)];
1834
1835 rbp->status &= ~RBP_LOANED;
1836 }
1837
1838 he_vcc->iov_tail = he_vcc->iov_head;
1839 he_vcc->pdu_len = 0;
1840
1841next_rbrq_entry:
1842 he_dev->rbrq_head = (struct he_rbrq *)
1843 ((unsigned long) he_dev->rbrq_base |
1844 RBRQ_MASK(++he_dev->rbrq_head));
1845
1846 }
1847 read_unlock(&vcc_sklist_lock);
1848
1849 if (updated) {
1850 if (updated > he_dev->rbrq_peak)
1851 he_dev->rbrq_peak = updated;
1852
1853 he_writel(he_dev, RBRQ_MASK(he_dev->rbrq_head),
1854 G0_RBRQ_H + (group * 16));
1855 }
1856
1857 return pdus_assembled;
1858}
1859
1860static void
1861he_service_tbrq(struct he_dev *he_dev, int group)
1862{
1863 struct he_tbrq *tbrq_tail = (struct he_tbrq *)
1864 ((unsigned long)he_dev->tbrq_base |
1865 he_dev->hsp->group[group].tbrq_tail);
1866 struct he_tpd *tpd;
1867 int slot, updated = 0;