SST IO support. Napalm recognition. Makefile fixes.
This commit is contained in:
@@ -152,6 +152,7 @@
|
||||
#define PCI_REVISION_ID_LINUX 0x8
|
||||
#define PCI_BASE_ADDRESS_0_LINUX 0x10
|
||||
#define PCI_BASE_ADDRESS_1_LINUX 0x14
|
||||
#define PCI_BASE_ADDRESS_2_LINUX 0x18
|
||||
#define SST1_PCI_SPECIAL1_LINUX 0x40
|
||||
#define SST1_PCI_SPECIAL2_LINUX 0x44
|
||||
#define SST1_PCI_SPECIAL3_LINUX 0x48
|
||||
@@ -187,6 +188,10 @@
|
||||
#define PCI_DEVICE_ID_3DFX_VOODOO3 5
|
||||
#endif
|
||||
|
||||
#ifndef PCI_DEVICE_ID_3DFX_VOODOO4
|
||||
#define PCI_DEVICE_ID_3DFX_VOODOO4 9
|
||||
#endif
|
||||
|
||||
static struct pci_card {
|
||||
unsigned short vendor;
|
||||
unsigned short device;
|
||||
@@ -195,7 +200,8 @@ static struct pci_card {
|
||||
{PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO2},
|
||||
{PCI_VENDOR_ID_ALLIANCE, PCI_DEVICE_ID_ALLIANCE_AT3D},
|
||||
{PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE},
|
||||
{PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3}
|
||||
{PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3},
|
||||
{PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO4}
|
||||
};
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -224,6 +230,7 @@ struct cardInfo_t {
|
||||
int type;
|
||||
int addr0;
|
||||
int addr1;
|
||||
int addr2;
|
||||
unsigned char bus;
|
||||
unsigned char dev;
|
||||
struct file *curFile;
|
||||
@@ -254,6 +261,7 @@ static void findCardType(int vendor, int device)
|
||||
while (numCards < MAXCARDS && (dev = pci_find_device(vendor, device, dev))) {
|
||||
pci_read_config_dword(dev, PCI_BASE_ADDRESS_0, &cards[numCards].addr0);
|
||||
pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &cards[numCards].addr1);
|
||||
pci_read_config_dword(dev, PCI_BASE_ADDRESS_2, &cards[numCards].addr2);
|
||||
cards[numCards].bus = dev->bus->number;
|
||||
cards[numCards].dev = dev->devfn;
|
||||
|
||||
@@ -386,6 +394,11 @@ static int doQueryFetch(pioData *desc)
|
||||
return -EINVAL;
|
||||
copy_to_user(desc->value, &cards[desc->device].addr1, desc->size);
|
||||
return 0;
|
||||
case PCI_BASE_ADDRESS_2_LINUX:
|
||||
if (desc->size != 4)
|
||||
return -EINVAL;
|
||||
copy_to_user(desc->value, &cards[desc->device].addr2, desc->size);
|
||||
return 0;
|
||||
case SST1_PCI_SPECIAL1_LINUX:
|
||||
if (desc->size != 4)
|
||||
return -EINVAL;
|
||||
@@ -502,10 +515,12 @@ static int doQuery(unsigned int cmd, unsigned long arg)
|
||||
static int doPIORead(pioData *desc)
|
||||
{
|
||||
int retval;
|
||||
char retchar;
|
||||
int retchar;
|
||||
|
||||
if ((retval = verify_area(VERIFY_WRITE, desc->value, desc->size)))
|
||||
return retval;
|
||||
#if 0
|
||||
/* restricted */
|
||||
switch (desc->port) {
|
||||
case VGA_INPUT_STATUS_1C:
|
||||
break;
|
||||
@@ -518,12 +533,47 @@ static int doPIORead(pioData *desc)
|
||||
default:
|
||||
return -EPERM;
|
||||
}
|
||||
#else
|
||||
/* full range */
|
||||
{
|
||||
int i = desc->device;
|
||||
unsigned short port = desc->port;
|
||||
unsigned short base;
|
||||
if (i < 0 || i >= numCards) {
|
||||
/* scan for valid SSTIO aperture */
|
||||
for (i = 0; i < numCards; i++) {
|
||||
base = cards[i].addr2 & ~1;
|
||||
if (base <= port && port <= (base + 0x107)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == numCards) {
|
||||
return -EPERM;
|
||||
}
|
||||
} else {
|
||||
/* check the given SSTIO aperture */
|
||||
base = cards[i].addr2 & ~1;
|
||||
if (base > port || port > (base + 0x107)) {
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (desc->size != 1)
|
||||
switch (desc->size) {
|
||||
case 1:
|
||||
retchar = inb(desc->port);
|
||||
break;
|
||||
case 2:
|
||||
retchar = inw(desc->port);
|
||||
break;
|
||||
case 4:
|
||||
retchar = inl(desc->port);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
retchar = inb(desc->port);
|
||||
copy_to_user(desc->value, &retchar, sizeof(char));
|
||||
}
|
||||
copy_to_user(desc->value, &retchar, desc->size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -531,11 +581,13 @@ static int doPIORead(pioData *desc)
|
||||
static int doPIOWrite(pioData *desc)
|
||||
{
|
||||
int retval;
|
||||
char retchar;
|
||||
int retchar;
|
||||
|
||||
if ((retval = verify_area(VERIFY_READ, desc->value, desc->size)))
|
||||
return retval;
|
||||
|
||||
#if 0
|
||||
/* restricted */
|
||||
switch (desc->port) {
|
||||
case SC_INDEX:
|
||||
break;
|
||||
@@ -546,12 +598,47 @@ static int doPIOWrite(pioData *desc)
|
||||
default:
|
||||
return -EPERM;
|
||||
}
|
||||
#else
|
||||
/* full range */
|
||||
{
|
||||
int i = desc->device;
|
||||
unsigned short port = desc->port;
|
||||
unsigned short base;
|
||||
if (i < 0 || i >= numCards) {
|
||||
/* scan for valid SSTIO aperture */
|
||||
for (i = 0; i < numCards; i++) {
|
||||
base = cards[i].addr2 & ~1;
|
||||
if (base <= port && port <= (base + 0x107)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == numCards) {
|
||||
return -EPERM;
|
||||
}
|
||||
} else {
|
||||
/* check the given SSTIO aperture */
|
||||
base = cards[i].addr2 & ~1;
|
||||
if (base > port || port > (base + 0x107)) {
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (desc->size != 1)
|
||||
copy_from_user(&retchar, desc->value, desc->size);
|
||||
switch (desc->size) {
|
||||
case 1:
|
||||
outb(retchar, desc->port);
|
||||
break;
|
||||
case 2:
|
||||
outw(retchar, desc->port);
|
||||
break;
|
||||
case 4:
|
||||
outl(retchar, desc->port);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
||||
copy_from_user(&retchar, desc->value, sizeof(char));
|
||||
outb(retchar, desc->port);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/ar
|
||||
|
||||
# Setup machine dependant compiler flags
|
||||
ifeq ($(ARCH), i386)
|
||||
OPT_CFLAGS = -O2 -m486 -fomit-frame-pointer \
|
||||
OPT_CFLAGS = -O2 -mcpu=pentium -fomit-frame-pointer \
|
||||
-fno-strength-reduce \
|
||||
-malign-loops=2 -malign-jumps=2 -malign-functions=2
|
||||
-falign-loops=2 -falign-jumps=2 -falign-functions=2
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), alpha)
|
||||
@@ -22,7 +22,7 @@ endif
|
||||
|
||||
endif # ifeq ($OPT_CFLAGS),)
|
||||
|
||||
CFLAGS := -DMODULE -D__KERNEL__ -I/usr/src/linux/include $(OPT_CFLAGS)
|
||||
CFLAGS := -DMODULE -D__KERNEL__ -I/usr/include/linux $(OPT_CFLAGS)
|
||||
|
||||
###############################################################################
|
||||
# You should never need to change anything below.
|
||||
@@ -32,17 +32,12 @@ all: sanity 3dfx.o
|
||||
# Sanity checks
|
||||
sanity:
|
||||
@( \
|
||||
if [ ! -e /usr/src/linux ]; then \
|
||||
echo "Expect kernel source at location /usr/src/linux"; \
|
||||
echo "Sym.link /usr/src/linux -> where you have your sources"; \
|
||||
if [ ! -r /usr/include/linux ]; then \
|
||||
echo "Expect readable headers in /usr/include/linux"; \
|
||||
exit -1; \
|
||||
fi; \
|
||||
if [ ! -r /usr/src/linux/include ]; then \
|
||||
echo "Expect readable headers in /usr/src/linux/include"; \
|
||||
exit -1; \
|
||||
fi; \
|
||||
if [ ! -r /usr/src/linux/include/linux/version.h ]; then \
|
||||
echo "Missing /usr/src/linux/include/linux/version.h"; \
|
||||
if [ ! -r /usr/include/linux/version.h ]; then \
|
||||
echo "Missing /usr/include/linux/version.h"; \
|
||||
echo "Configure and install the kernel first"; \
|
||||
exit -1; \
|
||||
fi; \
|
||||
@@ -85,9 +80,9 @@ install:
|
||||
if [ "$(RPM_INSTALL)" = "1" ]; then \
|
||||
echo "/lib/modules/$(shell ./kinfo --UTS)/misc/3dfx.o"; \
|
||||
else \
|
||||
inconf=`grep 'alias char-major-107 3dfx' /etc/conf.modules`; \
|
||||
inconf=`grep 'alias char-major-107 3dfx' /etc/modules.conf`; \
|
||||
if [ -z "$$inconf" ]; then \
|
||||
echo "alias char-major-107 3dfx" >> /etc/conf.modules; \
|
||||
echo "alias char-major-107 3dfx" >> /etc/modules.conf; \
|
||||
fi; \
|
||||
fi; \
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user