19 static const char *hfcs_revision =
"$Revision: 1.10.2.4 $";
22 hfcs_interrupt(
int intno,
void *
dev_id)
32 if (cs->debug & L1_DEB_ISAC)
33 debugl1(cs,
"HFCS: stat(%02x) s1(%02x)", stat, val);
36 if (cs->debug & L1_DEB_ISAC)
37 debugl1(cs,
"HFCS: irq_no_irq stat(%02x)", stat);
39 spin_unlock_irqrestore(&cs->lock, flags);
44 hfcs_Timer(
struct IsdnCardState *cs)
46 cs->hw.hfcD.timer.expires =
jiffies + 75;
54 release_io_hfcs(
struct IsdnCardState *cs)
63 reset_hfcs(
struct IsdnCardState *cs)
96 cs->hw.hfcD.sctrl = 0;
101 hfcs_card_msg(
struct IsdnCardState *cs,
int mt,
void *
arg)
106 if (cs->debug & L1_DEB_ISAC)
107 debugl1(cs,
"HFCS: card_msg %x", mt);
112 spin_unlock_irqrestore(&cs->lock, flags);
118 delay = (75 *
HZ) / 100 + 1;
119 mod_timer(&cs->hw.hfcD.timer, jiffies + delay);
123 spin_unlock_irqrestore(&cs->lock, flags);
124 delay = (80 *
HZ) / 1000 + 1;
130 spin_unlock_irqrestore(&cs->lock, flags);
142 (
unsigned long)
"Acer P10" },
145 (
unsigned long)
"Billion 2" },
148 (
unsigned long)
"Billion 1" },
151 (
unsigned long)
"IStar PnP" },
154 (
unsigned long)
"Teles 16.3c" },
157 (
unsigned long)
"Tornado Tipa C" },
160 (
unsigned long)
"Genius Speed Surfer" },
171 struct IsdnCardState *cs = card->
cs;
174 strcpy(tmp, hfcs_revision);
180 while (ipid->card_vendor) {
182 ipid->card_device, pnp_c))) {
185 ipid->vendor, ipid->function, pnp_d))) {
189 (
char *)ipid->driver_data);
197 card->
para[1] = pnp_port_start(pnp_d, 0);
199 if (!card->
para[0] || !card->
para[1]) {
213 if (!ipid->card_vendor) {
219 cs->hw.hfcD.addr = card->
para[1] & 0xfffe;
220 cs->irq = card->
para[0];
222 cs->hw.hfcD.int_s1 = 0;
223 cs->hw.hfcD.send =
NULL;
224 cs->bcs[0].hw.hfc.send =
NULL;
225 cs->bcs[1].hw.hfc.send =
NULL;
226 cs->hw.hfcD.dfifosize = 512;
227 cs->dc.hfcd.ph_state = 0;
228 cs->hw.hfcD.fifo = 255;
230 cs->hw.hfcD.bfifosize = 1024 + 512;
232 cs->hw.hfcD.bfifosize = 7 * 1024 + 512;
237 "HiSax: %s config port %x-%x already in use\n",
240 cs->hw.hfcD.addr + 2);
244 "HFCS: defined at 0x%x IRQ %d HZ %d\n",
249 outb(0x00, cs->hw.hfcD.addr);
250 outb(0x56, cs->hw.hfcD.addr | 1);
253 outb(0x00, cs->hw.hfcD.addr);
254 outb(0x57, cs->hw.hfcD.addr | 1);
257 cs->hw.hfcD.timer.function = (
void *) hfcs_Timer;
258 cs->hw.hfcD.timer.data = (
long) cs;
260 cs->cardmsg = &hfcs_card_msg;
261 cs->irq_func = &hfcs_interrupt;