1/*
2 * include/asm-sh/machvec.h
3 *
4 * Copyright 2000 Stuart Menefy (stuart.menefy@st.com)
5 *
6 * May be copied or modified under the terms of the GNU General Public
7 * License.  See linux/COPYING for more information.
8 */
9
10#ifndef _ASM_SH_MACHVEC_H
11#define _ASM_SH_MACHVEC_H 1
12
13#include <linux/config.h>
14#include <linux/types.h>
15
16struct timeval;
17
18struct sh_machine_vector
19{
20	const char *mv_name;
21
22	int mv_nr_irqs;
23
24	unsigned char (*mv_inb)(unsigned long);
25	unsigned short (*mv_inw)(unsigned long);
26	unsigned int (*mv_inl)(unsigned long);
27	void (*mv_outb)(unsigned char, unsigned long);
28	void (*mv_outw)(unsigned short, unsigned long);
29	void (*mv_outl)(unsigned int, unsigned long);
30
31	unsigned char (*mv_inb_p)(unsigned long);
32	unsigned short (*mv_inw_p)(unsigned long);
33	unsigned int (*mv_inl_p)(unsigned long);
34	void (*mv_outb_p)(unsigned char, unsigned long);
35	void (*mv_outw_p)(unsigned short, unsigned long);
36	void (*mv_outl_p)(unsigned int, unsigned long);
37
38	void (*mv_insb)(unsigned long port, void *addr, unsigned long count);
39	void (*mv_insw)(unsigned long port, void *addr, unsigned long count);
40	void (*mv_insl)(unsigned long port, void *addr, unsigned long count);
41	void (*mv_outsb)(unsigned long port, const void *addr, unsigned long count);
42	void (*mv_outsw)(unsigned long port, const void *addr, unsigned long count);
43	void (*mv_outsl)(unsigned long port, const void *addr, unsigned long count);
44
45	unsigned char (*mv_readb)(unsigned long);
46	unsigned short (*mv_readw)(unsigned long);
47	unsigned int (*mv_readl)(unsigned long);
48	void (*mv_writeb)(unsigned char, unsigned long);
49	void (*mv_writew)(unsigned short, unsigned long);
50	void (*mv_writel)(unsigned int, unsigned long);
51
52	void* (*mv_ioremap)(unsigned long offset, unsigned long size);
53	void (*mv_iounmap)(void *addr);
54
55	unsigned long (*mv_isa_port2addr)(unsigned long offset);
56
57	int (*mv_irq_demux)(int irq);
58
59	void (*mv_init_arch)(void);
60	void (*mv_init_irq)(void);
61	void (*mv_init_pci)(void);
62	void (*mv_kill_arch)(int);
63
64	void (*mv_heartbeat)(void);
65
66	void (*mv_rtc_gettimeofday)(struct timeval *tv);
67	int (*mv_rtc_settimeofday)(const struct timeval *tv);
68
69	unsigned int mv_hw_se : 1;
70	unsigned int mv_hw_hp600 : 1;
71	unsigned int mv_hw_hp620 : 1;
72	unsigned int mv_hw_hp680 : 1;
73	unsigned int mv_hw_hp690 : 1;
74	unsigned int mv_hw_hd64461 : 1;
75	unsigned int mv_hw_sh2000 : 1;
76	unsigned int mv_hw_hd64465 : 1;
77	unsigned int mv_hw_dreamcast : 1;
78	unsigned int mv_hw_bigsur : 1;
79	unsigned int mv_hw_7751se: 1;
80	unsigned int mv_hw_adx : 1;
81};
82
83extern struct sh_machine_vector sh_mv;
84
85/* Machine check macros */
86#ifdef CONFIG_SH_GENERIC
87#define MACH_SE		(sh_mv.mv_hw_se)
88#define MACH_HP600	(sh_mv.mv_hw_hp600)
89#define MACH_HP620	(sh_mv.mv_hw_hp620)
90#define MACH_HP680	(sh_mv.mv_hw_hp680)
91#define MACH_HP690	(sh_mv.mv_hw_hp690)
92#define MACH_HD64461	(sh_mv.mv_hw_hd64461)
93#define MACH_HD64465	(sh_mv.mv_hw_hd64465)
94#define MACH_SH2000	(sh_mv.mv_hw_sh2000)
95#define MACH_DREAMCAST	(sh_mv.mv_hw_dreamcast)
96#define MACH_BIGSUR	(sh_mv.mv_hw_bigsur)
97#define MACH_7751SE	(sh_mv.mv_hw_7751se)
98#define MACH_ADX	(sh_mv.mv_hw_adx)
99#else
100# ifdef CONFIG_SH_SOLUTION_ENGINE
101#  define MACH_SE		1
102# else
103#  define MACH_SE		0
104# endif
105# ifdef CONFIG_SH_7751_SOLUTION_ENGINE
106#  define MACH_7751SE		1
107# else
108#  define MACH_7751SE		0
109# endif
110# ifdef CONFIG_SH_HP600
111#  define MACH_HP600		1
112# else
113#  define MACH_HP600		0
114# endif
115# ifdef CONFIG_SH_HP620
116#  define MACH_HP620		1
117# else
118#  define MACH_HP620		0
119# endif
120# ifdef CONFIG_SH_HP680
121#  define MACH_HP680		1
122# else
123#  define MACH_HP680		0
124# endif
125# ifdef CONFIG_SH_HP690
126#  define MACH_HP690		1
127# else
128#  define MACH_HP690		0
129# endif
130# ifdef CONFIG_HD64461
131#  define MACH_HD64461		1
132# else
133#  define MACH_HD64461		0
134# endif
135# ifdef CONFIG_HD64465
136#  define MACH_HD64465		1
137# else
138#  define MACH_HD64465		0
139# endif
140# ifdef CONFIG_SH_SH2000
141#  define MACH_SH2000		1
142# else
143#  define MACH_SH2000		0
144# endif
145# ifdef CONFIG_SH_EC3104
146#  define MACH_EC3104		1
147# else
148#  define MACH_EC3104		0
149# endif
150# ifdef CONFIG_SH_DREAMCAST
151#  define MACH_DREAMCAST	1
152# else
153#  define MACH_DREAMCAST	0
154# endif
155# ifdef CONFIG_SH_BIGSUR
156#  define MACH_BIGSUR		1
157# else
158#  define MACH_BIGSUR		0
159# endif
160# ifdef CONFIG_SH_ADX
161#  define MACH_ADX		1
162# else
163#  define MACH_ADX		0
164# endif
165#endif
166
167#endif /* _ASM_SH_MACHVEC_H */
168