1/*
2 * lasat.h
3 *
4 * Thomas Horsten <thh@lasat.com>
5 * Copyright (C) 2000 LASAT Networks A/S.
6 *
7 * ########################################################################
8 *
9 *  This program is free software; you can distribute it and/or modify it
10 *  under the terms of the GNU General Public License (Version 2) as
11 *  published by the Free Software Foundation.
12 *
13 *  This program is distributed in the hope it will be useful, but WITHOUT
14 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 *  for more details.
17 *
18 *  You should have received a copy of the GNU General Public License along
19 *  with this program; if not, write to the Free Software Foundation, Inc.,
20 *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
21 *
22 * ########################################################################
23 *
24 * Configuration for LASAT boards, loads the appropriate include files.
25 *
26 */
27#ifndef _LASAT_H
28#define _LASAT_H
29
30#include <linux/config.h>
31
32/*
33 * Configuration block magic word(s)
34 */
35#define LASAT_CONFIG_MAGIC     ('L'|('C'<<8)|('B'<<16)|('2'<<24)) /* LCB2 */
36#define LASAT_CONFIG_MAGIC_INT ('L'|('C'<<8)|('B'<<16)|('x'<<24)) /* LCBx */
37
38#ifndef _LANGUAGE_ASSEMBLY
39#include <linux/types.h>
40
41extern struct lasat_misc {
42	volatile u32 *reset_reg;
43	volatile u32 *flash_wp_reg;
44	u32 flash_wp_bit;
45} *lasat_misc;
46
47/*
48 * The format of the data record in the EEPROM.
49 * See Documentation/LASAT/eeprom.txt for a detailed description
50 * of the fields in this struct, and the LASAT Hardware Configuration
51 * field specification for a detailed description of the config
52 * field.
53 */
54#include <linux/types.h>
55
56#define LASAT_EEPROM_VERSION 7
57struct lasat_eeprom_struct {
58	unsigned int  version;
59	unsigned int  cfg[3];
60	unsigned char hwaddr[6];
61	unsigned char print_partno[12];
62	unsigned char term0;
63	unsigned char print_serial[14];
64	unsigned char term1;
65	unsigned char prod_partno[12];
66	unsigned char term2;
67	unsigned char prod_serial[14];
68	unsigned char term3;
69	unsigned char passwd_hash[16];
70	unsigned char pwdnull;
71	unsigned char vendid;
72	unsigned char ts_ref;
73	unsigned char ts_signoff;
74	unsigned char reserved[11];
75	unsigned char debugaccess;
76	unsigned short prid;
77	unsigned int  serviceflag;
78	unsigned int  ipaddr;
79	unsigned int  netmask;
80	unsigned int  crc32;
81};
82
83struct lasat_eeprom_struct_pre7 {
84	unsigned int  version;
85	unsigned int  flags[3];
86	unsigned char hwaddr0[6];
87	unsigned char hwaddr1[6];
88	unsigned char print_partno[9];
89	unsigned char term0;
90	unsigned char print_serial[14];
91	unsigned char term1;
92	unsigned char prod_partno[9];
93	unsigned char term2;
94	unsigned char prod_serial[14];
95	unsigned char term3;
96	unsigned char passwd_hash[24];
97	unsigned char pwdnull;
98	unsigned char vendor;
99	unsigned char ts_ref;
100	unsigned char ts_signoff;
101	unsigned char reserved[6];
102	unsigned int  writecount;
103	unsigned int  ipaddr;
104	unsigned int  netmask;
105	unsigned int  crc32;
106};
107
108/* Configuration descriptor encoding - see the doc for details */
109
110#define LASAT_W0_DSCTYPE(v)		( ( (v)         ) & 0xf )
111#define LASAT_W0_BMID(v)		( ( (v) >> 0x04 ) & 0xf )
112#define LASAT_W0_CPUTYPE(v)		( ( (v) >> 0x08 ) & 0xf )
113#define LASAT_W0_BUSSPEED(v)		( ( (v) >> 0x0c ) & 0xf )
114#define LASAT_W0_CPUCLK(v)		( ( (v) >> 0x10 ) & 0xf )
115#define LASAT_W0_SDRAMBANKSZ(v)		( ( (v) >> 0x14 ) & 0xf )
116#define LASAT_W0_SDRAMBANKS(v)		( ( (v) >> 0x18 ) & 0xf )
117#define LASAT_W0_L2CACHE(v)		( ( (v) >> 0x1c ) & 0xf )
118
119#define LASAT_W1_EDHAC(v)		( ( (v)         ) & 0xf )
120#define LASAT_W1_HIFN(v)		( ( (v) >> 0x04 ) & 0x1 )
121#define LASAT_W1_ISDN(v)		( ( (v) >> 0x05 ) & 0x1 )
122#define LASAT_W1_IDE(v)			( ( (v) >> 0x06 ) & 0x1 )
123#define LASAT_W1_HDLC(v)		( ( (v) >> 0x07 ) & 0x1 )
124#define LASAT_W1_USVERSION(v)		( ( (v) >> 0x08 ) & 0x1 )
125#define LASAT_W1_4MACS(v)		( ( (v) >> 0x09 ) & 0x1 )
126#define LASAT_W1_EXTSERIAL(v)		( ( (v) >> 0x0a ) & 0x1 )
127#define LASAT_W1_FLASHSIZE(v)		( ( (v) >> 0x0c ) & 0xf )
128#define LASAT_W1_PCISLOTS(v)		( ( (v) >> 0x10 ) & 0xf )
129#define LASAT_W1_PCI1OPT(v)		( ( (v) >> 0x14 ) & 0xf )
130#define LASAT_W1_PCI2OPT(v)		( ( (v) >> 0x18 ) & 0xf )
131#define LASAT_W1_PCI3OPT(v)		( ( (v) >> 0x1c ) & 0xf )
132
133/* Routines specific to LASAT boards */
134
135#define LASAT_BMID_MASQUERADE2		0
136#define LASAT_BMID_MASQUERADEPRO	1
137#define LASAT_BMID_SAFEPIPE25			2
138#define LASAT_BMID_SAFEPIPE50			3
139#define LASAT_BMID_SAFEPIPE100		4
140#define LASAT_BMID_SAFEPIPE5000		5
141#define LASAT_BMID_SAFEPIPE7000		6
142#define LASAT_BMID_SAFEPIPE1000		7
143//#define LASAT_BMID_SAFEPIPE30		7
144//#define LASAT_BMID_SAFEPIPE5100	8
145//#define LASAT_BMID_SAFEPIPE7100	9
146#define LASAT_BMID_UNKNOWN				0xf
147#define LASAT_MAX_BMID_NAMES			9   // no larger than 15!
148
149#define LASAT_HAS_EDHAC			( 1 << 0 )
150#define LASAT_EDHAC_FAST		( 1 << 1 )
151#define LASAT_HAS_EADI			( 1 << 2 )
152#define LASAT_HAS_HIFN			( 1 << 3 )
153#define LASAT_HAS_ISDN			( 1 << 4 )
154#define LASAT_HAS_LEASEDLINE_IF		( 1 << 5 )
155#define LASAT_HAS_HDC			( 1 << 6 )
156
157#define LASAT_PRID_MASQUERADE2		0
158#define LASAT_PRID_MASQUERADEPRO	1
159#define LASAT_PRID_SAFEPIPE25			2
160#define LASAT_PRID_SAFEPIPE50			3
161#define LASAT_PRID_SAFEPIPE100		4
162#define LASAT_PRID_SAFEPIPE5000		5
163#define LASAT_PRID_SAFEPIPE7000		6
164#define LASAT_PRID_SAFEPIPE30			7
165#define LASAT_PRID_SAFEPIPE5100		8
166#define LASAT_PRID_SAFEPIPE7100		9
167
168#define LASAT_PRID_SAFEPIPE1110		10
169#define LASAT_PRID_SAFEPIPE3020		11
170#define LASAT_PRID_SAFEPIPE3030		12
171#define LASAT_PRID_SAFEPIPE5020		13
172#define LASAT_PRID_SAFEPIPE5030		14
173#define LASAT_PRID_SAFEPIPE1120		15
174#define LASAT_PRID_SAFEPIPE1130		16
175#define LASAT_PRID_SAFEPIPE6010		17
176#define LASAT_PRID_SAFEPIPE6110		18
177#define LASAT_PRID_SAFEPIPE6210		19
178#define LASAT_PRID_SAFEPIPE1020		20
179#define LASAT_PRID_SAFEPIPE1040		21
180#define LASAT_PRID_SAFEPIPE1060		22
181
182struct lasat_info {
183	unsigned int  li_cpu_hz;
184	unsigned int  li_bus_hz;
185	unsigned int  li_flags;
186	unsigned int  li_bmid;
187	unsigned int  li_memsize;
188	unsigned int  li_flash_size;
189	unsigned int  li_edhac;
190	unsigned int  li_eadi;
191	unsigned int  li_hifn;
192	unsigned int  li_isdn;
193	unsigned int  li_ide;
194	unsigned int  li_hdlc;
195	unsigned int  li_leasedline;
196	unsigned int  li_usversion;
197	unsigned int  li_hw_flags;
198	unsigned int  li_vendid;
199	unsigned int  li_prid;
200	unsigned char li_bmstr[16];
201	unsigned char li_vendstr[32];
202	unsigned char li_namestr[32];
203	unsigned char li_typestr[16];
204	unsigned char li_partno[13];
205	unsigned char li_serial[15];
206	unsigned int  li_vpn_kbps;	/* kbit/s */
207	unsigned int  li_vpn_tunnels;
208	unsigned int  li_vpn_clients;
209	/* Info on the Flash layout */
210	unsigned int  li_flash_base;
211	unsigned int  li_flash_service_base;
212	unsigned int  li_flash_service_size;
213	unsigned int  li_flash_normal_base;
214	unsigned int  li_flash_normal_size;
215	unsigned int  li_flash_cfg_base;
216	unsigned int  li_flash_cfg_size;
217	unsigned int  li_flash_fs_base;
218	unsigned int  li_flash_fs_size;
219	unsigned int  li_flash_fs2_base;
220	unsigned int  li_flash_fs2_size;
221	struct lasat_eeprom_struct li_eeprom_info;
222	unsigned int  li_eeprom_upgrade_version;
223	unsigned int  li_debugaccess;
224};
225
226extern struct lasat_info lasat_board_info;
227
228/* Called from setup() to initialize the global board_info struct */
229extern int lasat_init_board_info(void);
230
231/* Write the modified EEPROM info struct */
232extern void lasat_write_eeprom_info(void);
233
234#define N_MACHTYPES		2
235/* for calibration of delays */
236
237#include <asm/delay.h>
238#define NANOTH 1000000000L
239extern inline void ndelay(unsigned int ns) {
240	if (ns != 0)
241		__delay(lasat_board_info.li_cpu_hz / 2 / (NANOTH / ns) + 1);
242}
243
244#endif /* !defined (_LANGUAGE_ASSEMBLY) */
245
246/* Lasat 100 boards */
247#define LASAT_GT_BASE           (KSEG1ADDR(0x14000000))
248
249/* Lasat 200 boards */
250#define Vrc5074_PHYS_BASE       0x1fa00000
251#define Vrc5074_BASE            (KSEG1ADDR(Vrc5074_PHYS_BASE))
252#define PCI_WINDOW1             0x1a000000
253
254#endif /* _LASAT_H */
255