• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/isdn/hisax/

Lines Matching refs:isac

9  * based upon Karsten Keil's original isac.c driver
242 static inline void D_L1L2(struct isac *isac, int pr, void *arg)
244 struct hisax_if *ifc = (struct hisax_if *) &isac->hisax_d_if;
250 static void ph_command(struct isac *isac, unsigned int command)
253 switch (isac->type) {
255 isac->write_isac(isac, ISAC_CIX0, (command << 2) | 3);
258 isac->write_isac(isac, ISACSX_CIX0, (command << 4) | (7 << 1));
267 struct isac *isac = fi->userdata;
270 ph_command(isac, ISAC_CMD_DI);
275 struct isac *isac = fi->userdata;
278 D_L1L2(isac, PH_DEACTIVATE | INDICATION, NULL);
279 ph_command(isac, ISAC_CMD_DI);
289 struct isac *isac = fi->userdata;
292 D_L1L2(isac, PH_DEACTIVATE | INDICATION, NULL);
293 ph_command(isac, ISAC_CMD_DI);
298 struct isac *isac = fi->userdata;
301 ph_command(isac, ISAC_CMD_DI);
321 struct isac *isac = fi->userdata;
324 D_L1L2(isac, PH_DEACTIVATE | INDICATION, NULL);
329 struct isac *isac = fi->userdata;
331 FsmDelTimer(&isac->timer, 0);
333 ph_command(isac, ISAC_CMD_AR8);
334 D_L1L2(isac, PH_ACTIVATE | INDICATION, NULL);
344 struct isac *isac = fi->userdata;
347 D_L1L2(isac, PH_DEACTIVATE | INDICATION, NULL);
352 struct isac *isac = fi->userdata;
354 FsmRestartTimer(&isac->timer, TIMER3_VALUE, EV_TIMER3, NULL, 2);
355 ph_command(isac, ISAC_CMD_AR8);
360 struct isac *isac = fi->userdata;
362 ph_command(isac, ISAC_CMD_DI);
363 D_L1L2(isac, PH_DEACTIVATE | INDICATION, NULL);
441 static void isac_version(struct isac *cs)
449 static void isac_empty_fifo(struct isac *isac, int count)
457 if ((isac->rcvidx + count) >= MAX_DFRAME_LEN_L1) {
458 DBG(DBG_WARN, "overrun %d", isac->rcvidx + count);
459 isac->write_isac(isac, ISAC_CMDR, ISAC_CMDR_RMC);
460 isac->rcvidx = 0;
463 ptr = isac->rcvbuf + isac->rcvidx;
464 isac->rcvidx += count;
465 isac->read_isac_fifo(isac, ptr, count);
466 isac->write_isac(isac, ISAC_CMDR, ISAC_CMDR_RMC);
470 static void isac_fill_fifo(struct isac *isac)
479 BUG_ON(!isac->tx_skb);
481 count = isac->tx_skb->len;
493 ptr = isac->tx_skb->data;
494 skb_pull(isac->tx_skb, count);
495 isac->tx_cnt += count;
497 isac->write_isac_fifo(isac, ptr, count);
498 isac->write_isac(isac, ISAC_CMDR, cmd);
501 static void isac_retransmit(struct isac *isac)
503 if (!isac->tx_skb) {
507 skb_push(isac->tx_skb, isac->tx_cnt);
508 isac->tx_cnt = 0;
512 static inline void isac_cisq_interrupt(struct isac *isac)
516 val = isac->read_isac(isac, ISAC_CIR0);
520 FsmEvent(&isac->l1m, (val >> 2) & 0xf, NULL);
523 val = isac->read_isac(isac, ISAC_CIR1);
528 static inline void isac_rme_interrupt(struct isac *isac)
534 val = isac->read_isac(isac, ISAC_RSTA);
538 isac->write_isac(isac, ISAC_CMDR, ISAC_CMDR_RMC);
542 count = isac->read_isac(isac, ISAC_RBCL) & 0x1f;
547 isac_empty_fifo(isac, count);
548 count = isac->rcvidx;
559 memcpy(skb_put(skb, count), isac->rcvbuf, count);
561 D_L1L2(isac, PH_DATA | INDICATION, skb);
563 isac->rcvidx = 0;
566 static inline void isac_xpr_interrupt(struct isac *isac)
568 if (!isac->tx_skb)
571 if (isac->tx_skb->len > 0) {
572 isac_fill_fifo(isac);
575 dev_kfree_skb_irq(isac->tx_skb);
576 isac->tx_cnt = 0;
577 isac->tx_skb = NULL;
578 D_L1L2(isac, PH_DATA | CONFIRM, NULL);
581 static inline void isac_exi_interrupt(struct isac *isac)
585 val = isac->read_isac(isac, ISAC_EXIR);
590 isac_retransmit(isac);
594 isac_retransmit(isac);
598 val = isac->read_isac(isac, ISAC_MOSR);
603 void isac_irq(struct isac *isac)
607 val = isac->read_isac(isac, ISAC_ISTA);
612 isac_exi_interrupt(isac);
616 isac_xpr_interrupt(isac);
620 isac_rme_interrupt(isac);
624 isac_empty_fifo(isac, 0x20);
628 isac_cisq_interrupt(isac);
636 isac->write_isac(isac, ISAC_MASK, 0xff);
637 isac->write_isac(isac, ISAC_MASK, 0x00);
642 static inline void isacsx_cic_interrupt(struct isac *isac)
646 val = isac->read_isac(isac, ISACSX_CIR0);
650 FsmEvent(&isac->l1m, val >> 4, NULL);
654 static inline void isacsx_rme_interrupt(struct isac *isac)
660 val = isac->read_isac(isac, ISACSX_RSTAD);
667 isac->write_isac(isac, ISACSX_CMDRD, ISACSX_CMDRD_RMC);
671 count = isac->read_isac(isac, ISACSX_RBCLD) & 0x1f;
676 isac_empty_fifo(isac, count);
678 count = isac->rcvidx - 1;
689 memcpy(skb_put(skb, count), isac->rcvbuf, count);
691 D_L1L2(isac, PH_DATA | INDICATION, skb);
693 isac->rcvidx = 0;
696 static inline void isacsx_xpr_interrupt(struct isac *isac)
698 if (!isac->tx_skb)
701 if (isac->tx_skb->len > 0) {
702 isac_fill_fifo(isac);
705 dev_kfree_skb_irq(isac->tx_skb);
706 isac->tx_skb = NULL;
707 isac->tx_cnt = 0;
708 D_L1L2(isac, PH_DATA | CONFIRM, NULL);
711 static inline void isacsx_icd_interrupt(struct isac *isac)
715 val = isac->read_isac(isac, ISACSX_ISTAD);
719 isac_retransmit(isac);
723 isac_retransmit(isac);
727 isacsx_xpr_interrupt(isac);
731 isac->write_isac(isac, ISACSX_CMDRD, ISACSX_CMDRD_RMC);
735 isacsx_rme_interrupt(isac);
739 isac_empty_fifo(isac, 0x20);
743 void isacsx_irq(struct isac *isac)
747 val = isac->read_isac(isac, ISACSX_ISTA);
751 isacsx_icd_interrupt(isac);
753 isacsx_cic_interrupt(isac);
756 void isac_init(struct isac *isac)
758 isac->tx_skb = NULL;
759 isac->l1m.fsm = &l1fsm;
760 isac->l1m.state = ST_L1_RESET;
762 isac->l1m.debug = 1;
764 isac->l1m.debug = 0;
766 isac->l1m.userdata = isac;
767 isac->l1m.printdebug = l1m_debug;
768 FsmInitTimer(&isac->l1m, &isac->timer);
771 void isac_setup(struct isac *isac)
775 isac->type = TYPE_ISAC;
776 isac_version(isac);
778 ph_command(isac, ISAC_CMD_RES);
780 isac->write_isac(isac, ISAC_MASK, 0xff);
781 isac->mocr = 0xaa;
782 if (test_bit(ISAC_IOM1, &isac->flags)) {
784 isac->write_isac(isac, ISAC_ADF2, 0x0);
785 isac->write_isac(isac, ISAC_SPCR, 0xa);
786 isac->write_isac(isac, ISAC_ADF1, 0x2);
787 isac->write_isac(isac, ISAC_STCR, 0x70);
788 isac->write_isac(isac, ISAC_MODE, 0xc9);
791 if (!isac->adf2)
792 isac->adf2 = 0x80;
793 isac->write_isac(isac, ISAC_ADF2, isac->adf2);
794 isac->write_isac(isac, ISAC_SQXR, 0x2f);
795 isac->write_isac(isac, ISAC_SPCR, 0x00);
796 isac->write_isac(isac, ISAC_STCR, 0x70);
797 isac->write_isac(isac, ISAC_MODE, 0xc9);
798 isac->write_isac(isac, ISAC_TIMR, 0x00);
799 isac->write_isac(isac, ISAC_ADF1, 0x00);
801 val = isac->read_isac(isac, ISAC_STAR);
803 val = isac->read_isac(isac, ISAC_MODE);
805 val = isac->read_isac(isac, ISAC_ADF2);
807 val = isac->read_isac(isac, ISAC_ISTA);
810 eval = isac->read_isac(isac, ISAC_EXIR);
813 val = isac->read_isac(isac, ISAC_CIR0);
815 FsmEvent(&isac->l1m, (val >> 2) & 0xf, NULL);
817 isac->write_isac(isac, ISAC_MASK, 0x0);
819 isac->write_isac(isac, ISAC_CMDR, ISAC_CMDR_XRES | ISAC_CMDR_RRES);
822 void isacsx_setup(struct isac *isac)
824 isac->type = TYPE_ISACSX;
826 isac->write_isac(isac, ISACSX_TR_CONF0, 0x00);
828 isac->write_isac(isac, ISACSX_TR_CONF2, 0x00);
830 isac->write_isac(isac, ISACSX_MODED, 0xc9);
832 isac->write_isac(isac, ISACSX_MASKD, 0x03);
834 isac->write_isac(isac, ISACSX_MASK,
840 struct isac *isac = hisax_d_if->priv;
847 FsmEvent(&isac->l1m, EV_PH_ACTIVATE_REQ, NULL);
850 FsmEvent(&isac->l1m, EV_PH_DEACTIVATE_REQ, NULL);
855 if (isac->l1m.state != ST_L1_F7) {
856 DBG(1, "L1 wrong state %d\n", isac->l1m.state);
860 BUG_ON(isac->tx_skb);
862 isac->tx_skb = skb;
863 isac_fill_fifo(isac);