Lines Matching refs:bcs
53 hscx_empty_fifo(struct BCState *bcs, int count) in hscx_empty_fifo() argument
56 struct IsdnCardState *cs = bcs->cs; in hscx_empty_fifo()
61 if (bcs->hw.hscx.rcvidx + count > HSCX_BUFMAX) { in hscx_empty_fifo()
64 WriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x80); in hscx_empty_fifo()
65 bcs->hw.hscx.rcvidx = 0; in hscx_empty_fifo()
68 ptr = bcs->hw.hscx.rcvbuf + bcs->hw.hscx.rcvidx; in hscx_empty_fifo()
69 bcs->hw.hscx.rcvidx += count; in hscx_empty_fifo()
70 READHSCXFIFO(cs, bcs->hw.hscx.hscx, ptr, count); in hscx_empty_fifo()
71 WriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x80); in hscx_empty_fifo()
73 char *t = bcs->blog; in hscx_empty_fifo()
76 bcs->hw.hscx.hscx ? 'B' : 'A', count); in hscx_empty_fifo()
78 debugl1(cs, "%s", bcs->blog); in hscx_empty_fifo()
83 hscx_fill_fifo(struct BCState *bcs) in hscx_fill_fifo() argument
85 struct IsdnCardState *cs = bcs->cs; in hscx_fill_fifo()
93 if (!bcs->tx_skb) in hscx_fill_fifo()
95 if (bcs->tx_skb->len <= 0) in hscx_fill_fifo()
98 more = (bcs->mode == L1_MODE_TRANS) ? 1 : 0; in hscx_fill_fifo()
99 if (bcs->tx_skb->len > fifo_size) { in hscx_fill_fifo()
103 count = bcs->tx_skb->len; in hscx_fill_fifo()
105 waitforXFW(cs, bcs->hw.hscx.hscx); in hscx_fill_fifo()
106 ptr = bcs->tx_skb->data; in hscx_fill_fifo()
107 skb_pull(bcs->tx_skb, count); in hscx_fill_fifo()
108 bcs->tx_cnt -= count; in hscx_fill_fifo()
109 bcs->hw.hscx.count += count; in hscx_fill_fifo()
110 WRITEHSCXFIFO(cs, bcs->hw.hscx.hscx, ptr, count); in hscx_fill_fifo()
111 WriteHSCXCMDR(cs, bcs->hw.hscx.hscx, more ? 0x8 : 0xa); in hscx_fill_fifo()
113 char *t = bcs->blog; in hscx_fill_fifo()
116 bcs->hw.hscx.hscx ? 'B' : 'A', count); in hscx_fill_fifo()
118 debugl1(cs, "%s", bcs->blog); in hscx_fill_fifo()
126 struct BCState *bcs = cs->bcs + hscx; in hscx_interrupt() local
131 if (!test_bit(BC_FLG_INIT, &bcs->Flag)) in hscx_interrupt()
141 bcs->err_inv++; in hscx_interrupt()
144 if ((r & 0x40) && bcs->mode) { in hscx_interrupt()
147 bcs->mode); in hscx_interrupt()
149 bcs->err_rdo++; in hscx_interrupt()
156 bcs->err_crc++; in hscx_interrupt()
165 hscx_empty_fifo(bcs, count); in hscx_interrupt()
166 if ((count = bcs->hw.hscx.rcvidx - 1) > 0) { in hscx_interrupt()
172 memcpy(skb_put(skb, count), bcs->hw.hscx.rcvbuf, count); in hscx_interrupt()
173 skb_queue_tail(&bcs->rqueue, skb); in hscx_interrupt()
177 bcs->hw.hscx.rcvidx = 0; in hscx_interrupt()
178 schedule_event(bcs, B_RCVBUFREADY); in hscx_interrupt()
181 hscx_empty_fifo(bcs, fifo_size); in hscx_interrupt()
182 if (bcs->mode == L1_MODE_TRANS) { in hscx_interrupt()
187 memcpy(skb_put(skb, fifo_size), bcs->hw.hscx.rcvbuf, fifo_size); in hscx_interrupt()
188 skb_queue_tail(&bcs->rqueue, skb); in hscx_interrupt()
190 bcs->hw.hscx.rcvidx = 0; in hscx_interrupt()
191 schedule_event(bcs, B_RCVBUFREADY); in hscx_interrupt()
195 if (bcs->tx_skb) { in hscx_interrupt()
196 if (bcs->tx_skb->len) { in hscx_interrupt()
197 hscx_fill_fifo(bcs); in hscx_interrupt()
200 if (test_bit(FLG_LLI_L1WAKEUP, &bcs->st->lli.flag) && in hscx_interrupt()
201 (PACKET_NOACK != bcs->tx_skb->pkt_type)) { in hscx_interrupt()
203 spin_lock_irqsave(&bcs->aclock, flags); in hscx_interrupt()
204 bcs->ackcnt += bcs->hw.hscx.count; in hscx_interrupt()
205 spin_unlock_irqrestore(&bcs->aclock, flags); in hscx_interrupt()
206 schedule_event(bcs, B_ACKPENDING); in hscx_interrupt()
208 dev_kfree_skb_irq(bcs->tx_skb); in hscx_interrupt()
209 bcs->hw.hscx.count = 0; in hscx_interrupt()
210 bcs->tx_skb = NULL; in hscx_interrupt()
213 if ((bcs->tx_skb = skb_dequeue(&bcs->squeue))) { in hscx_interrupt()
214 bcs->hw.hscx.count = 0; in hscx_interrupt()
215 test_and_set_bit(BC_FLG_BUSY, &bcs->Flag); in hscx_interrupt()
216 hscx_fill_fifo(bcs); in hscx_interrupt()
218 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in hscx_interrupt()
219 schedule_event(bcs, B_XMTBUFREADY); in hscx_interrupt()
229 struct BCState *bcs; in hscx_int_main() local
232 bcs = cs->bcs + 1; in hscx_int_main()
235 if (bcs->mode == 1) in hscx_int_main()
236 hscx_fill_fifo(bcs); in hscx_int_main()
239 bcs->err_tx++; in hscx_int_main()
244 if (bcs->tx_skb) { in hscx_int_main()
245 skb_push(bcs->tx_skb, bcs->hw.hscx.count); in hscx_int_main()
246 bcs->tx_cnt += bcs->hw.hscx.count; in hscx_int_main()
247 bcs->hw.hscx.count = 0; in hscx_int_main()
249 WriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x01); in hscx_int_main()
262 bcs = cs->bcs; in hscx_int_main()
265 if (bcs->mode == L1_MODE_TRANS) in hscx_int_main()
266 hscx_fill_fifo(bcs); in hscx_int_main()
272 bcs->err_tx++; in hscx_int_main()
274 if (bcs->tx_skb) { in hscx_int_main()
275 skb_push(bcs->tx_skb, bcs->hw.hscx.count); in hscx_int_main()
276 bcs->tx_cnt += bcs->hw.hscx.count; in hscx_int_main()
277 bcs->hw.hscx.count = 0; in hscx_int_main()
279 WriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x01); in hscx_int_main()