1193156Snwhitehorn/*- 2193156Snwhitehorn * Copyright (c) 1996 3193156Snwhitehorn * The President and Fellows of Harvard College. All rights reserved. 4193156Snwhitehorn * Copyright (c) 1992, 1993 5193156Snwhitehorn * The Regents of the University of California. All rights reserved. 6193156Snwhitehorn * 7193156Snwhitehorn * This software was developed by the Computer Systems Engineering group 8193156Snwhitehorn * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and 9193156Snwhitehorn * contributed to Berkeley. 10193156Snwhitehorn * 11193156Snwhitehorn * Redistribution and use in source and binary forms, with or without 12193156Snwhitehorn * modification, are permitted provided that the following conditions 13193156Snwhitehorn * are met: 14193156Snwhitehorn * 1. Redistributions of source code must retain the above copyright 15193156Snwhitehorn * notice, this list of conditions and the following disclaimer. 16193156Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright 17193156Snwhitehorn * notice, this list of conditions and the following disclaimer in the 18193156Snwhitehorn * documentation and/or other materials provided with the distribution. 19193156Snwhitehorn * 3. All advertising materials mentioning features or use of this software 20193156Snwhitehorn * must display the following acknowledgement: 21193156Snwhitehorn * This product includes software developed by Aaron Brown and 22193156Snwhitehorn * Harvard University. 23193156Snwhitehorn * 4. Neither the name of the University nor the names of its contributors 24193156Snwhitehorn * may be used to endorse or promote products derived from this software 25193156Snwhitehorn * without specific prior written permission. 26193156Snwhitehorn * 27193156Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28193156Snwhitehorn * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29193156Snwhitehorn * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30193156Snwhitehorn * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31193156Snwhitehorn * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32193156Snwhitehorn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33193156Snwhitehorn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34193156Snwhitehorn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35193156Snwhitehorn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36193156Snwhitehorn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37193156Snwhitehorn * SUCH DAMAGE. 38193156Snwhitehorn * 39193156Snwhitehorn * from: @(#)cache.h 8.1 (Berkeley) 6/11/93 40193156Snwhitehorn * from: NetBSD: cache.h,v 1.3 2000/08/01 00:28:02 eeh Exp 41193156Snwhitehorn * 42193156Snwhitehorn * $FreeBSD$ 43193156Snwhitehorn */ 44193156Snwhitehorn 45193156Snwhitehorn#ifndef _MACHINE_CACHE_H_ 46193156Snwhitehorn#define _MACHINE_CACHE_H_ 47193156Snwhitehorn 48193156Snwhitehorn#define DCACHE_COLOR_BITS (1) 49193156Snwhitehorn#define DCACHE_COLORS (1 << DCACHE_COLOR_BITS) 50193156Snwhitehorn#define DCACHE_COLOR_MASK (DCACHE_COLORS - 1) 51193156Snwhitehorn#define DCACHE_COLOR(va) (((va) >> PAGE_SHIFT) & DCACHE_COLOR_MASK) 52193156Snwhitehorn#define DCACHE_OTHER_COLOR(color) \ 53193156Snwhitehorn ((color) ^ DCACHE_COLOR_BITS) 54193156Snwhitehorn 55193156Snwhitehorn#define DC_TAG_SHIFT 2 56193156Snwhitehorn#define DC_VALID_SHIFT 0 57193156Snwhitehorn 58193156Snwhitehorn#define DC_TAG_BITS 28 59193156Snwhitehorn#define DC_VALID_BITS 2 60193156Snwhitehorn 61193156Snwhitehorn#define DC_TAG_MASK ((1 << DC_TAG_BITS) - 1) 62193156Snwhitehorn#define DC_VALID_MASK ((1 << DC_VALID_BITS) - 1) 63193156Snwhitehorn 64193156Snwhitehorn#define IC_TAG_SHIFT 7 65193156Snwhitehorn#define IC_VALID_SHIFT 36 66193156Snwhitehorn 67193156Snwhitehorn#define IC_TAG_BITS 28 68193156Snwhitehorn#define IC_VALID_BITS 1 69193156Snwhitehorn 70193156Snwhitehorn#define IC_TAG_MASK ((1 << IC_TAG_BITS) - 1) 71193156Snwhitehorn#define IC_VALID_MASK ((1 << IC_VALID_BITS) - 1) 72193156Snwhitehorn 73193156Snwhitehorn#ifndef LOCORE 74193156Snwhitehorn 75193156Snwhitehorn/* 76193156Snwhitehorn * Cache control information 77193156Snwhitehorn */ 78193156Snwhitehornstruct cacheinfo { 79193156Snwhitehorn u_int ic_size; /* instruction cache */ 80193156Snwhitehorn u_int ic_assoc; 81193156Snwhitehorn u_int ic_linesize; 82193156Snwhitehorn u_int dc_size; /* data cache */ 83193156Snwhitehorn u_int dc_assoc; 84193156Snwhitehorn u_int dc_linesize; 85193156Snwhitehorn u_int ec_size; /* external cache info */ 86193156Snwhitehorn u_int ec_assoc; 87193156Snwhitehorn u_int ec_linesize; 88193156Snwhitehorn}; 89193156Snwhitehorn 90193156Snwhitehorn#ifdef _KERNEL 91193156Snwhitehorn 92193156Snwhitehornextern u_int dcache_color_ignore; 93193156Snwhitehorn 94193156Snwhitehornstruct pcpu; 95193156Snwhitehorn 96193156Snwhitehorntypedef void cache_enable_t(u_int cpu_impl); 97193156Snwhitehorntypedef void cache_flush_t(void); 98193156Snwhitehorntypedef void dcache_page_inval_t(vm_paddr_t pa); 99193156Snwhitehorntypedef void icache_page_inval_t(vm_paddr_t pa); 100193156Snwhitehorn 101193156Snwhitehornvoid cache_init(struct pcpu *pcpu); 102193156Snwhitehorn 103193156Snwhitehorncache_enable_t cheetah_cache_enable; 104193156Snwhitehorncache_flush_t cheetah_cache_flush; 105193156Snwhitehorndcache_page_inval_t cheetah_dcache_page_inval; 106193156Snwhitehornicache_page_inval_t cheetah_icache_page_inval; 107193156Snwhitehorn 108193156Snwhitehorncache_enable_t spitfire_cache_enable; 109193156Snwhitehorncache_flush_t spitfire_cache_flush; 110193156Snwhitehorndcache_page_inval_t spitfire_dcache_page_inval; 111193156Snwhitehornicache_page_inval_t spitfire_icache_page_inval; 112193156Snwhitehorn 113193156Snwhitehorncache_enable_t zeus_cache_enable; 114193156Snwhitehorncache_flush_t zeus_cache_flush; 115193156Snwhitehorndcache_page_inval_t zeus_dcache_page_inval; 116193156Snwhitehornicache_page_inval_t zeus_icache_page_inval; 117193156Snwhitehorn 118193156Snwhitehornextern cache_enable_t *cache_enable; 119193156Snwhitehornextern cache_flush_t *cache_flush; 120193156Snwhitehornextern dcache_page_inval_t *dcache_page_inval; 121193156Snwhitehornextern icache_page_inval_t *icache_page_inval; 122193156Snwhitehorn 123193156Snwhitehorn#endif /* KERNEL */ 124193156Snwhitehorn 125193156Snwhitehorn#endif /* !LOCORE */ 126193156Snwhitehorn 127193156Snwhitehorn#endif /* !_MACHINE_CACHE_H_ */ 128193156Snwhitehorn