Index: agp.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp.c,v retrieving revision 1.79 diff -u -u -r1.79 agp.c --- agp.c 4 Apr 2011 20:37:56 -0000 1.79 +++ agp.c 2 Sep 2011 20:40:01 -0000 @@ -760,7 +760,7 @@ AGP_DPF(("binding offset %#lx to pa %#lx\n", (unsigned long)(offset + done + j), (unsigned long)pa)); - error = AGP_BIND_PAGE(sc, offset + done + j, pa); + error = AGP_BIND_PAGE(sc, offset + done + j, pa, 0); if (error) { /* * Bail out. Reverse all the mappings Index: agp_ali.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_ali.c,v retrieving revision 1.16 diff -u -u -r1.16 agp_ali.c --- agp_ali.c 13 Nov 2010 13:52:04 -0000 1.16 +++ agp_ali.c 2 Sep 2011 20:40:01 -0000 @@ -54,22 +54,23 @@ static u_int32_t agp_ali_get_aperture(struct agp_softc *); static int agp_ali_set_aperture(struct agp_softc *sc, u_int32_t); -static int agp_ali_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_ali_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_ali_unbind_page(struct agp_softc *, off_t); static void agp_ali_flush_tlb(struct agp_softc *); static struct agp_methods agp_ali_methods = { - agp_ali_get_aperture, - agp_ali_set_aperture, - agp_ali_bind_page, - agp_ali_unbind_page, - agp_ali_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_ali_get_aperture, + .set_aperture = agp_ali_set_aperture, + .bind_page = agp_ali_bind_page, + .unbind_page = agp_ali_unbind_page, + .flush_tlb = agp_ali_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; int @@ -214,7 +215,8 @@ } static int -agp_ali_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_ali_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_ali_softc *asc = sc->as_chipc; Index: agp_amd.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_amd.c,v retrieving revision 1.21 diff -u -u -r1.21 agp_amd.c --- agp_amd.c 13 Nov 2010 13:52:04 -0000 1.21 +++ agp_amd.c 2 Sep 2011 20:40:01 -0000 @@ -73,22 +73,23 @@ static u_int32_t agp_amd_get_aperture(struct agp_softc *); static int agp_amd_set_aperture(struct agp_softc *, u_int32_t); -static int agp_amd_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_amd_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_amd_unbind_page(struct agp_softc *, off_t); static void agp_amd_flush_tlb(struct agp_softc *); static struct agp_methods agp_amd_methods = { - agp_amd_get_aperture, - agp_amd_set_aperture, - agp_amd_bind_page, - agp_amd_unbind_page, - agp_amd_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_amd_get_aperture, + .set_aperture = agp_amd_set_aperture, + .bind_page = agp_amd_bind_page, + .unbind_page = agp_amd_unbind_page, + .flush_tlb = agp_amd_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; @@ -303,7 +304,8 @@ } static int -agp_amd_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_amd_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_amd_softc *asc = sc->as_chipc; Index: agp_amd64.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_amd64.c,v retrieving revision 1.6 diff -u -u -r1.6 agp_amd64.c --- agp_amd64.c 13 Nov 2010 13:52:04 -0000 1.6 +++ agp_amd64.c 2 Sep 2011 20:40:02 -0000 @@ -56,7 +56,7 @@ static uint32_t agp_amd64_get_aperture(struct agp_softc *); static int agp_amd64_set_aperture(struct agp_softc *, uint32_t); -static int agp_amd64_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_amd64_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_amd64_unbind_page(struct agp_softc *, off_t); static void agp_amd64_flush_tlb(struct agp_softc *); @@ -85,16 +85,17 @@ }; static struct agp_methods agp_amd64_methods = { - agp_amd64_get_aperture, - agp_amd64_set_aperture, - agp_amd64_bind_page, - agp_amd64_unbind_page, - agp_amd64_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_amd64_get_aperture, + .set_aperture = agp_amd64_set_aperture, + .bind_page = agp_amd64_bind_page, + .unbind_page = agp_amd64_unbind_page, + .flush_tlb = agp_amd64_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; @@ -373,7 +374,8 @@ } static int -agp_amd64_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_amd64_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_amd64_softc *asc = sc->as_chipc; Index: agp_apple.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_apple.c,v retrieving revision 1.6 diff -u -u -r1.6 agp_apple.c --- agp_apple.c 13 Nov 2010 13:52:04 -0000 1.6 +++ agp_apple.c 2 Sep 2011 20:40:02 -0000 @@ -46,21 +46,22 @@ static u_int32_t agp_apple_get_aperture(struct agp_softc *); static int agp_apple_set_aperture(struct agp_softc *, u_int32_t); -static int agp_apple_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_apple_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_apple_unbind_page(struct agp_softc *, off_t); static void agp_apple_flush_tlb(struct agp_softc *); static struct agp_methods agp_apple_methods = { - agp_apple_get_aperture, - agp_apple_set_aperture, - agp_apple_bind_page, - agp_apple_unbind_page, - agp_apple_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_apple_get_aperture, + .set_aperture = agp_apple_set_aperture, + .bind_page = agp_apple_bind_page, + .unbind_page = agp_apple_unbind_page, + .flush_tlb = agp_apple_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; struct agp_apple_softc { @@ -154,7 +155,8 @@ } static int -agp_apple_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_apple_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_apple_softc *asc = sc->as_chipc; Index: agp_i810.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_i810.c,v retrieving revision 1.73 diff -u -u -r1.73 agp_i810.c --- agp_i810.c 4 Apr 2011 20:37:56 -0000 1.73 +++ agp_i810.c 2 Sep 2011 20:40:03 -0000 @@ -56,6 +56,9 @@ #define READ4(off) bus_space_read_4(isc->bst, isc->bsh, off) #define WRITE4(off,v) bus_space_write_4(isc->bst, isc->bsh, off, v) +/* Memory is snooped, must not be accessed through gtt from the cpu. */ +#define INTEL_COHERENT 0x6 + #define CHIP_I810 0 /* i810/i815 */ #define CHIP_I830 1 /* 830M/845G */ #define CHIP_I855 2 /* 852GM/855GM/865G */ @@ -66,6 +69,9 @@ struct agp_i810_softc { u_int32_t initial_aperture; /* aperture size at startup */ + bus_dmamap_t scrib_dmamap; + bus_dma_segment_t scrib_seg; + void *scrib_vaddr; struct agp_gatt *gatt; int chiptype; /* i810-like or i830 */ u_int32_t dcache_size; /* i810 only */ @@ -81,12 +87,14 @@ }; /* XXX hack, see below */ +static bool agp_i810_vga_mapped = false; static bus_addr_t agp_i810_vga_regbase; +static bus_space_tag_t agp_i810_vga_bst; static bus_space_handle_t agp_i810_vga_bsh; static u_int32_t agp_i810_get_aperture(struct agp_softc *); static int agp_i810_set_aperture(struct agp_softc *, u_int32_t); -static int agp_i810_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_i810_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_i810_unbind_page(struct agp_softc *, off_t); static void agp_i810_flush_tlb(struct agp_softc *); static int agp_i810_enable(struct agp_softc *, u_int32_t mode); @@ -103,17 +111,21 @@ static int agp_i810_write_gtt_entry(struct agp_i810_softc *, off_t, bus_addr_t); +extern void intagp_dma_sync(void *, bus_dma_tag_t, bus_dmamap_t, bus_addr_t, + bus_size_t, int); + static struct agp_methods agp_i810_methods = { - agp_i810_get_aperture, - agp_i810_set_aperture, - agp_i810_bind_page, - agp_i810_unbind_page, - agp_i810_flush_tlb, - agp_i810_enable, - agp_i810_alloc_memory, - agp_i810_free_memory, - agp_i810_bind_memory, - agp_i810_unbind_memory, + .get_aperture = agp_i810_get_aperture, + .set_aperture = agp_i810_set_aperture, + .bind_page = agp_i810_bind_page, + .unbind_page = agp_i810_unbind_page, + .flush_tlb = agp_i810_flush_tlb, + .dma_sync = intagp_dma_sync, + .enable = agp_i810_enable, + .alloc_memory = agp_i810_alloc_memory, + .free_memory = agp_i810_free_memory, + .bind_memory = agp_i810_bind_memory, + .unbind_memory = agp_i810_unbind_memory, }; static int @@ -424,10 +436,17 @@ * XXX horrible hack to allow drm code to use our mapping * of VGA chip registers */ + agp_i810_vga_mapped = true; agp_i810_vga_regbase = mmadr; + agp_i810_vga_bst = isc->bst; agp_i810_vga_bsh = isc->bsh; - return agp_i810_init(sc); + error = agp_i810_init(sc); + if (error != 0) { + free(gatt, M_AGP); + agp_generic_detach(sc); + } + return error; } /* @@ -435,11 +454,13 @@ * of VGA chip registers */ int -agp_i810_borrow(bus_addr_t base, bus_space_handle_t *hdlp) +agp_i810_borrow(bus_addr_t base, bus_space_tag_t *tagp, bus_space_handle_t *hdlp) { - if (!agp_i810_vga_regbase || base != agp_i810_vga_regbase) + if (!agp_i810_vga_mapped || !agp_i810_vga_regbase || + base != agp_i810_vga_regbase) return 0; + *tagp = agp_i810_vga_bst; *hdlp = agp_i810_vga_bsh; return 1; } @@ -448,6 +469,8 @@ { struct agp_i810_softc *isc; struct agp_gatt *gatt; + bus_addr_t tmp; + int dummyrseg; isc = sc->as_chipc; gatt = isc->gatt; @@ -466,8 +489,6 @@ if (agp_alloc_dmamem(sc->as_dmat, 64 * 1024, 0, &gatt->ag_dmamap, &virtual, &gatt->ag_physical, &gatt->ag_dmaseg, 1, &dummyseg) != 0) { - free(gatt, M_AGP); - agp_generic_detach(sc); return ENOMEM; } gatt->ag_virtual = (uint32_t *)virtual; @@ -499,7 +520,6 @@ isc->stolen = 0; aprint_error( ": unknown memory configuration, disabling\n"); - agp_generic_detach(sc); return EINVAL; } @@ -554,7 +574,6 @@ break; default: aprint_error("Bad PGTBL size\n"); - agp_generic_detach(sc); return EINVAL; } break; @@ -568,7 +587,6 @@ break; default: aprint_error(": Bad PGTBL size\n"); - agp_generic_detach(sc); return EINVAL; } break; @@ -577,7 +595,6 @@ break; default: aprint_error(": bad chiptype\n"); - agp_generic_detach(sc); return EINVAL; } @@ -624,7 +641,6 @@ default: aprint_error( ": unknown memory configuration, disabling\n"); - agp_generic_detach(sc); return EINVAL; } @@ -671,6 +687,25 @@ gatt->ag_physical = pgtblctl & ~1; } + /* Intel recommends that you have a fake page bound to the gtt always */ + if (agp_alloc_dmamem(sc->as_dmat, AGP_PAGE_SIZE, 0, &isc->scrib_dmamap, + &isc->scrib_vaddr, &tmp, &isc->scrib_seg, 1, &dummyrseg) != 0) { + aprint_error(": can't get scribble page\n"); + return ENOMEM; + } + + tmp = 0; + if (isc->chiptype == CHIP_I810) { + tmp += isc->dcache_size; + } else { + tmp += isc->stolen << AGP_PAGE_SHIFT; + } + + /* initialise all gtt entries to point to scribble page */ + for (; tmp < sc->as_apsize; tmp += AGP_PAGE_SIZE) + agp_i810_unbind_page(sc, tmp); + /* XXX we'll need to restore the GTT contents when we go kms */ + /* * Make sure the chipset can see everything. */ @@ -699,6 +734,8 @@ pgtblctl &= ~1; WRITE4(AGP_I810_PGTBL_CTL, pgtblctl); } + agp_free_dmamem(sc->as_dmat, AGP_PAGE_SIZE, isc->scrib_dmamap, + isc->scrib_vaddr, &isc->scrib_seg, 1); /* Put the aperture back the way it started. */ AGP_SET_APERTURE(sc, isc->initial_aperture); @@ -835,7 +872,8 @@ } static int -agp_i810_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_i810_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_i810_softc *isc = sc->as_chipc; @@ -858,6 +896,13 @@ } } + /* + * COHERENT mappings mean set the snoop bit. this should never be + * accessed by the gpu through the gtt. + */ + if (flags & BUS_DMA_COHERENT) + physical |= INTEL_COHERENT; + return agp_i810_write_gtt_entry(isc, offset, physical | 1); } @@ -879,7 +924,8 @@ } } - return agp_i810_write_gtt_entry(isc, offset, 0); + return agp_i810_write_gtt_entry(isc, offset, + isc->scrib_dmamap->dm_segs[0].ds_addr | 1); } /* @@ -1015,7 +1061,7 @@ if (mem->am_type == 2) { for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) agp_i810_bind_page(sc, offset + i, - mem->am_physical + i); + mem->am_physical + i, 0); mem->am_offset = offset; mem->am_is_bound = 1; return 0; Index: agp_intel.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_intel.c,v retrieving revision 1.37 diff -u -u -r1.37 agp_intel.c --- agp_intel.c 4 Apr 2011 20:37:56 -0000 1.37 +++ agp_intel.c 2 Sep 2011 20:40:03 -0000 @@ -65,23 +65,24 @@ static u_int32_t agp_intel_get_aperture(struct agp_softc *); static int agp_intel_set_aperture(struct agp_softc *, u_int32_t); -static int agp_intel_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_intel_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_intel_unbind_page(struct agp_softc *, off_t); static void agp_intel_flush_tlb(struct agp_softc *); static int agp_intel_init(struct agp_softc *); static bool agp_intel_resume(device_t, const pmf_qual_t *); static struct agp_methods agp_intel_methods = { - agp_intel_get_aperture, - agp_intel_set_aperture, - agp_intel_bind_page, - agp_intel_unbind_page, - agp_intel_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_intel_get_aperture, + .set_aperture = agp_intel_set_aperture, + .bind_page = agp_intel_bind_page, + .unbind_page = agp_intel_unbind_page, + .flush_tlb = agp_intel_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; static int @@ -342,7 +343,8 @@ } static int -agp_intel_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_intel_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_intel_softc *isc = sc->as_chipc; Index: agp_sis.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_sis.c,v retrieving revision 1.14 diff -u -u -r1.14 agp_sis.c --- agp_sis.c 13 Nov 2010 13:52:05 -0000 1.14 +++ agp_sis.c 2 Sep 2011 20:40:03 -0000 @@ -54,21 +54,22 @@ static u_int32_t agp_sis_get_aperture(struct agp_softc *); static int agp_sis_set_aperture(struct agp_softc *, u_int32_t); -static int agp_sis_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_sis_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_sis_unbind_page(struct agp_softc *, off_t); static void agp_sis_flush_tlb(struct agp_softc *); static struct agp_methods agp_sis_methods = { - agp_sis_get_aperture, - agp_sis_set_aperture, - agp_sis_bind_page, - agp_sis_unbind_page, - agp_sis_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_sis_get_aperture, + .set_aperture = agp_sis_set_aperture, + .bind_page = agp_sis_bind_page, + .unbind_page = agp_sis_unbind_page, + .flush_tlb = agp_sis_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; int @@ -190,7 +191,8 @@ } static int -agp_sis_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_sis_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_sis_softc *ssc = sc->as_chipc; Index: agp_via.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agp_via.c,v retrieving revision 1.21 diff -u -u -r1.21 agp_via.c --- agp_via.c 19 Feb 2011 20:07:02 -0000 1.21 +++ agp_via.c 2 Sep 2011 20:40:03 -0000 @@ -50,21 +50,22 @@ static u_int32_t agp_via_get_aperture(struct agp_softc *); static int agp_via_set_aperture(struct agp_softc *, u_int32_t); -static int agp_via_bind_page(struct agp_softc *, off_t, bus_addr_t); +static int agp_via_bind_page(struct agp_softc *, off_t, bus_addr_t, int); static int agp_via_unbind_page(struct agp_softc *, off_t); static void agp_via_flush_tlb(struct agp_softc *); static struct agp_methods agp_via_methods = { - agp_via_get_aperture, - agp_via_set_aperture, - agp_via_bind_page, - agp_via_unbind_page, - agp_via_flush_tlb, - agp_generic_enable, - agp_generic_alloc_memory, - agp_generic_free_memory, - agp_generic_bind_memory, - agp_generic_unbind_memory, + .get_aperture = agp_via_get_aperture, + .set_aperture = agp_via_set_aperture, + .bind_page = agp_via_bind_page, + .unbind_page = agp_via_unbind_page, + .flush_tlb = agp_via_flush_tlb, + .dma_sync = NULL, + .enable = agp_generic_enable, + .alloc_memory = agp_generic_alloc_memory, + .free_memory = agp_generic_free_memory, + .bind_memory = agp_generic_bind_memory, + .unbind_memory = agp_generic_unbind_memory, }; struct agp_via_softc { @@ -305,7 +306,8 @@ } static int -agp_via_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical) +agp_via_bind_page(struct agp_softc *sc, off_t offset, bus_addr_t physical, + int flags) { struct agp_via_softc *asc = sc->as_chipc; Index: agpvar.h =================================================================== RCS file: /cvsroot/src/sys/dev/pci/agpvar.h,v retrieving revision 1.18 diff -u -u -r1.18 agpvar.h --- agpvar.h 6 May 2009 10:34:32 -0000 1.18 +++ agpvar.h 2 Sep 2011 20:40:03 -0000 @@ -103,9 +103,11 @@ struct agp_methods { u_int32_t (*get_aperture)(struct agp_softc *); int (*set_aperture)(struct agp_softc *, u_int32_t); - int (*bind_page)(struct agp_softc *, off_t, bus_addr_t); + int (*bind_page)(struct agp_softc *, off_t, bus_addr_t, int); int (*unbind_page)(struct agp_softc *, off_t); void (*flush_tlb)(struct agp_softc *); + void (*dma_sync)(void *, bus_dma_tag_t, bus_dmamap_t, bus_addr_t, + bus_size_t, int); int (*enable)(struct agp_softc *, u_int32_t mode); struct agp_memory *(*alloc_memory)(struct agp_softc *, int, vsize_t); int (*free_memory)(struct agp_softc *, struct agp_memory *); @@ -115,7 +117,7 @@ #define AGP_GET_APERTURE(sc) ((sc)->as_methods->get_aperture(sc)) #define AGP_SET_APERTURE(sc,a) ((sc)->as_methods->set_aperture((sc),(a))) -#define AGP_BIND_PAGE(sc,o,p) ((sc)->as_methods->bind_page((sc),(o),(p))) +#define AGP_BIND_PAGE(sc,o,p,f) ((sc)->as_methods->bind_page((sc),(o),(p),(f))) #define AGP_UNBIND_PAGE(sc,o) ((sc)->as_methods->unbind_page((sc), (o))) #define AGP_FLUSH_TLB(sc) ((sc)->as_methods->flush_tlb(sc)) #define AGP_ENABLE(sc,m) ((sc)->as_methods->enable((sc),(m))) @@ -167,6 +169,7 @@ * Functions private to the AGP code. */ void agp_flush_cache(void); +void agp_flush_cache_range(vaddr_t, vsize_t); int agp_find_caps(pci_chipset_tag_t, pcitag_t); int agp_map_aperture(struct pci_attach_args *, struct agp_softc *, int); struct agp_gatt *agp_alloc_gatt(struct agp_softc *); @@ -196,6 +199,22 @@ void agp_free_dmamem(bus_dma_tag_t, size_t, bus_dmamap_t, void *, bus_dma_segment_t *, int) ; +int agp_bus_dma_init(struct agp_softc *, bus_addr_t, bus_addr_t, + bus_dma_tag_t *); +void agp_bus_dma_destroy(struct agp_softc *, bus_dma_tag_t); +void agp_bus_dma_set_alignment(bus_dma_tag_t, bus_dmamap_t, + u_long); + +struct agp_map; + +int agp_init_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, struct + agp_map **); +void agp_destroy_map(struct agp_map *); +int agp_map_subregion(struct agp_map *, bus_size_t, bus_size_t, + bus_space_handle_t *); +void agp_unmap_subregion(struct agp_map *, bus_space_handle_t, + bus_size_t); + MALLOC_DECLARE(M_AGP); /* @@ -268,6 +287,6 @@ * XXX horrible hack to allow drm code to use our mapping * of VGA chip registers */ -int agp_i810_borrow(bus_addr_t, bus_space_handle_t *); +int agp_i810_borrow(bus_addr_t, bus_space_tag_t *, bus_space_handle_t *); #endif /* !_PCI_AGPPRIV_H_ */