Updates added to support the ISIL mini-PCI reference design. The PCI part
doesn't work yet, but the changes impact the PCMCIA and PLX parts as well. I'm checking the changes in because I want the changes that affect PCMCIA to get wide testing as soon as possible.origin
parent
110197272f
commit
6fb8eb605e
12
Configure
12
Configure
|
@ -473,13 +473,19 @@ $ECHO ""
|
|||
#=======================================================================
|
||||
# Should we build for PLX??? based PCI adapters?
|
||||
|
||||
ask_bool "Build PLX???? based PCI (_plx) adapter drivers?" WLAN_PLX
|
||||
ask_bool "Build Prism2 PLX???? based PCI (_plx) adapter drivers?" PRISM2_PLX
|
||||
|
||||
$ECHO ""
|
||||
#=======================================================================
|
||||
# Should we build for PLX??? based PCI adapters?
|
||||
# Should we build for PCMCIA Card Services?
|
||||
|
||||
ask_bool "Build PCMCIA Card Services (_cs) drivers?" WLAN_PCMCIA
|
||||
ask_bool "Build Prism2 PCMCIA Card Services (_cs) drivers?" PRISM2_PCMCIA
|
||||
|
||||
$ECHO ""
|
||||
#=======================================================================
|
||||
# Should we build for Prism2 native PCI?
|
||||
|
||||
ask_bool "Build Prism2 PCI (_pci) drivers?" PRISM2_PCI
|
||||
|
||||
$ECHO ""
|
||||
#=======================================================================
|
||||
|
|
|
@ -2,8 +2,6 @@ WLAN_VERSION=0
|
|||
WLAN_PATCHLEVEL=1
|
||||
WLAN_SUBLEVEL=8
|
||||
WLAN_EXTRAVERSION=-pre12
|
||||
WLAN_PLX=n
|
||||
WLAN_PCMCIA=y
|
||||
LINUX_SRC=/usr/src/linux
|
||||
WLAN_TARGET_ARCH=
|
||||
PCMCIA_SRC=
|
||||
|
@ -18,3 +16,6 @@ WLAN_DEBUG=n
|
|||
CROSS_COMPILE_ENABLED=n
|
||||
CROSS_COMPILE=
|
||||
HOST_COMPILE=
|
||||
PRISM2_PLX=y
|
||||
PRISM2_PCMCIA=y
|
||||
PRISM2_PCI=y
|
||||
|
|
|
@ -94,6 +94,13 @@
|
|||
#define WLAN_ISA 2
|
||||
#define WLAN_PCI 3
|
||||
#define WLAN_USB 4
|
||||
#define WLAN_PLX 5
|
||||
|
||||
/* Note: the PLX HOSTIF above refers to some vendors implementations for */
|
||||
/* PCI. It's a PLX chip that is a PCI to PCMCIA adapter, but it */
|
||||
/* isn't a real PCMCIA host interface adapter providing all the */
|
||||
/* card&socket services. */
|
||||
|
||||
|
||||
/* LinuxPPC users! uncomment the following line to build for LinuxPPC */
|
||||
/* a header file change has created a small problem that will be fixed */
|
||||
|
|
|
@ -80,14 +80,20 @@ endif
|
|||
# Source and obj and target definitions
|
||||
CS_OBJ_DIR=obj_cs
|
||||
PLX_OBJ_DIR=obj_plx
|
||||
PCI_OBJ_DIR=obj_pci
|
||||
|
||||
SRC=prism2sta.c prism2mgmt.c prism2mib.c hfa384x.c
|
||||
ifeq ($(WLAN_PLX), y)
|
||||
ifeq ($(PRISM2_PLX), y)
|
||||
SRC+=pci-scan.c
|
||||
endif
|
||||
|
||||
ifeq ($(PRISM2_PCI), y)
|
||||
SRC+=pci-scan.c
|
||||
endif
|
||||
|
||||
CS_MODULE=prism2_cs.o
|
||||
PLX_MODULE=prism2_plx.o
|
||||
PCI_MODULE=prism2_pci.o
|
||||
|
||||
CS_OBJ= $(CS_OBJ_DIR)/prism2sta.o \
|
||||
$(CS_OBJ_DIR)/prism2mgmt.o \
|
||||
|
@ -100,15 +106,25 @@ PLX_OBJ= $(PLX_OBJ_DIR)/prism2sta.o \
|
|||
$(PLX_OBJ_DIR)/pci-scan.o \
|
||||
$(PLX_OBJ_DIR)/hfa384x.o
|
||||
|
||||
PCI_OBJ= $(PCI_OBJ_DIR)/prism2sta.o \
|
||||
$(PCI_OBJ_DIR)/prism2mgmt.o \
|
||||
$(PCI_OBJ_DIR)/prism2mib.o \
|
||||
$(PCI_OBJ_DIR)/pci-scan.o \
|
||||
$(PCI_OBJ_DIR)/hfa384x.o
|
||||
|
||||
# List of modules to build
|
||||
MODULES=
|
||||
ifeq ($(WLAN_PCMCIA), y)
|
||||
ifeq ($(PRISM2_PCMCIA), y)
|
||||
MODULES+=$(CS_MODULE)
|
||||
endif
|
||||
ifeq ($(WLAN_PLX), y)
|
||||
ifeq ($(PRISM2_PLX), y)
|
||||
MODULES+=$(PLX_MODULE)
|
||||
endif
|
||||
|
||||
ifeq ($(PRISM2_PCI), y)
|
||||
MODULES+=$(PCI_MODULE)
|
||||
endif
|
||||
|
||||
# Implicit rules to handle the separate obj dirs
|
||||
$(OBJ_DIR)/%.o : ../shared/%.c
|
||||
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
|
||||
|
@ -124,6 +140,10 @@ $(PLX_OBJ_DIR)/%.o : %.c
|
|||
$(CC) -c $(CFLAGS) $(CPPFLAGS) \
|
||||
-DWLAN_HOSTIF=WLAN_PLX $< -o $@
|
||||
|
||||
$(PCI_OBJ_DIR)/%.o : %.c
|
||||
$(CC) -c $(CFLAGS) $(CPPFLAGS) \
|
||||
-DWLAN_HOSTIF=WLAN_PCI $< -o $@
|
||||
|
||||
# Compiler Options
|
||||
ifndef CFLAGS
|
||||
CFLAGS = -O2 -Wall -Wstrict-prototypes -fomit-frame-pointer -pipe
|
||||
|
@ -157,6 +177,7 @@ all : .depend dirs $(MODULES)
|
|||
dirs :
|
||||
mkdir -p $(CS_OBJ_DIR)
|
||||
mkdir -p $(PLX_OBJ_DIR)
|
||||
mkdir -p $(PCI_OBJ_DIR)
|
||||
|
||||
$(CS_MODULE) : $(CS_OBJ)
|
||||
$(LD) -r -o $@ $(CS_OBJ)
|
||||
|
@ -166,12 +187,19 @@ $(PLX_MODULE) : $(PLX_OBJ)
|
|||
$(LD) -r -o $@ $(PLX_OBJ)
|
||||
chmod -x $@
|
||||
|
||||
$(PCI_MODULE) : $(PCI_OBJ)
|
||||
$(LD) -r -o $@ $(PCI_OBJ)
|
||||
chmod -x $@
|
||||
|
||||
install : $(MODULES)
|
||||
ifeq ($(PRISM2_PCMCIA), y)
|
||||
mkdir -p $(TARGET_MODDIR)/pcmcia
|
||||
ifeq ($(WLAN_PCMCIA), y)
|
||||
cp -f $(CS_MODULE) $(TARGET_MODDIR)/pcmcia
|
||||
endif
|
||||
ifeq ($(WLAN_PLX), y)
|
||||
ifeq ($(PRISM2_PCI), y)
|
||||
cp -f $(PCI_MODULE) $(TARGET_MODDIR)/net
|
||||
endif
|
||||
ifeq ($(PRISM2_PLX), y)
|
||||
cp -f $(PLX_MODULE) $(TARGET_MODDIR)/net
|
||||
endif
|
||||
|
||||
|
@ -180,16 +208,20 @@ clean:
|
|||
rm -f core core.* *.o .*.o *.s *.a .depend tmp_make *~ tags
|
||||
rm -fr $(CS_OBJ_DIR)
|
||||
rm -fr $(PLX_OBJ_DIR)
|
||||
rm -fr $(PCI_OBJ_DIR)
|
||||
rm -fr $(MODULES)
|
||||
|
||||
# This probably isn't the best way to handle the dependencies, but it works.
|
||||
DEPLIST=
|
||||
ifeq ($(WLAN_PCMCIA), y)
|
||||
ifeq ($(PRISM2_PCMCIA), y)
|
||||
DEPLIST+=.depend.cs
|
||||
endif
|
||||
ifeq ($(WLAN_PLX), y)
|
||||
ifeq ($(PRISM2_PLX), y)
|
||||
DEPLIST+=.depend.plx
|
||||
endif
|
||||
ifeq ($(PRISM2_PCI), y)
|
||||
DEPLIST+=.depend.pci
|
||||
endif
|
||||
|
||||
dep .depend: $(DEPLIST)
|
||||
cat $(DEPLIST) > .depend
|
||||
|
@ -202,11 +234,19 @@ dep .depend: $(DEPLIST)
|
|||
>> $@ ; \
|
||||
done
|
||||
|
||||
.depend.pci: $(DEP_SRC) ../../../config.mk
|
||||
rm -f $@
|
||||
for i in $(DEP_SRC); do \
|
||||
(/bin/echo -n $(PCI_OBJ_DIR)/ ; \
|
||||
$(CPP) -DWLAN_HOSTIF=WLAN_PCI -M $(CPPFLAGS) $$i ) \
|
||||
>> $@ ; \
|
||||
done
|
||||
|
||||
.depend.cs: $(DEP_SRC) ../../../config.mk
|
||||
rm -f $@
|
||||
for i in $(DEP_SRC); do \
|
||||
(/bin/echo -n $(CS_OBJ_DIR)/ ; \
|
||||
$(CPP) -DWLAN_HOSTIF=WLAN_PCMCIA -M $(CPPFLAGS) $$i ) \
|
||||
$(CPP) -DWLAN_HOSTIF=PRISM2_PCMCIA -M $(CPPFLAGS) $$i ) \
|
||||
>> $@ ; \
|
||||
done
|
||||
|
||||
|
|
|
@ -150,7 +150,8 @@ extern int prism2_debug;
|
|||
* Arguments:
|
||||
* hw device structure
|
||||
* irq device irq number
|
||||
* iobase base address for register access
|
||||
* iobase i/o base address for register access
|
||||
* membase memory base address for register access
|
||||
*
|
||||
* Returns:
|
||||
* nothing
|
||||
|
@ -160,12 +161,13 @@ extern int prism2_debug;
|
|||
* Call context:
|
||||
* process thread
|
||||
----------------------------------------------------------------*/
|
||||
void hfa384x_inithw( hfa384x_t *hw, UINT irq, UINT iobase)
|
||||
void hfa384x_inithw( hfa384x_t *hw, UINT irq, UINT iobase, UINT membase)
|
||||
{
|
||||
DBFENTER;
|
||||
memset(hw, 0, sizeof(hfa384x_t));
|
||||
hw->irq = irq;
|
||||
hw->iobase = iobase;
|
||||
hw->membase = membase;
|
||||
hw->bap = HFA384x_BAP_PROC;
|
||||
spin_lock_init(&(hw->cmdlock));
|
||||
spin_lock_init(&(hw->baplock[0]));
|
||||
|
@ -1480,31 +1482,31 @@ int hfa384x_cmd_aux_enable(hfa384x_t *hw)
|
|||
spin_lock_irqsave( &(hw->cmdlock), flags);
|
||||
/* wait for cmd the busy bit to clear */
|
||||
timeout = jiffies + 1*HZ;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
while ( HFA384x_CMD_ISBUSY(reg) &&
|
||||
time_before( jiffies, timeout) ) {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
}
|
||||
if (!HFA384x_CMD_ISBUSY(reg)) {
|
||||
/* busy bit clear, it's OK to write to ParamX regs */
|
||||
wlan_outw_cpu_to_le16(HFA384x_AUXPW0,
|
||||
HFA384x_PARAM0(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(HFA384x_AUXPW1,
|
||||
HFA384x_PARAM1(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(HFA384x_AUXPW2,
|
||||
HFA384x_PARAM2(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_AUXPW0,
|
||||
HFA384x_PARAM0);
|
||||
hfa384x_setreg(hw, HFA384x_AUXPW1,
|
||||
HFA384x_PARAM1);
|
||||
hfa384x_setreg(hw, HFA384x_AUXPW2,
|
||||
HFA384x_PARAM2);
|
||||
|
||||
/* Set the aux enable in the Control register */
|
||||
wlan_outw_cpu_to_le16(HFA384x_CONTROL_AUX_DOENABLE,
|
||||
HFA384x_CONTROL(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_CONTROL_AUX_DOENABLE,
|
||||
HFA384x_CONTROL);
|
||||
|
||||
/* Now wait for completion */
|
||||
timeout = jiffies + 1*HZ;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CONTROL(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CONTROL);
|
||||
while ( ((reg & (BIT14|BIT15)) != HFA384x_CONTROL_AUX_ISENABLED) &&
|
||||
time_before(jiffies,timeout) ){
|
||||
udelay(10);
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CONTROL(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CONTROL);
|
||||
}
|
||||
if ( (reg & (BIT14|BIT15)) == HFA384x_CONTROL_AUX_ISENABLED ) {
|
||||
result = 0;
|
||||
|
@ -1549,19 +1551,19 @@ int hfa384x_cmd_aux_disable(hfa384x_t *hw)
|
|||
if (hw->auxen) return 0;
|
||||
|
||||
/* Clear the aux enable in the Control register */
|
||||
wlan_outw(0, HFA384x_PARAM0(hw->iobase));
|
||||
wlan_outw(0, HFA384x_PARAM1(hw->iobase));
|
||||
wlan_outw(0, HFA384x_PARAM2(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(HFA384x_CONTROL_AUX_DODISABLE,
|
||||
HFA384x_CONTROL(hw->iobase));
|
||||
hfa384x_setreg(hw, 0, HFA384x_PARAM0);
|
||||
hfa384x_setreg(hw, 0, HFA384x_PARAM1);
|
||||
hfa384x_setreg(hw, 0, HFA384x_PARAM2);
|
||||
hfa384x_setreg(hw, HFA384x_CONTROL_AUX_DODISABLE,
|
||||
HFA384x_CONTROL);
|
||||
|
||||
/* Now wait for completion */
|
||||
timeout = jiffies + 1*HZ;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CONTROL(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CONTROL);
|
||||
while ( ((reg & (BIT14|BIT15)) != HFA384x_CONTROL_AUX_ISDISABLED) &&
|
||||
time_before(jiffies,timeout) ){
|
||||
udelay(10);
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CONTROL(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CONTROL);
|
||||
}
|
||||
if ((reg & (BIT14|BIT15)) == HFA384x_CONTROL_AUX_ISDISABLED ) {
|
||||
result = 0;
|
||||
|
@ -1819,26 +1821,21 @@ int hfa384x_copy_from_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
(len > HFA384x_BAP_DATALEN_MAX) ){
|
||||
result = -EINVAL;
|
||||
} else {
|
||||
selectreg = (bap == 1) ?
|
||||
HFA384x_SELECT1(hw->iobase) :
|
||||
HFA384x_SELECT0(hw->iobase) ;
|
||||
offsetreg = (bap == 1) ?
|
||||
HFA384x_OFFSET1(hw->iobase) :
|
||||
HFA384x_OFFSET0(hw->iobase) ;
|
||||
datareg = (bap == 1) ?
|
||||
HFA384x_DATA1(hw->iobase) :
|
||||
HFA384x_DATA0(hw->iobase) ;
|
||||
selectreg = (bap == 1) ? HFA384x_SELECT1 : HFA384x_SELECT0 ;
|
||||
offsetreg = (bap == 1) ? HFA384x_OFFSET1 : HFA384x_OFFSET0 ;
|
||||
datareg = (bap == 1) ? HFA384x_DATA1 : HFA384x_DATA0 ;
|
||||
|
||||
/* Obtain lock */
|
||||
spin_lock_irqsave( &(hw->baplock[bap]), flags);
|
||||
|
||||
/* Write id to select reg */
|
||||
wlan_outw_cpu_to_le16(id, selectreg);
|
||||
hfa384x_setreg(hw, id, selectreg);
|
||||
/* Write offset to offset reg */
|
||||
wlan_outw_cpu_to_le16(offset, offsetreg);
|
||||
hfa384x_setreg(hw, offset, offsetreg);
|
||||
/* Wait for offset[busy] to clear (see BAP_TIMEOUT) */
|
||||
i = 0;
|
||||
do {
|
||||
reg = wlan_inw_le16_to_cpu(offsetreg);
|
||||
reg = hfa384x_getreg(hw, offsetreg);
|
||||
if ( i > 0 ) udelay(2);
|
||||
i++;
|
||||
} while ( i < BAP_TIMEOUT && HFA384x_OFFSET_ISBUSY(reg));
|
||||
|
@ -1851,11 +1848,12 @@ int hfa384x_copy_from_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
} else {
|
||||
/* Read even(len) buf contents from data reg */
|
||||
for ( i = 0; i < (len & 0xfffe); i+=2 ) {
|
||||
*(UINT16*)(&(d[i])) = wlan_inw(datareg);
|
||||
*(UINT16*)(&(d[i])) =
|
||||
hfa384x_getreg_noswap(hw, datareg);
|
||||
}
|
||||
/* If len odd, handle last byte */
|
||||
if ( len % 2 ){
|
||||
reg = wlan_inw(datareg);
|
||||
reg = hfa384x_getreg_noswap(hw, datareg);
|
||||
d[len-1] = ((UINT8*)(®))[0];
|
||||
}
|
||||
}
|
||||
|
@ -1922,27 +1920,21 @@ int hfa384x_copy_to_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
(len > HFA384x_BAP_DATALEN_MAX) ){
|
||||
result = -EINVAL;
|
||||
} else {
|
||||
selectreg = (bap == 1) ?
|
||||
HFA384x_SELECT1(hw->iobase) :
|
||||
HFA384x_SELECT0(hw->iobase) ;
|
||||
offsetreg = (bap == 1) ?
|
||||
HFA384x_OFFSET1(hw->iobase) :
|
||||
HFA384x_OFFSET0(hw->iobase) ;
|
||||
datareg = (bap == 1) ?
|
||||
HFA384x_DATA1(hw->iobase) :
|
||||
HFA384x_DATA0(hw->iobase) ;
|
||||
selectreg = (bap == 1) ? HFA384x_SELECT1 : HFA384x_SELECT0;
|
||||
offsetreg = (bap == 1) ? HFA384x_OFFSET1 : HFA384x_OFFSET0;
|
||||
datareg = (bap == 1) ? HFA384x_DATA1 : HFA384x_DATA0;
|
||||
/* Obtain lock */
|
||||
spin_lock_irqsave( &(hw->baplock[bap]), flags);
|
||||
|
||||
/* Write id to select reg */
|
||||
wlan_outw_cpu_to_le16(id, selectreg);
|
||||
hfa384x_setreg(hw, id, selectreg);
|
||||
udelay(10);
|
||||
/* Write offset to offset reg */
|
||||
wlan_outw_cpu_to_le16(offset, offsetreg);
|
||||
hfa384x_setreg(hw, offset, offsetreg);
|
||||
/* Wait for offset[busy] to clear (see BAP_TIMEOUT) */
|
||||
i = 0;
|
||||
do {
|
||||
reg = wlan_inw_le16_to_cpu(offsetreg);
|
||||
reg = hfa384x_getreg(hw, offsetreg);
|
||||
if ( i > 0 ) udelay(2);
|
||||
i++;
|
||||
} while ( i < BAP_TIMEOUT && HFA384x_OFFSET_ISBUSY(reg));
|
||||
|
@ -1955,16 +1947,18 @@ int hfa384x_copy_to_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
} else {
|
||||
/* Write even(len) buf contents to data reg */
|
||||
for ( i = 0; i < (len & 0xfffe); i+=2 ) {
|
||||
wlan_outw( *(UINT16*)(&(d[i])), datareg);
|
||||
hfa384x_setreg_noswap(hw,
|
||||
*(UINT16*)(&(d[i])), datareg);
|
||||
}
|
||||
/* If len odd, handle last byte */
|
||||
if ( len % 2 ){
|
||||
savereg = wlan_inw(datareg);
|
||||
wlan_outw_cpu_to_le16((offset+(len&0xfffe)), offsetreg);
|
||||
savereg = hfa384x_getreg_noswap(hw, datareg);
|
||||
hfa384x_setreg_noswap(hw,
|
||||
(offset+(len&0xfffe)), offsetreg);
|
||||
/* Wait for offset[busy] to clear (see BAP_TIMEOUT) */
|
||||
i = 0;
|
||||
do {
|
||||
reg = wlan_inw_le16_to_cpu(offsetreg);
|
||||
reg = hfa384x_getreg(hw, offsetreg);
|
||||
if ( i > 0 ) udelay(2);
|
||||
i++;
|
||||
} while ( i < BAP_TIMEOUT && HFA384x_OFFSET_ISBUSY(reg));
|
||||
|
@ -1973,7 +1967,8 @@ int hfa384x_copy_to_bap(hfa384x_t *hw, UINT16 bap, UINT16 id, UINT16 offset,
|
|||
result = reg;
|
||||
} else {
|
||||
((UINT8*)(&savereg))[0] = d[len-1];
|
||||
wlan_outw( savereg, datareg);
|
||||
hfa384x_setreg_noswap(hw,
|
||||
savereg, datareg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2037,26 +2032,26 @@ hfa384x_copy_from_aux(
|
|||
/* Build appropriate aux page and offset */
|
||||
currpage = HFA384x_AUX_MKPAGE(cardaddr);
|
||||
curroffset = HFA384x_AUX_MKOFF(cardaddr, auxctl);
|
||||
wlan_outw_cpu_to_le16(currpage, HFA384x_AUXPAGE(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(curroffset, HFA384x_AUXOFFSET(hw->iobase));
|
||||
hfa384x_setreg(hw, currpage, HFA384x_AUXPAGE);
|
||||
hfa384x_setreg(hw, curroffset, HFA384x_AUXOFFSET);
|
||||
udelay(5); /* beat */
|
||||
|
||||
/* read the data */
|
||||
while ( i < len) {
|
||||
*((UINT16*)(buf+i)) = wlan_inw(HFA384x_AUXDATA(hw->iobase));
|
||||
*((UINT16*)(buf+i)) = hfa384x_getreg_noswap(hw, HFA384x_AUXDATA);
|
||||
i+=2;
|
||||
curroffset+=2;
|
||||
if ( (curroffset&HFA384x_AUX_OFF_MASK) > HFA384x_AUX_OFF_MAX ) {
|
||||
currpage++;
|
||||
curroffset = 0;
|
||||
curroffset = HFA384x_AUX_MKOFF(curroffset, auxctl);
|
||||
wlan_outw_cpu_to_le16(currpage, HFA384x_AUXPAGE(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(curroffset, HFA384x_AUXOFFSET(hw->iobase));
|
||||
hfa384x_setreg(hw, currpage, HFA384x_AUXPAGE);
|
||||
hfa384x_setreg(hw, curroffset, HFA384x_AUXOFFSET);
|
||||
udelay(5); /* beat */
|
||||
}
|
||||
}
|
||||
/* Make sure the auxctl bits are clear */
|
||||
wlan_outw_cpu_to_le16(0, HFA384x_AUXOFFSET(hw->iobase));
|
||||
hfa384x_setreg(hw, 0, HFA384x_AUXOFFSET);
|
||||
DBFEXIT;
|
||||
}
|
||||
|
||||
|
@ -2105,20 +2100,21 @@ hfa384x_copy_to_aux(
|
|||
/* Build appropriate aux page and offset */
|
||||
currpage = HFA384x_AUX_MKPAGE(cardaddr);
|
||||
curroffset = HFA384x_AUX_MKOFF(cardaddr, auxctl);
|
||||
wlan_outw_cpu_to_le16(currpage, HFA384x_AUXPAGE(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(curroffset, HFA384x_AUXOFFSET(hw->iobase));
|
||||
hfa384x_setreg(hw, currpage, HFA384x_AUXPAGE);
|
||||
hfa384x_setreg(hw, curroffset, HFA384x_AUXOFFSET);
|
||||
udelay(5); /* beat */
|
||||
|
||||
/* write the data */
|
||||
while ( i < len) {
|
||||
wlan_outw( *((UINT16*)(buf+i)), HFA384x_AUXDATA(hw->iobase));
|
||||
hfa384x_setreg_noswap(hw,
|
||||
*((UINT16*)(buf+i)), HFA384x_AUXDATA);
|
||||
i+=2;
|
||||
curroffset+=2;
|
||||
if ( curroffset > HFA384x_AUX_OFF_MAX ) {
|
||||
currpage++;
|
||||
curroffset = 0;
|
||||
wlan_outw_cpu_to_le16(currpage, HFA384x_AUXPAGE(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(curroffset, HFA384x_AUXOFFSET(hw->iobase));
|
||||
hfa384x_setreg(hw, currpage, HFA384x_AUXPAGE);
|
||||
hfa384x_setreg(hw, curroffset, HFA384x_AUXOFFSET);
|
||||
udelay(5); /* beat */
|
||||
}
|
||||
}
|
||||
|
@ -2171,10 +2167,10 @@ int hfa384x_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1, U
|
|||
|
||||
/* wait for the busy bit to clear */
|
||||
counter = 0;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
while ( HFA384x_CMD_ISBUSY(reg) &&
|
||||
(counter < 10)) {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
counter++;
|
||||
udelay(10);
|
||||
}
|
||||
|
@ -2182,27 +2178,27 @@ int hfa384x_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1, U
|
|||
printk("counter(1)=%d\n", counter);
|
||||
#endif
|
||||
if (HFA384x_CMD_ISBUSY(reg)) {
|
||||
printk("hfa384x_cmd timeout(1).\n");
|
||||
printk("hfa384x_cmd timeout(1), reg=0x%0hx.\n", reg);
|
||||
goto failed;
|
||||
}
|
||||
if (!HFA384x_CMD_ISBUSY(reg)) {
|
||||
/* busy bit clear, write command */
|
||||
wlan_outw_cpu_to_le16(parm0, HFA384x_PARAM0(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(parm1, HFA384x_PARAM1(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(parm2, HFA384x_PARAM2(hw->iobase));
|
||||
hfa384x_setreg(hw, parm0, HFA384x_PARAM0);
|
||||
hfa384x_setreg(hw, parm1, HFA384x_PARAM1);
|
||||
hfa384x_setreg(hw, parm2, HFA384x_PARAM2);
|
||||
hw->lastcmd = cmd;
|
||||
wlan_outw_cpu_to_le16(cmd, HFA384x_CMD(hw->iobase));
|
||||
hfa384x_setreg(hw, cmd, HFA384x_CMD);
|
||||
|
||||
/* Now wait for completion */
|
||||
counter = 0;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
/* Initialization is the problem. It takes about
|
||||
100ms. "normal" commands are typically is about
|
||||
200-400 us (I've never seen less than 200). Longer
|
||||
is better so that we're not hammering the bus. */
|
||||
while ( !HFA384x_EVSTAT_ISCMD(reg) &&
|
||||
(counter < 1000)) {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
counter++;
|
||||
udelay(200);
|
||||
}
|
||||
|
@ -2211,12 +2207,12 @@ int hfa384x_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1, U
|
|||
#endif
|
||||
if ( HFA384x_EVSTAT_ISCMD(reg) ) {
|
||||
result = 0;
|
||||
hw->status = wlan_inw_le16_to_cpu(HFA384x_STATUS(hw->iobase));
|
||||
hw->resp0 = wlan_inw_le16_to_cpu(HFA384x_RESP0(hw->iobase));
|
||||
hw->resp1 = wlan_inw_le16_to_cpu(HFA384x_RESP1(hw->iobase));
|
||||
hw->resp2 = wlan_inw_le16_to_cpu(HFA384x_RESP2(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_CMD,
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hw->status = hfa384x_getreg(hw, HFA384x_STATUS);
|
||||
hw->resp0 = hfa384x_getreg(hw, HFA384x_RESP0);
|
||||
hw->resp1 = hfa384x_getreg(hw, HFA384x_RESP1);
|
||||
hw->resp2 = hfa384x_getreg(hw, HFA384x_RESP2);
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_CMD,
|
||||
HFA384x_EVACK);
|
||||
result = HFA384x_STATUS_RESULT_GET(hw->status);
|
||||
} else {
|
||||
printk("hfa384x_cmd timeout(2)\n");
|
||||
|
@ -2272,9 +2268,9 @@ int hfa384x_dl_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1
|
|||
DBFENTER;
|
||||
/* wait for the busy bit to clear */
|
||||
timeout = jiffies + 1*HZ;
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
while ( HFA384x_CMD_ISBUSY(reg) && time_before( jiffies, timeout) ) {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_CMD(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_CMD);
|
||||
udelay(10);
|
||||
}
|
||||
if (HFA384x_CMD_ISBUSY(reg)) {
|
||||
|
@ -2284,11 +2280,11 @@ int hfa384x_dl_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1
|
|||
|
||||
if (!HFA384x_CMD_ISBUSY(reg)) {
|
||||
/* busy bit clear, write command */
|
||||
wlan_outw_cpu_to_le16(parm0, HFA384x_PARAM0(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(parm1, HFA384x_PARAM1(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(parm2, HFA384x_PARAM2(hw->iobase));
|
||||
hfa384x_setreg(hw, parm0, HFA384x_PARAM0);
|
||||
hfa384x_setreg(hw, parm1, HFA384x_PARAM1);
|
||||
hfa384x_setreg(hw, parm2, HFA384x_PARAM2);
|
||||
hw->lastcmd = cmd;
|
||||
wlan_outw_cpu_to_le16(cmd, HFA384x_CMD(hw->iobase));
|
||||
hfa384x_setreg(hw, cmd, HFA384x_CMD);
|
||||
|
||||
/* Now wait for completion */
|
||||
if ( (HFA384x_CMD_CMDCODE_GET(hw->lastcmd) == HFA384x_CMDCODE_DOWNLD) ) {
|
||||
|
@ -2302,18 +2298,18 @@ int hfa384x_dl_docmd_wait( hfa384x_t *hw, UINT16 cmd, UINT16 parm0, UINT16 parm1
|
|||
} else {
|
||||
timeout = jiffies + 1*HZ;
|
||||
}
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
while ( !HFA384x_EVSTAT_ISCMD(reg) && time_before(jiffies,timeout) ) {
|
||||
udelay(100);
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
}
|
||||
if ( HFA384x_EVSTAT_ISCMD(reg) ) {
|
||||
result = 0;
|
||||
hw->status = wlan_inw_le16_to_cpu(HFA384x_STATUS(hw->iobase));
|
||||
hw->resp0 = wlan_inw_le16_to_cpu(HFA384x_RESP0(hw->iobase));
|
||||
hw->resp1 = wlan_inw_le16_to_cpu(HFA384x_RESP1(hw->iobase));
|
||||
hw->resp2 = wlan_inw_le16_to_cpu(HFA384x_RESP2(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_CMD, HFA384x_EVACK(hw->iobase));
|
||||
hw->status = hfa384x_getreg(hw, HFA384x_STATUS);
|
||||
hw->resp0 = hfa384x_getreg(hw, HFA384x_RESP0);
|
||||
hw->resp1 = hfa384x_getreg(hw, HFA384x_RESP1);
|
||||
hw->resp2 = hfa384x_getreg(hw, HFA384x_RESP2);
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_CMD, HFA384x_EVACK);
|
||||
result = HFA384x_STATUS_RESULT_GET(hw->status);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -534,8 +534,8 @@ int prism2mgmt_associate(wlandevice_t *wlandev, void *msgp)
|
|||
HFA384x_INTEN_TXEXC_SET(1) |
|
||||
HFA384x_INTEN_TX_SET(1) |
|
||||
HFA384x_INTEN_RX_SET(1);
|
||||
wlan_outw_cpu_to_le16(0xffff, HFA384x_EVSTAT(priv->hw->iobase));
|
||||
wlan_outw_cpu_to_le16(reg, HFA384x_INTEN(hw->iobase));
|
||||
hfa384x_setreg(hw, 0xffff, HFA384x_EVSTAT);
|
||||
hfa384x_setreg(hw, reg, HFA384x_INTEN);
|
||||
|
||||
/* Enable the Port */
|
||||
hfa384x_cmd_enable(hw, 0);
|
||||
|
@ -881,8 +881,8 @@ pcf_skip:
|
|||
HFA384x_INTEN_DTIM_SET(1) |
|
||||
HFA384x_INTEN_TX_SET(1) |
|
||||
HFA384x_INTEN_RX_SET(1);
|
||||
wlan_outw_cpu_to_le16(0xffff, HFA384x_EVSTAT(priv->hw->iobase));
|
||||
wlan_outw_cpu_to_le16(word, HFA384x_INTEN(hw->iobase));
|
||||
hfa384x_setreg(hw, 0xffff, HFA384x_EVSTAT);
|
||||
hfa384x_setreg(hw, word, HFA384x_INTEN);
|
||||
|
||||
/* Set the macmode so the frame setup code knows what to do */
|
||||
if ( msg->bsstype.data == P80211ENUM_bsstype_infrastructure ) {
|
||||
|
@ -977,8 +977,8 @@ int prism2mgmt_enable(wlandevice_t *wlandev, void *msgp)
|
|||
HFA384x_INTEN_DTIM_SET(1) |
|
||||
HFA384x_INTEN_TX_SET(1) |
|
||||
HFA384x_INTEN_RX_SET(1);
|
||||
wlan_outw_cpu_to_le16(0xffff, HFA384x_EVSTAT(priv->hw->iobase));
|
||||
wlan_outw_cpu_to_le16(word, HFA384x_INTEN(hw->iobase));
|
||||
hfa384x_setreg(hw, 0xffff, HFA384x_EVSTAT);
|
||||
hfa384x_setreg(hw, word, HFA384x_INTEN);
|
||||
|
||||
/* Set the macmode so the frame setup code knows what to do */
|
||||
wlandev->macmode = WLAN_MACMODE_ESS_AP;
|
||||
|
@ -1713,8 +1713,8 @@ int prism2mgmt_dump_state(wlandevice_t *wlandev, void *msgp)
|
|||
hfa384x_cmd_aux_disable(hw);
|
||||
WLAN_LOG_NOTICE1(" cmac: FreeBlocks=%d\n", auxbuf[5]);
|
||||
WLAN_LOG_NOTICE2(" cmac: IntEn=0x%02x EvStat=0x%02x\n",
|
||||
wlan_inw_le16_to_cpu(HFA384x_INTEN(hw->iobase)),
|
||||
wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase)));
|
||||
hfa384x_getreg(hw, HFA384x_INTEN),
|
||||
hfa384x_getreg(hw, HFA384x_EVSTAT));
|
||||
#ifdef USE_FID_STACK
|
||||
WLAN_LOG_NOTICE2(" drvr: txfid_top=%d stacksize=%d\n",
|
||||
priv->txfid_top,PRISM2_FIDSTACKLEN_MAX);
|
||||
|
@ -1972,8 +1972,8 @@ int prism2mgmt_autojoin(wlandevice_t *wlandev, void *msgp)
|
|||
HFA384x_INTEN_TXEXC_SET(1) |
|
||||
HFA384x_INTEN_TX_SET(1) |
|
||||
HFA384x_INTEN_RX_SET(1);
|
||||
wlan_outw_cpu_to_le16(0xffff, HFA384x_EVSTAT(priv->hw->iobase));
|
||||
wlan_outw_cpu_to_le16(reg, HFA384x_INTEN(hw->iobase));
|
||||
hfa384x_setreg(hw, 0xffff, HFA384x_EVSTAT);
|
||||
hfa384x_setreg(hw, reg, HFA384x_INTEN);
|
||||
|
||||
/* Enable the Port */
|
||||
hfa384x_cmd_enable(hw, 0);
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
#include <prism2/hfa384x.h>
|
||||
#include <prism2/prism2mgmt.h>
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PLX)
|
||||
#if ((WLAN_HOSTIF == WLAN_PLX) || (WLAN_HOSTIF == WLAN_PCI))
|
||||
#include <linux/pci.h>
|
||||
#include <prism2/pci-scan.h>
|
||||
#include <prism2/kern_compat.h>
|
||||
|
@ -116,6 +116,13 @@
|
|||
#define PCI_CLASS_NETWORK_OTHERS 0x280 /* PCI Class & Sub-Class code, Network-'Other controller' */
|
||||
#endif
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PCI)
|
||||
#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE)
|
||||
#define PCI_SIZE 0x1000 /* Memory size - 4K bytes */
|
||||
#define ISL3874A_ID 0x38731260 /* ISL3874A 11Mb/s WLAN controller */
|
||||
#define PCI_CLASS_NETWORK_OTHERS 0x280 /* PCI Class & Sub-Class code, Network-'Other controller' */
|
||||
#endif
|
||||
|
||||
|
||||
/*================================================================*/
|
||||
/* Local Macros */
|
||||
|
@ -135,6 +142,8 @@
|
|||
#if (WLAN_HOSTIF == WLAN_PCMCIA)
|
||||
#define DRIVER_SUFFIX "_cs"
|
||||
#elif (WLAN_HOSTIF == WLAN_PLX)
|
||||
#define DRIVER_SUFFIX "_plx"
|
||||
#elif (WLAN_HOSTIF == WLAN_PCI)
|
||||
#define DRIVER_SUFFIX "_pci"
|
||||
/* #else , TODO: Fix .depend generation for multiple driver build */
|
||||
/* #error "HOSTIF unsupported or undefined!" */
|
||||
|
@ -170,6 +179,39 @@ static struct pci_id_info pci_id_tbl[] = {
|
|||
}
|
||||
};
|
||||
|
||||
/* Function declared here because of ptr reference below */
|
||||
static void *prism2sta_probe_plx(struct pci_dev *pdev, void *dev,
|
||||
unsigned char *attr_mem, int irq, int chip_idx,
|
||||
int fnd_cnt);
|
||||
|
||||
struct drv_id_info prism2_plx_drv_id = {
|
||||
"prism2-plx",
|
||||
0,
|
||||
PCI_CLASS_NETWORK_OTHERS<<8,
|
||||
pci_id_tbl,
|
||||
(void *)prism2sta_probe_plx
|
||||
};
|
||||
|
||||
#endif /* WLAN_PLX */
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PCI)
|
||||
static struct pci_id_info pci_id_tbl[] = {
|
||||
{
|
||||
"Intersil Prism2.5 ISL3874 11Mb/s WLAN Controller",
|
||||
{ ISL3874A_ID, 0xffffffff},
|
||||
PCI_TYPE,
|
||||
PCI_SIZE,
|
||||
0
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
{ 0, 0},
|
||||
0,
|
||||
0,
|
||||
0
|
||||
}
|
||||
};
|
||||
|
||||
/* Function declared here because of ptr reference below */
|
||||
static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
||||
unsigned char *attr_mem, int irq, int chip_idx,
|
||||
|
@ -183,22 +225,26 @@ struct drv_id_info prism2_pci_drv_id = {
|
|||
(void *)prism2sta_probe_pci
|
||||
};
|
||||
|
||||
#endif /* WLAN_PLX */
|
||||
#endif /* WLAN_PCI */
|
||||
|
||||
|
||||
/*----------------------------------------------------------------*/
|
||||
/* --Module Parameters */
|
||||
|
||||
int prism2_debug=0; /* Debug output level, */
|
||||
static u_int irq_mask = 0xdeb8; /* Interrupt mask */
|
||||
static int irq_list[4] = { -1 }; /* Interrupt list (alternative) */
|
||||
static u_int prism2_irq_evread_max=20; /* Maximum number of ev_reads (loops)
|
||||
in irq handler */
|
||||
|
||||
static u_int prism2_irq_evread_max=20; /* Maximum number of
|
||||
* ev_reads (loops)
|
||||
* in irq handler
|
||||
*/
|
||||
MODULE_PARM( prism2_debug, "i");
|
||||
MODULE_PARM( prism2_irq_evread_max, "i");
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PCMCIA)
|
||||
static u_int irq_mask = 0xdeb8; /* Interrupt mask */
|
||||
static int irq_list[4] = { -1 }; /* Interrupt list */
|
||||
MODULE_PARM( irq_mask, "i");
|
||||
MODULE_PARM( irq_list, "1-4i");
|
||||
MODULE_PARM( prism2_irq_evread_max, "i");
|
||||
#endif
|
||||
|
||||
|
||||
/*================================================================*/
|
||||
|
@ -948,8 +994,8 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
#endif
|
||||
|
||||
/* make sure interrupts are disabled and any layabout events cleared */
|
||||
wlan_outw_cpu_to_le16(0, HFA384x_INTEN(hw->iobase));
|
||||
wlan_outw_cpu_to_le16(0xffff, HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, 0, HFA384x_INTEN);
|
||||
hfa384x_setreg(hw, 0xffff, HFA384x_EVACK);
|
||||
|
||||
/* Read the PDA */
|
||||
result = hfa384x_drvr_readpda(hw, priv->pda, HFA384x_PDA_LEN_MAX);
|
||||
|
@ -969,7 +1015,7 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
}
|
||||
j = 0;
|
||||
do {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
udelay(10);
|
||||
j++;
|
||||
} while ( !HFA384x_EVSTAT_ISALLOC(reg) && j < 50); /* 50 is timeout */
|
||||
|
@ -979,12 +1025,12 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
goto failed;
|
||||
}
|
||||
#ifdef USE_FID_STACK
|
||||
priv->txfid_stack[i] = wlan_inw_le16_to_cpu(HFA384x_ALLOCFID(hw->iobase));
|
||||
priv->txfid_stack[i] = hfa384x_getreg(hw, HFA384x_ALLOCFID);
|
||||
#else
|
||||
txfid_queue_add(priv, wlan_inw_le16_to_cpu(HFA384x_ALLOCFID(hw->iobase)));
|
||||
txfid_queue_add(priv, hfa384x_getreg(hw, HFA384x_ALLOCFID));
|
||||
#endif
|
||||
reg = HFA384x_EVACK_ALLOC_SET(1);
|
||||
wlan_outw_cpu_to_le16( reg, HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, reg, HFA384x_EVACK);
|
||||
|
||||
#ifdef USE_FID_STACK
|
||||
WLAN_LOG_DEBUG2(1,"priv->txfid_stack[%d]=0x%04x\n",i,priv->txfid_stack[i]);
|
||||
|
@ -999,7 +1045,7 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
}
|
||||
i = 0;
|
||||
do {
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
udelay(10);
|
||||
i++;
|
||||
} while ( !HFA384x_EVSTAT_ISALLOC(reg) && i < 50); /* 50 is timeout */
|
||||
|
@ -1008,9 +1054,9 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
result = -ETIMEDOUT;
|
||||
goto failed;
|
||||
}
|
||||
priv->infofid = wlan_inw_le16_to_cpu(HFA384x_ALLOCFID(hw->iobase));
|
||||
priv->infofid = hfa384x_getreg(hw, HFA384x_ALLOCFID);
|
||||
reg = HFA384x_EVACK_ALLOC_SET(1);
|
||||
wlan_outw_cpu_to_le16( reg, HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, reg, HFA384x_EVACK);
|
||||
WLAN_LOG_DEBUG1(1,"priv->infofid=0x%04x\n", priv->infofid);
|
||||
|
||||
/* Collect version and compatibility info */
|
||||
|
@ -1277,7 +1323,7 @@ int prism2sta_initmac(wlandevice_t *wlandev)
|
|||
/* TODO: Set any internally managed config items */
|
||||
|
||||
/* Set swsupport regs to magic # for card presence detection */
|
||||
wlan_outw_cpu_to_le16( PRISM2STA_MAGIC, HFA384x_SWSUPPORT0(hw->iobase));
|
||||
hfa384x_setreg(hw, PRISM2STA_MAGIC, HFA384x_SWSUPPORT0);
|
||||
|
||||
goto done;
|
||||
failed:
|
||||
|
@ -1986,7 +2032,7 @@ void prism2sta_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs)
|
|||
DBFENTER;
|
||||
|
||||
/* Check swsupport reg magic # for card presence */
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_SWSUPPORT0(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_SWSUPPORT0);
|
||||
if ( reg != PRISM2STA_MAGIC) {
|
||||
WLAN_LOG_DEBUG1(2, "irq=%d, no magic. Card removed?.\n", irq);
|
||||
return;
|
||||
|
@ -1996,7 +2042,7 @@ void prism2sta_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs)
|
|||
hw->bap = HFA384x_BAP_INT;
|
||||
|
||||
/* read the EvStat register for interrupt enabled events */
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
ev_read++;
|
||||
|
||||
do {
|
||||
|
@ -2004,58 +2050,58 @@ void prism2sta_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs)
|
|||
/* Handle the events */
|
||||
if ( HFA384x_EVSTAT_ISINFDROP(reg) ){
|
||||
prism2sta_int_infdrop(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_INFDROP_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_INFDROP_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISINFO(reg) ){
|
||||
prism2sta_int_info(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_INFO_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_INFO_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISTXEXC(reg) ){
|
||||
prism2sta_int_txexc(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_TXEXC_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_TXEXC_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISTX(reg) ){
|
||||
prism2sta_int_tx(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_TX_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_TX_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISRX(reg) ){
|
||||
prism2sta_int_rx(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_RX_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_RX_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISALLOC(reg) ){
|
||||
prism2sta_int_alloc(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_ALLOC_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_ALLOC_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
if ( HFA384x_EVSTAT_ISDTIM(reg) ){
|
||||
prism2sta_int_dtim(wlandev);
|
||||
wlan_outw_cpu_to_le16(HFA384x_EVACK_DTIM_SET(1),
|
||||
HFA384x_EVACK(hw->iobase));
|
||||
hfa384x_setreg(hw, HFA384x_EVACK_DTIM_SET(1),
|
||||
HFA384x_EVACK);
|
||||
}
|
||||
|
||||
/* allow the evstat to be updated after the evack */
|
||||
udelay(20);
|
||||
|
||||
/* Check swsupport reg magic # for card presence */
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_SWSUPPORT0(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_SWSUPPORT0);
|
||||
if ( reg != PRISM2STA_MAGIC) {
|
||||
WLAN_LOG_DEBUG1(2, "irq=%d, no magic. Card removed?.\n", irq);
|
||||
return;
|
||||
}
|
||||
|
||||
/* read the EvStat register for interrupt enabled events */
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_EVSTAT(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_EVSTAT);
|
||||
ev_read++;
|
||||
|
||||
} while ((
|
||||
|
@ -2159,7 +2205,7 @@ void prism2sta_int_info(wlandevice_t *wlandev)
|
|||
int result;
|
||||
DBFENTER;
|
||||
/* Retrieve the FID */
|
||||
reg = wlan_inw_le16_to_cpu(HFA384x_INFOFID(hw->iobase));
|
||||
reg = hfa384x_getreg(hw, HFA384x_INFOFID);
|
||||
|
||||
/* Retrieve the length */
|
||||
result = hfa384x_copy_from_bap( hw,
|
||||
|
@ -2248,7 +2294,7 @@ void prism2sta_int_txexc(wlandevice_t *wlandev)
|
|||
int result = 0;
|
||||
DBFENTER;
|
||||
/* Collect the status and display */
|
||||
fid = wlan_inw_le16_to_cpu(HFA384x_TXCOMPLFID(hw->iobase));
|
||||
fid = hfa384x_getreg(hw, HFA384x_TXCOMPLFID);
|
||||
result = hfa384x_copy_from_bap(hw, hw->bap, fid, 0, &status, sizeof(status));
|
||||
if ( result ) {
|
||||
WLAN_LOG_DEBUG3(1,
|
||||
|
@ -2288,7 +2334,7 @@ void prism2sta_int_tx(wlandevice_t *wlandev)
|
|||
UINT16 status;
|
||||
int result = 0;
|
||||
DBFENTER;
|
||||
fid = wlan_inw_le16_to_cpu(HFA384x_TXCOMPLFID(hw->iobase));
|
||||
fid = hfa384x_getreg(hw, HFA384x_TXCOMPLFID);
|
||||
result =hfa384x_copy_from_bap(hw, hw->bap, fid, 0, &status, sizeof(status));
|
||||
if ( result ) {
|
||||
WLAN_LOG_DEBUG3(1,
|
||||
|
@ -2334,7 +2380,7 @@ void prism2sta_int_rx(wlandevice_t *wlandev)
|
|||
DBFENTER;
|
||||
|
||||
/* Get the FID */
|
||||
rxfid = wlan_inw_le16_to_cpu(HFA384x_RXFID(hw->iobase));
|
||||
rxfid = hfa384x_getreg(hw, HFA384x_RXFID);
|
||||
/* Get the descriptor (including headers) */
|
||||
result = hfa384x_copy_from_bap(hw,
|
||||
hw->bap,
|
||||
|
@ -2636,7 +2682,7 @@ void prism2sta_int_alloc(wlandevice_t *wlandev)
|
|||
|
||||
/* Handle the reclaimed FID */
|
||||
/* collect the FID and push it onto the stack */
|
||||
fid = wlan_inw_le16_to_cpu(HFA384x_ALLOCFID(hw->iobase));
|
||||
fid = hfa384x_getreg(hw, HFA384x_ALLOCFID);
|
||||
|
||||
#ifdef USE_FID_STACK
|
||||
if (! txfid_stack_full(priv)) {
|
||||
|
@ -3217,7 +3263,7 @@ static int prism2sta_event (event_t event, int priority, event_callback_args_t *
|
|||
hfa384x_inithw(
|
||||
((prism2sta_priv_t*)wlandev->priv)->hw,
|
||||
wlandev->netdev->irq,
|
||||
wlandev->netdev->base_addr);
|
||||
wlandev->netdev->base_addr, 0);
|
||||
result = prism2sta_initmac(wlandev);
|
||||
if ( result != 0 ) {
|
||||
WLAN_LOG_ERROR1(
|
||||
|
@ -3279,7 +3325,7 @@ static int prism2sta_event (event_t event, int priority, event_callback_args_t *
|
|||
hfa384x_inithw(
|
||||
((prism2sta_priv_t*)wlandev->priv)->hw,
|
||||
wlandev->netdev->irq,
|
||||
wlandev->netdev->base_addr);
|
||||
wlandev->netdev->base_addr, 0);
|
||||
result=prism2sta_initmac(wlandev);
|
||||
if ( result != 0 ) {
|
||||
WLAN_LOG_ERROR1(
|
||||
|
@ -3302,9 +3348,127 @@ static int prism2sta_event (event_t event, int priority, event_callback_args_t *
|
|||
}
|
||||
#endif /* WLAN_PCMCIA */
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PCI)
|
||||
/*----------------------------------------------------------------
|
||||
* prism2sta_probe_plx
|
||||
*
|
||||
* PCI-SCAN probe routine.
|
||||
* Initialize MAC before return.
|
||||
*
|
||||
* Arguments:
|
||||
* pdev ptr to pci device structure containing info about
|
||||
* pci configuration.
|
||||
* dev ptr to that is passed in the 2nd input argument
|
||||
* of pci_drv_register()
|
||||
* attr_mem ptr to attribute memory of PC card
|
||||
* irq interrupt number of PCI device
|
||||
* chip_idx index number in pci lookup table for this card
|
||||
* fnd_cnt number of found card
|
||||
*
|
||||
* Returns:
|
||||
* NULL - failed
|
||||
* Otherwise - success
|
||||
*
|
||||
* Side effects:
|
||||
*
|
||||
*
|
||||
* Call context:
|
||||
* process thread
|
||||
*
|
||||
----------------------------------------------------------------*/
|
||||
static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
||||
unsigned char *mem, int irq, int chip_idx, int fnd_cnt)
|
||||
{
|
||||
wlandevice_t *wlandev;
|
||||
prism2sta_priv_t *priv;
|
||||
|
||||
WLAN_LOG_INFO2("A Prism2 PCI device found, "
|
||||
"mem:0x%lx, irq:%d\n", (long)mem, irq);
|
||||
|
||||
/* Create the network device object. */
|
||||
wlandev = kmalloc(sizeof(wlandevice_t), GFP_KERNEL);
|
||||
if ( wlandev == NULL ) {
|
||||
return NULL;
|
||||
}
|
||||
memset(wlandev, 0, sizeof(wlandevice_t));
|
||||
|
||||
/* Make up a device private data structure. */
|
||||
wlandev->priv = kmalloc(sizeof(prism2sta_priv_t), GFP_KERNEL);
|
||||
if ( wlandev->priv == NULL ) {
|
||||
kfree_s(wlandev, sizeof(wlandevice_t));
|
||||
return NULL;
|
||||
}
|
||||
memset(wlandev->priv, 0, sizeof(prism2sta_priv_t));
|
||||
|
||||
/* Make up a hw data structure. */
|
||||
priv = (prism2sta_priv_t*)wlandev->priv;
|
||||
priv->hw = kmalloc(sizeof(hfa384x_t), GFP_KERNEL);
|
||||
if ( priv->hw == NULL ) {
|
||||
kfree_s(wlandev->priv, sizeof(prism2sta_priv_t));
|
||||
kfree_s(wlandev, sizeof(wlandevice_t));
|
||||
return NULL;
|
||||
}
|
||||
memset(priv->hw, 0, sizeof(hfa384x_t));
|
||||
|
||||
/* Set our entries in the wlandev */
|
||||
wlandev->open = &prism2sta_open;
|
||||
wlandev->close = &prism2sta_close;
|
||||
wlandev->reset = &prism2sta_reset;
|
||||
wlandev->txframe = &prism2sta_txframe;
|
||||
wlandev->mlmerequest = &prism2sta_mlmerequest;
|
||||
|
||||
/* Set up the remaining entries in the wlan common way */
|
||||
wlandev->name = ((prism2sta_priv_t*)wlandev->priv)->node.dev_name;
|
||||
if ( wlan_setup(wlandev) != 0 ) {
|
||||
kfree_s(priv->hw, sizeof(hfa384x_t));
|
||||
kfree_s(wlandev->priv, sizeof(prism2sta_priv_t));
|
||||
kfree_s(wlandev, sizeof(wlandevice_t));
|
||||
WLAN_LOG_ERROR0("wlan_setup() failed!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wlandev->netdev->irq = irq;
|
||||
wlandev->netdev->mem_start = (unsigned long)mem;
|
||||
wlandev->netdev->mem_end = (unsigned long)mem + PCI_SIZE;
|
||||
|
||||
request_irq(wlandev->netdev->irq, prism2sta_interrupt, SA_SHIRQ, dev_info, wlandev);
|
||||
|
||||
if ( register_wlandev(wlandev) != 0 ) {
|
||||
kfree_s(priv->hw, sizeof(hfa384x_t));
|
||||
kfree_s(wlandev->priv, sizeof(prism2sta_priv_t));
|
||||
kfree_s(wlandev, sizeof(wlandevice_t));
|
||||
WLAN_LOG_ERROR0("register_wlandev() failed!\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
outw(PRISM2STA_MAGIC, HFA384x_SWSUPPORT0(wlandev->netdev->base_addr));
|
||||
reg=inw( HFA384x_SWSUPPORT0(wlandev->netdev->base_addr));
|
||||
if ( reg != PRISM2STA_MAGIC ) {
|
||||
kfree_s(priv->hw, sizeof(hfa384x_t));
|
||||
kfree_s(wlandev->priv, sizeof(prism2sta_priv_t));
|
||||
kfree_s(wlandev, sizeof(wlandevice_t));
|
||||
WLAN_LOG_ERROR0("MAC register access test failed!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
hfa384x_inithw(((prism2sta_priv_t*)wlandev->priv)->hw,
|
||||
wlandev->netdev->irq, 0, wlandev->netdev->mem_start);
|
||||
|
||||
if ( prism2sta_initmac(wlandev) != 0) {
|
||||
WLAN_LOG_ERROR0("MAC Initialization failed.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return( (void *)wlandev);
|
||||
}
|
||||
|
||||
#endif /* WLAN_PCI */
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PLX)
|
||||
/*----------------------------------------------------------------
|
||||
* prism2sta_probe_pci
|
||||
* prism2sta_probe_plx
|
||||
*
|
||||
* PCI-SCAN probe routine. Firstly, detect whether a PC card is present
|
||||
* or not. If yes, register required hardware resource and allocate private
|
||||
|
@ -3331,7 +3495,7 @@ static int prism2sta_event (event_t event, int priority, event_callback_args_t *
|
|||
* process thread
|
||||
*
|
||||
----------------------------------------------------------------*/
|
||||
static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
||||
static void *prism2sta_probe_plx(struct pci_dev *pdev, void *dev,
|
||||
unsigned char *attr_mem, int irq, int chip_idx, int fnd_cnt)
|
||||
{
|
||||
int pccard_ioaddr;
|
||||
|
@ -3344,9 +3508,11 @@ static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
|||
#else
|
||||
pccard_ioaddr = pdev->base_address[(PCI_ADDR3 >> 4) & 7];
|
||||
#endif
|
||||
WLAN_LOG_INFO3("A Prism2 PCI device found, mem:0x%lx, irq:%d, io addr:0x%x\n", (long)attr_mem, irq, pccard_ioaddr-1);
|
||||
WLAN_LOG_INFO3("A PLX PCI/PCMCIA interface device found, "
|
||||
"mem:0x%lx, irq:%d, io addr:0x%x\n",
|
||||
(long)attr_mem, irq, pccard_ioaddr-1);
|
||||
|
||||
/* Verify whether PC card is present */
|
||||
/* Verify whether PC card is present (this needs improvement) */
|
||||
if ( attr_mem[0] != 0x01 || attr_mem[2] != 0x03 ||
|
||||
attr_mem[4] != 0x00 || attr_mem[6] != 0x00 ||
|
||||
attr_mem[8] != 0xFF || attr_mem[10] != 0x17 ||
|
||||
|
@ -3355,6 +3521,8 @@ static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
WLAN_LOG_INFO0("A PCMCIA WLAN adapter was found.\n");
|
||||
|
||||
/* Write COR to enable PC card */
|
||||
attr_mem[COR_OFFSET] = COR_VALUE;
|
||||
reg = attr_mem[COR_OFFSET];
|
||||
|
@ -3415,6 +3583,7 @@ static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
outw(PRISM2STA_MAGIC, HFA384x_SWSUPPORT0(wlandev->netdev->base_addr));
|
||||
reg=inw( HFA384x_SWSUPPORT0(wlandev->netdev->base_addr));
|
||||
if ( reg != PRISM2STA_MAGIC ) {
|
||||
|
@ -3424,8 +3593,10 @@ static void *prism2sta_probe_pci(struct pci_dev *pdev, void *dev,
|
|||
WLAN_LOG_ERROR0("IO port access failed!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
hfa384x_inithw(((prism2sta_priv_t*)wlandev->priv)->hw, wlandev->netdev->irq, wlandev->netdev->base_addr);
|
||||
hfa384x_inithw(((prism2sta_priv_t*)wlandev->priv)->hw,
|
||||
wlandev->netdev->irq, wlandev->netdev->base_addr, 0);
|
||||
|
||||
if ( prism2sta_initmac(wlandev) != 0) {
|
||||
WLAN_LOG_ERROR0("MAC Initialization failed.");
|
||||
|
@ -3467,14 +3638,7 @@ int init_module(void)
|
|||
WLAN_LOG_NOTICE1("%s Loaded\n", version);
|
||||
WLAN_LOG_NOTICE1("dev_info is: %s\n", dev_info);
|
||||
|
||||
#if (WLAN_HOSTIF == WLAN_PLX)
|
||||
/* This call will result in a call to prism2sta_probe_pci
|
||||
* if there is a matched PCI card present (ie., which
|
||||
* vendor+device id are matched)
|
||||
*/
|
||||
pci_drv_register(&prism2_pci_drv_id, NULL);
|
||||
|
||||
#elif (WLAN_HOSTIF == WLAN_PCMCIA)
|
||||
#if (WLAN_HOSTIF == WLAN_PCMCIA)
|
||||
CardServices(GetCardServicesInfo, &serv);
|
||||
if ( serv.Revision != CS_RELEASE_CODE )
|
||||
{
|
||||
|
@ -3485,6 +3649,20 @@ int init_module(void)
|
|||
/* This call will result in a call to prism2sta_attach */
|
||||
/* and eventually prism2sta_detach */
|
||||
register_pcmcia_driver( &dev_info, &prism2sta_attach, &prism2sta_detach);
|
||||
#elif (WLAN_HOSTIF == WLAN_PLX)
|
||||
/* This call will result in a call to prism2sta_probe_plx
|
||||
* if there is a matched PCI card present (ie., which
|
||||
* vendor+device id are matched)
|
||||
*/
|
||||
pci_drv_register(&prism2_plx_drv_id, NULL);
|
||||
|
||||
#elif (WLAN_HOSTIF == WLAN_PCI)
|
||||
/* This call will result in a call to prism2sta_probe_pci
|
||||
* if there is a matched PCI card present (ie., which
|
||||
* vendor+device id are matched)
|
||||
*/
|
||||
pci_drv_register(&prism2_pci_drv_id, NULL);
|
||||
|
||||
#endif
|
||||
|
||||
DBFEXIT;
|
||||
|
@ -3523,6 +3701,11 @@ void cleanup_module(void)
|
|||
#elif (WLAN_HOSTIF == WLAN_PLX)
|
||||
release_region(wlandev->netdev->base_addr, 0xff);
|
||||
free_irq(wlandev->netdev->irq, dev_info);
|
||||
pci_drv_register(&prism2_plx_drv_id, NULL);
|
||||
#elif (WLAN_HOSTIF == WLAN_PCI)
|
||||
release_region(wlandev->netdev->base_addr, 0xff);
|
||||
free_irq(wlandev->netdev->irq, dev_info);
|
||||
pci_drv_register(&prism2_pci_drv_id, NULL);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -121,6 +121,8 @@
|
|||
#define HFA384x_DLSTATE_FLASHWRITEPENDING 4
|
||||
|
||||
/*--- Register I/O offsets --------------------------*/
|
||||
#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
|
||||
|
||||
#define HFA384x_CMD_OFF (0x00)
|
||||
#define HFA384x_PARAM0_OFF (0x02)
|
||||
#define HFA384x_PARAM1_OFF (0x04)
|
||||
|
@ -150,6 +152,50 @@
|
|||
#define HFA384x_AUXOFFSET_OFF (0x3C)
|
||||
#define HFA384x_AUXDATA_OFF (0x3E)
|
||||
|
||||
#elif (WLAN_HOSTIF == WLAN_PCI)
|
||||
|
||||
#define HFA384x_CMD_OFF (0x00)
|
||||
#define HFA384x_PARAM0_OFF (0x04)
|
||||
#define HFA384x_PARAM1_OFF (0x08)
|
||||
#define HFA384x_PARAM2_OFF (0x0c)
|
||||
#define HFA384x_STATUS_OFF (0x10)
|
||||
#define HFA384x_RESP0_OFF (0x14)
|
||||
#define HFA384x_RESP1_OFF (0x18)
|
||||
#define HFA384x_RESP2_OFF (0x1c)
|
||||
#define HFA384x_INFOFID_OFF (0x20)
|
||||
#define HFA384x_RXFID_OFF (0x40)
|
||||
#define HFA384x_ALLOCFID_OFF (0x44)
|
||||
#define HFA384x_TXCOMPLFID_OFF (0x48)
|
||||
#define HFA384x_SELECT0_OFF (0x30)
|
||||
#define HFA384x_OFFSET0_OFF (0x38)
|
||||
#define HFA384x_DATA0_OFF (0x6c)
|
||||
#define HFA384x_SELECT1_OFF (0x34)
|
||||
#define HFA384x_OFFSET1_OFF (0x3c)
|
||||
#define HFA384x_DATA1_OFF (0x70)
|
||||
#define HFA384x_EVSTAT_OFF (0x60)
|
||||
#define HFA384x_INTEN_OFF (0x64)
|
||||
#define HFA384x_EVACK_OFF (0x68)
|
||||
#define HFA384x_CONTROL_OFF (0x28)
|
||||
#define HFA384x_SWSUPPORT0_OFF (0x50)
|
||||
#define HFA384x_SWSUPPORT1_OFF (0x54)
|
||||
#define HFA384x_SWSUPPORT2_OFF (0x58)
|
||||
#define HFA384x_AUXPAGE_OFF (0x74)
|
||||
#define HFA384x_AUXOFFSET_OFF (0x78)
|
||||
#define HFA384x_AUXDATA_OFF (0x7c)
|
||||
#define HFA384x_PCICOR_OFF (0x4c)
|
||||
#define HFA384x_PCIHCR_OFF (0x5c)
|
||||
#define HFA384x_PCI_M0_ADDRH_OFF (0x80)
|
||||
#define HFA384x_PCI_M0_ADDRL_OFF (0x84)
|
||||
#define HFA384x_PCI_M0_LEN_OFF (0x88)
|
||||
#define HFA384x_PCI_M0_CTL_OFF (0x8c)
|
||||
#define HFA384x_PCI_STATUS_OFF (0x98)
|
||||
#define HFA384x_PCI_M1_ADDRH_OFF (0xa0)
|
||||
#define HFA384x_PCI_M1_ADDRL_OFF (0xa4)
|
||||
#define HFA384x_PCI_M1_LEN_OFF (0xa8)
|
||||
#define HFA384x_PCI_M1_CTL_OFF (0xac)
|
||||
|
||||
#endif
|
||||
|
||||
/*--- Register Field Masks --------------------------*/
|
||||
#define HFA384x_CMD_BUSY ((UINT16)BIT15)
|
||||
#define HFA384x_CMD_AINFO ((UINT16)(BIT14 | BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8))
|
||||
|
@ -607,36 +653,36 @@ PD Record codes
|
|||
/*=============================================================*/
|
||||
/*------ Macros -----------------------------------------------*/
|
||||
|
||||
/*--- Register access macros ------------------------*/
|
||||
/*--- Register ID macros ------------------------*/
|
||||
|
||||
#define HFA384x_CMD(base) ((UINT)(base) + HFA384x_CMD_OFF)
|
||||
#define HFA384x_PARAM0(base) ((UINT)(base) + HFA384x_PARAM0_OFF)
|
||||
#define HFA384x_PARAM1(base) ((UINT)(base) + HFA384x_PARAM1_OFF)
|
||||
#define HFA384x_PARAM2(base) ((UINT)(base) + HFA384x_PARAM2_OFF)
|
||||
#define HFA384x_STATUS(base) ((UINT)(base) + HFA384x_STATUS_OFF)
|
||||
#define HFA384x_RESP0(base) ((UINT)(base) + HFA384x_RESP0_OFF)
|
||||
#define HFA384x_RESP1(base) ((UINT)(base) + HFA384x_RESP1_OFF)
|
||||
#define HFA384x_RESP2(base) ((UINT)(base) + HFA384x_RESP2_OFF)
|
||||
#define HFA384x_INFOFID(base) ((UINT)(base) + HFA384x_INFOFID_OFF)
|
||||
#define HFA384x_RXFID(base) ((UINT)(base) + HFA384x_RXFID_OFF)
|
||||
#define HFA384x_ALLOCFID(base) ((UINT)(base) + HFA384x_ALLOCFID_OFF)
|
||||
#define HFA384x_TXCOMPLFID(base) ((UINT)(base) + HFA384x_TXCOMPLFID_OFF)
|
||||
#define HFA384x_SELECT0(base) ((UINT)(base) + HFA384x_SELECT0_OFF)
|
||||
#define HFA384x_OFFSET0(base) ((UINT)(base) + HFA384x_OFFSET0_OFF)
|
||||
#define HFA384x_DATA0(base) ((UINT)(base) + HFA384x_DATA0_OFF)
|
||||
#define HFA384x_SELECT1(base) ((UINT)(base) + HFA384x_SELECT1_OFF)
|
||||
#define HFA384x_OFFSET1(base) ((UINT)(base) + HFA384x_OFFSET1_OFF)
|
||||
#define HFA384x_DATA1(base) ((UINT)(base) + HFA384x_DATA1_OFF)
|
||||
#define HFA384x_EVSTAT(base) ((UINT)(base) + HFA384x_EVSTAT_OFF)
|
||||
#define HFA384x_INTEN(base) ((UINT)(base) + HFA384x_INTEN_OFF)
|
||||
#define HFA384x_EVACK(base) ((UINT)(base) + HFA384x_EVACK_OFF)
|
||||
#define HFA384x_CONTROL(base) ((UINT)(base) + HFA384x_CONTROL_OFF)
|
||||