summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/agp.c19
-rw-r--r--sys/dev/pci/agp_ali.c15
-rw-r--r--sys/dev/pci/agp_amd.c15
-rw-r--r--sys/dev/pci/agp_i810.c22
-rw-r--r--sys/dev/pci/agp_intel.c15
-rw-r--r--sys/dev/pci/agp_sis.c15
-rw-r--r--sys/dev/pci/agp_via.c15
-rw-r--r--sys/dev/pci/agpvar.h9
8 files changed, 56 insertions, 69 deletions
diff --git a/sys/dev/pci/agp.c b/sys/dev/pci/agp.c
index 9d4c7501831..a4359e9a8d4 100644
--- a/sys/dev/pci/agp.c
+++ b/sys/dev/pci/agp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp.c,v 1.31 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp.c,v 1.32 2009/05/10 16:57:44 oga Exp $ */
/*-
* Copyright (c) 2000 Doug Rabson
* All rights reserved.
@@ -115,13 +115,14 @@ agpvga_match(struct pci_attach_args *pa)
struct device *
agp_attach_bus(struct pci_attach_args *pa, const struct agp_methods *methods,
- bus_addr_t apaddr, struct device *dev)
+ bus_addr_t apaddr, bus_size_t apsize, struct device *dev)
{
struct agpbus_attach_args arg;
arg.aa_methods = methods;
arg.aa_pa = pa;
arg.aa_apaddr = apaddr;
+ arg.aa_apsize = apsize;
printf("\n"); /* newline from the driver that called us */
return (config_found(dev, &arg, agpdev_print));
@@ -149,6 +150,7 @@ agp_attach(struct device *parent, struct device *self, void *aux)
sc->sc_chipc = parent;
sc->sc_methods = aa->aa_methods;
sc->sc_apaddr = aa->aa_apaddr;
+ sc->sc_apsize = aa->aa_apsize;
static const int agp_max[][2] = {
{0, 0},
@@ -192,7 +194,7 @@ agp_attach(struct device *parent, struct device *self, void *aux)
&sc->sc_capoff, NULL);
printf(": aperture at 0x%lx, size 0x%lx\n", (u_long)sc->sc_apaddr,
- (u_long)sc->sc_methods->get_aperture(sc->sc_chipc));
+ (u_long)sc->sc_apsize);
}
struct cfattach agp_ca = {
@@ -211,7 +213,7 @@ agpmmap(void *v, off_t off, int prot)
if (sc->sc_apaddr) {
- if (off > sc->sc_methods->get_aperture(sc->sc_chipc))
+ if (off > sc->sc_apsize)
return (-1);
/*
@@ -475,9 +477,8 @@ agp_generic_bind_memory(struct agp_softc *sc, struct agp_memory *mem,
return (EINVAL);
}
- if (offset < 0 || (offset & (AGP_PAGE_SIZE - 1)) != 0
- || offset + mem->am_size >
- sc->sc_methods->get_aperture(sc->sc_chipc)) {
+ if (offset < 0 || (offset & (AGP_PAGE_SIZE - 1)) != 0 ||
+ offset + mem->am_size > sc->sc_apsize) {
printf("AGP: binding memory at bad offset %#lx\n",
(unsigned long) offset);
rw_exit_write(&sc->sc_lock);
@@ -699,7 +700,7 @@ agp_info_user(void *dev, agp_info *info)
else
info->agp_mode = 0; /* i810 doesn't have real AGP */
info->aper_base = sc->sc_apaddr;
- info->aper_size = sc->sc_methods->get_aperture(sc->sc_chipc) >> 20;
+ info->aper_size = sc->sc_apsize >> 20;
info->pg_total =
info->pg_system = sc->sc_maxmem >> AGP_PAGE_SHIFT;
info->pg_used = sc->sc_allocated >> AGP_PAGE_SHIFT;
@@ -799,7 +800,7 @@ agp_get_info(void *dev, struct agp_info *info)
else
info->ai_mode = 0; /* i810 doesn't have real AGP */
info->ai_aperture_base = sc->sc_apaddr;
- info->ai_aperture_size = sc->sc_methods->get_aperture(sc->sc_chipc);
+ info->ai_aperture_size = sc->sc_apsize;
info->ai_memory_allowed = sc->sc_maxmem;
info->ai_memory_used = sc->sc_allocated;
}
diff --git a/sys/dev/pci/agp_ali.c b/sys/dev/pci/agp_ali.c
index 1fe96e3eaaa..5058ac0ca4c 100644
--- a/sys/dev/pci/agp_ali.c
+++ b/sys/dev/pci/agp_ali.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_ali.c,v 1.9 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_ali.c,v 1.10 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agp_ali.c,v 1.2 2001/09/15 00:25:00 thorpej Exp $ */
@@ -56,7 +56,7 @@ struct agp_ali_softc {
pci_chipset_tag_t asc_pc;
pcitag_t asc_tag;
bus_addr_t asc_apaddr;
- bus_size_t initial_aperture;
+ bus_size_t asc_apsize;
};
void agp_ali_attach(struct device *, struct device *, void *);
@@ -76,7 +76,6 @@ struct cfdriver aliagp_cd = {
};
const struct agp_methods agp_ali_methods = {
- agp_ali_get_aperture,
agp_ali_bind_page,
agp_ali_unbind_page,
agp_ali_flush_tlb,
@@ -106,7 +105,7 @@ agp_ali_attach(struct device *parent, struct device *self, void *aux)
asc->asc_tag = pa->pa_tag;
asc->asc_pc = pa->pa_pc;
- asc->initial_aperture = agp_ali_get_aperture(asc);
+ asc->asc_apsize = agp_ali_get_aperture(asc);
if (pci_mapreg_info(pa->pa_pc, pa->pa_tag, AGP_APBASE,
PCI_MAPREG_TYPE_MEM, &asc->asc_apaddr, NULL, NULL) != 0) {
@@ -115,15 +114,15 @@ agp_ali_attach(struct device *parent, struct device *self, void *aux)
}
for (;;) {
- bus_size_t size = agp_ali_get_aperture(asc);
- gatt = agp_alloc_gatt(pa->pa_dmat, size);
+ gatt = agp_alloc_gatt(pa->pa_dmat, asc->asc_apsize);
if (gatt != NULL)
break;
/*
* almost certainly error allocating contigious dma memory
* so reduce aperture so that the gatt size reduces.
*/
- if (agp_ali_set_aperture(asc, size / 2)) {
+ asc->asc_apsize /= 2;
+ if (agp_ali_set_aperture(asc, asc->asc_apsize)) {
printf("failed to set aperture\n");
return;
}
@@ -141,7 +140,7 @@ agp_ali_attach(struct device *parent, struct device *self, void *aux)
pci_conf_write(asc->asc_pc, asc->asc_tag, AGP_ALI_TLBCTRL, reg);
asc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_ali_methods,
- asc->asc_apaddr, &asc->dev);
+ asc->asc_apaddr, asc->asc_apsize, &asc->dev);
return;
}
diff --git a/sys/dev/pci/agp_amd.c b/sys/dev/pci/agp_amd.c
index f2d4cda07ca..58d0d582648 100644
--- a/sys/dev/pci/agp_amd.c
+++ b/sys/dev/pci/agp_amd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_amd.c,v 1.12 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_amd.c,v 1.13 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agp_amd.c,v 1.6 2001/10/06 02:48:50 thorpej Exp $ */
/*-
@@ -73,7 +73,7 @@ struct agp_amd_softc {
bus_space_handle_t ioh;
bus_space_tag_t iot;
bus_addr_t asc_apaddr;
- bus_size_t initial_aperture;
+ bus_size_t asc_apsize;
};
void agp_amd_attach(struct device *, struct device *, void *);
@@ -94,7 +94,6 @@ struct cfdriver amdagp_cd = {
};
const struct agp_methods agp_amd_methods = {
- agp_amd_get_aperture,
agp_amd_bind_page,
agp_amd_unbind_page,
agp_amd_flush_tlb,
@@ -206,11 +205,10 @@ agp_amd_attach(struct device *parent, struct device *self, void *aux)
return;
}
- asc->initial_aperture = agp_amd_get_aperture(asc);
+ asc->asc_apsize = agp_amd_get_aperture(asc);
for (;;) {
- bus_size_t size = agp_amd_get_aperture(asc);
- gatt = agp_amd_alloc_gatt(pa->pa_dmat, size);
+ gatt = agp_amd_alloc_gatt(pa->pa_dmat, asc->asc_apsize);
if (gatt != NULL)
break;
@@ -218,7 +216,8 @@ agp_amd_attach(struct device *parent, struct device *self, void *aux)
* almost certainly error allocating contigious dma memory
* so reduce aperture so that the gatt size reduces.
*/
- if (agp_amd_set_aperture(asc, size / 2)) {
+ asc->asc_apsize /= 2;
+ if (agp_amd_set_aperture(asc, asc->asc_apsize)) {
printf(": failed to set aperture\n");
return;
}
@@ -239,7 +238,7 @@ agp_amd_attach(struct device *parent, struct device *self, void *aux)
agp_amd_flush_tlb(asc);
asc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_amd_methods,
- asc->asc_apaddr, &asc->dev);
+ asc->asc_apaddr, asc->asc_apsize, &asc->dev);
return;
}
diff --git a/sys/dev/pci/agp_i810.c b/sys/dev/pci/agp_i810.c
index da7ef078622..3b1a18346ee 100644
--- a/sys/dev/pci/agp_i810.c
+++ b/sys/dev/pci/agp_i810.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_i810.c,v 1.51 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_i810.c,v 1.52 2009/05/10 16:57:44 oga Exp $ */
/*-
* Copyright (c) 2000 Doug Rabson
@@ -69,7 +69,7 @@ struct agp_i810_softc {
struct vga_pci_bar *map;
struct vga_pci_bar *gtt_map;
bus_addr_t isc_apaddr;
- bus_size_t aperture; /* current aperture size */
+ bus_size_t isc_apsize; /* current aperture size */
int chiptype; /* i810-like or i830 */
u_int32_t dcache_size; /* i810 only */
u_int32_t stolen; /* number of i830/845 gtt
@@ -79,7 +79,6 @@ struct agp_i810_softc {
void agp_i810_attach(struct device *, struct device *, void *);
int agp_i810_probe(struct device *, void *, void *);
int agp_i810_get_chiptype(struct pci_attach_args *);
-bus_size_t agp_i810_get_aperture(void *);
void agp_i810_bind_page(void *, bus_size_t, paddr_t, int);
void agp_i810_unbind_page(void *, bus_size_t);
void agp_i810_flush_tlb(void *);
@@ -100,7 +99,6 @@ struct cfdriver intagp_cd = {
};
struct agp_methods agp_i810_methods = {
- agp_i810_get_aperture,
agp_i810_bind_page,
agp_i810_unbind_page,
agp_i810_flush_tlb,
@@ -231,8 +229,8 @@ agp_i810_attach(struct device *parent, struct device *self, void *aux)
}
if (pci_mapreg_info(pa->pa_pc, pa->pa_tag, gmaddr, memtype,
- &isc->isc_apaddr, &isc->aperture, NULL) != 0) {
- printf("can't get aperture size\n");
+ &isc->isc_apaddr, &isc->isc_apsize, NULL) != 0) {
+ printf("can't get aperture info\n");
return;
}
@@ -258,7 +256,7 @@ agp_i810_attach(struct device *parent, struct device *self, void *aux)
}
isc->gatt = gatt;
- gatt->ag_entries = isc->aperture >> AGP_PAGE_SHIFT;
+ gatt->ag_entries = isc->isc_apsize >> AGP_PAGE_SHIFT;
/*
* Find the GMCH, some of the registers we need to read for
@@ -459,7 +457,7 @@ agp_i810_attach(struct device *parent, struct device *self, void *aux)
agp_flush_cache();
isc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_i810_methods,
- isc->isc_apaddr, &isc->dev);
+ isc->isc_apaddr, isc->isc_apsize, &isc->dev);
return;
out:
@@ -507,14 +505,6 @@ agp_i810_detach(struct agp_softc *sc)
}
#endif
-bus_size_t
-agp_i810_get_aperture(void *sc)
-{
- struct agp_i810_softc *isc = sc;
-
- return (isc->aperture);
-}
-
void
agp_i810_bind_page(void *sc, bus_addr_t offset, paddr_t physical, int flags)
{
diff --git a/sys/dev/pci/agp_intel.c b/sys/dev/pci/agp_intel.c
index 56905c35b5c..d8dde36e9ae 100644
--- a/sys/dev/pci/agp_intel.c
+++ b/sys/dev/pci/agp_intel.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_intel.c,v 1.14 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_intel.c,v 1.15 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agp_intel.c,v 1.3 2001/09/15 00:25:00 thorpej Exp $ */
/*-
@@ -54,6 +54,7 @@ struct agp_intel_softc {
pci_chipset_tag_t isc_pc;
pcitag_t isc_tag;
bus_addr_t isc_apaddr;
+ bus_size_t isc_apsize;
u_int aperture_mask;
enum {
CHIP_INTEL,
@@ -63,7 +64,6 @@ struct agp_intel_softc {
CHIP_I850,
CHIP_I865
} chiptype;
- bus_size_t initial_aperture; /* startup aperture size */
};
@@ -84,7 +84,6 @@ struct cfdriver intelagp_cd = {
};
const struct agp_methods agp_intel_methods = {
- agp_intel_get_aperture,
agp_intel_bind_page,
agp_intel_unbind_page,
agp_intel_flush_tlb,
@@ -176,11 +175,10 @@ agp_intel_attach(struct device *parent, struct device *self, void *aux)
isc->aperture_mask = pci_conf_read(pa->pa_pc, pa->pa_tag,
AGP_INTEL_APSIZE) & APSIZE_MASK;
pci_conf_write(pa->pa_pc, pa->pa_tag, AGP_INTEL_APSIZE, value);
- isc->initial_aperture = agp_intel_get_aperture(isc);
+ isc->isc_apsize = agp_intel_get_aperture(isc);
for (;;) {
- bus_size_t size = agp_intel_get_aperture(isc);
- gatt = agp_alloc_gatt(pa->pa_dmat, size);
+ gatt = agp_alloc_gatt(pa->pa_dmat, isc->isc_apsize);
if (gatt != NULL)
break;
@@ -188,7 +186,8 @@ agp_intel_attach(struct device *parent, struct device *self, void *aux)
* almost certainly error allocating contigious dma memory
* so reduce aperture so that the gatt size reduces.
*/
- if (agp_intel_set_aperture(isc, size / 2)) {
+ isc->isc_apsize /= 2;
+ if (agp_intel_set_aperture(isc, isc->isc_apsize)) {
printf(": failed to set aperture\n");
return;
}
@@ -255,7 +254,7 @@ agp_intel_attach(struct device *parent, struct device *self, void *aux)
}
isc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_intel_methods,
- isc->isc_apaddr, &isc->dev);
+ isc->isc_apaddr, isc->isc_apsize, &isc->dev);
return;
}
diff --git a/sys/dev/pci/agp_sis.c b/sys/dev/pci/agp_sis.c
index e96199abcff..8a0f9e6426c 100644
--- a/sys/dev/pci/agp_sis.c
+++ b/sys/dev/pci/agp_sis.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_sis.c,v 1.12 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_sis.c,v 1.13 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agp_sis.c,v 1.2 2001/09/15 00:25:00 thorpej Exp $ */
/*-
@@ -55,7 +55,7 @@ struct agp_sis_softc {
pci_chipset_tag_t ssc_pc;
pcitag_t ssc_tag;
bus_addr_t ssc_apaddr;
- bus_size_t initial_aperture;
+ bus_size_t ssc_apsize;
};
void agp_sis_attach(struct device *, struct device *, void *);
@@ -75,7 +75,6 @@ struct cfdriver sisagp_cd = {
};
const struct agp_methods agp_sis_methods = {
- agp_sis_get_aperture,
agp_sis_bind_page,
agp_sis_unbind_page,
agp_sis_flush_tlb,
@@ -113,11 +112,10 @@ agp_sis_attach(struct device *parent, struct device *self, void *aux)
ssc->ssc_pc = pa->pa_pc;
ssc->ssc_tag = pa->pa_tag;
- ssc->initial_aperture = agp_sis_get_aperture(ssc);
+ ssc->ssc_apsize = agp_sis_get_aperture(ssc);
for (;;) {
- bus_size_t size = agp_sis_get_aperture(ssc);
- gatt = agp_alloc_gatt(pa->pa_dmat, size);
+ gatt = agp_alloc_gatt(pa->pa_dmat, ssc->ssc_apsize);
if (gatt != NULL)
break;
@@ -125,7 +123,8 @@ agp_sis_attach(struct device *parent, struct device *self, void *aux)
* Probably failed to alloc congigious memory. Try reducing the
* aperture so that the gatt size reduces.
*/
- if (agp_sis_set_aperture(ssc, size / 2)) {
+ ssc->ssc_apsize /= 2;
+ if (agp_sis_set_aperture(ssc, ssc->ssc_apsize)) {
printf("can't set aperture size\n");
return;
}
@@ -142,7 +141,7 @@ agp_sis_attach(struct device *parent, struct device *self, void *aux)
pci_conf_write(ssc->ssc_pc, ssc->ssc_tag, AGP_SIS_WINCTRL, reg);
ssc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_sis_methods,
- ssc->ssc_apaddr, &ssc->dev);
+ ssc->ssc_apaddr, ssc->ssc_apsize, &ssc->dev);
return;
}
diff --git a/sys/dev/pci/agp_via.c b/sys/dev/pci/agp_via.c
index dd4f2cbac00..cdec2b29feb 100644
--- a/sys/dev/pci/agp_via.c
+++ b/sys/dev/pci/agp_via.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: agp_via.c,v 1.13 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agp_via.c,v 1.14 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agp_via.c,v 1.2 2001/09/15 00:25:00 thorpej Exp $ */
/*-
@@ -57,7 +57,6 @@ void agp_via_unbind_page(void *, bus_addr_t);
void agp_via_flush_tlb(void *);
const struct agp_methods agp_via_methods = {
- agp_via_get_aperture,
agp_via_bind_page,
agp_via_unbind_page,
agp_via_flush_tlb,
@@ -71,7 +70,7 @@ struct agp_via_softc {
pci_chipset_tag_t vsc_pc;
pcitag_t vsc_tag;
bus_addr_t vsc_apaddr;
- bus_size_t initial_aperture;
+ bus_size_t vsc_apsize;
};
struct cfattach viaagp_ca = {
@@ -142,11 +141,10 @@ agp_via_attach(struct device *parent, struct device *self, void *aux)
}
- vsc->initial_aperture = agp_via_get_aperture(vsc);
+ vsc->vsc_apsize = agp_via_get_aperture(vsc);
for (;;) {
- bus_size_t size = agp_via_get_aperture(vsc);
- gatt = agp_alloc_gatt(pa->pa_dmat, size);
+ gatt = agp_alloc_gatt(pa->pa_dmat, vsc->vsc_apsize);
if (gatt != NULL)
break;
@@ -154,7 +152,8 @@ agp_via_attach(struct device *parent, struct device *self, void *aux)
* Probably failed to alloc congigious memory. Try reducing the
* aperture so that the gatt size reduces.
*/
- if (agp_via_set_aperture(vsc, size / 2)) {
+ vsc->vsc_apsize /= 2;
+ if (agp_via_set_aperture(vsc, vsc->vsc_apsize)) {
printf(", can't set aperture size\n");
return;
}
@@ -180,7 +179,7 @@ agp_via_attach(struct device *parent, struct device *self, void *aux)
gartctrl | (3 << 7));
}
vsc->agpdev = (struct agp_softc *)agp_attach_bus(pa, &agp_via_methods,
- vsc->vsc_apaddr, &vsc->dev);
+ vsc->vsc_apaddr, vsc->vsc_apsize, &vsc->dev);
return;
}
diff --git a/sys/dev/pci/agpvar.h b/sys/dev/pci/agpvar.h
index 331cdd90b1c..9ea6d3ed386 100644
--- a/sys/dev/pci/agpvar.h
+++ b/sys/dev/pci/agpvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: agpvar.h,v 1.18 2009/05/10 15:28:45 oga Exp $ */
+/* $OpenBSD: agpvar.h,v 1.19 2009/05/10 16:57:44 oga Exp $ */
/* $NetBSD: agpvar.h,v 1.4 2001/10/01 21:54:48 fvdl Exp $ */
/*-
@@ -53,6 +53,7 @@ struct agpbus_attach_args {
struct pci_attach_args *aa_pa;
const struct agp_methods *aa_methods;
bus_addr_t aa_apaddr;
+ bus_size_t aa_apsize;
};
enum agp_acquire_state {
@@ -98,7 +99,6 @@ struct agp_memory_info {
};
struct agp_methods {
- bus_size_t (*get_aperture)(void *);
void (*bind_page)(void *, bus_addr_t, paddr_t, int);
void (*unbind_page)(void *, bus_addr_t);
void (*flush_tlb)(void *);
@@ -122,9 +122,10 @@ struct agp_softc {
void *sc_chipc; /* chipset softc */
bus_dma_tag_t sc_dmat;
- bus_addr_t sc_apaddr;
pci_chipset_tag_t sc_pc;
pcitag_t sc_pcitag;
+ bus_addr_t sc_apaddr;
+ bus_size_t sc_apsize;
pcireg_t sc_id;
int sc_opened;
@@ -149,7 +150,7 @@ struct agp_gatt {
* Functions private to the AGP code.
*/
struct device *agp_attach_bus(struct pci_attach_args *,
- const struct agp_methods *, bus_addr_t,
+ const struct agp_methods *, bus_addr_t, bus_size_t,
struct device *);
struct agp_gatt *
agp_alloc_gatt(bus_dma_tag_t, u_int32_t);