Lines Matching defs:ipac
14 #include "ipac.h"
1149 mISDNipac_irq(struct ipac_hw *ipac, int maxloop)
1153 struct isac_hw *isac = &ipac->isac;
1155 if (ipac->type & IPAC_TYPE_IPACX) {
1156 ista = ReadIPAC(ipac, ISACX_ISTA);
1158 pr_debug("%s: ISTA %02x\n", ipac->name, ista);
1160 ipac_irq(&ipac->hscx[0], ista);
1162 ipac_irq(&ipac->hscx[1], ista);
1164 mISDNisac_irq(&ipac->isac, ista);
1165 ista = ReadIPAC(ipac, ISACX_ISTA);
1167 } else if (ipac->type & IPAC_TYPE_IPAC) {
1168 ista = ReadIPAC(ipac, IPAC_ISTA);
1170 pr_debug("%s: ISTA %02x\n", ipac->name, ista);
1173 pr_debug("%s: ISTAD %02x\n", ipac->name, istad);
1175 pr_debug("%s TIN2 irq\n", ipac->name);
1181 ipac_irq(&ipac->hscx[0], ista);
1183 ipac_irq(&ipac->hscx[1], ista);
1184 ista = ReadIPAC(ipac, IPAC_ISTA);
1186 } else if (ipac->type & IPAC_TYPE_HSCX) {
1188 ista = ReadIPAC(ipac, IPAC_ISTAB + ipac->hscx[1].off);
1189 pr_debug("%s: B2 ISTA %02x\n", ipac->name, ista);
1191 ipac_irq(&ipac->hscx[1], ista);
1193 pr_debug("%s: ISTAD %02x\n", ipac->name, istad);
1203 pr_debug("%s: %d irqloops cpu%d\n", ipac->name,
1206 pr_notice("%s: %d IRQ LOOP cpu%d\n", ipac->name,
1419 free_ipac(struct ipac_hw *ipac)
1421 isac_release(&ipac->isac);
1454 ipac_init(struct ipac_hw *ipac)
1458 if (ipac->type & IPAC_TYPE_HSCX) {
1459 hscx_init(&ipac->hscx[0]);
1460 hscx_init(&ipac->hscx[1]);
1461 val = ReadIPAC(ipac, IPAC_ID);
1462 } else if (ipac->type & IPAC_TYPE_IPAC) {
1463 hscx_init(&ipac->hscx[0]);
1464 hscx_init(&ipac->hscx[1]);
1465 WriteIPAC(ipac, IPAC_MASK, IPAC__ON);
1466 val = ReadIPAC(ipac, IPAC_CONF);
1468 pr_debug("%s: IPAC CONF %02x/%02x\n", ipac->name,
1469 val, ipac->conf);
1470 WriteIPAC(ipac, IPAC_CONF, ipac->conf);
1471 val = ReadIPAC(ipac, IPAC_ID);
1472 if (ipac->hscx[0].bch.debug & DEBUG_HW)
1473 pr_notice("%s: IPAC Design ID %02x\n", ipac->name, val);
1476 return isac_init(&ipac->isac);
1480 open_bchannel(struct ipac_hw *ipac, struct channel_req *rq)
1488 bch = &ipac->hscx[rq->adr.channel - 1].bch;
1498 channel_ctrl(struct ipac_hw *ipac, struct mISDN_ctrl_req *cq)
1512 ret = ipac->ctrl(ipac, HW_TESTLOOP, cq->channel);
1515 ret = ipac->isac.ctrl(&ipac->isac, HW_TIMER3_VALUE, cq->p1);
1518 pr_info("%s: unknown CTRL OP %x\n", ipac->name, cq->op);
1531 struct ipac_hw *ipac = container_of(isac, struct ipac_hw, isac);
1535 pr_debug("%s: DCTRL: %x %p\n", ipac->name, cmd, arg);
1542 err = open_bchannel(ipac, rq);
1545 if (!try_module_get(ipac->owner))
1546 pr_info("%s: cannot get module\n", ipac->name);
1549 pr_debug("%s: dev(%d) close from %p\n", ipac->name,
1551 module_put(ipac->owner);
1554 err = channel_ctrl(ipac, arg);
1557 pr_debug("%s: unknown DCTRL command %x\n", ipac->name, cmd);
1564 mISDNipac_init(struct ipac_hw *ipac, void *hw)
1569 ipac->hw = hw;
1570 if (ipac->isac.dch.debug & DEBUG_HW)
1571 pr_notice("%s: ipac type %x\n", ipac->name, ipac->type);
1572 if (ipac->type & IPAC_TYPE_HSCX) {
1573 ipac->isac.type = IPAC_TYPE_ISAC;
1574 ipac->hscx[0].off = 0;
1575 ipac->hscx[1].off = 0x40;
1576 ipac->hscx[0].fifo_size = 32;
1577 ipac->hscx[1].fifo_size = 32;
1578 } else if (ipac->type & IPAC_TYPE_IPAC) {
1579 ipac->isac.type = IPAC_TYPE_IPAC | IPAC_TYPE_ISAC;
1580 ipac->hscx[0].off = 0;
1581 ipac->hscx[1].off = 0x40;
1582 ipac->hscx[0].fifo_size = 64;
1583 ipac->hscx[1].fifo_size = 64;
1584 } else if (ipac->type & IPAC_TYPE_IPACX) {
1585 ipac->isac.type = IPAC_TYPE_IPACX | IPAC_TYPE_ISACX;
1586 ipac->hscx[0].off = IPACX_OFF_ICA;
1587 ipac->hscx[1].off = IPACX_OFF_ICB;
1588 ipac->hscx[0].fifo_size = 64;
1589 ipac->hscx[1].fifo_size = 64;
1593 mISDNisac_init(&ipac->isac, hw);
1595 ipac->isac.dch.dev.D.ctrl = ipac_dctrl;
1598 ipac->hscx[i].bch.nr = i + 1;
1599 set_channelmap(i + 1, ipac->isac.dch.dev.channelmap);
1600 list_add(&ipac->hscx[i].bch.ch.list,
1601 &ipac->isac.dch.dev.bchannels);
1602 mISDN_initbchannel(&ipac->hscx[i].bch, MAX_DATA_MEM,
1603 ipac->hscx[i].fifo_size);
1604 ipac->hscx[i].bch.ch.nr = i + 1;
1605 ipac->hscx[i].bch.ch.send = &hscx_l2l1;
1606 ipac->hscx[i].bch.ch.ctrl = hscx_bctrl;
1607 ipac->hscx[i].bch.hw = hw;
1608 ipac->hscx[i].ip = ipac;
1611 ipac->hscx[i].slot = (i == 0) ? 0x2f : 0x03;
1614 ipac->init = ipac_init;
1615 ipac->release = free_ipac;