Exemple #1
0
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;
}
Exemple #2
0
/*
 * 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);
}