1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#ifndef RLD
24/* This has to be -D__3_2_User_with_hppa__ when compiling for 3.2 hp */
25#ifdef __3_2_User_with_hppa__
26
27#include <mach/mach.h>
28#include "stuff/vm_flush_cache.h"
29
30/*
31 * This is currently only implemented on the hppa architecture so versions for
32 * the other architectures are hacked in here.
33 */
34#ifndef __hppa__
35__private_extern__
36kern_return_t
37vm_flush_cache(
38mach_port_t target_task,
39vm_address_t address,
40vm_size_t size)
41{
42#ifdef __m68k__
43	asm("trap #2");
44#endif
45#ifdef __i386__
46	asm("jmp 1f");
47	asm("1: nop");
48#endif
49#ifdef __m88k__
50	user_cache_flush(address, size);
51#endif
52#ifdef __ppc__
53	user_cache_flush(address, size);
54#endif
55	return(KERN_SUCCESS);
56}
57#endif /* !defined(__hppa__) */
58
59#else /* undef(__3_2_User_with_hppa__) */
60
61#include <mach/mach.h>
62#include "stuff/vm_flush_cache.h"
63
64/*
65 * This is currently only implemented on the hppa architecture so versions for
66 * the other architectures are hacked in here.
67 */
68__private_extern__
69kern_return_t
70vm_flush_cache(
71mach_port_t target_task,
72vm_address_t address,
73vm_size_t size)
74{
75#if !defined(__m68k__) && !defined(__i386__)
76	vm_machine_attribute_val_t value;
77	value = MATTR_VAL_ICACHE_FLUSH;
78	return(vm_machine_attribute(target_task, address, size, MATTR_CACHE,
79				    &value));
80#endif
81#ifdef __m68k__
82	asm("trap #2");
83	return(KERN_SUCCESS);
84#endif
85#ifdef __i386__
86	asm("jmp 1f");
87	asm("1: nop");
88	return(KERN_SUCCESS);
89#endif
90}
91
92#endif /* __3_2_User_with_hppa__ */
93#endif /* !defined(RLD) */
94