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