Lines Matching +full:cmd +full:- +full:cnt +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-only
60 char name[MISDN_MAX_IDLEN]; member
78 card->isac.dch.debug = debug; in _set_debug()
79 card->isar.ch[0].bch.debug = debug; in _set_debug()
80 card->isar.ch[1].bch.debug = debug; in _set_debug()
116 int cnt = irqloops; in IOFUNC_IND() local
118 spin_lock(&sf->lock); in IOFUNC_IND()
119 val = inb(sf->cfg + TIGER_AUX_STATUS); in IOFUNC_IND()
121 spin_unlock(&sf->lock); in IOFUNC_IND()
124 sf->irqcnt++; in IOFUNC_IND()
128 mISDNisar_irq(&sf->isar); in IOFUNC_IND()
131 mISDNisac_irq(&sf->isac, val); in IOFUNC_IND()
133 if ((val & ISAR_IRQSTA) && cnt--) in IOFUNC_IND()
135 if (cnt < irqloops) in IOFUNC_IND()
136 pr_debug("%s: %d irqloops cpu%d\n", sf->name, in IOFUNC_IND()
137 irqloops - cnt, smp_processor_id()); in IOFUNC_IND()
138 if (irqloops && !cnt) in IOFUNC_IND()
139 pr_notice("%s: %d IRQ LOOP cpu%d\n", sf->name, in IOFUNC_IND()
141 spin_unlock(&sf->lock); in IOFUNC_IND()
150 outb(SFAX_TIGER_IRQ_BIT, sf->cfg + TIGER_AUX_IRQMASK); in enable_hwirq()
158 outb(0, sf->cfg + TIGER_AUX_IRQMASK); in disable_hwirq()
165 pr_debug("%s: resetting card\n", sf->name); in reset_speedfax()
166 outb(TIGER_EXTERN_RESET_ON, sf->cfg + TIGER_RESET_ADDR); in reset_speedfax()
167 outb(SFAX_PCI_RESET_ON, sf->cfg + TIGER_AUX_DATA); in reset_speedfax()
169 outb(TIGER_EXTERN_RESET_OFF, sf->cfg + TIGER_RESET_ADDR); in reset_speedfax()
170 sf->aux_data = SFAX_PCI_RESET_OFF; in reset_speedfax()
171 outb(sf->aux_data, sf->cfg + TIGER_AUX_DATA); in reset_speedfax()
176 sfax_ctrl(struct sfax_hw *sf, u32 cmd, u_long arg) in sfax_ctrl() argument
180 switch (cmd) { in sfax_ctrl()
186 sf->aux_data &= ~SFAX_LED1_BIT; in sfax_ctrl()
188 sf->aux_data &= ~SFAX_LED2_BIT; in sfax_ctrl()
189 outb(sf->aux_data, sf->cfg + TIGER_AUX_DATA); in sfax_ctrl()
193 sf->aux_data |= SFAX_LED1_BIT; in sfax_ctrl()
195 sf->aux_data |= SFAX_LED2_BIT; in sfax_ctrl()
196 outb(sf->aux_data, sf->cfg + TIGER_AUX_DATA); in sfax_ctrl()
200 sf->name, __func__, cmd, arg); in sfax_ctrl()
201 ret = -EINVAL; in sfax_ctrl()
212 switch (cq->op) { in channel_ctrl()
214 cq->op = MISDN_CTRL_LOOP | MISDN_CTRL_L1_TIMER3; in channel_ctrl()
217 /* cq->channel: 0 disable, 1 B1 loop 2 B2 loop, 3 both */ in channel_ctrl()
218 if (cq->channel < 0 || cq->channel > 3) { in channel_ctrl()
219 ret = -EINVAL; in channel_ctrl()
222 ret = sf->isac.ctrl(&sf->isac, HW_TESTLOOP, cq->channel); in channel_ctrl()
225 ret = sf->isac.ctrl(&sf->isac, HW_TIMER3_VALUE, cq->p1); in channel_ctrl()
228 pr_info("%s: unknown Op %x\n", sf->name, cq->op); in channel_ctrl()
229 ret = -EINVAL; in channel_ctrl()
236 sfax_dctrl(struct mISDNchannel *ch, u32 cmd, void *arg) in sfax_dctrl() argument
240 struct sfax_hw *sf = dch->hw; in sfax_dctrl()
244 pr_debug("%s: cmd:%x %p\n", sf->name, cmd, arg); in sfax_dctrl()
245 switch (cmd) { in sfax_dctrl()
248 if (rq->protocol == ISDN_P_TE_S0) in sfax_dctrl()
249 err = sf->isac.open(&sf->isac, rq); in sfax_dctrl()
251 err = sf->isar.open(&sf->isar, rq); in sfax_dctrl()
255 pr_info("%s: cannot get module\n", sf->name); in sfax_dctrl()
258 pr_debug("%s: dev(%d) close from %p\n", sf->name, in sfax_dctrl()
259 dch->dev.id, __builtin_return_address(0)); in sfax_dctrl()
266 pr_debug("%s: unknown command %x\n", sf->name, cmd); in sfax_dctrl()
267 return -EINVAL; in sfax_dctrl()
275 int ret, cnt = 3; in init_card() local
278 ret = request_irq(sf->irq, speedfax_irq, IRQF_SHARED, sf->name, sf); in init_card()
280 pr_info("%s: couldn't get interrupt %d\n", sf->name, sf->irq); in init_card()
283 while (cnt--) { in init_card()
284 spin_lock_irqsave(&sf->lock, flags); in init_card()
285 ret = sf->isac.init(&sf->isac); in init_card()
287 spin_unlock_irqrestore(&sf->lock, flags); in init_card()
289 sf->name, ret); in init_card()
295 spin_unlock_irqrestore(&sf->lock, flags); in init_card()
298 pr_notice("%s: IRQ %d count %d\n", sf->name, in init_card()
299 sf->irq, sf->irqcnt); in init_card()
300 if (!sf->irqcnt) { in init_card()
302 sf->name, sf->irq, 3 - cnt); in init_card()
306 free_irq(sf->irq, sf); in init_card()
307 return -EIO; in init_card()
316 if (!request_region(sf->cfg, 256, sf->name)) { in setup_speedfax()
317 pr_info("mISDN: %s config port %x-%x already in use\n", in setup_speedfax()
318 sf->name, sf->cfg, sf->cfg + 255); in setup_speedfax()
319 return -EIO; in setup_speedfax()
321 outb(0xff, sf->cfg); in setup_speedfax()
322 outb(0, sf->cfg); in setup_speedfax()
323 outb(0xdd, sf->cfg + TIGER_AUX_CTRL); in setup_speedfax()
324 outb(0, sf->cfg + TIGER_AUX_IRQMASK); in setup_speedfax()
326 sf->isac.type = IPAC_TYPE_ISAC; in setup_speedfax()
327 sf->p_isac.ale = sf->cfg + SFAX_PCI_ADDR; in setup_speedfax()
328 sf->p_isac.port = sf->cfg + SFAX_PCI_ISAC; in setup_speedfax()
329 sf->p_isar.ale = sf->cfg + SFAX_PCI_ADDR; in setup_speedfax()
330 sf->p_isar.port = sf->cfg + SFAX_PCI_ISAR; in setup_speedfax()
331 ASSIGN_FUNC(IND, ISAC, sf->isac); in setup_speedfax()
332 ASSIGN_FUNC(IND, ISAR, sf->isar); in setup_speedfax()
333 spin_lock_irqsave(&sf->lock, flags); in setup_speedfax()
336 spin_unlock_irqrestore(&sf->lock, flags); in setup_speedfax()
344 spin_lock_irqsave(&card->lock, flags); in release_card()
346 spin_unlock_irqrestore(&card->lock, flags); in release_card()
347 card->isac.release(&card->isac); in release_card()
348 free_irq(card->irq, card); in release_card()
349 card->isar.release(&card->isar); in release_card()
350 mISDN_unregister_device(&card->isac.dch.dev); in release_card()
351 release_region(card->cfg, 256); in release_card()
352 pci_disable_device(card->pdev); in release_card()
353 pci_set_drvdata(card->pdev, NULL); in release_card()
355 list_del(&card->list); in release_card()
358 sfax_cnt--; in release_card()
368 snprintf(card->name, MISDN_MAX_IDLEN - 1, "Speedfax.%d", sfax_cnt + 1); in setup_instance()
370 list_add_tail(&card->list, &Cards); in setup_instance()
373 spin_lock_init(&card->lock); in setup_instance()
374 card->isac.hwlock = &card->lock; in setup_instance()
375 card->isar.hwlock = &card->lock; in setup_instance()
376 card->isar.ctrl = (void *)&sfax_ctrl; in setup_instance()
377 card->isac.name = card->name; in setup_instance()
378 card->isar.name = card->name; in setup_instance()
379 card->isar.owner = THIS_MODULE; in setup_instance()
381 err = request_firmware(&firmware, "isdn/ISAR.BIN", &card->pdev->dev); in setup_instance()
384 card->name, err); in setup_instance()
389 card->name, firmware->size); in setup_instance()
391 mISDNisac_init(&card->isac, card); in setup_instance()
393 card->isac.dch.dev.D.ctrl = sfax_dctrl; in setup_instance()
394 card->isac.dch.dev.Bprotocols = in setup_instance()
395 mISDNisar_init(&card->isar, card); in setup_instance()
397 set_channelmap(i + 1, card->isac.dch.dev.channelmap); in setup_instance()
398 list_add(&card->isar.ch[i].bch.ch.list, in setup_instance()
399 &card->isac.dch.dev.bchannels); in setup_instance()
405 err = card->isar.init(&card->isar); in setup_instance()
408 err = mISDN_register_device(&card->isac.dch.dev, in setup_instance()
409 &card->pdev->dev, card->name); in setup_instance()
415 err = card->isar.firmware(&card->isar, firmware->data, firmware->size); in setup_instance()
423 free_irq(card->irq, card); in setup_instance()
425 mISDN_unregister_device(&card->isac.dch.dev); in setup_instance()
427 release_region(card->cfg, 256); in setup_instance()
429 card->isac.release(&card->isac); in setup_instance()
430 card->isar.release(&card->isar); in setup_instance()
433 pci_disable_device(card->pdev); in setup_instance()
435 list_del(&card->list); in setup_instance()
444 int err = -ENOMEM; in sfaxpci_probe()
451 card->pdev = pdev; in sfaxpci_probe()
459 (char *)ent->driver_data, pci_name(pdev)); in sfaxpci_probe()
461 card->cfg = pci_resource_start(pdev, 0); in sfaxpci_probe()
462 card->irq = pdev->irq; in sfaxpci_probe()
495 .name = "speedfax+ pci",