409 lines
19 KiB
Plaintext
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->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->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->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->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->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->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->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->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->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->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->hw.avm.cfg_reg)) & 0xf) != 0x7) {
|
|
<FONT COLOR="#298C52">if</FONT> (!(sval & AVM_A1_STAT_TIMER)) {
|
|
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs->hw.avm.cfg_reg, 0x1E);
|
|
sval = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs->hw.avm.cfg_reg);
|
|
} <FONT COLOR="#298C52">else</FONT> <FONT COLOR="#298C52">if</FONT> (cs->debug & <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 & AVM_A1_STAT_HSCX)) {
|
|
val = <A HREF="asuscom.c.shtml#readreg">readreg</A>(cs->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 & AVM_A1_STAT_ISAC)) {
|
|
val = <A HREF="asuscom.c.shtml#readreg">readreg</A>(cs->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 & 1) {
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->hw.avm.hscx[0], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0xFF);
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->hw.avm.hscx[1], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0xFF);
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->hw.avm.hscx[0], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0x0);
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->hw.avm.hscx[1], <A HREF="hscx.h.shtml#HSCX_MASK">HSCX_MASK</A>, 0x0);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (stat & 2) {
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->hw.avm.isac, <A HREF="isac.h.shtml#ISAC_MASK">ISAC_MASK</A>, 0xFF);
|
|
<A HREF="asuscom.c.shtml#writereg">writereg</A>(cs->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->hw.avm.cfg_reg, 8);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 1)
|
|
release_region(cs->hw.avm.isac + 32, 32);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 2)
|
|
release_region(cs->hw.avm.isacfifo, 1);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 4)
|
|
release_region(cs->hw.avm.hscx[0] + 32, 32);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 8)
|
|
release_region(cs->hw.avm.hscxfifo[0], 1);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 0x10)
|
|
release_region(cs->hw.avm.hscx[1] + 32, 32);
|
|
<FONT COLOR="#298C52">if</FONT> (mask & 0x20)
|
|
release_region(cs->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->irq, &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->hw.avm.cfg_reg, 0x16);
|
|
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs->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->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->typ != <A HREF="hisax.h.shtml#ISDN_CTYPE_A1">ISDN_CTYPE_A1</A>)
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
|
|
cs->hw.avm.cfg_reg = card->para[1] + 0x1800;
|
|
cs->hw.avm.isac = card->para[1] + 0x1400 - 0x20;
|
|
cs->hw.avm.hscx[0] = card->para[1] + 0x400 - 0x20;
|
|
cs->hw.avm.hscx[1] = card->para[1] + 0xc00 - 0x20;
|
|
cs->hw.avm.isacfifo = card->para[1] + 0x1000;
|
|
cs->hw.avm.hscxfifo[0] = card->para[1];
|
|
cs->hw.avm.hscxfifo[1] = card->para[1] + 0x800;
|
|
cs->irq = card->para[0];
|
|
<FONT COLOR="#298C52">if</FONT> (check_region((cs->hw.avm.cfg_reg), 8)) {
|
|
printk(KERN_WARNING
|
|
<FONT COLOR="#FF0000">"HiSax: %s config port %x-%x already in use\n"</FONT>,
|
|
CardType[card->typ],
|
|
cs->hw.avm.cfg_reg,
|
|
cs->hw.avm.cfg_reg + 8);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.cfg_reg, 8, <FONT COLOR="#FF0000">"avm cfg"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region((cs->hw.avm.isac + 32), 32)) {
|
|
printk(KERN_WARNING
|
|
<FONT COLOR="#FF0000">"HiSax: %s isac ports %x-%x already in use\n"</FONT>,
|
|
CardType[cs->typ],
|
|
cs->hw.avm.isac + 32,
|
|
cs->hw.avm.isac + 64);
|
|
release_ioregs(cs, 0);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.isac + 32, 32, <FONT COLOR="#FF0000">"HiSax isac"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region((cs->hw.avm.isacfifo), 1)) {
|
|
printk(KERN_WARNING
|
|
<FONT COLOR="#FF0000">"HiSax: %s isac fifo port %x already in use\n"</FONT>,
|
|
CardType[cs->typ],
|
|
cs->hw.avm.isacfifo);
|
|
release_ioregs(cs, 1);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.isacfifo, 1, <FONT COLOR="#FF0000">"HiSax isac fifo"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region((cs->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->typ],
|
|
cs->hw.avm.hscx[0] + 32,
|
|
cs->hw.avm.hscx[0] + 64);
|
|
release_ioregs(cs, 3);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.hscx[0] + 32, 32, <FONT COLOR="#FF0000">"HiSax hscx A"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region(cs->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->typ],
|
|
cs->hw.avm.hscxfifo[0]);
|
|
release_ioregs(cs, 7);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.hscxfifo[0], 1, <FONT COLOR="#FF0000">"HiSax hscx A fifo"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region(cs->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->typ],
|
|
cs->hw.avm.hscx[1] + 32,
|
|
cs->hw.avm.hscx[1] + 64);
|
|
release_ioregs(cs, 0xf);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->hw.avm.hscx[1] + 32, 32, <FONT COLOR="#FF0000">"HiSax hscx B"</FONT>);
|
|
}
|
|
<FONT COLOR="#298C52">if</FONT> (check_region(cs->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->typ],
|
|
cs->hw.avm.hscxfifo[1]);
|
|
release_ioregs(cs, 0x1f);
|
|
<FONT COLOR="#298C52">return</FONT> (0);
|
|
} <FONT COLOR="#298C52">else</FONT> {
|
|
request_region(cs->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->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->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->hw.avm.cfg_reg, 0x0);
|
|
<A HREF="hisax.h.shtml#HZDELAY">HZDELAY</A>(HZ / 5 + 1);
|
|
val = cs->irq;
|
|
<FONT COLOR="#298C52">if</FONT> (val == 9)
|
|
val = 2;
|
|
<A HREF="asuscom.c.shtml#byteout">byteout</A>(cs->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->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->hw.avm.cfg_reg);
|
|
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
|
|
cs->hw.avm.cfg_reg, val);
|
|
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs->hw.avm.cfg_reg + 3);
|
|
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
|
|
cs->hw.avm.cfg_reg + 3, val);
|
|
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs->hw.avm.cfg_reg + 2);
|
|
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
|
|
cs->hw.avm.cfg_reg + 2, val);
|
|
val = <A HREF="asuscom.c.shtml#bytein">bytein</A>(cs->hw.avm.cfg_reg);
|
|
printk(KERN_INFO <FONT COLOR="#FF0000">"AVM A1: Byte at %x is %x\n"</FONT>,
|
|
cs->hw.avm.cfg_reg, val);
|
|
|
|
printk(KERN_INFO
|
|
<FONT COLOR="#FF0000">"HiSax: %s config irq:%d cfg:0x%X\n"</FONT>,
|
|
CardType[cs->typ], cs->irq,
|
|
cs->hw.avm.cfg_reg);
|
|
printk(KERN_INFO
|
|
<FONT COLOR="#FF0000">"HiSax: isac:0x%X/0x%X\n"</FONT>,
|
|
cs->hw.avm.isac + 32, cs->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->hw.avm.hscx[0] + 32, cs->hw.avm.hscxfifo[0],
|
|
cs->hw.avm.hscx[1] + 32, cs->hw.avm.hscxfifo[1]);
|
|
|
|
cs->readisac = &<A HREF="asuscom.c.shtml#ReadISAC">ReadISAC</A>;
|
|
cs->writeisac = &<A HREF="asuscom.c.shtml#WriteISAC">WriteISAC</A>;
|
|
cs->readisacfifo = &<A HREF="asuscom.c.shtml#ReadISACfifo">ReadISACfifo</A>;
|
|
cs->writeisacfifo = &<A HREF="asuscom.c.shtml#WriteISACfifo">WriteISACfifo</A>;
|
|
cs->BC_Read_Reg = &<A HREF="asuscom.c.shtml#ReadHSCX">ReadHSCX</A>;
|
|
cs->BC_Write_Reg = &<A HREF="asuscom.c.shtml#WriteHSCX">WriteHSCX</A>;
|
|
cs->BC_Send_Data = &<A HREF="hscx_irq.c.shtml#hscx_fill_fifo">hscx_fill_fifo</A>;
|
|
cs->cardmsg = &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>
|