This is just a maintainance patch for LASAT removing unused
cruft and updating stuff to be more compatible with the 2.5 way of
doing things (mostly local_irq_* stuff). It also impliments a polling
printf (prom_printf) for debugging and if you have a recent prom
monitor / bootloader it gets started after a shutdown or panic
from whence you can restart, examine memory, etc...
I have a unifying patch for 2.5 but It wont work until a newer
2.5 is merged back to the mips-linux tree (for crc support) and
the serial driver in 2.5 is fixed so a serial port can be
registered dynamically (or do you want the patch anyway Ralf
to sync things up?)
/Brian
Index: arch/mips/lasat/ds1603.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/ds1603.c,v
retrieving revision 1.1.1.2
retrieving revision 1.4
diff -u -r1.1.1.2 -r1.4
--- arch/mips/lasat/ds1603.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/ds1603.c 14 Dec 2002 17:43:38 -0000 1.4
@@ -145,12 +145,14 @@
return word;
}
-void ds1603_set(unsigned long time)
+int ds1603_set(unsigned long time)
{
rtc_init_op();
rtc_write_byte(SET_TIME_CMD);
rtc_write_word(time);
rtc_end_op();
+
+ return 0;
}
void ds1603_set_trimmer(unsigned int trimval)
Index: arch/mips/lasat/ds1603.h
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/ds1603.h,v
retrieving revision 1.1.1.2
retrieving revision 1.4
diff -u -r1.1.1.2 -r1.4
--- arch/mips/lasat/ds1603.h 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/ds1603.h 19 Jan 2003 21:51:44 -0000 1.4
@@ -21,7 +21,7 @@
extern struct ds_defs *ds1603;
unsigned long ds1603_read(void);
-void ds1603_set(unsigned long);
+int ds1603_set(unsigned long);
void ds1603_set_trimmer(unsigned int);
void ds1603_enable(void);
void ds1603_disable(void);
Index: arch/mips/lasat/interrupt.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/interrupt.c,v
retrieving revision 1.1.1.2
retrieving revision 1.15
diff -u -r1.1.1.2 -r1.15
--- arch/mips/lasat/interrupt.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/interrupt.c 19 Jan 2003 21:16:19 -0000 1.15
@@ -53,9 +53,9 @@
unsigned long flags;
DEBUG_INT("disable_lasat_irq: %d", irq_nr);
- save_and_cli(flags);
+ local_irq_save(flags);
*lasat_int_mask &= ~(1 << irq_nr) << lasat_int_mask_shift;
- restore_flags(flags);
+ local_irq_restore(flags);
}
void enable_lasat_irq(unsigned int irq_nr)
@@ -63,9 +63,9 @@
unsigned long flags;
DEBUG_INT("enable_lasat_irq: %d", irq_nr);
- save_and_cli(flags);
+ local_irq_save(flags);
*lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift;
- restore_flags(flags);
+ local_irq_restore(flags);
}
static unsigned int startup_lasat_irq(unsigned int irq)
@@ -164,15 +164,15 @@
switch (mips_machtype) {
case MACH_LASAT_100:
- lasat_int_status = LASAT_INT_STATUS_REG_100;
- lasat_int_mask = LASAT_INT_MASK_REG_100;
+ lasat_int_status = (void *)LASAT_INT_STATUS_REG_100;
+ lasat_int_mask = (void *)LASAT_INT_MASK_REG_100;
lasat_int_mask_shift = LASATINT_MASK_SHIFT_100;
get_int_status = get_int_status_100;
*lasat_int_mask = 0;
break;
case MACH_LASAT_200:
- lasat_int_status = LASAT_INT_STATUS_REG_200;
- lasat_int_mask = LASAT_INT_MASK_REG_200;
+ lasat_int_status = (void *)LASAT_INT_STATUS_REG_200;
+ lasat_int_mask = (void *)LASAT_INT_MASK_REG_200;
lasat_int_mask_shift = LASATINT_MASK_SHIFT_200;
get_int_status = get_int_status_200;
*lasat_int_mask &= 0xffff;
Index: arch/mips/lasat/lasat_board.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/lasat_board.c,v
retrieving revision 1.1.1.2
retrieving revision 1.15
diff -u -r1.1.1.2 -r1.15
--- arch/mips/lasat/lasat_board.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/lasat_board.c 19 Jan 2003 21:07:58 -0000 1.15
@@ -23,20 +23,20 @@
*
* Routines specific to the LASAT boards
*/
+#include <linux/types.h>
#include <asm/lasat/lasat.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <asm/bootinfo.h>
-#include <asm/lasat/lasat_mtd.h>
#include <asm/addrspace.h>
#include "at93c.h"
/* New model description table */
#include "lasat_models.h"
struct lasat_info lasat_board_info;
-extern unsigned long crc32(unsigned long, unsigned char *, int);
-
+unsigned long crc32(unsigned long, unsigned char *, int);
+void update_bcastaddr(void);
int EEPROMRead(unsigned int pos, unsigned char *data, int len)
{
@@ -57,81 +57,39 @@
return 0;
}
-static int upgrade_eeprom_info(struct lasat_eeprom_struct * ser_data)
+static void init_flash_sizes(void)
{
- struct lasat_eeprom_struct_pre7 old;
-
- memcpy(&old, ser_data, sizeof(struct lasat_eeprom_struct_pre7));
-
- switch (ser_data->version) {
- case 1:
- case 2:
- case 3:
- /* These have old serial numbers that we can't convert. */
- return -1;
-
- case 4:
- /* This used flags for obscure purposes. */
- old.version = 5;
-
- case 5:
- /* Writecount didn't exist. */
- old.writecount = 1;
- old.version = 6;
-
- case 6:
- /* The length of the part numbers have changed. */
- /* So the print_serial, prod_partno, etc have moved. */
- /* Also, now the dash is part of the part number (in
- * accordance with our philosophy that the part numbers
- * are to be considered "random data"). */
-
- memset(ser_data, 0, 128);
-
- ser_data->cfg[0] = 0;
- ser_data->cfg[1] = 0;
- ser_data->cfg[2] = 0;
-
- memcpy(ser_data->hwaddr, old.hwaddr0, 6);
-
- memcpy(ser_data->print_partno, old.print_partno, 6);
- ser_data->print_partno[6] = '-';
- memcpy(ser_data->print_partno+7, old.print_partno+6, 3);
-
- memcpy(ser_data->print_serial, old.print_serial, 14);
-
- memcpy(ser_data->prod_partno, old.prod_partno, 6);
- ser_data->prod_partno[6] = '-';
- memcpy(ser_data->prod_partno+7, old.prod_partno+6, 3);
-
- memcpy(ser_data->prod_serial, old.prod_serial, 14);
-
- memcpy(ser_data->passwd_hash, old.passwd_hash, 16);
-
- ser_data->vendid = old.vendor;
- ser_data->ts_ref = old.ts_ref;
- ser_data->ts_signoff = old.ts_signoff;
- ser_data->serviceflag = old.writecount;
-
- ser_data->ipaddr = old.ipaddr;
- ser_data->netmask = old.netmask;
-
- /* make up something */
- ser_data->cfg[0] = 0x01132001;
- ser_data->cfg[1] = 0x00010061;
+ int i;
+ unsigned long *lb = lasat_board_info.li_flashpart_base;
+ unsigned long *ls = lasat_board_info.li_flashpart_size;
- ser_data->prid = ((ser_data->cfg[0] >> 4) & 0x0f);
- ser_data->version = 7;
+ ls[LASAT_MTD_BOOTLOADER] = 0x40000;
+ ls[LASAT_MTD_SERVICE] = 0xC0000;
+ ls[LASAT_MTD_NORMAL] = 0x100000;
+ if (mips_machtype == MACH_LASAT_100) {
+ lasat_board_info.li_flash_base = KSEG1ADDR(0x1e000000);
+
+ lb[LASAT_MTD_BOOTLOADER] = KSEG1ADDR(0x1e400000);
- case 7:
- /* Up to date */
- return 0;
+ if (lasat_board_info.li_flash_size > 0x200000) {
+ ls[LASAT_MTD_CONFIG] = 0x100000;
+ ls[LASAT_MTD_FS] = 0x500000;
+ }
+ } else {
+ lasat_board_info.li_flash_base = KSEG1ADDR(0x10000000);
- default:
- /* What, an unknown version? */
- return -1;
+ if (lasat_board_info.li_flash_size < 0x1000000) {
+ lb[LASAT_MTD_BOOTLOADER] = KSEG1ADDR(0x10000000);
+ ls[LASAT_MTD_CONFIG] = 0x100000;
+ if (lasat_board_info.li_flash_size >= 0x400000) {
+ ls[LASAT_MTD_FS] =
lasat_board_info.li_flash_size - 0x300000;
+ }
+ }
}
+
+ for (i = 1; i < LASAT_MTD_LAST; i++)
+ lb[i] = lb[i-1] + ls[i-1];
}
int lasat_init_board_info(void)
@@ -139,19 +97,13 @@
int c;
unsigned long crc;
unsigned long cfg0, cfg1;
- const vendor_info_t *pvi;
const product_info_t *ppi;
int i_n_base_models = N_BASE_MODELS;
const char * const * i_txt_base_models = txt_base_models;
- int i_n_vendors = N_VENDORS;
- vendor_info_t const *i_vendor_info_table = vendor_info_table;
int i_n_prids = N_PRIDS;
memset(&lasat_board_info, 0, sizeof(lasat_board_info));
- /* Assume EEPROM struct is LASAT_EEPROM_VERSION */
- lasat_board_info.li_eeprom_upgrade_version = 1;
-
/* First read the EEPROM info */
EEPROMRead(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
sizeof(struct lasat_eeprom_struct));
@@ -161,44 +113,21 @@
sizeof(struct lasat_eeprom_struct) - 4);
if (crc != lasat_board_info.li_eeprom_info.crc32) {
- return -1;
+ prom_printf("WARNING...\nWARNING...\nEEPROM CRC does not match
calculated, attempting to soldier on...\n");
}
if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION)
{
- if (0 >
upgrade_eeprom_info(&(lasat_board_info.li_eeprom_info))) {
- printk("Upgrading EEPROM information from version %d to
version %d failed!\n",
- (unsigned
int)lasat_board_info.li_eeprom_info.version,
- LASAT_EEPROM_VERSION);
- return -1;
- }
- lasat_write_eeprom_info();
-
- /* OK, the EEPROM struct is not LASAT_EEPROM_VERSION */
- lasat_board_info.li_eeprom_upgrade_version = 0;
+ prom_printf("WARNING...\nWARNING...\nEEPROM version %d, wanted
version %d, attempting to soldier on...\n",
+ (unsigned int)lasat_board_info.li_eeprom_info.version,
+ LASAT_EEPROM_VERSION);
}
- /*
- * Part and serial no.
- */
- memcpy(lasat_board_info.li_partno,
- lasat_board_info.li_eeprom_info.prod_partno, 12);
- lasat_board_info.li_partno[12] = '\0';
-
- memcpy(lasat_board_info.li_serial,
- lasat_board_info.li_eeprom_info.prod_serial,
- 14);
- lasat_board_info.li_serial[14] = '\0';
-
- /*
- * If configuration field is present, use that
- */
-
cfg0 = lasat_board_info.li_eeprom_info.cfg[0];
cfg1 = lasat_board_info.li_eeprom_info.cfg[1];
if ( LASAT_W0_DSCTYPE(cfg0) != 1) {
- return -1;
+ prom_printf("WARNING...\nWARNING...\nInvalid configuration read
from EEPROM, attempting to soldier on...");
}
/* We have a valid configuration */
@@ -282,35 +211,6 @@
break;
}
- switch (LASAT_W1_EDHAC(cfg1)) {
- case 0x0:
- lasat_board_info.li_edhac = 0;
- lasat_board_info.li_eadi = 0;
- break;
- case 0x1:
- lasat_board_info.li_edhac = 0;
- lasat_board_info.li_eadi = 1;
- break;
- case 0x2:
- lasat_board_info.li_edhac = 1;
- lasat_board_info.li_eadi = 1;
- break;
- case 0x3:
- lasat_board_info.li_edhac = 2;
- lasat_board_info.li_eadi = 1;
- break;
- }
- /* The 200 board always has EADI */
- if (LASAT_W0_CPUTYPE(cfg0) == 1) {
- lasat_board_info.li_eadi = 1;
- }
-
- lasat_board_info.li_hifn = LASAT_W1_HIFN(cfg1);
- lasat_board_info.li_isdn = LASAT_W1_ISDN(cfg1);
- lasat_board_info.li_ide = LASAT_W1_IDE(cfg1);
- lasat_board_info.li_hdlc = LASAT_W1_HDLC(cfg1);
- lasat_board_info.li_usversion = LASAT_W1_USVERSION(cfg1);
-
/* Flash size */
switch (LASAT_W1_FLASHSIZE(cfg1)) {
case 0:
@@ -330,73 +230,25 @@
break;
}
- /* Flash base addresses */
- if (mips_machtype == MACH_LASAT_100) {
- lasat_board_info.li_flash_base = KSEG1ADDR(0x1e000000);
- lasat_board_info.li_flash_service_base = KSEG1ADDR(0x1e400000);
- lasat_board_info.li_flash_service_size = 0x100000;
- lasat_board_info.li_flash_normal_base = KSEG1ADDR(0x1e500000);
- lasat_board_info.li_flash_normal_size = 0x100000;
- if (lasat_board_info.li_flash_size > 0x200000) {
- lasat_board_info.li_flash_cfg_base =
KSEG1ADDR(0x1e600000);
- lasat_board_info.li_flash_cfg_size = 0x100000;
- lasat_board_info.li_flash_fs_base =
KSEG1ADDR(0x1e700000);
- lasat_board_info.li_flash_fs_size = 0x500000;
- }
- } else {
- lasat_board_info.li_flash_base = KSEG1ADDR(0x10000000);
- if (lasat_board_info.li_flash_size < 0x1000000) {
- lasat_board_info.li_flash_service_base =
KSEG1ADDR(0x10000000);
- lasat_board_info.li_flash_service_size = 0x100000;
- lasat_board_info.li_flash_cfg_base =
KSEG1ADDR(0x10200000);
- lasat_board_info.li_flash_cfg_size = 0x100000;
- lasat_board_info.li_flash_normal_base =
KSEG1ADDR(0x10100000);
- lasat_board_info.li_flash_normal_size = 0x100000;
- if (lasat_board_info.li_flash_size >= 0x400000) {
- lasat_board_info.li_flash_fs_base =
KSEG1ADDR(0x10300000);
- lasat_board_info.li_flash_fs_size =
- lasat_board_info.li_flash_size -
0x300000;
- }
- } else {
- lasat_board_info.li_flash_service_base =
KSEG1ADDR(0x10400000);
- lasat_board_info.li_flash_service_size = 0x100000;
- lasat_board_info.li_flash_cfg_base =
KSEG1ADDR(0x10000000);
- lasat_board_info.li_flash_cfg_size = 0x200000;
- lasat_board_info.li_flash_normal_base =
KSEG1ADDR(0x10200000);
- lasat_board_info.li_flash_normal_size = 0x100000;
- lasat_board_info.li_flash_fs_base =
KSEG1ADDR(0x10500000);
- lasat_board_info.li_flash_fs_size = 0xa00000;
- }
- }
+ init_flash_sizes();
lasat_board_info.li_bmid = LASAT_W0_BMID(cfg0);
lasat_board_info.li_prid = lasat_board_info.li_eeprom_info.prid;
if (lasat_board_info.li_prid == 0xffff || lasat_board_info.li_prid == 0)
lasat_board_info.li_prid = lasat_board_info.li_bmid;
- lasat_board_info.li_vendid = lasat_board_info.li_eeprom_info.vendid;
/* Base model stuff */
if (lasat_board_info.li_bmid > i_n_base_models)
lasat_board_info.li_bmid = i_n_base_models;
strcpy(lasat_board_info.li_bmstr,
i_txt_base_models[lasat_board_info.li_bmid]);
- /* Vendor stuff */
- if (lasat_board_info.li_vendid >= i_n_vendors)
- lasat_board_info.li_vendid = 0;
- pvi = &i_vendor_info_table[lasat_board_info.li_vendid];
- strcpy(lasat_board_info.li_vendstr, pvi->vi_name);
-
/* Product ID dependent values */
c = lasat_board_info.li_prid;
if (c >= i_n_prids) {
strcpy(lasat_board_info.li_namestr, "Unknown Model");
strcpy(lasat_board_info.li_typestr, "Unknown Type");
- lasat_board_info.li_vpn_kbps = 0;
- lasat_board_info.li_vpn_tunnels = 0;
- lasat_board_info.li_vpn_clients = 0;
} else {
- /* Product ID names (also depending on vendor ID) */
- ppi = &pvi->vi_product_info[c];
+ ppi = &vendor_info_table[0].vi_product_info[c];
strcpy(lasat_board_info.li_namestr, ppi->pi_name);
if (ppi->pi_type)
strcpy(lasat_board_info.li_typestr, ppi->pi_type);
@@ -404,7 +256,9 @@
sprintf(lasat_board_info.li_typestr, "%d",10*c);
}
- lasat_board_info.li_debugaccess =
lasat_board_info.li_eeprom_info.debugaccess;
+#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL)
+ update_bcastaddr();
+#endif
return 0;
}
@@ -423,19 +277,3 @@
sizeof(struct lasat_eeprom_struct));
}
-char *get_firmware_version(void)
-{
- char *fw;
- fw = (unsigned char *)(lasat_board_info.li_flash_normal_base);
-
- if ( (((unsigned long *)fw)[0] != 0xfedeabba) ||
- (((unsigned long *)fw)[1] != 0x00bedead))
- return "NONE";
-
- fw += 0x50;
- if ((*fw == 0) || (strlen(fw) > 175)) {
- return "UNKNOWN";
- }
-
- return fw;
-}
Index: arch/mips/lasat/pci.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/pci.c,v
retrieving revision 1.1.1.3
retrieving revision 1.7
diff -u -r1.1.1.3 -r1.7
--- arch/mips/lasat/pci.c 11 Jan 2003 23:38:10 -0000 1.1.1.3
+++ arch/mips/lasat/pci.c 11 Jan 2003 23:47:58 -0000 1.7
@@ -164,16 +164,16 @@
{
u32 data=0, flags;
- save_and_cli(flags);
+ local_irq_save(flags);
if (lasat_pcibios_config_access(PCI_ACCESS_READ, dev, reg, &data)) {
- restore_flags(flags);
+ local_irq_restore(flags);
return -1;
}
*val = (data >> ((reg & 3) << 3)) & 0xff;
- restore_flags(flags);
+ local_irq_restore(flags);
return PCIBIOS_SUCCESSFUL;
}
@@ -185,16 +185,16 @@
if (reg & 1)
return PCIBIOS_BAD_REGISTER_NUMBER;
- save_and_cli(flags);
+ local_irq_save(flags);
if (lasat_pcibios_config_access(PCI_ACCESS_READ, dev, reg, &data)) {
- restore_flags(flags);
+ local_irq_restore(flags);
return -1;
}
*val = (data >> ((reg & 3) << 3)) & 0xffff;
- restore_flags(flags);
+ local_irq_restore(flags);
return PCIBIOS_SUCCESSFUL;
}
@@ -205,16 +205,16 @@
if (reg & 3)
return PCIBIOS_BAD_REGISTER_NUMBER;
- save_and_cli(flags);
+ local_irq_save(flags);
if (lasat_pcibios_config_access(PCI_ACCESS_READ, dev, reg, &data)) {
- restore_flags(flags);
+ local_irq_restore(flags);
return -1;
}
*val = data;
- restore_flags(flags);
+ local_irq_restore(flags);
return PCIBIOS_SUCCESSFUL;
}
@@ -223,7 +223,7 @@
{
u32 data=0, flags, err;
- save_and_cli(flags);
+ local_irq_save(flags);
err = lasat_pcibios_config_access(PCI_ACCESS_READ, dev, reg, &data);
if (err)
@@ -234,7 +234,7 @@
err = lasat_pcibios_config_access(PCI_ACCESS_WRITE, dev, reg, &data);
out:
- restore_flags(flags);
+ local_irq_restore(flags);
if (err)
return -1;
@@ -249,7 +249,7 @@
if (reg & 1)
return PCIBIOS_BAD_REGISTER_NUMBER;
- save_and_cli(flags);
+ local_irq_save(flags);
err = lasat_pcibios_config_access(PCI_ACCESS_READ, dev, reg, &data);
if (err)
@@ -260,7 +260,7 @@
err = lasat_pcibios_config_access(PCI_ACCESS_WRITE, dev, reg, &data);
out:
- restore_flags(flags);
+ local_irq_restore(flags);
if (err)
return -1;
@@ -275,10 +275,10 @@
if (reg & 3)
return PCIBIOS_BAD_REGISTER_NUMBER;
- save_and_cli(flags);
+ local_irq_save(flags);
err = lasat_pcibios_config_access(PCI_ACCESS_WRITE, dev, reg, &val);
- restore_flags(flags);
+ local_irq_restore(flags);
if (err)
return -1;
Index: arch/mips/lasat/picvue.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/picvue.c,v
retrieving revision 1.1.1.2
retrieving revision 1.11
diff -u -r1.1.1.2 -r1.11
--- arch/mips/lasat/picvue.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/picvue.c 6 Feb 2003 21:52:44 -0000 1.11
@@ -11,6 +11,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/errno.h>
+#include <linux/string.h>
#include "picvue.h"
@@ -109,7 +110,8 @@
pvc_wait();
}
-void pvc_write_string(const unsigned char *str, u8 addr, int line) {
+void pvc_write_string(const unsigned char *str, u8 addr, int line)
+{
int i = 0;
if (line > 0 && (PVC_NLINES > 1))
@@ -122,9 +124,33 @@
}
}
+void pvc_write_string_centered(const unsigned char *str, int line)
+{
+ int len = strlen(str);
+ u8 addr;
+
+ if (len > PVC_VISIBLE_CHARS)
+ addr = 0;
+ else
+ addr = (PVC_VISIBLE_CHARS - strlen(str))/2;
+
+ pvc_write_string(str, addr, line);
+}
+
+void pvc_dump_string(const unsigned char *str)
+{
+ int len = strlen(str);
+
+ pvc_clear();
+ pvc_write_string(str, 0, 0);
+ if (len > PVC_VISIBLE_CHARS)
+ pvc_write_string(&str[PVC_VISIBLE_CHARS], 0, 1);
+}
+
#define BM_SIZE 8
#define MAX_PROGRAMMABLE_CHARS 8
-int pvc_program_cg(int charnum, u8 bitmap[BM_SIZE]) {
+int pvc_program_cg(int charnum, u8 bitmap[BM_SIZE])
+{
int i;
int addr;
@@ -146,7 +172,8 @@
#define ONE_LINE 0
#define LARGE_FONT (1 << 2)
#define SMALL_FONT 0
-static void pvc_funcset(u8 cmd) {
+static void pvc_funcset(u8 cmd)
+{
pvc_write(FUNC_SET_CMD | (cmd & (EIGHT_BYTE|TWO_LINES|LARGE_FONT)),
MODE_INST);
}
@@ -154,7 +181,8 @@
#define AUTO_INC (1 << 1)
#define AUTO_DEC 0
#define CURSOR_FOLLOWS_DISP (1 << 0)
-static void pvc_entrymode(u8 cmd) {
+static void pvc_entrymode(u8 cmd)
+{
pvc_write(ENTRYMODE_CMD | (cmd & (AUTO_INC|CURSOR_FOLLOWS_DISP)),
MODE_INST);
}
@@ -163,7 +191,8 @@
#define DISP_ON (1 << 2)
#define CUR_ON (1 << 1)
#define CUR_BLINK (1 << 0)
-void pvc_dispcnt(u8 cmd) {
+void pvc_dispcnt(u8 cmd)
+{
pvc_write(DISP_CNT_CMD | (cmd & (DISP_ON|CUR_ON|CUR_BLINK)), MODE_INST);
}
@@ -172,17 +201,20 @@
#define CURSOR 0
#define RIGHT (1 << 2)
#define LEFT 0
-void pvc_move(u8 cmd) {
+void pvc_move(u8 cmd)
+{
pvc_write(MOVE_CMD | (cmd & (DISPLAY|RIGHT)), MODE_INST);
}
#define CLEAR_CMD 0x1
-void pvc_clear(void) {
+void pvc_clear(void)
+{
pvc_write(CLEAR_CMD, MODE_INST);
}
#define HOME_CMD 0x2
-void pvc_home(void) {
+void pvc_home(void)
+{
pvc_write(HOME_CMD, MODE_INST);
}
@@ -197,6 +229,10 @@
pvc_funcset(cmd);
pvc_dispcnt(DISP_ON);
pvc_entrymode(AUTO_INC);
+
+ pvc_clear();
+ pvc_write_string_centered("Display", 0);
+ pvc_write_string_centered("Initialized", 1);
return 0;
}
Index: arch/mips/lasat/picvue.h
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/picvue.h,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 picvue.h
--- arch/mips/lasat/picvue.h 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/picvue.h 19 Feb 2003 20:29:12 -0000
@@ -23,6 +23,8 @@
#define PVC_VISIBLE_CHARS 16
void pvc_write_string(const unsigned char *str, u8 addr, int line);
+void pvc_write_string_centered(const unsigned char *str, int line);
+void pvc_dump_string(const unsigned char *str);
#define BM_SIZE 8
#define MAX_PROGRAMMABLE_CHARS 8
Index: arch/mips/lasat/picvue_proc.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/picvue_proc.c,v
retrieving revision 1.1.1.2
retrieving revision 1.6
diff -u -r1.1.1.2 -r1.6
--- arch/mips/lasat/picvue_proc.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/picvue_proc.c 12 Jan 2003 17:10:28 -0000 1.6
@@ -81,7 +81,7 @@
return origcount;
}
-static int pvc_proc_scroll(struct file *file, const char *buffer,
+static int pvc_proc_write_scroll(struct file *file, const char *buffer,
unsigned long count, void *data)
{
int origcount = count;
@@ -109,6 +109,20 @@
return origcount;
}
+static int pvc_proc_read_scroll(char *page, char **start,
+ off_t off, int count,
+ int *eof, void *data)
+{
+ char *origpage = page;
+
+ down(&pvc_sem);
+ page += sprintf(page, "%d\n", scroll_dir * scroll_interval);
+ up(&pvc_sem);
+
+ return page - origpage;
+}
+
+
void pvc_proc_timerfunc(unsigned long data)
{
if (scroll_dir < 0)
@@ -155,7 +169,8 @@
proc_entry = create_proc_entry("scroll", 0644, pvc_display_dir);
if (proc_entry == NULL)
goto error;
- proc_entry->write_proc = pvc_proc_scroll;
+ proc_entry->write_proc = pvc_proc_write_scroll;
+ proc_entry->read_proc = pvc_proc_read_scroll;
init_timer(&timer);
timer.function = pvc_proc_timerfunc;
Index: arch/mips/lasat/prom.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/prom.c,v
retrieving revision 1.1.1.2
retrieving revision 1.12
diff -u -r1.1.1.2 -r1.12
--- arch/mips/lasat/prom.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/prom.c 6 Feb 2003 21:28:52 -0000 1.12
@@ -1,6 +1,7 @@
/*
* PROM interface routines.
*/
+#include <linux/types.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/string.h>
@@ -15,6 +16,74 @@
#include "at93c.h"
#include <asm/lasat/eeprom.h>
+#include "prom.h"
+
+#define RESET_VECTOR 0xbfc00000
+#define PROM_JUMP_TABLE_ENTRY(n) (*((u32 *)(RESET_VECTOR + 0x20) + n))
+#define PROM_DISPLAY_ADDR PROM_JUMP_TABLE_ENTRY(0)
+#define PROM_PUTC_ADDR PROM_JUMP_TABLE_ENTRY(1)
+#define PROM_MONITOR_ADDR PROM_JUMP_TABLE_ENTRY(2)
+
+static void null_prom_printf(const char * fmt, ...)
+{
+}
+
+static void null_prom_display(const char *string, int pos, int clear)
+{
+}
+
+static void null_prom_monitor(void)
+{
+}
+
+static void null_prom_putc(char c)
+{
+}
+
+/* these are functions provided by the bootloader */
+static void (* prom_putc)(char c) = null_prom_putc;
+void (* prom_printf)(const char * fmt, ...) = null_prom_printf;
+void (* prom_display)(const char *string, int pos, int clear) =
+ null_prom_display;
+void (* prom_monitor)(void) = null_prom_monitor;
+
+#define PROM_PRINTFBUF_SIZE 256
+static char prom_printfbuf[PROM_PRINTFBUF_SIZE];
+
+static void real_prom_printf(const char * fmt, ...)
+{
+ va_list ap;
+ int len;
+ char *c = prom_printfbuf;
+ int i;
+
+ va_start(ap, fmt);
+ len = vsnprintf(prom_printfbuf, PROM_PRINTFBUF_SIZE, fmt, ap);
+ va_end(ap);
+
+ /* output overflowed the buffer */
+ if (len < 0 || len > PROM_PRINTFBUF_SIZE)
+ len = PROM_PRINTFBUF_SIZE;
+
+ for (i=0; i < len; i++) {
+ if (*c == '\n')
+ prom_putc('\r');
+ prom_putc(*c++);
+ }
+}
+
+static void setup_prom_vectors(void)
+{
+ u32 version = *(u32 *)(RESET_VECTOR + 0x90);
+
+ if (version == 306) {
+ prom_display = (void *)PROM_DISPLAY_ADDR;
+ prom_putc = (void *)PROM_PUTC_ADDR;
+ prom_printf = real_prom_printf;
+ prom_monitor = (void *)PROM_MONITOR_ADDR;
+ }
+ prom_printf("prom vectors set up\n");
+}
char arcs_cmdline[CL_SIZE];
@@ -27,6 +96,8 @@
void __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
{
+ setup_prom_vectors();
+
if (mips_cpu.cputype == CPU_R5000)
mips_machtype = MACH_LASAT_200;
else
@@ -50,21 +121,12 @@
/* Set memory regions */
ioport_resource.start = 0; /* Should be KSEGx ??? */
ioport_resource.end = 0xffffffff; /* Should be ??? */
-#if 0
- /*
- * We should do it right, i.e. like this, in stead of passing mem=xxxM.
- */
+
add_memory_region(0, lasat_board_info.li_memsize, BOOT_MEM_RAM);
-#endif
}
void prom_free_prom_memory(void)
{
-}
-
-void prom_printf(const char * fmt, ...)
-{
- return;
}
const char *get_system_type(void)
Index: arch/mips/lasat/prom.h
===================================================================
RCS file: arch/mips/lasat/prom.h
diff -N arch/mips/lasat/prom.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ arch/mips/lasat/prom.h 4 Feb 2003 20:38:40 -0000 1.2
@@ -0,0 +1,6 @@
+#ifndef PROM_H
+#define PROM_H
+extern void (* prom_display)(const char *string, int pos, int clear);
+extern void (* prom_monitor)(void);
+extern void (* prom_printf)(const char * fmt, ...);
+#endif
Index: arch/mips/lasat/reset.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/reset.c,v
retrieving revision 1.1.1.2
retrieving revision 1.6
diff -u -r1.1.1.2 -r1.6
--- arch/mips/lasat/reset.c 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/reset.c 12 Jan 2003 17:10:28 -0000 1.6
@@ -29,6 +29,7 @@
#include <asm/system.h>
#include <asm/lasat/lasat.h>
#include "picvue.h"
+#include "prom.h"
static void lasat_machine_restart(char *command);
static void lasat_machine_halt(void);
@@ -38,31 +39,29 @@
static void lasat_machine_restart(char *command)
{
- cli();
+ local_irq_disable();
- {
- volatile unsigned int *softres_reg = lasat_misc->reset_reg;
-
- if (lasat_boot_to_service) {
- printk("machine_restart: Rebooting to service mode\n");
- *(volatile unsigned int *)0xa0000024 = 0xdeadbeef;
- *(volatile unsigned int *)0xa00000fc = 0xfedeabba;
- }
- *softres_reg = 0xbedead;
+ if (lasat_boot_to_service) {
+ printk("machine_restart: Rebooting to service mode\n");
+ *(volatile unsigned int *)0xa0000024 = 0xdeadbeef;
+ *(volatile unsigned int *)0xa00000fc = 0xfedeabba;
}
+ *lasat_misc->reset_reg = 0xbedead;
for (;;) ;
}
#define MESSAGE "System halted"
static void lasat_machine_halt(void)
{
+ local_irq_disable();
+
/* Disable interrupts and loop forever */
printk(KERN_NOTICE MESSAGE "\n");
#ifdef CONFIG_PICVUE
pvc_clear();
pvc_write_string(MESSAGE, 0, 0);
#endif
- cli();
+ prom_monitor();
for (;;) ;
}
Index: arch/mips/lasat/setup.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/setup.c,v
retrieving revision 1.1.1.4
retrieving revision 1.19
diff -u -r1.1.1.4 -r1.19
--- arch/mips/lasat/setup.c 13 Dec 2002 23:41:18 -0000 1.1.1.4
+++ arch/mips/lasat/setup.c 19 Jan 2003 22:05:31 -0000 1.19
@@ -7,6 +7,8 @@
* Thomas Horsten <thh@lasat.com>
* Copyright (C) 2000 LASAT Networks A/S.
*
+ * Brian Murphy <brian@murphy.dk>
+ *
* ########################################################################
*
* This program is free software; you can distribute it and/or modify it
@@ -40,7 +42,6 @@
#include <asm/irq.h>
#include <asm/lasat/lasat.h>
-#include <asm/lasat/lasat_mtd.h>
#include <linux/serial.h>
#include <asm/serial.h>
#include <asm/lasat/serial.h>
@@ -55,6 +56,8 @@
#include <asm/lasat/picvue.h>
#include <asm/lasat/eeprom.h>
+#include "prom.h"
+
int lasat_command_line = 0;
void lasatint_init(void);
@@ -98,27 +101,34 @@
{ (void *)PVC_REG_200, PVC_DATA_SHIFT_200, PVC_DATA_M_200,
PVC_E_200, PVC_RW_200, PVC_RS_200 }
};
+#endif
-
-static int lasat_panic_event(struct notifier_block *this,
+static int lasat_panic_display(struct notifier_block *this,
unsigned long event, void *ptr)
{
+#ifdef CONFIG_PICVUE
unsigned char *string = ptr;
if (string == NULL)
string = "Kernel Panic";
- pvc_write_string(string, 0, 0);
- if (strlen(string) > PVC_VISIBLE_CHARS)
- pvc_write_string(&string[PVC_VISIBLE_CHARS], 0, 1);
+ pvc_dump_string(string);
+#endif
+ return NOTIFY_DONE;
+}
+
+static int lasat_panic_prom_monitor(struct notifier_block *this,
+ unsigned long event, void *ptr)
+{
+ prom_monitor();
return NOTIFY_DONE;
}
-static struct notifier_block lasat_panic_block = {
- lasat_panic_event,
- NULL,
- INT_MAX /* try to do it first */
+static struct notifier_block lasat_panic_block[] =
+{
+ { lasat_panic_display, NULL, INT_MAX },
+ { lasat_panic_prom_monitor, NULL, INT_MIN }
};
-#endif
+#ifdef CONFIG_BLK_DEV_IDE
static int lasat_ide_default_irq(ide_ioreg_t base) {
return 0;
}
@@ -126,6 +136,7 @@
static ide_ioreg_t lasat_ide_default_io_base(int index) {
return 0;
}
+#endif
static void lasat_time_init(void)
{
@@ -176,14 +187,16 @@
void __init lasat_setup(void)
{
+ int i;
lasat_misc = &lasat_misc_info[mips_machtype];
#ifdef CONFIG_PICVUE
picvue = &pvc_defs[mips_machtype];
- /* Set up panic notifier */
-
- notifier_chain_register(&panic_notifier_list, &lasat_panic_block);
#endif
+ /* Set up panic notifier */
+ for (i = 0; i < sizeof(lasat_panic_block) / sizeof(struct
notifier_block); i++)
+ notifier_chain_register(&panic_notifier_list,
&lasat_panic_block[i]);
+
#ifdef CONFIG_BLK_DEV_IDE
ide_ops = &std_ide_ops;
ide_ops->ide_default_irq = &lasat_ide_default_irq;
@@ -205,76 +218,8 @@
/* Switch from prom exception handler to normal mode */
change_c0_status(ST0_BEV,0);
-}
-
-#ifdef CONFIG_LASAT_SERVICE
-/*
- * Called by init() (just before starting user space init program)
- */
-static int __init lasat_init(void)
-{
- /* This is where we call service mode */
- lasat_service();
- for (;;) {} /* We should never get here */
-
- return 0;
-}
-
-__initcall(lasat_init);
-#endif
-
-unsigned long lasat_flash_partition_start(int partno)
-{
- unsigned long dst;
-
- switch (partno) {
- case LASAT_MTD_BOOTLOADER:
- dst = lasat_board_info.li_flash_service_base;
- break;
- case LASAT_MTD_SERVICE:
- dst = lasat_board_info.li_flash_service_base + BOOTLOADER_SIZE;
- break;
- case LASAT_MTD_NORMAL:
- dst = lasat_board_info.li_flash_normal_base;
- break;
- case LASAT_MTD_FS:
- dst = lasat_board_info.li_flash_fs_base;
- break;
- case LASAT_MTD_CONFIG:
- dst = lasat_board_info.li_flash_cfg_base;
- break;
- default:
- dst = 0;
- break;
- }
- return dst;
+ prom_printf("Lasat specific initialization complete\n");
}
-unsigned long lasat_flash_partition_size(int partno)
-{
- unsigned long size;
-
- switch (partno) {
- case LASAT_MTD_BOOTLOADER:
- size = BOOTLOADER_SIZE;
- break;
- case LASAT_MTD_SERVICE:
- size = lasat_board_info.li_flash_service_size - BOOTLOADER_SIZE;
- break;
- case LASAT_MTD_NORMAL:
- size = lasat_board_info.li_flash_normal_size;
- break;
- case LASAT_MTD_FS:
- size = lasat_board_info.li_flash_fs_size;
- break;
- case LASAT_MTD_CONFIG:
- size = lasat_board_info.li_flash_cfg_size;
- break;
- default:
- size = 0;
- break;
- }
- return size;
-}
Index: arch/mips/lasat/sysctl.c
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/sysctl.c,v
retrieving revision 1.1.1.1
retrieving revision 1.5
diff -u -r1.1.1.1 -r1.5
--- arch/mips/lasat/sysctl.c 8 Oct 2002 18:52:04 -0000 1.1.1.1
+++ arch/mips/lasat/sysctl.c 19 Feb 2003 21:42:14 -0000 1.5
@@ -23,6 +23,7 @@
*
* Routines specific to the LASAT boards
*/
+#include <linux/types.h>
#include <asm/lasat/lasat.h>
#include <linux/config.h>
@@ -39,8 +40,6 @@
#include "sysctl.h"
#include "ds1603.h"
-static char lasat_firmware_version[176];
-
static DECLARE_MUTEX(lasat_info_sem);
/* Strategy function to write EEPROM after changing string entry */
@@ -96,25 +95,6 @@
return 0;
}
-/* Same for vendor ID that's only a char in EEPROM struct */
-int proc_dolasatvendor(ctl_table *table, int write, struct file *filp,
- void *buffer, size_t *lenp)
-{
- int r;
- down(&lasat_info_sem);
- r = proc_dointvec(table, write, filp, buffer, lenp);
- if ( (!write) || r) {
- up(&lasat_info_sem);
- return r;
- }
- lasat_board_info.li_eeprom_info.vendid =
- lasat_board_info.li_vendid & 0xff;
- lasat_board_info.li_vendid &= 0xff;
- lasat_write_eeprom_info();
- up(&lasat_info_sem);
- return 0;
-}
-
static int rtctmp;
#ifdef CONFIG_DS1603
@@ -185,6 +165,22 @@
#endif
#ifdef CONFIG_INET
+static char lasat_bcastaddr[16];
+
+void update_bcastaddr(void)
+{
+ unsigned int ip;
+
+ ip = lasat_board_info.li_eeprom_info.ipaddr |
+ ~lasat_board_info.li_eeprom_info.netmask;
+
+ sprintf(lasat_bcastaddr, "%d.%d.%d.%d",
+ (ip ) & 0xff,
+ (ip >> 8) & 0xff,
+ (ip >> 16) & 0xff,
+ (ip >> 24) & 0xff);
+}
+
static char proc_lasat_ipbuf[32];
/* Parsing of IP address */
int proc_lasat_ip(ctl_table *table, int write, struct file *filp,
@@ -251,6 +247,7 @@
*lenp = len;
filp->f_pos += len;
}
+ update_bcastaddr();
up(&lasat_info_sem);
return 0;
}
@@ -274,8 +271,6 @@
{
if (name && *name == LASAT_PRID)
lasat_board_info.li_eeprom_info.prid = *(int*)newval;
- if (name && *name == LASAT_DEBUGACCESS)
- lasat_board_info.li_eeprom_info.debugaccess =
*(char*)newval;
lasat_write_eeprom_info();
lasat_init_board_info();
@@ -318,66 +313,29 @@
0444, NULL, &proc_dointvec, &sysctl_intvec},
{LASAT_MODEL, "bmid", &lasat_board_info.li_bmid, sizeof(int),
0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_SERIAL, "serial", &lasat_board_info.li_serial,
sizeof(lasat_board_info.li_serial),
- 0444, NULL, &proc_dostring, &sysctl_string},
- {LASAT_PARTNO, "partno", &lasat_board_info.li_partno,
sizeof(lasat_board_info.li_partno),
- 0444, NULL, &proc_dostring, &sysctl_string},
- {LASAT_EDHAC, "edhac", &lasat_board_info.li_edhac, sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_EADI, "eadi", &lasat_board_info.li_eadi, sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_LEASEDLINE, "leasedline", &lasat_board_info.li_leasedline,
sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_ISDN, "isdn", &lasat_board_info.li_isdn, sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_HIFN, "hifn", &lasat_board_info.li_hifn, sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_USVER, "us-version", &lasat_board_info.li_usversion, sizeof(int),
- 0444, NULL, &proc_dointvec, &sysctl_intvec},
{LASAT_PRID, "prid", &lasat_board_info.li_prid, sizeof(int),
0644, NULL, &proc_lasat_eeprom_value, &sysctl_lasat_eeprom_value},
- {LASAT_VENDID, "vendid", &lasat_board_info.li_vendid, sizeof(int),
- 0644, NULL, &proc_dolasatvendor, &sysctl_intvec},
#ifdef CONFIG_INET
{LASAT_IPADDR, "ipaddr", &lasat_board_info.li_eeprom_info.ipaddr,
sizeof(int),
0644, NULL, &proc_lasat_ip, &sysctl_lasat_intvec},
{LASAT_NETMASK, "netmask", &lasat_board_info.li_eeprom_info.netmask,
sizeof(int),
0644, NULL, &proc_lasat_ip, &sysctl_lasat_intvec},
+ {LASAT_BCAST, "bcastaddr", &lasat_bcastaddr,
+ sizeof(lasat_bcastaddr), 0600, NULL,
+ &proc_dostring, &sysctl_string},
#endif
{LASAT_PASSWORD, "passwd_hash",
&lasat_board_info.li_eeprom_info.passwd_hash,
sizeof(lasat_board_info.li_eeprom_info.passwd_hash),
0600, NULL, &proc_dolasatstring, &sysctl_lasatstring},
- {LASAT_SERVICEFLAG, "serviceflag",
&lasat_board_info.li_eeprom_info.serviceflag,
sizeof(lasat_board_info.li_eeprom_info.serviceflag),
- 0644, NULL, &proc_dolasatint, &sysctl_lasat_intvec},
{LASAT_SBOOT, "boot-service", &lasat_boot_to_service, sizeof(int),
- 0666, NULL, &proc_dointvec, &sysctl_intvec},
+ 0644, NULL, &proc_dointvec, &sysctl_intvec},
#if CONFIG_DS1603
{LASAT_RTC, "rtc", &rtctmp, sizeof(int),
0644, NULL, &proc_dolasatrtc, &sysctl_lasat_rtc},
#endif
- {LASAT_VER, "version", &lasat_firmware_version, 176,
- 0444, NULL, &proc_dostring, &sysctl_string},
- {LASAT_SERVICEVER, "service-version", (char*)0xbfc00100/* fixed
position */, 64,
- 0444, NULL, &proc_dostring, &sysctl_string},
-#if 0
- {LASAT_WANLED, "wan_led", &lasat_wan_led, sizeof(int),
- 0644, NULL, &proc_dointvec, &sysctl_intvec},
-#endif
- {LASAT_UPGRADE, "upgrade_eeprom",
&lasat_board_info.li_eeprom_upgrade_version, sizeof(int),
- 0644, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_VPN_KBPS, "vpn_kbps", &lasat_board_info.li_vpn_kbps, sizeof(int),
- 0644, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_TUNNELS, "vpn_tunnels", &lasat_board_info.li_vpn_tunnels,
sizeof(int),
- 0644, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_CLIENTS, "vpn_clients", &lasat_board_info.li_vpn_clients,
sizeof(int),
- 0644, NULL, &proc_dointvec, &sysctl_intvec},
- {LASAT_VENDSTR, "vendstr", &lasat_board_info.li_vendstr,
sizeof(lasat_board_info.li_vendstr),
- 0444, NULL, &proc_dostring, &sysctl_string},
{LASAT_NAMESTR, "namestr", &lasat_board_info.li_namestr,
sizeof(lasat_board_info.li_namestr),
0444, NULL, &proc_dostring, &sysctl_string},
{LASAT_TYPESTR, "typestr", &lasat_board_info.li_typestr,
sizeof(lasat_board_info.li_typestr),
0444, NULL, &proc_dostring, &sysctl_string},
- {LASAT_DEBUGACCESS, "debugaccess", &lasat_board_info.li_debugaccess,
sizeof(int),
- 0644, NULL, &proc_lasat_eeprom_value, &sysctl_lasat_eeprom_value},
{0}
};
Index: arch/mips/lasat/sysctl.h
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/sysctl.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- arch/mips/lasat/sysctl.h 8 Oct 2002 18:52:04 -0000 1.1.1.1
+++ arch/mips/lasat/sysctl.h 19 Jan 2003 20:05:36 -0000 1.2
@@ -8,36 +8,17 @@
/* /proc/sys/lasat */
enum {
LASAT_CPU_HZ=1,
- LASAT_BUS_HZ=2,
- LASAT_MODEL=3,
- LASAT_SERIAL=4,
- LASAT_PARTNO=5,
- LASAT_EDHAC=6,
- LASAT_EADI=7,
- LASAT_LEASEDLINE=8,
- LASAT_ISDN=9,
- LASAT_HIFN=10,
- LASAT_USVER=11,
- LASAT_PRID=12,
- LASAT_IPADDR=13,
- LASAT_NETMASK=14,
- LASAT_PASSWORD=15,
- LASAT_SERVICEFLAG=16,
- LASAT_VENDID=17,
- LASAT_SBOOT=18,
- LASAT_RTC=19,
-/* LASAT_CFG=20, */
- LASAT_VER=21,
-/* LASAT_WANLED=22, */
- LASAT_UPGRADE=23,
- LASAT_VPN_KBPS=24,
- LASAT_TUNNELS=25,
- LASAT_CLIENTS=26,
- LASAT_VENDSTR=27,
- LASAT_NAMESTR=28,
- LASAT_TYPESTR=29,
- LASAT_SERVICEVER=30,
- LASAT_DEBUGACCESS=31,
+ LASAT_BUS_HZ,
+ LASAT_MODEL,
+ LASAT_PRID,
+ LASAT_IPADDR,
+ LASAT_NETMASK,
+ LASAT_BCAST,
+ LASAT_PASSWORD,
+ LASAT_SBOOT,
+ LASAT_RTC,
+ LASAT_NAMESTR,
+ LASAT_TYPESTR,
};
#endif /* _LASAT_SYSCTL_H */
Index: arch/mips/lasat/image/Makefile
===================================================================
RCS file: /cvs/linux-mips/arch/mips/lasat/image/Makefile,v
retrieving revision 1.1.1.2
retrieving revision 1.6
diff -u -r1.1.1.2 -r1.6
--- arch/mips/lasat/image/Makefile 13 Dec 2002 23:41:18 -0000 1.1.1.2
+++ arch/mips/lasat/image/Makefile 12 Jan 2003 17:49:45 -0000 1.6
@@ -11,7 +11,7 @@
endif
MKLASATIMG = mklasatimg
-MKLASATIMG_ARCH = mq2,mqpro
+MKLASATIMG_ARCH = mq2,mqpro,sp100,sp200
ifdef CONFIG_LASAT_SERVICE
MKLASATIMG_FLAG = -s
else
Index: drivers/mtd/maps/lasat.c
===================================================================
RCS file: /cvs/linux-mips/drivers/mtd/maps/lasat.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 lasat.c
--- drivers/mtd/maps/lasat.c 13 Dec 2002 23:39:54 -0000 1.1.1.2
+++ drivers/mtd/maps/lasat.c 10 Feb 2003 19:44:15 -0000
@@ -12,7 +12,6 @@
#include <linux/mtd/partitions.h>
#include <linux/config.h>
#include <asm/lasat/lasat.h>
-#include <asm/lasat/lasat_mtd.h>
static struct mtd_info *mymtd;
@@ -73,11 +72,12 @@
};
static struct mtd_partition partition_info[LASAT_MTD_LAST];
-static char *lasat_mtd_partnames[] = {"Bootloader", "Service", "Normal",
"Filesystem", "Config"};
+static char *lasat_mtd_partnames[] = {"Bootloader", "Service", "Normal",
"Config", "Filesystem"};
static int __init init_sp(void)
{
int i;
+ int nparts = 0;
/* this does not play well with the old flash code which
* protects and uprotects the flash when necessary */
printk(KERN_NOTICE "Unprotecting flash\n");
@@ -100,12 +100,15 @@
for (i=0; i < LASAT_MTD_LAST; i++) {
size = lasat_flash_partition_size(i);
- partition_info[i].size = size;
- partition_info[i].offset = offset;
- offset += size;
+ if (size != 0) {
+ nparts++;
+ partition_info[i].size = size;
+ partition_info[i].offset = offset;
+ offset += size;
+ }
}
- add_mtd_partitions( mymtd, partition_info, LASAT_MTD_LAST );
+ add_mtd_partitions( mymtd, partition_info, nparts );
return 0;
}
Index: include/asm-mips/lasat/lasat.h
===================================================================
RCS file: /cvs/linux-mips/include/asm-mips/lasat/lasat.h,v
retrieving revision 1.1.1.2
retrieving revision 1.8
diff -u -r1.1.1.2 -r1.8
--- include/asm-mips/lasat/lasat.h 13 Dec 2002 23:38:24 -0000 1.1.1.2
+++ include/asm-mips/lasat/lasat.h 11 Feb 2003 18:26:02 -0000 1.8
@@ -27,16 +27,7 @@
#ifndef _LASAT_H
#define _LASAT_H
-#include <linux/config.h>
-
-/*
- * Configuration block magic word(s)
- */
-#define LASAT_CONFIG_MAGIC ('L'|('C'<<8)|('B'<<16)|('2'<<24)) /* LCB2 */
-#define LASAT_CONFIG_MAGIC_INT ('L'|('C'<<8)|('B'<<16)|('x'<<24)) /* LCBx */
-
#ifndef _LANGUAGE_ASSEMBLY
-#include <linux/types.h>
extern struct lasat_misc {
volatile u32 *reset_reg;
@@ -44,6 +35,15 @@
u32 flash_wp_bit;
} *lasat_misc;
+enum lasat_mtdparts {
+ LASAT_MTD_BOOTLOADER,
+ LASAT_MTD_SERVICE,
+ LASAT_MTD_NORMAL,
+ LASAT_MTD_CONFIG,
+ LASAT_MTD_FS,
+ LASAT_MTD_LAST
+};
+
/*
* The format of the data record in the EEPROM.
* See Documentation/LASAT/eeprom.txt for a detailed description
@@ -182,42 +182,17 @@
struct lasat_info {
unsigned int li_cpu_hz;
unsigned int li_bus_hz;
- unsigned int li_flags;
unsigned int li_bmid;
unsigned int li_memsize;
unsigned int li_flash_size;
- unsigned int li_edhac;
- unsigned int li_eadi;
- unsigned int li_hifn;
- unsigned int li_isdn;
- unsigned int li_ide;
- unsigned int li_hdlc;
- unsigned int li_leasedline;
- unsigned int li_usversion;
- unsigned int li_hw_flags;
- unsigned int li_vendid;
unsigned int li_prid;
unsigned char li_bmstr[16];
- unsigned char li_vendstr[32];
unsigned char li_namestr[32];
unsigned char li_typestr[16];
- unsigned char li_partno[13];
- unsigned char li_serial[15];
- unsigned int li_vpn_kbps; /* kbit/s */
- unsigned int li_vpn_tunnels;
- unsigned int li_vpn_clients;
/* Info on the Flash layout */
unsigned int li_flash_base;
- unsigned int li_flash_service_base;
- unsigned int li_flash_service_size;
- unsigned int li_flash_normal_base;
- unsigned int li_flash_normal_size;
- unsigned int li_flash_cfg_base;
- unsigned int li_flash_cfg_size;
- unsigned int li_flash_fs_base;
- unsigned int li_flash_fs_size;
- unsigned int li_flash_fs2_base;
- unsigned int li_flash_fs2_size;
+ unsigned long li_flashpart_base[LASAT_MTD_LAST];
+ unsigned long li_flashpart_size[LASAT_MTD_LAST];
struct lasat_eeprom_struct li_eeprom_info;
unsigned int li_eeprom_upgrade_version;
unsigned int li_debugaccess;
@@ -225,6 +200,22 @@
extern struct lasat_info lasat_board_info;
+static inline unsigned long lasat_flash_partition_start(int partno)
+{
+ if (partno < 0 || partno >= LASAT_MTD_LAST)
+ return 0;
+
+ return lasat_board_info.li_flashpart_base[partno];
+}
+
+static inline unsigned long lasat_flash_partition_size(int partno)
+{
+ if (partno < 0 || partno >= LASAT_MTD_LAST)
+ return 0;
+
+ return lasat_board_info.li_flashpart_size[partno];
+}
+
/* Called from setup() to initialize the global board_info struct */
extern int lasat_init_board_info(void);
@@ -241,7 +232,12 @@
__delay(lasat_board_info.li_cpu_hz / 2 / (NANOTH / ns) + 1);
}
+extern void (* prom_printf)(const char *fmt, ...);
+
#endif /* !defined (_LANGUAGE_ASSEMBLY) */
+
+#define LASAT_SERVICEMODE_MAGIC_1 0xdeadbeef
+#define LASAT_SERVICEMODE_MAGIC_2 0xfedeabba
/* Lasat 100 boards */
#define LASAT_GT_BASE (KSEG1ADDR(0x14000000))
Index: include/asm-mips/lasat/lasat_mtd.h
===================================================================
RCS file: include/asm-mips/lasat/lasat_mtd.h
diff -N include/asm-mips/lasat/lasat_mtd.h
--- include/asm-mips/lasat/lasat_mtd.h 8 Oct 2002 18:48:35 -0000 1.1.1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-#include <linux/types.h>
-
-enum lasat_mtdparts {
- LASAT_MTD_BOOTLOADER,
- LASAT_MTD_SERVICE,
- LASAT_MTD_NORMAL,
- LASAT_MTD_FS,
- LASAT_MTD_CONFIG,
- LASAT_MTD_LAST
-};
-
-#define BOOTLOADER_SIZE 0x40000
-
-extern unsigned long lasat_flash_partition_start(int partno);
-extern unsigned long lasat_flash_partition_size(int partno);
|