Commit 02f7568c authored by Kai Germaschewski's avatar Kai Germaschewski

ISDN/HiSax: Move interrupt function to per-card struct

Since we now have a per-card ops struct, use it to provide the
irq handler function, too.

Some drivers actually drive more than one specific hardware card,
instead of having "switch (cs->subtyp)" scattered around, we rather
aim at having different card_ops structures which just provide the
right functions for the hardware. Of course, this patch is only the
beginning of that separation, but allows for some cleaning already.
parent 4bffaa97
......@@ -723,7 +723,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
/* Transmitter reset, abort transmit */
wByteAMD(cs, 0x21, 0x82);
wByteAMD(cs, 0x21, 0x02);
cs->irq_func(cs->irq, cs, NULL);
cs->card_ops->irq_func(cs->irq, cs, NULL); /* FIXME? */
if (cs->debug & L1_DEB_ISAC)
debugl1(cs, "Amd7930: dbusy_timer_handler: Transmitter reset");
......
......@@ -212,7 +212,7 @@ asuscom_interrupt(int intno, void *dev_id, struct pt_regs *regs)
}
static void
asuscom_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs)
asuscom_ipac_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista, val, icnt = 5;
......@@ -315,6 +315,12 @@ asuscom_init(struct IsdnCardState *cs)
static struct card_ops asuscom_ops = {
.init = asuscom_init,
.irq_func = asuscom_interrupt,
};
static struct card_ops asuscom_ipac_ops = {
.init = asuscom_init,
.irq_func = asuscom_ipac_interrupt,
};
#ifdef __ISAPNP__
......@@ -405,26 +411,25 @@ setup_asuscom(struct IsdnCard *card)
cs->hw.asus.cfg_reg, cs->irq);
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Asus_card_msg;
cs->card_ops = &asuscom_ops;
cs->hw.asus.adr = cs->hw.asus.cfg_reg + ASUS_IPAC_ALE;
val = readreg(cs, cs->hw.asus.cfg_reg + ASUS_IPAC_DATA, IPAC_ID);
if ((val == 1) || (val == 2)) {
cs->subtyp = ASUS_IPAC;
cs->card_ops = &asuscom_ipac_ops;
cs->hw.asus.isac = cs->hw.asus.cfg_reg + ASUS_IPAC_DATA;
cs->hw.asus.hscx = cs->hw.asus.cfg_reg + ASUS_IPAC_DATA;
test_and_set_bit(HW_IPAC, &cs->HW_Flags);
cs->dc_hw_ops = &ipac_dc_ops;
cs->irq_func = &asuscom_interrupt_ipac;
printk(KERN_INFO "Asus: IPAC version %x\n", val);
} else {
cs->subtyp = ASUS_ISACHSCX;
cs->card_ops = &asuscom_ops;
cs->hw.asus.adr = cs->hw.asus.cfg_reg + ASUS_ADR;
cs->hw.asus.isac = cs->hw.asus.cfg_reg + ASUS_ISAC;
cs->hw.asus.hscx = cs->hw.asus.cfg_reg + ASUS_HSCX;
cs->hw.asus.u7 = cs->hw.asus.cfg_reg + ASUS_CTRL_U7;
cs->hw.asus.pots = cs->hw.asus.cfg_reg + ASUS_CTRL_POTS;
cs->dc_hw_ops = &isac_ops;
cs->irq_func = &asuscom_interrupt;
ISACVersion(cs, "ISDNLink:");
if (HscxVersion(cs, "ISDNLink:")) {
printk(KERN_WARNING
......
......@@ -189,6 +189,7 @@ avm_a1_init(struct IsdnCardState *cs)
static struct card_ops avm_a1_ops = {
.init = avm_a1_init,
.irq_func = avm_a1_interrupt,
};
int __init
......@@ -312,7 +313,6 @@ setup_avm_a1(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &AVM_card_msg;
cs->irq_func = &avm_a1_interrupt;
cs->card_ops = &avm_a1_ops;
ISACVersion(cs, "AVM A1:");
if (HscxVersion(cs, "AVM A1:")) {
......
......@@ -227,6 +227,7 @@ avm_a1p_init(struct IsdnCardState *cs)
static struct card_ops avm_a1p_ops = {
.init = avm_a1p_init,
.irq_func = avm_a1p_interrupt,
};
int __devinit
......@@ -266,7 +267,6 @@ setup_avm_a1_pcmcia(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &AVM_card_msg;
cs->irq_func = &avm_a1p_interrupt;
cs->card_ops = &avm_a1p_ops;
ISACVersion(cs, "AVM A1 PCMCIA:");
......
......@@ -588,7 +588,7 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
}
static void
avm_a1_pci_init(struct IsdnCardState *cs)
avm_pci_init(struct IsdnCardState *cs)
{
initisac(cs);
inithdlc(cs);
......@@ -598,8 +598,9 @@ avm_a1_pci_init(struct IsdnCardState *cs)
AVM_STATUS0_ENA_IRQ, cs->hw.avm.cfg_reg + 2);
}
static struct card_ops avm_a1_pci_ops = {
.init = avm_a1_pci_init,
static struct card_ops avm_pci_ops = {
.init = avm_pci_init,
.irq_func = avm_pcipnp_interrupt,
};
static struct pci_dev *dev_avm __initdata = NULL;
......@@ -724,8 +725,7 @@ setup_avm_pcipnp(struct IsdnCard *card)
cs->bc_hw_ops = &hdlc_hw_ops;
cs->bc_l1_ops = &hdlc_l1_ops;
cs->cardmsg = &AVM_card_msg;
cs->irq_func = &avm_pcipnp_interrupt;
cs->card_ops = &avm_a1_pci_ops;
cs->card_ops = &avm_pci_ops;
ISACVersion(cs, (cs->subtyp == AVM_FRITZ_PCI) ? "AVM PCI:" : "AVM PnP:");
return (1);
}
......@@ -262,6 +262,7 @@ bkm_a4t_init(struct IsdnCardState *cs)
static struct card_ops bkm_a4t_ops = {
.init = bkm_a4t_init,
.irq_func = bkm_interrupt,
};
static struct pci_dev *dev_a4t __initdata = NULL;
......@@ -342,7 +343,6 @@ setup_bkm_a4t(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &jade_ops;
cs->cardmsg = &BKM_card_msg;
cs->irq_func = &bkm_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &bkm_a4t_ops;
ISACVersion(cs, "Telekom A4T:");
......
......@@ -155,7 +155,7 @@ set_ipac_active(struct IsdnCardState *cs, u_int active)
}
static void
bkm_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs)
bkm_a8_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista, val, icnt = 5;
......@@ -272,6 +272,7 @@ bkm_a8_init(struct IsdnCardState *cs)
static struct card_ops bkm_a8_ops = {
.init = bkm_a8_init,
.irq_func = bkm_a8_interrupt,
};
int __init
......@@ -436,7 +437,6 @@ setup_sct_quadro(struct IsdnCard *card)
cs->dc_hw_ops = &ipac_dc_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &BKM_card_msg;
cs->irq_func = &bkm_interrupt_ipac;
cs->card_ops = &bkm_a8_ops;
printk(KERN_INFO "HiSax: %s (%s): IPAC Version %d\n",
......
......@@ -859,7 +859,7 @@ static int __devinit init_card(struct IsdnCardState *cs)
irq_cnt = kstat_irqs(cs->irq);
printk(KERN_INFO "%s: IRQ %d count %d\n", CardType[cs->typ],
cs->irq, irq_cnt);
if (request_irq(cs->irq, cs->irq_func, cs->irq_flags, "HiSax", cs)) {
if (request_irq(cs->irq, cs->card_ops->irq_func, cs->irq_flags, "HiSax", cs)) {
printk(KERN_WARNING "HiSax: couldn't get interrupt %d\n",
cs->irq);
return 1;
......
......@@ -389,7 +389,7 @@ diva_interrupt(int intno, void *dev_id, struct pt_regs *regs)
}
static void
diva_irq_ipac_isa(int intno, void *dev_id, struct pt_regs *regs)
diva_ipac_isa_irq(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista,val;
......@@ -436,7 +436,7 @@ diva_irq_ipac_isa(int intno, void *dev_id, struct pt_regs *regs)
}
static void
diva_irq_ipac_pci(int intno, void *dev_id, struct pt_regs *regs)
diva_ipac_pci_irq(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista,val;
......@@ -489,7 +489,7 @@ diva_irq_ipac_pci(int intno, void *dev_id, struct pt_regs *regs)
}
static void
diva_irq_ipacx_pci(int intno, void *dev_id, struct pt_regs *regs)
diva_ipacx_pci_irq(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val;
......@@ -673,25 +673,37 @@ Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg)
}
static void
diva_init(struct IsdnCardState *cs)
diva_ipacx_pci_init(struct IsdnCardState *cs)
{
unsigned int *ireg;
if (cs->subtyp == DIVA_IPACX_PCI) {
ireg = (unsigned int *)cs->hw.diva.pci_cfg;
*ireg = PITA_INT0_ENABLE;
writel(PITA_INT0_ENABLE, cs->hw.diva.pci_cfg);
init_ipacx(cs, 3); // init chip and enable interrupts
return;
}
if (cs->subtyp == DIVA_IPAC_PCI) {
ireg = (unsigned int *)cs->hw.diva.pci_cfg;
*ireg = PITA_INT0_ENABLE;
}
}
static void
diva_ipac_pci_init(struct IsdnCardState *cs)
{
writel(PITA_INT0_ENABLE, cs->hw.diva.pci_cfg);
inithscxisac(cs);
}
static struct card_ops diva_ops = {
.init = diva_init,
.init = inithscxisac,
.irq_func = diva_interrupt,
};
static struct card_ops diva_ipac_isa_ops = {
.init = inithscxisac,
.irq_func = diva_ipac_isa_irq,
};
static struct card_ops diva_ipac_pci_ops = {
.init = diva_ipac_pci_init,
.irq_func = diva_ipac_pci_irq,
};
static struct card_ops diva_ipacx_pci_ops = {
.init = diva_ipacx_pci_init,
.irq_func = diva_ipacx_pci_irq,
};
static struct pci_dev *dev_diva __initdata = NULL;
......@@ -930,22 +942,21 @@ setup_diva(struct IsdnCard *card)
reset_diva(cs);
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Diva_card_msg;
cs->card_ops = &diva_ops;
if (cs->subtyp == DIVA_IPAC_ISA) {
cs->dc_hw_ops = &ipac_dc_ops;
cs->irq_func = &diva_irq_ipac_isa;
cs->card_ops = &diva_ipac_isa_ops;
val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ID);
printk(KERN_INFO "Diva: IPAC version %x\n", val);
} else if (cs->subtyp == DIVA_IPAC_PCI) {
cs->dc_hw_ops = &mem_ipac_dc_ops;
cs->bc_hw_ops = &mem_hscx_ops;
cs->irq_func = &diva_irq_ipac_pci;
cs->card_ops = &diva_ipac_pci_ops;
val = memreadreg(cs->hw.diva.cfg_reg, IPAC_ID);
printk(KERN_INFO "Diva: IPAC version %x\n", val);
} else if (cs->subtyp == DIVA_IPACX_PCI) {
cs->dc_hw_ops = &ipacx_dc_ops;
cs->bc_hw_ops = &ipacx_bc_ops;
cs->irq_func = &diva_irq_ipacx_pci;
cs->card_ops = &diva_ipacx_pci_ops;
printk(KERN_INFO "Diva: IPACX Design Id: %x\n",
ipacx_dc_read(cs, IPACX_ID) &0x3F);
} else { /* DIVA 2.0 */
......@@ -953,7 +964,7 @@ setup_diva(struct IsdnCard *card)
cs->hw.diva.tl.data = (long) cs;
init_timer(&cs->hw.diva.tl);
cs->dc_hw_ops = &isac_ops;
cs->irq_func = &diva_interrupt;
cs->card_ops = &diva_ops;
ISACVersion(cs, "Diva:");
if (HscxVersion(cs, "Diva:")) {
printk(KERN_WARNING
......
......@@ -792,6 +792,12 @@ elsa_init(struct IsdnCardState *cs)
static struct card_ops elsa_ops = {
.init = elsa_init,
.irq_func = elsa_interrupt,
};
static struct card_ops elsa_ipac_ops = {
.init = elsa_init,
.irq_func = elsa_interrupt_ipac,
};
static unsigned char
......@@ -1176,16 +1182,15 @@ setup_elsa(struct IsdnCard *card)
}
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Elsa_card_msg;
cs->card_ops = &elsa_ops;
reset_elsa(cs);
if ((cs->subtyp == ELSA_QS1000PCI) || (cs->subtyp == ELSA_QS3000PCI) || (cs->subtyp == ELSA_PCMCIA_IPAC)) {
cs->dc_hw_ops = &ipac_dc_ops;
cs->irq_func = &elsa_interrupt_ipac;
cs->card_ops = &elsa_ipac_ops;
val = readreg(cs, cs->hw.elsa.isac, IPAC_ID);
printk(KERN_INFO "Elsa: IPAC version %x\n", val);
} else {
cs->dc_hw_ops = &isac_ops;
cs->irq_func = &elsa_interrupt;
cs->card_ops = &elsa_ops;
ISACVersion(cs, "Elsa:");
if (HscxVersion(cs, "Elsa:")) {
printk(KERN_WARNING
......
......@@ -221,10 +221,6 @@ enpci_init(struct IsdnCardState *cs)
Amd7930_init(cs);
}
static struct card_ops enpci_ops = {
.init = enpci_init,
};
static void
enpci_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
......@@ -272,6 +268,10 @@ enpci_interrupt(int intno, void *dev_id, struct pt_regs *regs)
spin_unlock(&cs->lock);
}
static struct card_ops enpci_ops = {
.init = enpci_init,
.irq_func = enpci_interrupt,
};
static struct pci_dev *dev_netjet __initdata = NULL;
......@@ -377,7 +377,6 @@ setup_enternow_pci(struct IsdnCard *card)
cs->dc.amd7930.setIrqMask = &enpci_setIrqMask;
cs->cardmsg = &enpci_card_msg;
cs->irq_func = &enpci_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &enpci_ops;
......
......@@ -282,7 +282,7 @@ gazel_interrupt(int intno, void *dev_id, struct pt_regs *regs)
static void
gazel_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs)
gazel_ipac_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista, val;
......@@ -430,17 +430,20 @@ gazel_init(struct IsdnCardState *cs)
{
int i;
inithscxisac(cs);
if (cs->subtyp == R647 || cs->subtyp == R685) {
for (i = 0; i < 2; i++) {
cs->bcs[i].hw.hscx.tsaxr0 = 0x1f;
cs->bcs[i].hw.hscx.tsaxr1 = 0x23;
}
}
}
static struct card_ops gazel_ops = {
.init = gazel_init,
.irq_func = gazel_interrupt,
};
static struct card_ops gazel_ipac_ops = {
.init = inithscxisac,
.irq_func = gazel_ipac_interrupt,
};
static int
......@@ -688,12 +691,11 @@ setup_gazel(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Gazel_card_msg;
cs->card_ops = &gazel_ops;
switch (cs->subtyp) {
case R647:
case R685:
cs->irq_func = &gazel_interrupt;
cs->card_ops = &gazel_ops;
ISACVersion(cs, "Gazel:");
if (HscxVersion(cs, "Gazel:")) {
printk(KERN_WARNING
......@@ -704,7 +706,7 @@ setup_gazel(struct IsdnCard *card)
break;
case R742:
case R753:
cs->irq_func = &gazel_interrupt_ipac;
cs->card_ops = &gazel_ipac_ops;
val = readreg_ipac(cs, IPAC_ID);
printk(KERN_INFO "Gazel: IPAC version %x\n", val);
break;
......
......@@ -1396,6 +1396,7 @@ hfcpci_init(struct IsdnCardState *cs)
static struct card_ops hfcpci_ops = {
.init = hfcpci_init,
.irq_func = hfcpci_interrupt,
};
......@@ -1481,7 +1482,6 @@ setup_hfcpci(struct IsdnCard *card)
return (0); /* no valid card type */
cs->irq_func = &hfcpci_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->hw.hfcpci.timer.function = (void *) hfcpci_Timer;
......
......@@ -1173,6 +1173,7 @@ hfcsx_init(struct IsdnCardState *cs)
static struct card_ops hfcsx_ops = {
.init = hfcsx_init,
.irq_func = hfcsx_interrupt,
};
#ifdef __ISAPNP__
......@@ -1293,8 +1294,6 @@ setup_hfcsx(struct IsdnCard *card)
} else
return (0); /* no valid card type */
cs->irq_func = &hfcsx_interrupt;
cs->hw.hfcsx.timer.function = (void *) hfcsx_Timer;
cs->hw.hfcsx.timer.data = (long) cs;
cs->hw.hfcsx.b_fifo_size = 0; /* fifo size still unknown */
......
......@@ -146,6 +146,7 @@ hfcs_init(struct IsdnCardState *cs)
static struct card_ops hfcs_ops = {
.init = hfcs_init,
.irq_func = hfcs_interrupt,
};
#ifdef __ISAPNP__
......@@ -271,7 +272,6 @@ setup_hfcs(struct IsdnCard *card)
init_timer(&cs->hw.hfcD.timer);
reset_hfcs(cs);
cs->cardmsg = &hfcs_card_msg;
cs->irq_func = &hfcs_interrupt;
cs->card_ops = &hfcs_ops;
return (1);
}
......@@ -858,6 +858,7 @@ struct IsdnCardState;
struct card_ops {
void (*init) (struct IsdnCardState *);
void (*irq_func) (int, void *, struct pt_regs *);
};
/* Card specific drivers provide methods to access the
......@@ -949,7 +950,6 @@ struct IsdnCardState {
void (*setstack_d) (struct PStack *, struct IsdnCardState *);
void (*DC_Send_Data) (struct IsdnCardState *);
void (*DC_Close) (struct IsdnCardState *);
void (*irq_func) (int, void *, struct pt_regs *);
int (*auxcmd) (struct IsdnCardState *, isdn_ctrl *);
struct Channel channel[2+MAX_WAITING_CALLS];
struct BCState bcs[2+MAX_WAITING_CALLS];
......
......@@ -492,7 +492,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
debugl1(cs, "D-Channel Busy no skb");
}
icc_write_reg(cs, ICC_CMDR, 0x01); /* Transmitter reset */
cs->irq_func(cs->irq, cs, NULL);
cs->card_ops->irq_func(cs->irq, cs, NULL); /* FIXME? */
}
}
}
......
......@@ -490,7 +490,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
debugl1(cs, "D-Channel Busy no skb");
}
isac_write(cs, ISAC_CMDR, 0x01); /* Transmitter reset */
cs->irq_func(cs->irq, cs, NULL);
cs->card_ops->irq_func(cs->irq, cs, NULL);
}
}
}
......
......@@ -195,6 +195,7 @@ isurf_init(struct IsdnCardState *cs)
static struct card_ops isurf_ops = {
.init = isurf_init,
.irq_func = isurf_interrupt,
};
#ifdef __ISAPNP__
......@@ -290,7 +291,6 @@ setup_isurf(struct IsdnCard *card)
cs->irq);
cs->cardmsg = &ISurf_card_msg;
cs->irq_func = &isurf_interrupt;
cs->auxcmd = &isurf_auxcmd;
cs->card_ops = &isurf_ops;
cs->dc_hw_ops = &isac_ops;
......
......@@ -215,6 +215,7 @@ ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops ix1_ops = {
.init = inithscxisac,
.irq_func = ix1micro_interrupt,
};
#ifdef __ISAPNP__
......@@ -308,7 +309,6 @@ setup_ix1micro(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &ix1_card_msg;
cs->irq_func = &ix1micro_interrupt;
cs->card_ops = &ix1_ops;
ISACVersion(cs, "ix1-Micro:");
if (HscxVersion(cs, "ix1-Micro:")) {
......
......@@ -194,6 +194,7 @@ mic_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops mic_ops = {
.init = inithscxisac,
.irq_func = mic_interrupt,
};
int __init
......@@ -231,7 +232,6 @@ setup_mic(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &mic_card_msg;
cs->irq_func = &mic_interrupt;
cs->card_ops = &mic_ops;
ISACVersion(cs, "mic:");
if (HscxVersion(cs, "mic:")) {
......
......@@ -242,6 +242,7 @@ niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops niccy_ops = {
.init = niccy_reset,
.irq_func = niccy_interrupt,
};
static struct pci_dev *niccy_dev __initdata = NULL;
......@@ -385,7 +386,6 @@ setup_niccy(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &niccy_card_msg;
cs->irq_func = &niccy_interrupt;
cs->card_ops = &niccy_ops;
ISACVersion(cs, "Niccy:");
if (HscxVersion(cs, "Niccy:")) {
......
......@@ -18,7 +18,7 @@
const char *NETjet_S_revision = "$Revision: 2.7.6.6 $";
static void
netjet_s_interrupt(int intno, void *dev_id, struct pt_regs *regs)
nj_s_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val, sval;
......@@ -116,6 +116,7 @@ nj_s_init(struct IsdnCardState *cs)
static struct card_ops nj_s_ops = {
.init = nj_s_init,
.irq_func = nj_s_interrupt,
};
static struct pci_dev *dev_netjet __initdata = NULL;
......@@ -235,7 +236,6 @@ setup_netjet_s(struct IsdnCard *card)
reset_netjet_s(cs);
cs->dc_hw_ops = &netjet_dc_ops;
cs->cardmsg = &NETjet_S_card_msg;
cs->irq_func = &netjet_s_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &nj_s_ops;
ISACVersion(cs, "NETjet-S:");
......
......@@ -18,7 +18,7 @@
const char *NETjet_U_revision = "$Revision: 2.8.6.6 $";
static void
netjet_u_interrupt(int intno, void *dev_id, struct pt_regs *regs)
nj_u_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val, sval;
......@@ -120,6 +120,7 @@ nj_u_init(struct IsdnCardState *cs)
static struct card_ops nj_u_ops = {
.init = nj_u_init,
.irq_func = nj_u_interrupt,
};
static struct pci_dev *dev_netjet __initdata = NULL;
......@@ -231,7 +232,6 @@ setup_netjet_u(struct IsdnCard *card)
reset_netjet_u(cs);
cs->dc_hw_ops = &netjet_dc_ops;
cs->cardmsg = &NETjet_U_card_msg;
cs->irq_func = &netjet_u_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &nj_u_ops;
ICCVersion(cs, "NETspider-U:");
......
......@@ -230,6 +230,7 @@ S0Box_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops s0box_ops = {
.init = inithscxisac,
.irq_func = s0box_interrupt,
};
int __init
......@@ -269,7 +270,6 @@ setup_s0box(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &S0Box_card_msg;
cs->irq_func = &s0box_interrupt;
cs->card_ops = &s0box_ops;
ISACVersion(cs, "S0Box:");
if (HscxVersion(cs, "S0Box:")) {
......
......@@ -246,6 +246,7 @@ saphir_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops saphir_ops = {
.init = inithscxisac,
.irq_func = saphir_interrupt,
};
int __init
......@@ -291,7 +292,6 @@ setup_saphir(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &saphir_card_msg;
cs->irq_func = &saphir_interrupt;
cs->card_ops = &saphir_ops;
ISACVersion(cs, "saphir:");
if (HscxVersion(cs, "saphir:")) {
......
......@@ -332,7 +332,7 @@ sedlbauer_interrupt(int intno, void *dev_id, struct pt_regs *regs)
}
static void
sedlbauer_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs)
sedlbauer_ipac_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 ista, val, icnt = 5;
......@@ -379,7 +379,7 @@ sedlbauer_interrupt_ipac(int intno, void *dev_id, struct pt_regs *regs)
}
static void
sedlbauer_interrupt_isar(int intno, void *dev_id, struct pt_regs *regs)
sedlbauer_isar_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val;
......@@ -511,19 +511,26 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
}
static void
sedlbauer_init(struct IsdnCardState *cs)
sedlbauer_isar_init(struct IsdnCardState *cs)
{
if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) {
isar_write(cs, 0, ISAR_IRQBIT, 0);
initisac(cs);
initisar(cs);
} else {
inithscxisac(cs);
}
}
static struct card_ops sedlbauer_ops = {
.init = sedlbauer_init,
.init = inithscxisac,
.irq_func = sedlbauer_interrupt,
};
static struct card_ops sedlbauer_ipac_ops = {
.init = inithscxisac,
.irq_func = sedlbauer_ipac_interrupt,
};
static struct card_ops sedlbauer_isar_ops = {
.init = sedlbauer_isar_init,
.irq_func = sedlbauer_isar_interrupt,
};
static struct pci_dev *dev_sedl __devinitdata = NULL;
......@@ -713,7 +720,6 @@ setup_sedlbauer(struct IsdnCard *card)
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Sedl_card_msg;
cs->card_ops = &sedlbauer_ops;
/*
* testing ISA and PCMCIA Cards for IPAC, default is ISAC
......@@ -759,7 +765,7 @@ setup_sedlbauer(struct IsdnCard *card)
}
test_and_set_bit(HW_IPAC, &cs->HW_Flags);
cs->dc_hw_ops = &ipac_dc_ops;
cs->irq_func = &sedlbauer_interrupt_ipac;
cs->card_ops = &sedlbauer_ipac_ops;
val = readreg(cs, cs->hw.sedl.isac, IPAC_ID);
printk(KERN_INFO "Sedlbauer: IPAC version %x\n", val);
......@@ -790,7 +796,7 @@ setup_sedlbauer(struct IsdnCard *card)
cs->bcs[0].hw.isar.reg = &cs->hw.sedl.isar;
cs->bcs[1].hw.isar.reg = &cs->hw.sedl.isar;
test_and_set_bit(HW_ISAR, &cs->HW_Flags);
cs->irq_func = &sedlbauer_interrupt_isar;
cs->card_ops = &sedlbauer_isar_ops;
cs->auxcmd = &isar_auxcmd;
ISACVersion(cs, "Sedlbauer:");
cs->bc_hw_ops = &isar_ops;
......@@ -815,7 +821,7 @@ setup_sedlbauer(struct IsdnCard *card)
cs->hw.sedl.reset_on = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_RESET_ON;
cs->hw.sedl.reset_off = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_RESET_OFF;
}
cs->irq_func = &sedlbauer_interrupt;
cs->card_ops = &sedlbauer_ops;
ISACVersion(cs, "Sedlbauer:");
if (HscxVersion(cs, "Sedlbauer:")) {
......
......@@ -194,6 +194,7 @@ sportster_init(struct IsdnCardState *cs)
static struct card_ops sportster_ops = {
.init = sportster_init,
.irq_func = sportster_interrupt,
};
static int __init
......@@ -268,7 +269,6 @@ setup_sportster(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Sportster_card_msg;
cs->irq_func = &sportster_interrupt;
cs->card_ops = &sportster_ops;
ISACVersion(cs, "Sportster:");
if (HscxVersion(cs, "Sportster:")) {
......
......@@ -179,7 +179,7 @@ static struct bc_hw_ops hfc_ops = {
};
static void
TeleInt_interrupt(int intno, void *dev_id, struct pt_regs *regs)
teleint_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val;
......@@ -267,6 +267,7 @@ teleint_init(struct IsdnCardState *cs)
static struct card_ops teleint_ops = {
.init = teleint_init,
.irq_func = teleint_interrupt,
};
int __init
......@@ -341,7 +342,6 @@ setup_TeleInt(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hfc_ops;
cs->cardmsg = &TeleInt_card_msg;
cs->irq_func = &TeleInt_interrupt;
cs->card_ops = &teleint_ops;
ISACVersion(cs, "TeleInt:");
return (1);
......
......@@ -223,6 +223,7 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops teles0_ops = {
.init = inithscxisac,
.irq_func = teles0_interrupt,
};
int __init
......@@ -313,7 +314,6 @@ setup_teles0(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Teles_card_msg;
cs->irq_func = &teles0_interrupt;
cs->card_ops = &teles0_ops;
ISACVersion(cs, "Teles0:");
if (HscxVersion(cs, "Teles0:")) {
......
......@@ -256,6 +256,7 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops teles3_ops = {
.init = inithscxisac,
.irq_func = teles3_interrupt,
};
#ifdef __ISAPNP__
......@@ -483,7 +484,6 @@ setup_teles3(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &Teles_card_msg;
cs->irq_func = &teles3_interrupt;
cs->card_ops = &teles3_ops;
ISACVersion(cs, "Teles3:");
if (HscxVersion(cs, "Teles3:")) {
......
......@@ -248,6 +248,7 @@ TelesPCI_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops telespci_ops = {
.init = inithscxisac,
.irq_func = telespci_interrupt,
};
static struct pci_dev *dev_tel __initdata = NULL;
......@@ -309,7 +310,6 @@ setup_telespci(struct IsdnCard *card)
cs->dc_hw_ops = &isac_ops;
cs->bc_hw_ops = &hscx_ops;
cs->cardmsg = &TelesPCI_card_msg;
cs->irq_func = &telespci_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &telespci_ops;
ISACVersion(cs, "TelesPCI:");
......
......@@ -288,7 +288,7 @@ W6692B_interrupt(struct IsdnCardState *cs, u8 bchan)
}
static void
W6692_interrupt(int intno, void *dev_id, struct pt_regs *regs)
w6692_interrupt(int intno, void *dev_id, struct pt_regs *regs)
{
struct IsdnCardState *cs = dev_id;
u8 val, exval, v1;
......@@ -498,7 +498,7 @@ dbusy_timer_handler(struct IsdnCardState *cs)
debugl1(cs, "D-Channel Busy no skb");
}
w6692_write_reg(cs, W_D_CMDR, W_D_CMDR_XRST); /* Transmitter reset */
cs->irq_func(cs->irq, cs, NULL);
cs->card_ops->irq_func(cs->irq, cs, NULL); /* FIXME? */
}
}
}
......@@ -664,6 +664,7 @@ w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg)
static struct card_ops w6692_ops = {
.init = w6692_init,
.irq_func = w6692_interrupt,
};
static struct bc_l1_ops w6692_bc_l1_ops = {
......@@ -765,7 +766,6 @@ setup_w6692(struct IsdnCard *card)
cs->bc_l1_ops = &w6692_bc_l1_ops;
cs->DC_Send_Data = &W6692_fill_fifo;
cs->cardmsg = &w6692_card_msg;
cs->irq_func = &W6692_interrupt;
cs->irq_flags |= SA_SHIRQ;
cs->card_ops = &w6692_ops;
W6692Version(cs, "W6692:");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment