Lines Matching refs:isar
51 waitforHIA(struct isar_hw *isar, int timeout) in waitforHIA() argument
54 u8 val = isar->read_reg(isar->hw, ISAR_HIA); in waitforHIA()
59 val = isar->read_reg(isar->hw, ISAR_HIA); in waitforHIA()
61 pr_debug("%s: HIA after %dus\n", isar->name, timeout - t); in waitforHIA()
70 send_mbox(struct isar_hw *isar, u8 his, u8 creg, u8 len, u8 *msg) in send_mbox() argument
72 if (!waitforHIA(isar, 1000)) in send_mbox()
75 isar->write_reg(isar->hw, ISAR_CTRL_H, creg); in send_mbox()
76 isar->write_reg(isar->hw, ISAR_CTRL_L, len); in send_mbox()
77 isar->write_reg(isar->hw, ISAR_WADR, 0); in send_mbox()
79 msg = isar->buf; in send_mbox()
81 isar->write_fifo(isar->hw, ISAR_MBOX, msg, len); in send_mbox()
82 if (isar->ch[0].bch.debug & DEBUG_HW_BFIFO) { in send_mbox()
87 isar->log, 256, 1); in send_mbox()
88 pr_debug("%s: %s %02x: %s\n", isar->name, in send_mbox()
89 __func__, l, isar->log); in send_mbox()
94 isar->write_reg(isar->hw, ISAR_HIS, his); in send_mbox()
95 waitforHIA(isar, 1000); in send_mbox()
104 rcv_mbox(struct isar_hw *isar, u8 *msg) in rcv_mbox() argument
107 msg = isar->buf; in rcv_mbox()
108 isar->write_reg(isar->hw, ISAR_RADR, 0); in rcv_mbox()
109 if (msg && isar->clsb) { in rcv_mbox()
110 isar->read_fifo(isar->hw, ISAR_MBOX, msg, isar->clsb); in rcv_mbox()
111 if (isar->ch[0].bch.debug & DEBUG_HW_BFIFO) { in rcv_mbox()
114 while (l < (int)isar->clsb) { in rcv_mbox()
115 hex_dump_to_buffer(msg + l, isar->clsb - l, 32, in rcv_mbox()
116 1, isar->log, 256, 1); in rcv_mbox()
117 pr_debug("%s: %s %02x: %s\n", isar->name, in rcv_mbox()
118 __func__, l, isar->log); in rcv_mbox()
123 isar->write_reg(isar->hw, ISAR_IIA, 0); in rcv_mbox()
127 get_irq_infos(struct isar_hw *isar) in get_irq_infos() argument
129 isar->iis = isar->read_reg(isar->hw, ISAR_IIS); in get_irq_infos()
130 isar->cmsb = isar->read_reg(isar->hw, ISAR_CTRL_H); in get_irq_infos()
131 isar->clsb = isar->read_reg(isar->hw, ISAR_CTRL_L); in get_irq_infos()
132 pr_debug("%s: rcv_mbox(%02x,%02x,%d)\n", isar->name, in get_irq_infos()
133 isar->iis, isar->cmsb, isar->clsb); in get_irq_infos()
142 poll_mbox(struct isar_hw *isar, int maxdelay) in poll_mbox() argument
147 irq = isar->read_reg(isar->hw, ISAR_IRQBIT); in poll_mbox()
153 get_irq_infos(isar); in poll_mbox()
154 rcv_mbox(isar, NULL); in poll_mbox()
157 isar->name, isar->clsb, maxdelay - t); in poll_mbox()
162 ISARVersion(struct isar_hw *isar) in ISARVersion() argument
167 isar->write_reg(isar->hw, ISAR_IRQBIT, 0); in ISARVersion()
168 isar->buf[0] = ISAR_MSG_HWVER; in ISARVersion()
169 isar->buf[1] = 0; in ISARVersion()
170 isar->buf[2] = 1; in ISARVersion()
171 if (!send_mbox(isar, ISAR_HIS_VNR, 0, 3, NULL)) in ISARVersion()
173 if (!poll_mbox(isar, 1000)) in ISARVersion()
175 if (isar->iis == ISAR_IIS_VNR) { in ISARVersion()
176 if (isar->clsb == 1) { in ISARVersion()
177 ver = isar->buf[0] & 0xf; in ISARVersion()
186 load_firmware(struct isar_hw *isar, const u8 *buf, int size) in load_firmware() argument
188 u32 saved_debug = isar->ch[0].bch.debug; in load_firmware()
201 if (1 != isar->version) { in load_firmware()
203 isar->name, isar->version); in load_firmware()
207 isar->ch[0].bch.debug &= ~DEBUG_HW_BFIFO; in load_firmware()
209 isar->name, size / 2, size); in load_firmware()
213 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
214 isar->write_reg(isar->hw, ISAR_IRQBIT, 0); in load_firmware()
215 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
226 isar->name, size, cnt + left); in load_firmware()
230 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
231 if (!send_mbox(isar, ISAR_HIS_DKEY, blk_head.d_key & 0xff, in load_firmware()
237 if (!poll_mbox(isar, 1000)) { in load_firmware()
242 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
243 if ((isar->iis != ISAR_IIS_DKEY) || isar->cmsb || isar->clsb) { in load_firmware()
245 isar->iis, isar->cmsb, isar->clsb); in load_firmware()
255 mp = isar->buf; in load_firmware()
262 pr_debug("%s: load %3d words at %04x\n", isar->name, in load_firmware()
271 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
272 if (!send_mbox(isar, ISAR_HIS_FIRM, 0, nom, NULL)) { in load_firmware()
277 if (!poll_mbox(isar, 1000)) { in load_firmware()
282 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
283 if ((isar->iis != ISAR_IIS_FIRM) || in load_firmware()
284 isar->cmsb || isar->clsb) { in load_firmware()
286 isar->iis, isar->cmsb, isar->clsb); in load_firmware()
292 isar->name, blk_head.len); in load_firmware()
294 isar->ch[0].bch.debug = saved_debug; in load_firmware()
299 isar->buf[0] = 0xff; in load_firmware()
300 isar->buf[1] = 0xfe; in load_firmware()
301 isar->bstat = 0; in load_firmware()
302 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
303 if (!send_mbox(isar, ISAR_HIS_STDSP, 0, 2, NULL)) { in load_firmware()
308 if (!poll_mbox(isar, 1000)) { in load_firmware()
313 if ((isar->iis != ISAR_IIS_STDSP) || isar->cmsb || isar->clsb) { in load_firmware()
315 isar->iis, isar->cmsb, isar->clsb); in load_firmware()
319 pr_debug("%s: ISAR start dsp success\n", isar->name); in load_firmware()
323 isar->write_reg(isar->hw, ISAR_IRQBIT, ISAR_IRQSTA); in load_firmware()
324 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
326 while ((!isar->bstat) && cnt) { in load_firmware()
336 isar->name, isar->bstat); in load_firmware()
341 isar->iis = 0; in load_firmware()
342 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
343 if (!send_mbox(isar, ISAR_HIS_DIAG, ISAR_CTRL_STST, 0, NULL)) { in load_firmware()
348 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
350 while ((isar->iis != ISAR_IIS_DIAG) && cnt) { in load_firmware()
360 if ((isar->cmsb == ISAR_CTRL_STST) && (isar->clsb == 1) in load_firmware()
361 && (isar->buf[0] == 0)) in load_firmware()
362 pr_debug("%s: ISAR selftest OK\n", isar->name); in load_firmware()
365 isar->cmsb, isar->clsb, isar->buf[0]); in load_firmware()
369 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
370 isar->iis = 0; in load_firmware()
371 if (!send_mbox(isar, ISAR_HIS_DIAG, ISAR_CTRL_SWVER, 0, NULL)) { in load_firmware()
376 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
378 while ((isar->iis != ISAR_IIS_DIAG) && cnt) { in load_firmware()
388 if ((isar->cmsb == ISAR_CTRL_SWVER) && (isar->clsb == 1)) { in load_firmware()
390 isar->name, isar->buf[0]); in load_firmware()
393 " cnt(%d)\n", isar->name, isar->cmsb, in load_firmware()
394 isar->clsb, cnt); in load_firmware()
399 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
400 isar_setup(isar); in load_firmware()
401 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
404 spin_lock_irqsave(isar->hwlock, flags); in load_firmware()
406 isar->ch[0].bch.debug = saved_debug; in load_firmware()
409 isar->write_reg(isar->hw, ISAR_IRQBIT, 0); in load_firmware()
410 spin_unlock_irqrestore(isar->hwlock, flags); in load_firmware()
673 sel_bch_isar(struct isar_hw *isar, u8 dpath) in sel_bch_isar() argument
675 struct isar_ch *base = &isar->ch[0]; in sel_bch_isar()
734 check_send(struct isar_hw *isar, u8 rdm) in check_send() argument
738 pr_debug("%s: rdm %x\n", isar->name, rdm); in check_send()
740 ch = sel_bch_isar(isar, 1); in check_send()
750 ch = sel_bch_isar(isar, 2); in check_send()
1050 mISDNisar_irq(struct isar_hw *isar) in mISDNisar_irq() argument
1054 get_irq_infos(isar); in mISDNisar_irq()
1055 switch (isar->iis & ISAR_IIS_MSCMSD) { in mISDNisar_irq()
1057 ch = sel_bch_isar(isar, isar->iis >> 6); in mISDNisar_irq()
1062 isar->name, isar->iis, isar->cmsb, in mISDNisar_irq()
1063 isar->clsb); in mISDNisar_irq()
1064 isar->write_reg(isar->hw, ISAR_IIA, 0); in mISDNisar_irq()
1068 isar->write_reg(isar->hw, ISAR_IIA, 0); in mISDNisar_irq()
1069 isar->bstat |= isar->cmsb; in mISDNisar_irq()
1070 check_send(isar, isar->cmsb); in mISDNisar_irq()
1074 ch = sel_bch_isar(isar, isar->iis >> 6); in mISDNisar_irq()
1076 if (isar->cmsb == BSTEV_TBO) in mISDNisar_irq()
1078 if (isar->cmsb == BSTEV_RBO) in mISDNisar_irq()
1083 isar->name, isar->iis >> 6, isar->cmsb); in mISDNisar_irq()
1084 isar->write_reg(isar->hw, ISAR_IIA, 0); in mISDNisar_irq()
1087 ch = sel_bch_isar(isar, isar->iis >> 6); in mISDNisar_irq()
1089 rcv_mbox(isar, NULL); in mISDNisar_irq()
1091 isar_pump_statev_modem(ch, isar->cmsb); in mISDNisar_irq()
1093 isar_pump_statev_fax(ch, isar->cmsb); in mISDNisar_irq()
1096 tt = isar->cmsb | 0x30; in mISDNisar_irq()
1109 isar->name, ch->bch.state, in mISDNisar_irq()
1110 isar->cmsb); in mISDNisar_irq()
1113 isar->name, isar->iis, isar->cmsb, in mISDNisar_irq()
1114 isar->clsb); in mISDNisar_irq()
1115 isar->write_reg(isar->hw, ISAR_IIA, 0); in mISDNisar_irq()
1119 ch = sel_bch_isar(isar, isar->iis >> 6); in mISDNisar_irq()
1121 rcv_mbox(isar, NULL); in mISDNisar_irq()
1125 isar->name, isar->iis, isar->cmsb, in mISDNisar_irq()
1126 isar->clsb); in mISDNisar_irq()
1127 isar->write_reg(isar->hw, ISAR_IIA, 0); in mISDNisar_irq()
1133 rcv_mbox(isar, NULL); in mISDNisar_irq()
1136 rcv_mbox(isar, NULL); in mISDNisar_irq()
1137 pr_debug("%s: invalid msg his:%x\n", isar->name, isar->cmsb); in mISDNisar_irq()
1140 rcv_mbox(isar, NULL); in mISDNisar_irq()
1142 isar->name, isar->iis, isar->cmsb, isar->clsb); in mISDNisar_irq()
1459 isar_setup(struct isar_hw *isar) in isar_setup() argument
1468 send_mbox(isar, (i ? ISAR_HIS_DPS2 : ISAR_HIS_DPS1) | in isar_setup()
1470 isar->ch[i].mml = msg; in isar_setup()
1471 isar->ch[i].bch.state = 0; in isar_setup()
1472 isar->ch[i].dpath = i + 1; in isar_setup()
1473 modeisar(&isar->ch[i], ISDN_P_NONE); in isar_setup()
1612 free_isar(struct isar_hw *isar) in free_isar() argument
1614 modeisar(&isar->ch[0], ISDN_P_NONE); in free_isar()
1615 modeisar(&isar->ch[1], ISDN_P_NONE); in free_isar()
1616 del_timer(&isar->ch[0].ftimer); in free_isar()
1617 del_timer(&isar->ch[1].ftimer); in free_isar()
1618 test_and_clear_bit(FLG_INITIALIZED, &isar->ch[0].bch.Flags); in free_isar()
1619 test_and_clear_bit(FLG_INITIALIZED, &isar->ch[1].bch.Flags); in free_isar()
1623 init_isar(struct isar_hw *isar) in init_isar() argument
1628 isar->version = ISARVersion(isar); in init_isar()
1629 if (isar->ch[0].bch.debug & DEBUG_HW) in init_isar()
1631 isar->name, isar->version, 3 - cnt); in init_isar()
1632 if (isar->version == 1) in init_isar()
1634 isar->ctrl(isar->hw, HW_RESET_REQ, 0); in init_isar()
1636 if (isar->version != 1) in init_isar()
1638 isar->ch[0].ftimer.function = &ftimer_handler; in init_isar()
1639 isar->ch[0].ftimer.data = (long)&isar->ch[0]; in init_isar()
1640 init_timer(&isar->ch[0].ftimer); in init_isar()
1641 test_and_set_bit(FLG_INITIALIZED, &isar->ch[0].bch.Flags); in init_isar()
1642 isar->ch[1].ftimer.function = &ftimer_handler; in init_isar()
1643 isar->ch[1].ftimer.data = (long)&isar->ch[1]; in init_isar()
1644 init_timer(&isar->ch[1].ftimer); in init_isar()
1645 test_and_set_bit(FLG_INITIALIZED, &isar->ch[1].bch.Flags); in init_isar()
1650 isar_open(struct isar_hw *isar, struct channel_req *rq) in isar_open() argument
1658 bch = &isar->ch[rq->adr.channel - 1].bch; in isar_open()
1667 mISDNisar_init(struct isar_hw *isar, void *hw) in mISDNisar_init() argument
1671 isar->hw = hw; in mISDNisar_init()
1673 isar->ch[i].bch.nr = i + 1; in mISDNisar_init()
1674 mISDN_initbchannel(&isar->ch[i].bch, MAX_DATA_MEM, 32); in mISDNisar_init()
1675 isar->ch[i].bch.ch.nr = i + 1; in mISDNisar_init()
1676 isar->ch[i].bch.ch.send = &isar_l2l1; in mISDNisar_init()
1677 isar->ch[i].bch.ch.ctrl = isar_bctrl; in mISDNisar_init()
1678 isar->ch[i].bch.hw = hw; in mISDNisar_init()
1679 isar->ch[i].is = isar; in mISDNisar_init()
1682 isar->init = &init_isar; in mISDNisar_init()
1683 isar->release = &free_isar; in mISDNisar_init()
1684 isar->firmware = &load_firmware; in mISDNisar_init()
1685 isar->open = &isar_open; in mISDNisar_init()