diff options
author | dmlb <dmlb@FreeBSD.org> | 2001-05-08 23:59:13 +0000 |
---|---|---|
committer | dmlb <dmlb@FreeBSD.org> | 2001-05-08 23:59:13 +0000 |
commit | 95007f9f3219fb2fcd3f8a875786b2b49c7ecf44 (patch) | |
tree | 4d3f13bbf8f22e013a45f62c6f3e7a05c4e3ed25 /sys/pccard/pcic.c | |
parent | a6a2de6bfe105b0e10afe940c4733952d41c8e7e (diff) | |
download | FreeBSD-src-95007f9f3219fb2fcd3f8a875786b2b49c7ecf44.zip FreeBSD-src-95007f9f3219fb2fcd3f8a875786b2b49c7ecf44.tar.gz |
Use enumeration values for CARD_SET_RES_FLAGS.
Remove panic on out of range io window and return ENXIO. Add a similar
check for memory windows.
Approved by: imp
Diffstat (limited to 'sys/pccard/pcic.c')
-rw-r--r-- | sys/pccard/pcic.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c index d613a09..7453b38 100644 --- a/sys/pccard/pcic.c +++ b/sys/pccard/pcic.c @@ -49,6 +49,7 @@ #include <isa/isavar.h> #include <dev/pcic/i82365reg.h> +#include <dev/pccard/pccardvar.h> #include "card_if.h" /* @@ -191,6 +192,10 @@ pcic_memory(struct slot *slt, int win) struct mem_desc *mp = &slt->mem[win]; int reg = win * PCIC_MEMSIZE + PCIC_MEMBASE; + if (win < 0 || win >= slt->ctrl->maxmem) { + printf("Illegal PCIC MEMORY window request %d\n", win); + return (ENXIO); + } if (mp->flags & MDF_ACTIVE) { unsigned long sys_addr = (uintptr_t)(void *)mp->start >> 12; /* @@ -254,7 +259,8 @@ pcic_io(struct slot *slt, int win) reg = PCIC_IO1; break; default: - panic("Illegal PCIC I/O window request!"); + printf("Illegal PCIC I/O window request %d\n", win); + return (ENXIO); } if (ip->flags & IODF_ACTIVE) { unsigned char x, ioctlv; @@ -1244,15 +1250,18 @@ pcic_set_res_flags(device_t bus, device_t child, int restype, int rid, 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 = cinfo.mapmem(devi->slt, rid); break; |