isdn4linux-web/workshop/hisax/avm_a1.c.shtml

409 lines
19 KiB
Plaintext

<HTML>
<!-- Generated by c2html-1.0, Copyright 1998 by Dave Whittington -->
<HEAD>
<TITLE>avm_a1.c</TITLE>
<!--#include virtual="/ssi/js.shtml" -->
<!--#include virtual="/ssi/buttondefs.shtml" -->
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<TABLE WIDTH="100%">
<TR>
<TD ALIGN=LEFT WIDTH="90"><!--#include virtual="/ssi/b_home.shtml" --></TD>
<TD ALIGN=RIGHT WIDTH="90"><!--#include virtual="/ssi/b_index.shtml" --></TD>
</TR>
</TABLE>
<CENTER><H1>avm_a1.c</H1></CENTER>
<HR>
<PRE>
<FONT COLOR=#0000FF>/* $Id$
* avm_a1.c low level stuff for AVM A1 (Fritz) isdn cards
*
* Author Karsten Keil (keil@temic-ech.spacenet.de)
*
*
* $Log$
* Revision 2.8 1998/04/15 16:44:27 keil
* new init code
*
* Revision 2.7 1998/02/02 13:29:37 keil
* fast io
*
* Revision 2.6 1998/01/13 23:09:46 keil
* really disable timer
*
* Revision 2.5 1998/01/02 06:50:29 calle
* Perodic timer of A1 now disabled, no need for linux driver.
*
* Revision 2.4 1997/11/08 21:35:42 keil
* new l1 init
*
* Revision 2.3 1997/11/06 17:13:32 keil
* New 2.1 init code
*
* Revision 2.2 1997/10/29 18:55:48 keil
* changes for 2.1.60 (irq2dev_map)
*
* Revision 2.1 1997/07/27 21:47:13 keil
* new interface structures
*
* Revision 2.0 1997/06/26 11:02:48 keil
* New Layer and card interface
*
* Revision 1.6 1997/04/13 19:54:07 keil
* Change in IRQ check delay for SMP
*
* Revision 1.5 1997/04/06 22:54:10 keil
* Using SKB's
*
* Revision 1.4 1997/01/27 15:50:21 keil
* SMP proof,cosmetics
*
* Revision 1.3 1997/01/21 22:14:20 keil
* cleanups
*
* Revision 1.2 1996/10/27 22:07:31 keil
* cosmetic changes
*
* Revision 1.1 1996/10/13 20:04:49 keil
* Initial revision
*
*
*/</FONT>
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#__NO_VERSION__">__NO_VERSION__</A>
<FONT COLOR=#A521F7>#include</FONT> <FONT COLOR="#FF0000">"hisax.h"</FONT>
<FONT COLOR=#A521F7>#include</FONT> <FONT COLOR="#FF0000">"isac.h"</FONT>
<FONT COLOR=#A521F7>#include</FONT> <FONT COLOR="#FF0000">"hscx.h"</FONT>
<FONT COLOR=#A521F7>#include</FONT> <FONT COLOR="#FF0000">"isdnl1.h"</FONT>
<FONT COLOR="#298C52">extern</FONT> <FONT COLOR="#298C52">const</FONT> <FONT COLOR="#298C52">char</FONT> *CardType[];
<FONT COLOR="#298C52">const</FONT> <FONT COLOR="#298C52">char</FONT> *avm_revision = <FONT COLOR="#FF0000">"$Revision$"</FONT>;
<FONT COLOR=#A521F7>#define</FONT> AVM_A1_STAT_ISAC 0x01
<FONT COLOR=#A521F7>#define</FONT> AVM_A1_STAT_HSCX 0x02
<FONT COLOR=#A521F7>#define</FONT> AVM_A1_STAT_TIMER 0x04
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#byteout">byteout</A>(addr,val) outb(val,addr)
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#bytein">bytein</A>(addr) inb(addr)
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">inline</FONT> u_char
<A HREF="asuscom.c.shtml#readreg">readreg</A>(<FONT COLOR="#298C52">unsigned</FONT> <FONT COLOR="#298C52">int</FONT> adr, u_char off)
{
<FONT COLOR="#298C52">return</FONT> (<A HREF="asuscom.c.shtml#bytein">bytein</A>(adr + off));
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">inline</FONT> <FONT COLOR="#298C52">void</FONT>
<A HREF="asuscom.c.shtml#writereg">writereg</A>(<FONT COLOR="#298C52">unsigned</FONT> <FONT COLOR="#298C52">int</FONT> adr, u_char off, u_char data)
{
<A HREF="asuscom.c.shtml#byteout">byteout</A>(adr + off, data);
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">inline</FONT> <FONT COLOR="#298C52">void</FONT>
read_fifo(<FONT COLOR="#298C52">unsigned</FONT> <FONT COLOR="#298C52">int</FONT> adr, u_char * data, <FONT COLOR="#298C52">int</FONT> size)
{
insb(adr, data, size);
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
write_fifo(<FONT COLOR="#298C52">unsigned</FONT> <FONT COLOR="#298C52">int</FONT> adr, u_char * data, <FONT COLOR="#298C52">int</FONT> size)
{
outsb(adr, data, size);
}
<FONT COLOR=#0000FF>/* Interface functions */</FONT>
<FONT COLOR="#298C52">static</FONT> u_char
<A HREF="asuscom.c.shtml#ReadISAC">ReadISAC</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, u_char offset)
{
<FONT COLOR="#298C52">return</FONT> (<A HREF="asuscom.c.shtml#readreg">readreg</A>(cs-&gt;hw.avm.isac, offset));
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
<A HREF="asuscom.c.shtml#WriteISAC">WriteISAC</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, u_char offset, u_char value)
{
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.isac, offset, value);
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
<A HREF="asuscom.c.shtml#ReadISACfifo">ReadISACfifo</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, u_char * data, <FONT COLOR="#298C52">int</FONT> size)
{
read_fifo(cs-&gt;hw.avm.isacfifo, data, size);
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
<A HREF="asuscom.c.shtml#WriteISACfifo">WriteISACfifo</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, u_char * data, <FONT COLOR="#298C52">int</FONT> size)
{
write_fifo(cs-&gt;hw.avm.isacfifo, data, size);
}
<FONT COLOR="#298C52">static</FONT> u_char
<A HREF="asuscom.c.shtml#ReadHSCX">ReadHSCX</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, <FONT COLOR="#298C52">int</FONT> hscx, u_char offset)
{
<FONT COLOR="#298C52">return</FONT> (<A HREF="asuscom.c.shtml#readreg">readreg</A>(cs-&gt;hw.avm.hscx[hscx], offset));
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
<A HREF="asuscom.c.shtml#WriteHSCX">WriteHSCX</A>(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, <FONT COLOR="#298C52">int</FONT> hscx, u_char offset, u_char value)
{
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[hscx], offset, value);
}
<FONT COLOR=#0000FF>/*
* fast interrupt HSCX stuff goes here
*/</FONT>
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#READHSCX">READHSCX</A>(cs, nr, reg) <A HREF="asuscom.c.shtml#readreg">readreg</A>(cs-&gt;hw.avm.hscx[nr], reg)
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#WRITEHSCX">WRITEHSCX</A>(cs, nr, reg, data) <A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[nr], reg, data)
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#READHSCXFIFO">READHSCXFIFO</A>(cs, nr, ptr, cnt) read_fifo(cs-&gt;hw.avm.hscxfifo[nr], ptr, cnt)
<FONT COLOR=#A521F7>#define</FONT> <A HREF="asuscom.c.shtml#WRITEHSCXFIFO">WRITEHSCXFIFO</A>(cs, nr, ptr, cnt) write_fifo(cs-&gt;hw.avm.hscxfifo[nr], ptr, cnt)
<FONT COLOR=#A521F7>#include</FONT> <FONT COLOR="#FF0000">"hscx_irq.c"</FONT>
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
avm_a1_interrupt(<FONT COLOR="#298C52">int</FONT> intno, <FONT COLOR="#298C52">void</FONT> *dev_id, <FONT COLOR="#298C52">struct</FONT> pt_regs *regs)
{
<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs = dev_id;
u_char val, sval, stat = 0;
<FONT COLOR="#298C52">char</FONT> tmp[32];
<FONT COLOR="#298C52">if</FONT> (!cs) {
printk(KERN_WARNING <FONT COLOR="#FF0000">"AVM A1: Spurious interrupt!\n"</FONT>);
<FONT COLOR="#298C52">return</FONT>;
}
<FONT COLOR="#298C52">while</FONT> (((sval = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg)) &amp; 0xf) != 0x7) {
<FONT COLOR="#298C52">if</FONT> (!(sval &amp; AVM_A1_STAT_TIMER)) {
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x1E);
sval = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg);
} <FONT COLOR="#298C52">else</FONT> <FONT COLOR="#298C52">if</FONT> (cs-&gt;debug &amp; <A HREF="isdnl1.h.shtml#L1_DEB_INTSTAT">L1_DEB_INTSTAT</A>) {
sprintf(tmp, <FONT COLOR="#FF0000">"avm IntStatus %x"</FONT>, sval);
<A HREF="isdnl1.c.shtml#debugl1">debugl1</A>(cs, tmp);
}
<FONT COLOR="#298C52">if</FONT> (!(sval &amp; AVM_A1_STAT_HSCX)) {
val = <A HREF="asuscom.c.shtml#readreg">readreg</A>(cs-&gt;hw.avm.hscx[1], <A HREF="hscx.h.shtml#HSCX_ISTA">HSCX_ISTA</A>);
<FONT COLOR="#298C52">if</FONT> (val) {
<A HREF="hscx_irq.c.shtml#hscx_int_main">hscx_int_main</A>(cs, val);
stat |= 1;
}
}
<FONT COLOR="#298C52">if</FONT> (!(sval &amp; AVM_A1_STAT_ISAC)) {
val = <A HREF="asuscom.c.shtml#readreg">readreg</A>(cs-&gt;hw.avm.isac, <A HREF="isac.h.shtml#ISAC_ISTA">ISAC_ISTA</A>);
<FONT COLOR="#298C52">if</FONT> (val) {
<A HREF="isac.c.shtml#isac_interrupt">isac_interrupt</A>(cs, val);
stat |= 2;
}
}
}
<FONT COLOR="#298C52">if</FONT> (stat &amp; 1) {
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[0], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0xFF);
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[1], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0xFF);
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[0], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0x0);
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.hscx[1], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0x0);
}
<FONT COLOR="#298C52">if</FONT> (stat &amp; 2) {
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.isac, <A HREF="isac.h.shtml#ISAC_MASK">ISAC_MASK</A>, 0xFF);
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs-&gt;hw.avm.isac, <A HREF="isac.h.shtml#ISAC_MASK">ISAC_MASK</A>, 0x0);
}
}
<FONT COLOR="#298C52">inline</FONT> <FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">void</FONT>
release_ioregs(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, <FONT COLOR="#298C52">int</FONT> mask)
{
release_region(cs-&gt;hw.avm.cfg_reg, 8);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 1)
release_region(cs-&gt;hw.avm.isac + 32, 32);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 2)
release_region(cs-&gt;hw.avm.isacfifo, 1);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 4)
release_region(cs-&gt;hw.avm.hscx[0] + 32, 32);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 8)
release_region(cs-&gt;hw.avm.hscxfifo[0], 1);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 0x10)
release_region(cs-&gt;hw.avm.hscx[1] + 32, 32);
<FONT COLOR="#298C52">if</FONT> (mask &amp; 0x20)
release_region(cs-&gt;hw.avm.hscxfifo[1], 1);
}
<FONT COLOR="#298C52">static</FONT> <FONT COLOR="#298C52">int</FONT>
AVM_card_msg(<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs, <FONT COLOR="#298C52">int</FONT> mt, <FONT COLOR="#298C52">void</FONT> *arg)
{
<FONT COLOR="#298C52">switch</FONT> (mt) {
<FONT COLOR="#298C52">case</FONT> <A HREF="hisax.h.shtml#CARD_RESET">CARD_RESET</A>:
<FONT COLOR="#298C52">return</FONT>(0);
<FONT COLOR="#298C52">case</FONT> <A HREF="hisax.h.shtml#CARD_RELEASE">CARD_RELEASE</A>:
release_ioregs(cs, 0x3f);
<FONT COLOR="#298C52">return</FONT>(0);
<FONT COLOR="#298C52">case</FONT> <A HREF="hisax.h.shtml#CARD_SETIRQ">CARD_SETIRQ</A>:
<FONT COLOR="#298C52">return</FONT>(request_irq(cs-&gt;irq, &amp;avm_a1_interrupt,
<A HREF="hisax.h.shtml#I4L_IRQ_FLAG">I4L_IRQ_FLAG</A>, <FONT COLOR="#FF0000">"HiSax"</FONT>, cs));
<FONT COLOR="#298C52">case</FONT> <A HREF="hisax.h.shtml#CARD_INIT">CARD_INIT</A>:
inithscxisac(cs, 1);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x16);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x1E);
inithscxisac(cs, 2);
<FONT COLOR="#298C52">return</FONT>(0);
<FONT COLOR="#298C52">case</FONT> <A HREF="hisax.h.shtml#CARD_TEST">CARD_TEST</A>:
<FONT COLOR="#298C52">return</FONT>(0);
}
<FONT COLOR="#298C52">return</FONT>(0);
}
<A HREF="asuscom.c.shtml#__initfunc">__initfunc</A>(<FONT COLOR="#298C52">int</FONT>
setup_avm_a1(<FONT COLOR="#298C52">struct</FONT> IsdnCard *card))
{
u_char val;
<FONT COLOR="#298C52">struct</FONT> IsdnCardState *cs = card-&gt;cs;
<FONT COLOR="#298C52">long</FONT> flags;
<FONT COLOR="#298C52">char</FONT> tmp[64];
strcpy(tmp, avm_revision);
printk(KERN_INFO <FONT COLOR="#FF0000">"HiSax: AVM driver Rev. %s\n"</FONT>, HiSax_getrev(tmp));
<FONT COLOR="#298C52">if</FONT> (cs-&gt;typ != <A HREF="hisax.h.shtml#ISDN_CTYPE_A1">ISDN_CTYPE_A1</A>)
<FONT COLOR="#298C52">return</FONT> (0);
cs-&gt;hw.avm.cfg_reg = card-&gt;para[1] + 0x1800;
cs-&gt;hw.avm.isac = card-&gt;para[1] + 0x1400 - 0x20;
cs-&gt;hw.avm.hscx[0] = card-&gt;para[1] + 0x400 - 0x20;
cs-&gt;hw.avm.hscx[1] = card-&gt;para[1] + 0xc00 - 0x20;
cs-&gt;hw.avm.isacfifo = card-&gt;para[1] + 0x1000;
cs-&gt;hw.avm.hscxfifo[0] = card-&gt;para[1];
cs-&gt;hw.avm.hscxfifo[1] = card-&gt;para[1] + 0x800;
cs-&gt;irq = card-&gt;para[0];
<FONT COLOR="#298C52">if</FONT> (check_region((cs-&gt;hw.avm.cfg_reg), 8)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s config port %x-%x already in use\n"</FONT>,
CardType[card-&gt;typ],
cs-&gt;hw.avm.cfg_reg,
cs-&gt;hw.avm.cfg_reg + 8);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.cfg_reg, 8, <FONT COLOR="#FF0000">"avm cfg"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region((cs-&gt;hw.avm.isac + 32), 32)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s isac ports %x-%x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.isac + 32,
cs-&gt;hw.avm.isac + 64);
release_ioregs(cs, 0);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.isac + 32, 32, <FONT COLOR="#FF0000">"HiSax isac"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region((cs-&gt;hw.avm.isacfifo), 1)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s isac fifo port %x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.isacfifo);
release_ioregs(cs, 1);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.isacfifo, 1, <FONT COLOR="#FF0000">"HiSax isac fifo"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region((cs-&gt;hw.avm.hscx[0]) + 32, 32)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s hscx A ports %x-%x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.hscx[0] + 32,
cs-&gt;hw.avm.hscx[0] + 64);
release_ioregs(cs, 3);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.hscx[0] + 32, 32, <FONT COLOR="#FF0000">"HiSax hscx A"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region(cs-&gt;hw.avm.hscxfifo[0], 1)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s hscx A fifo port %x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.hscxfifo[0]);
release_ioregs(cs, 7);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.hscxfifo[0], 1, <FONT COLOR="#FF0000">"HiSax hscx A fifo"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region(cs-&gt;hw.avm.hscx[1] + 32, 32)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s hscx B ports %x-%x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.hscx[1] + 32,
cs-&gt;hw.avm.hscx[1] + 64);
release_ioregs(cs, 0xf);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.hscx[1] + 32, 32, <FONT COLOR="#FF0000">"HiSax hscx B"</FONT>);
}
<FONT COLOR="#298C52">if</FONT> (check_region(cs-&gt;hw.avm.hscxfifo[1], 1)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"HiSax: %s hscx B fifo port %x already in use\n"</FONT>,
CardType[cs-&gt;typ],
cs-&gt;hw.avm.hscxfifo[1]);
release_ioregs(cs, 0x1f);
<FONT COLOR="#298C52">return</FONT> (0);
} <FONT COLOR="#298C52">else</FONT> {
request_region(cs-&gt;hw.avm.hscxfifo[1], 1, <FONT COLOR="#FF0000">"HiSax hscx B fifo"</FONT>);
}
save_flags(flags);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x0);
sti();
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x1);
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x0);
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
val = cs-&gt;irq;
<FONT COLOR="#298C52">if</FONT> (val == 9)
val = 2;
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg + 1, val);
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs-&gt;hw.avm.cfg_reg, 0x0);
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
restore_flags(flags);
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg);
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
cs-&gt;hw.avm.cfg_reg, val);
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg + 3);
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
cs-&gt;hw.avm.cfg_reg + 3, val);
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg + 2);
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
cs-&gt;hw.avm.cfg_reg + 2, val);
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs-&gt;hw.avm.cfg_reg);
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
cs-&gt;hw.avm.cfg_reg, val);
printk(KERN_INFO
<FONT COLOR="#FF0000">"HiSax: %s config irq:%d cfg:0x%X\n"</FONT>,
CardType[cs-&gt;typ], cs-&gt;irq,
cs-&gt;hw.avm.cfg_reg);
printk(KERN_INFO
<FONT COLOR="#FF0000">"HiSax: isac:0x%X/0x%X\n"</FONT>,
cs-&gt;hw.avm.isac + 32, cs-&gt;hw.avm.isacfifo);
printk(KERN_INFO
<FONT COLOR="#FF0000">"HiSax: hscx A:0x%X/0x%X hscx B:0x%X/0x%X\n"</FONT>,
cs-&gt;hw.avm.hscx[0] + 32, cs-&gt;hw.avm.hscxfifo[0],
cs-&gt;hw.avm.hscx[1] + 32, cs-&gt;hw.avm.hscxfifo[1]);
cs-&gt;readisac = &amp;<A HREF="asuscom.c.shtml#ReadISAC">ReadISAC</A>;
cs-&gt;writeisac = &amp;<A HREF="asuscom.c.shtml#WriteISAC">WriteISAC</A>;
cs-&gt;readisacfifo = &amp;<A HREF="asuscom.c.shtml#ReadISACfifo">ReadISACfifo</A>;
cs-&gt;writeisacfifo = &amp;<A HREF="asuscom.c.shtml#WriteISACfifo">WriteISACfifo</A>;
cs-&gt;BC_Read_Reg = &amp;<A HREF="asuscom.c.shtml#ReadHSCX">ReadHSCX</A>;
cs-&gt;BC_Write_Reg = &amp;<A HREF="asuscom.c.shtml#WriteHSCX">WriteHSCX</A>;
cs-&gt;BC_Send_Data = &amp;<A HREF="hscx_irq.c.shtml#hscx_fill_fifo">hscx_fill_fifo</A>;
cs-&gt;cardmsg = &amp;AVM_card_msg;
<A HREF="isac.c.shtml#ISACVersion">ISACVersion</A>(cs, <FONT COLOR="#FF0000">"AVM A1:"</FONT>);
<FONT COLOR="#298C52">if</FONT> (HscxVersion(cs, <FONT COLOR="#FF0000">"AVM A1:"</FONT>)) {
printk(KERN_WARNING
<FONT COLOR="#FF0000">"AVM A1: wrong HSCX versions check IO address\n"</FONT>);
release_ioregs(cs, 0x3f);
<FONT COLOR="#298C52">return</FONT> (0);
}
<FONT COLOR="#298C52">return</FONT> (1);
}
</BODY>
</HTML>