/*** ccio-dma.c:** DMA management routines for first generation cache-coherent machines.** Program U2/Uturn in "Virtual Mode" and use the I/O MMU.**** (c) Copyright 2000 Grant Grundler** (c) Copyright 2000 Ryan Bradetich** (c) Copyright 2000 Hewlett-Packard Company**** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.****** "Real Mode" operation refers to U2/Uturn chip operation.** U2/Uturn were designed to perform coherency checks w/o using** the I/O MMU - basically what x86 does.**** Philipp Rumpf has a "Real Mode" driver for PCX-W machines at:** CVSROOT=:pserver:anonymous@198.186.203.37:/cvsroot/linux-parisc** cvs -z3 co linux/arch/parisc/kernel/dma-rm.c**** I've rewritten his code to work under TPG's tree. See ccio-rm-dma.c.**** Drawbacks of using Real Mode are:** o outbound DMA is slower - U2 won't prefetch data (GSC+ XQL signal).** o Inbound DMA less efficient - U2 can't use DMA_FAST attribute.** o Ability to do scatter/gather in HW is lost.** o Doesn't work under PCX-U/U+ machines since they didn't follow** the coherency design originally worked out. Only PCX-W does.*/#include <linux/config.h>#include <linux/types.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/spinlock.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/pci.h>#include <linux/reboot.h>#include <linux/proc_fs.h>#include <linux/seq_file.h>#include <asm/byteorder.h>#include <asm/cache.h>/* for L1_CACHE_BYTES */#include <asm/uaccess.h>#include <asm/page.h>#include <asm/dma.h>#include <asm/io.h>#include <asm/hardware.h>/* for register_module() */#include <asm/parisc-device.h>/* ** Choose "ccio" since that's what HP-UX calls it.** Make it easier for folks to migrate from one to the other :^)*/#define MODULE_NAME"ccio"#undef DEBUG_CCIO_RES#undef DEBUG_CCIO_RUN#undef DEBUG_CCIO_INIT#undef DEBUG_CCIO_RUN_SG#ifdef CONFIG_PROC_FS/* * CCIO_SEARCH_TIME can help measure how fast the bitmap search is. * impacts performance though - ditch it if you don't use it. */#define CCIO_SEARCH_TIME#undef CCIO_MAP_STATS#else#undef CCIO_SEARCH_TIME#undef CCIO_MAP_STATS#endif#include <linux/proc_fs.h>#include <asm/runway.h>/* for proc_runway_root */#ifdef DEBUG_CCIO_INIT#define DBG_INIT(x...) printk(x)#else#define DBG_INIT(x...)#endif#ifdef DEBUG_CCIO_RUN#define DBG_RUN(x...) printk(x)#else#define DBG_RUN(x...)#endif#ifdef DEBUG_CCIO_RES#define DBG_RES(x...) printk(x)#