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

Lines Matching defs:scq

26  * 2 - Per SCQ scq spinlock
116 #define scq_virt_to_bus(scq, p) \
117 (scq->dma + ((unsigned long)(p) - (unsigned long)(scq)->org))
127 static void free_scq(ns_dev *card, scq_info * scq, struct atm_vcc *vcc);
134 static int push_scqe(ns_dev * card, vc_map * vc, scq_info * scq, ns_scqe * tbd,
137 static void drain_scq(ns_dev * card, scq_info * scq, int pos);
252 free_scq(card, card->scd2vc[j]->scq, card->scd2vc[j]->tx_vcc);
869 scq_info *scq;
875 scq = kmalloc(sizeof(scq_info), GFP_KERNEL);
876 if (!scq)
878 scq->org = pci_alloc_consistent(card->pcidev, 2 * size, &scq->dma);
879 if (!scq->org) {
880 kfree(scq);
883 scq->skb = kmalloc(sizeof(struct sk_buff *) *
885 if (!scq->skb) {
886 kfree(scq->org);
887 kfree(scq);
890 scq->num_entries = size / NS_SCQE_SIZE;
891 scq->base = PTR_ALIGN(scq->org, size);
892 scq->next = scq->base;
893 scq->last = scq->base + (scq->num_entries - 1);
894 scq->tail = scq->last;
895 scq->scd = scd;
896 scq->num_entries = size / NS_SCQE_SIZE;
897 scq->tbd_count = 0;
898 init_waitqueue_head(&scq->scqfull_waitq);
899 scq->full = 0;
900 spin_lock_init(&scq->lock);
902 for (i = 0; i < scq->num_entries; i++)
903 scq->skb[i] = NULL;
905 return scq;
909 static void free_scq(ns_dev *card, scq_info *scq, struct atm_vcc *vcc)
913 if (scq->num_entries == VBR_SCQ_NUM_ENTRIES)
914 for (i = 0; i < scq->num_entries; i++) {
915 if (scq->skb[i] != NULL) {
916 vcc = ATM_SKB(scq->skb[i])->vcc;
918 vcc->pop(vcc, scq->skb[i]);
920 dev_kfree_skb_any(scq->skb[i]);
926 ("nicstar: free_scq() called with vcc == NULL for fixed rate scq.");
927 for (i = 0; i < scq->num_entries; i++)
928 dev_kfree_skb_any(scq->skb[i]);
930 for (i = 0; i < scq->num_entries; i++) {
931 if (scq->skb[i] != NULL) {
933 vcc->pop(vcc, scq->skb[i]);
935 dev_kfree_skb_any(scq->skb[i]);
939 kfree(scq->skb);
941 2 * (scq->num_entries == VBR_SCQ_NUM_ENTRIES ?
943 scq->org, scq->dma);
944 kfree(scq);
1292 scq_info *scq;
1374 scq = get_scq(card, CBR_SCQSIZE, vc->cbr_scd);
1375 if (scq == NULL) {
1384 vc->scq = scq;
1385 u32d[0] = scq_virt_to_bus(scq, scq->base);
1394 vc->scq = card->scq0;
1486 scq_info *scq;
1488 scq = vc->scq;
1491 spin_lock_irqsave(&scq->lock, flags);
1492 scqep = scq->next;
1493 if (scqep == scq->base)
1494 scqep = scq->last;
1497 if (scqep == scq->tail) {
1498 spin_unlock_irqrestore(&scq->lock, flags);
1503 if (!ns_scqe_is_tsr(scqep) && scq->tail != scq->next) {
1511 scqi = scq->next - scq->base;
1515 *scq->next = tsr;
1517 scq->skb[index] = NULL;
1518 if (scq->next == scq->last)
1519 scq->next = scq->base;
1521 scq->next++;
1522 data = scq_virt_to_bus(scq, scq->next);
1523 ns_write_sram(card, scq->scd, &data, 1);
1525 spin_unlock_irqrestore(&scq->lock, flags);
1541 free_scq(card, vc->scq, vcc);
1547 scq_info *scq = card->scq0;
1549 spin_lock_irqsave(&scq->lock, flags);
1551 for (i = 0; i < scq->num_entries; i++) {
1552 if (scq->skb[i] && ATM_SKB(scq->skb[i])->vcc == vcc) {
1553 ATM_SKB(scq->skb[i])->vcc = NULL;
1554 atm_return(vcc, scq->skb[i]->truesize);
1560 spin_unlock_irqrestore(&scq->lock, flags);
1646 scq_info *scq;
1719 scq = ((vc_map *) vcc->dev_data)->scq;
1723 scq = card->scq0;
1726 if (push_scqe(card, vc, scq, &scqe, skb) != 0) {
1736 static int push_scqe(ns_dev * card, vc_map * vc, scq_info * scq, ns_scqe * tbd,
1746 spin_lock_irqsave(&scq->lock, flags);
1747 while (scq->tail == scq->next) {
1749 spin_unlock_irqrestore(&scq->lock, flags);
1754 scq->full = 1;
1755 spin_unlock_irqrestore(&scq->lock, flags);
1756 interruptible_sleep_on_timeout(&scq->scqfull_waitq,
1758 spin_lock_irqsave(&scq->lock, flags);
1760 if (scq->full) {
1761 spin_unlock_irqrestore(&scq->lock, flags);
1767 *scq->next = *tbd;
1768 index = (int)(scq->next - scq->base);
1769 scq->skb[index] = skb;
1775 scq->next);
1776 if (scq->next == scq->last)
1777 scq->next = scq->base;
1779 scq->next++;
1782 if (scq->num_entries == VBR_SCQ_NUM_ENTRIES) {
1783 scq->tbd_count++;
1789 || scq->tbd_count >= MAX_TBD_PER_SCQ) {
1792 while (scq->tail == scq->next) {
1794 data = scq_virt_to_bus(scq, scq->next);
1795 ns_write_sram(card, scq->scd, &data, 1);
1796 spin_unlock_irqrestore(&scq->lock, flags);
1802 scq->full = 1;
1805 spin_unlock_irqrestore(&scq->lock, flags);
1806 interruptible_sleep_on_timeout(&scq->scqfull_waitq,
1808 spin_lock_irqsave(&scq->lock, flags);
1811 if (!scq->full) {
1817 scqi = scq->next - scq->base;
1822 *scq->next = tsr;
1824 scq->skb[index] = NULL;
1829 le32_to_cpu(tsr.word_4), scq->next);
1830 if (scq->next == scq->last)
1831 scq->next = scq->base;
1833 scq->next++;
1835 scq->tbd_count = 0;
1840 data = scq_virt_to_bus(scq, scq->next);
1841 ns_write_sram(card, scq->scd, &data, 1);
1843 spin_unlock_irqrestore(&scq->lock, flags);
1851 scq_info *scq;
1884 scq = card->scq0;
1893 scq = card->scd2vc[scdi]->scq;
1895 drain_scq(card, scq, ns_tsi_getscqpos(card->tsq.next));
1896 scq->full = 0;
1897 wake_up_interruptible(&(scq->scqfull_waitq));
1923 static void drain_scq(ns_dev * card, scq_info * scq, int pos)
1930 XPRINTK("nicstar%d: drain_scq() called, scq at 0x%p, pos %d.\n",
1931 card->index, scq, pos);
1932 if (pos >= scq->num_entries) {
1937 spin_lock_irqsave(&scq->lock, flags);
1938 i = (int)(scq->tail - scq->base);
1939 if (++i == scq->num_entries)
1942 skb = scq->skb[i];
1956 scq->skb[i] = NULL;
1958 if (++i == scq->num_entries)
1961 scq->tail = scq->base + pos;
1962 spin_unlock_irqrestore(&scq->lock, flags);