summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/include/cmmu.h
blob: 5e2c3ca05327c294f13ce4f83722d1cae2b3b341 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*	$OpenBSD: cmmu.h,v 1.11 2002/03/14 01:26:39 millert Exp $ */
/* 
 * Mach Operating System
 * Copyright (c) 1993-1992 Carnegie Mellon University
 * All Rights Reserved.
 * 
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation.
 * 
 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 * 
 * Carnegie Mellon requests users of this software to return to
 * 
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 * 
 * any improvements or extensions that they make and grant Carnegie Mellon 
 * the rights to redistribute these changes.
 */

#ifndef	_MACHINE_CMMU_H_
#define	_MACHINE_CMMU_H_

#include <machine/mmu.h>

/* Area Description */
#define AREA_D_WT	0x00000200	/* write through */
#define AREA_D_G	0x00000080	/* global */
#define AREA_D_CI	0x00000040	/* cache inhibit */
#define AREA_D_TE	0x00000001	/* translation enable */

/* Segment Description */
#define SEG_D_WT	0x00000200	/* write through */
#define SEG_D_SP	0x00000100	/* supervisor protection */
#define SEG_D_G		0x00000080	/* global */
#define SEG_D_CI	0x00000040	/* cache inhibit */
#define SEG_D_WP	0x00000004	/* write protect */
#define SEG_D_V		0x00000001	/* valid */

/*
 * Flags for cmmu_flush_tlb
 */
#define FLUSH_KERNEL    1
#define FLUSH_USER      0
#define FLUSH_ALL       ((vm_offset_t)~0)


#ifndef	_LOCORE
/*
 * Prototypes and stuff for cmmu.c.
 */
extern unsigned cpu_sets[MAX_CPUS];
extern int cpu_cmmu_ratio;
extern unsigned number_cpus, master_cpu;
extern unsigned cache_policy;
extern unsigned number_cpus;
extern unsigned master_cpu;
extern int max_cpus, max_cmmus;

/*
 * This lock protects the cmmu SAR and SCR's; other ports 
 * can be accessed without locking it 
 *
 * May be used from "db_interface.c".
 */
extern struct simplelock cmmu_cpu_lock;

#define CMMU_LOCK   simple_lock(&cmmu_cpu_lock)
#define CMMU_UNLOCK simple_unlock(&cmmu_cpu_lock)

/* machine dependant cmmu function pointer structure */
struct cmmu_p {
	void (*cmmu_init_func)(void);
	void (*show_apr_func)(unsigned);
	void (*setup_board_config_func)(void);
	void (*setup_cmmu_config_func)(void);
	void (*cmmu_dump_config_func)(void);
	void (*cpu_configuration_print_func)(int);
	void (*cmmu_shutdown_now_func)(void);
	void (*cmmu_parity_enable_func)(void);
	unsigned (*cmmu_cpu_number_func)(void);
	unsigned (*cmmu_get_idr_func)(unsigned);
	void (*cmmu_set_sapr_func)(unsigned);
	void (*cmmu_remote_set_sapr_func)(unsigned, unsigned);
	void (*cmmu_set_uapr_func)(unsigned);
	void (*cmmu_set_batc_entry_func)(unsigned, unsigned, unsigned, unsigned);
	void (*cmmu_set_pair_batc_entry_func)(unsigned, unsigned, unsigned);
	void (*cmmu_flush_remote_tlb_func)(unsigned, unsigned, vm_offset_t, int);
	void (*cmmu_flush_tlb_func)(unsigned, vm_offset_t, int);
	void (*cmmu_pmap_activate_func)(unsigned, unsigned,
					     batc_template_t i_batc[BATC_MAX],
					     batc_template_t d_batc[BATC_MAX]);
	void (*cmmu_flush_remote_cache_func)(int, vm_offset_t, int);
	void (*cmmu_flush_cache_func)(vm_offset_t, int);
	void (*cmmu_flush_remote_inst_cache_func)(int, vm_offset_t, int);
	void (*cmmu_flush_inst_cache_func)(vm_offset_t, int);
	void (*cmmu_flush_remote_data_cache_func)(int, vm_offset_t, int);
	void (*cmmu_flush_data_cache_func)(vm_offset_t, int);
	void (*dma_cachectl_func)(vm_offset_t, int, int);
#ifdef DDB
	unsigned (*cmmu_get_by_mode_func)(int, int);
	void (*cmmu_show_translation_func)(unsigned, unsigned, unsigned, int);
	void (*cmmu_cache_state_func)(unsigned, unsigned);
	void (*show_cmmu_info_func)(unsigned);
#endif /* end if DDB */
};

/* THE pointer! */
extern struct cmmu_p *cmmu;

extern struct cmmu_p cmmu88110;
extern struct cmmu_p cmmu8820x;

/* The macros... */
#define cmmu_init (cmmu->cmmu_init_func)
#define show_apr(ap) (cmmu->show_apr_func)(ap)
#define setup_board_config	(cmmu->setup_board_config_func)
#define	setup_cmmu_config 	(cmmu->setup_cmmu_config_func)
#define	cmmu_dump_config	(cmmu->cmmu_dump_config_func)
#define	cpu_configuration_print(a)	(cmmu->cpu_configuration_print_func)(a)
#define	cmmu_shutdown_now	(cmmu->cmmu_shutdown_now_func)
#define	cmmu_parity_enable	(cmmu->cmmu_parity_enable_func)
#define	cmmu_cpu_number		(cmmu->cmmu_cpu_number_func)
#define	cmmu_get_idr(a)		(cmmu->cmmu_get_idr_func)(a)
#define	cmmu_set_sapr(a)	(cmmu->cmmu_set_sapr_func)(a)
#define	cmmu_remote_set_sapr(a, b)	(cmmu->cmmu_remote_set_sapr_func)(a, b)
#define	cmmu_set_uapr(a)	(cmmu->cmmu_set_uapr_func)(a)
#define	cmmu_set_batc_entry(a, b, c, d) 	(cmmu->cmmu_set_batc_entry_func)(a, b, c, d)
#define	cmmu_set_pair_batc_entry(a, b, c)	(cmmu->cmmu_set_pair_batc_entry_func)(a, b, c)
#define	cmmu_flush_remote_tlb(a, b, c, d) 	(cmmu->cmmu_flush_remote_tlb_func)(a, b, c, d)
#define	cmmu_flush_tlb(a, b, c)	(cmmu->cmmu_flush_tlb_func)(a, b, c)
#define	cmmu_pmap_activate(a, b, c, d) 	(cmmu->cmmu_pmap_activate_func)(a, b, c, d) 
#define	cmmu_flush_remote_cache(a, b, c)	(cmmu->cmmu_flush_remote_cache_func)(a, b, c)
#define	cmmu_flush_cache(a, b)	(cmmu->cmmu_flush_cache_func)(a, b)
#define	cmmu_flush_remote_inst_cache(a, b, c)	(cmmu->cmmu_flush_remote_inst_cache_func)(a, b, c)
#define	cmmu_flush_inst_cache(a, b)	(cmmu->cmmu_flush_inst_cache_func)(a, b)
#define	cmmu_flush_remote_data_cache(a, b, c)	(cmmu->cmmu_flush_remote_data_cache_func)(a, b, c)
#define	cmmu_flush_data_cache(a, b)	(cmmu->cmmu_flush_data_cache_func)(a, b)
#define	dma_cachectl(a, b, c)	(cmmu->dma_cachectl_func)(a, b, c)
#ifdef DDB
#define	cmmu_get_by_mode(a, b)	(cmmu->cmmu_get_by_mode_func)(a, b)
#define	cmmu_show_translation(a, b, c, d)	(cmmu->cmmu_show_translation_func)(a, b, c, d)
#define	cmmu_cache_state(a, b)	(cmmu->cmmu_cache_state_func)(a, b)
#define	show_cmmu_info(a)	(cmmu->show_cmmu_info_func)(a)
#endif /* end if DDB */

#endif	/* _LOCORE */

#ifdef M88100
#include <machine/m8820x.h>
#endif /* M88100 */
#ifdef M88110
#include <machine/m88110.h>
#include <machine/m88410.h>
#endif /* M88110 */

#endif	/* _MACHINE_CMMU_H_ */