Date: Tue, 13 Feb 2001 22:10:59 -0000 (GMT)
From: Duncan Barclay <dmlb@dmlb.org>
To: Warner Losh <imp@harmony.village.org>
Cc: Anton Blanchard <anton@linuxcare.com>, Chris Yeoh <cyeoh@linuxcare.com.au>, freebsd-mobile@FreeBSD.ORG, Greg Lehey <grog@lemis.com>, Simon Epsteyn <seva@fnal.gov>
Subject: Re: AiroNet 'No card in database for "(null)"("(null)")' problem
Message-ID: <XFMail.010213221059.dmlb@computer.my.domain>
In-Reply-To: <200102062325.f16NPL987114@harmony.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On 06-Feb-01 Warner Losh wrote:
> In message <Pine.LNX.4.10.10102061705120.7871-100000@null.cc.uic.edu> Simon
> Epsteyn writes:
>: On Tue, 6 Feb 2001, Warner Losh wrote:
>:
>: > In message <Pine.LNX.4.10.10102061254420.7871-100000@null.cc.uic.edu>
>: > Simon Epsteyn writes:
>: > : One could say "It's a pity this card doesn't work in FreeBSD" :)
>: >
>: > But it does work on FreeBSD. I have a very similar card that probes
>: > w/o a problem. I think it may be a memory conflict. You'll notice
>: > that Linux uses high memory (0x68000000) while we're trying to use
>: > memory in the isa hole.
>:
>: Correct, I've helped people set up similiar cards on different laptops
>: w/out any problems, the question is what do I do in FreeBSD to get it to
>: work?
>
> Configure it correctly :-). We're working on making it easier to
> configure, but right now it is a bit of a pain. Most of the pain is
> well documented in the archives.
Attached are patches that use a sysctl to change the start and end of
where pccard thinks the ISA hole is.
>: Is there a way to see what is using 0xd0000 area or a way to make pccardd
>: use high memory?
0xd0000 is not pccardd - it's /sys/pccard stuff.
Duncan
---
________________________________________________________________________
Duncan Barclay | God smiles upon the little children,
dmlb@dmlb.org | the alcoholics, and the permanently stoned.
dmlb@freebsd.org| Steven King
[-- Attachment #2 --]
Index: cardinfo.h
===================================================================
RCS file: /steer/ncvs/src/sys/pccard/cardinfo.h,v
retrieving revision 1.19
diff -u -r1.19 cardinfo.h
--- cardinfo.h 2000/10/26 19:46:20 1.19
+++ cardinfo.h 2001/01/28 12:28:57
@@ -123,8 +123,8 @@
struct slotstate {
enum cardstate state; /* Current state of slot */
enum cardstate laststate; /* Previous state of slot */
- int maxmem; /* Max allowed memory windows */
- int maxio; /* Max allowed I/O windows */
+/*XXX*/ int maxmem; /* Max allowed memory windows */
+/*XXX*/ int maxio; /* Max allowed I/O windows */
int irqs; /* Bitmap of IRQs allowed */
int flags; /* Capability flags */
};
@@ -152,6 +152,7 @@
/*
* Other system limits
*/
+/* XXX */
#define MAXSLOT 16
#define NUM_MEM_WINDOWS 10
#define NUM_IO_WINDOWS 6
Index: pccard.c
===================================================================
RCS file: /steer/ncvs/src/sys/pccard/pccard.c,v
retrieving revision 1.116
diff -u -r1.116 pccard.c
--- pccard.c 2001/01/09 04:33:39 1.116
+++ pccard.c 2001/01/28 12:28:23
@@ -376,12 +376,12 @@
if (pccard_mem == 0)
return(ENOMEM);
for (win = 0; win < slt->ctrl->maxmem; win++)
- if ((slt->mem[win].flags & MDF_ACTIVE) == 0)
+/*XXX*/ if ((slt->mem[win].flags & MDF_ACTIVE) == 0)
break;
if (win >= slt->ctrl->maxmem)
return(EBUSY);
mp = &slt->mem[win];
- oldmap = *mp;
+ oldmap = *mp;
mp->flags = slt->rwmem|MDF_ACTIVE;
while (uio->uio_resid && error == 0) {
mp->card = uio->uio_offset;
@@ -422,7 +422,7 @@
if (pccard_mem == 0)
return(ENOMEM);
for (win = 0; win < slt->ctrl->maxmem; win++)
- if ((slt->mem[win].flags & MDF_ACTIVE) == 0)
+/*XXX*/ if ((slt->mem[win].flags & MDF_ACTIVE) == 0)
break;
if (win >= slt->ctrl->maxmem)
return(EBUSY);
Index: pccard_nbk.c
===================================================================
RCS file: /steer/ncvs/src/sys/pccard/pccard_nbk.c,v
retrieving revision 1.25
diff -u -r1.25 pccard_nbk.c
--- pccard_nbk.c 2001/01/09 04:33:39 1.25
+++ pccard_nbk.c 2001/01/28 20:11:03
@@ -53,6 +53,7 @@
#include <sys/systm.h>
#include <sys/module.h>
#include <sys/kernel.h>
+#include <sys/sysctl.h>
#include <sys/queue.h>
#include <sys/types.h>
@@ -77,6 +78,16 @@
#define PCCARD_DEVINFO(d) (struct pccard_devinfo *) device_get_ivars(d)
+SYSCTL_NODE(_machdep, OID_AUTO, pccard, CTLFLAG_RW, 0, "pccard");
+
+static u_long pcic_mem_start = 0xd0000;
+static u_long pcic_mem_end = 0xdffff;
+
+SYSCTL_ULONG(_machdep_pccard, OID_AUTO, pcic_mem_start, CTLFLAG_RW,
+ &pcic_mem_start, 0, "");
+SYSCTL_ULONG(_machdep_pccard, OID_AUTO, pcic_mem_end, CTLFLAG_RW,
+ &pcic_mem_end, 0, "");
+
/*
* glue for NEWCARD/OLDCARD compat layer
*/
@@ -215,7 +226,7 @@
{
/*
* Consider adding a resource definition. We allow rid 0 for
- * irq, 0-3 for memory and 0-1 for ports
+ * irq, 0-4 for memory and 0-1 for ports
*/
int passthrough = (device_get_parent(child) != bus);
int isdefault;
@@ -225,8 +236,8 @@
struct resource *res;
if (start == 0 && end == ~0 && type == SYS_RES_MEMORY && count != 1) {
- start = 0xd0000;
- end = 0xdffff;
+ start = pcic_mem_start;
+ end = pcic_mem_end;
}
isdefault = (start == 0UL && end == ~0UL);
if (!passthrough && !isdefault) {
@@ -254,6 +265,7 @@
default:
return 0;
}
+printf("resource_list_add rid %d, start %lx, end %lx, count %lx\n", *rid, start
, end, count);
resource_list_add(rl, type, *rid, start, end, count);
}
}
Index: pcic.c
===================================================================
RCS file: /steer/ncvs/src/sys/pccard/pcic.c,v
retrieving revision 1.103
diff -u -r1.103 pcic.c
--- pcic.c 2001/01/09 23:39:32 1.103
+++ pcic.c 2001/01/28 19:57:27
@@ -44,6 +44,7 @@
#include <isa/isavar.h>
#include <dev/pcic/i82365reg.h>
+#include <dev/pccard/pccardvar.h>
#include "card_if.h"
/*
@@ -158,6 +159,8 @@
struct mem_desc *mp = &slt->mem[win];
int reg = win * PCIC_MEMSIZE + PCIC_MEMBASE;
+ if (win < 0 || win >= slt->ctrl->maxmem)
+ panic("Illegal PCIC MEMORY window request!");
if (mp->flags & MDF_ACTIVE) {
unsigned long sys_addr = (uintptr_t)(void *)mp->start >> 12;
/*
@@ -929,14 +932,17 @@
case SYS_RES_MEMORY: {
struct mem_desc *mp = &devi->slt->mem[rid];
switch (value) {
- case 0:
+ case PCCARD_A_MEM_COM:
mp->flags &= ~MDF_ATTR;
break;
- case 1:
+ case PCCARD_A_MEM_ATTR:
mp->flags |= MDF_ATTR;
break;
- case 2:
+ case PCCARD_A_MEM_8BIT:
mp->flags &= ~MDF_16BITS;
+ break;
+ case PCCARD_A_MEM_16BIT:
+ mp->flags |= MDF_16BITS;
break;
}
err = pcic_memory(devi->slt, rid);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.010213221059.dmlb>
