/* $Id: nosrmmu.c,v 1.5 1999/11/19 04:11:54 davem Exp $
 * nosrmmu.c: This file is a bunch of dummies for sun4 compiles, 
 *         so that it does not need srmmu and avoid ifdefs.
 *
 * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
 */

#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <asm/mbus.h>
#include <asm/sbus.h>

static char shouldnothappen[] __initdata = "SUN4 kernel can only run on SUN4\n";

enum mbus_module srmmu_modtype;
void *srmmu_nocache_pool;

int vac_cache_size = 0;

static void __init should_not_happen(void)
{
	prom_printf(shouldnothappen);
	prom_halt();
}

void __init srmmu_frob_mem_map(unsigned long start_mem)
{
	should_not_happen();
}

unsigned long __init srmmu_paging_init(unsigned long start_mem, unsigned long end_mem)
{
	should_not_happen();
	return 0;
}

void __init ld_mmu_srmmu(void)
{
	should_not_happen();
}

void srmmu_mapioaddr(unsigned long physaddr, unsigned long virt_addr, int bus_type, int rdonly)
{
}

void srmmu_unmapioaddr(unsigned long virt_addr)
{
}

__u32 iounit_map_dma_init(struct sbus_bus *sbus, int size)
{
	return 0;
}

__u32 iounit_map_dma_page(__u32 vaddr, void *addr, struct sbus_bus *sbus)
{
	return 0;
}
