27 static const char *ix1_revision =
"$Revision: 2.12.2.4 $";
29 #define byteout(addr, val) outb(val, addr)
30 #define bytein(addr) inb(addr)
32 #define SPECIAL_PORT_OFFSET 3
34 #define ISAC_COMMAND_OFFSET 2
35 #define ISAC_DATA_OFFSET 0
36 #define HSCX_COMMAND_OFFSET 2
37 #define HSCX_DATA_OFFSET 1
55 insb(adr, data, size);
70 outsb(adr, data, size);
78 return (
readreg(cs->hw.ix1.isac_ale, cs->hw.ix1.isac, offset));
84 writereg(cs->hw.ix1.isac_ale, cs->hw.ix1.isac, offset, value);
90 readfifo(cs->hw.ix1.isac_ale, cs->hw.ix1.isac, 0, data, size);
96 writefifo(cs->hw.ix1.isac_ale, cs->hw.ix1.isac, 0, data, size);
102 return (
readreg(cs->hw.ix1.hscx_ale,
103 cs->hw.ix1.hscx, offset + (hscx ? 0x40 : 0)));
110 cs->hw.ix1.hscx, offset + (hscx ? 0x40 : 0), value);
113 #define READHSCX(cs, nr, reg) readreg(cs->hw.ix1.hscx_ale, \
114 cs->hw.ix1.hscx, reg + (nr ? 0x40 : 0))
115 #define WRITEHSCX(cs, nr, reg, data) writereg(cs->hw.ix1.hscx_ale, \
116 cs->hw.ix1.hscx, reg + (nr ? 0x40 : 0), data)
118 #define READHSCXFIFO(cs, nr, ptr, cnt) readfifo(cs->hw.ix1.hscx_ale, \
119 cs->hw.ix1.hscx, (nr ? 0x40 : 0), ptr, cnt)
121 #define WRITEHSCXFIFO(cs, nr, ptr, cnt) writefifo(cs->hw.ix1.hscx_ale, \
122 cs->hw.ix1.hscx, (nr ? 0x40 : 0), ptr, cnt)
127 ix1micro_interrupt(
int intno,
void *
dev_id)
129 struct IsdnCardState *cs =
dev_id;
137 hscx_int_main(cs, val);
144 if (cs->debug & L1_DEB_HSCX)
145 debugl1(cs,
"HSCX IntStat after IntRoutine");
150 if (cs->debug & L1_DEB_ISAC)
151 debugl1(cs,
"ISAC IntStat after IntRoutine");
160 spin_unlock_irqrestore(&cs->lock, flags);
165 release_io_ix1micro(
struct IsdnCardState *cs)
167 if (cs->hw.ix1.cfg_reg)
172 ix1_reset(
struct IsdnCardState *cs)
177 cnt = 3 * (
HZ / 10) + 1;
186 ix1_card_msg(
struct IsdnCardState *cs,
int mt,
void *
arg)
194 spin_unlock_irqrestore(&cs->lock, flags);
197 release_io_ix1micro(cs);
203 spin_unlock_irqrestore(&cs->lock, flags);
215 (
unsigned long)
"ITK micro 2" },
218 (
unsigned long)
"ITK micro 2." },
230 struct IsdnCardState *cs = card->
cs;
233 strcpy(tmp, ix1_revision);
241 while (ipid->card_vendor) {
243 ipid->card_device, pnp_c))) {
246 ipid->vendor, ipid->function, pnp_d))) {
250 (
char *)ipid->driver_data);
258 card->
para[1] = pnp_port_start(pnp_d, 0);
260 if (!card->
para[0] || !card->
para[1]) {
274 if (!ipid->card_vendor) {
285 cs->hw.ix1.cfg_reg = card->
para[1];
286 cs->irq = card->
para[0];
287 if (cs->hw.ix1.cfg_reg) {
290 "HiSax: ITK ix1-micro Rev.2 config port "
291 "%x-%x already in use\n",
293 cs->hw.ix1.cfg_reg + 4);
298 cs->irq, cs->hw.ix1.cfg_reg);
302 cs->readisacfifo = &ReadISACfifo;
303 cs->writeisacfifo = &WriteISACfifo;
306 cs->BC_Send_Data = &hscx_fill_fifo;
307 cs->cardmsg = &ix1_card_msg;
308 cs->irq_func = &ix1micro_interrupt;
312 "ix1-Micro: wrong HSCX versions check IO address\n");
313 release_io_ix1micro(cs);