static paddr_t igsfb_ofbus_mmap(void *v, void *vs, off_t offset, int prot) { #ifdef PCI_MAGIC_IO_RANGE /* access to IO ports */ if ((offset >= PCI_MAGIC_IO_RANGE) && (offset < (PCI_MAGIC_IO_RANGE + 0x10000))) { paddr_t pa; pa = isa_io_physaddr + offset - PCI_MAGIC_IO_RANGE; return arm_btop(pa); } #endif /* * we also need to allow mapping of the whole aperture, including MMIO * registers on CyberPro at its physical address */ if ((offset >= igsfb_mem_paddr) && (offset < (igsfb_mem_paddr + 0x00800000))) { return (arm_btop(offset) | ARM32_MMAP_WRITECOMBINE); } if ((offset >= (igsfb_mem_paddr + 0x00800000)) && (offset < (igsfb_mem_paddr + 0x01000000))) return arm_btop(offset); return -1; }
/* * Common functin for mmap(2)'ing DMA-safe memory. May be called by * bus-specific DMA mmap(2)'ing functions. */ paddr_t _bus_dmamem_mmap(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs, off_t off, int prot, int flags) { int i; for (i = 0; i < nsegs; i++) { #ifdef DIAGNOSTIC if (off & PGOFSET) panic("_bus_dmamem_mmap: offset unaligned"); if (segs[i].ds_addr & PGOFSET) panic("_bus_dmamem_mmap: segment unaligned"); if (segs[i].ds_len & PGOFSET) panic("_bus_dmamem_mmap: segment size not multiple" " of page size"); #endif /* DIAGNOSTIC */ if (off >= segs[i].ds_len) { off -= segs[i].ds_len; continue; } return (arm_btop((u_long)segs[i].ds_addr + off)); } /* Page not found. */ return (-1); }
paddr_t mainbus_bs_mmap(void *t, bus_addr_t paddr, off_t offset, int prot, int flags) { /* * mmap from address `paddr+offset' for one page */ return (arm_btop((paddr + offset))); }
paddr_t vidcvideommap(void *v, void *vs, off_t offset, int prot) { struct vcons_data *vd = v; struct vidcvideo_softc *sc = vd->cookie; if (offset >= sc->sc_dc->dc_size || offset < 0) return -1; return arm_btop(sc->sc_dc->dc_paddr + offset); }
paddr_t footbridge_mem_bs_mmap(void *t, bus_addr_t addr, off_t offset, int prot, int flags) { paddr_t pa; if (addr >= DC21285_PCI_MEM_SIZE || offset < 0 || offset >= DC21285_PCI_MEM_SIZE || addr >= DC21285_PCI_MEM_SIZE - offset) return -1; pa = DC21285_PCI_MEM_BASE + addr + offset; return arm_btop(pa); }
paddr_t footbridge_io_bs_mmap(void *t, bus_addr_t addr, off_t offset, int prot, int flags) { paddr_t pa; /* allow mapping of IO space */ if (addr >= DC21285_PCI_IO_SIZE || addr >= DC21285_PCI_IO_SIZE - offset || offset < 0 || offset >= DC21285_PCI_IO_SIZE) return -1; pa = DC21285_PCI_IO_BASE + addr + offset; return arm_btop(pa); }