]> Pileus Git - ~andy/linux/blobdiff - arch/mips/lasat/lasat_board.c
Merge branch 'for-bfields' of git://linux-nfs.org/~tomtucker/xprt-switch-2.6 into...
[~andy/linux] / arch / mips / lasat / lasat_board.c
index d425120b0282f28e54c96f6c15444dcb20c689a6..31e328b3814df331be86a9a8ed346ca123d19910 100644 (file)
 #include <linux/kernel.h>
 #include <linux/string.h>
 #include <linux/ctype.h>
+#include <linux/mutex.h>
 #include <asm/bootinfo.h>
 #include <asm/addrspace.h>
 #include "at93c.h"
 /* New model description table */
 #include "lasat_models.h"
 
-#define EEPROM_CRC(data, len) (~0 ^ crc32(~0, data, len))
+static DEFINE_MUTEX(lasat_eeprom_mutex);
 
-struct lasat_info lasat_board_info;
+#define EEPROM_CRC(data, len) (~crc32(~0, data, len))
 
-void update_bcastaddr(void);
+struct lasat_info lasat_board_info;
 
 int EEPROMRead(unsigned int pos, unsigned char *data, int len)
 {
        int i;
 
-       for (i=0; i<len; i++)
+       for (i = 0; i < len; i++)
                *data++ = at93c_read(pos++);
 
        return 0;
 }
+
 int EEPROMWrite(unsigned int pos, unsigned char *data, int len)
 {
        int i;
 
-       for (i=0; i<len; i++)
+       for (i = 0; i < len; i++)
                at93c_write(pos++, *data++);
 
        return 0;
@@ -56,9 +58,9 @@ int EEPROMWrite(unsigned int pos, unsigned char *data, int len)
 
 static void init_flash_sizes(void)
 {
-       int i;
        unsigned long *lb = lasat_board_info.li_flashpart_base;
        unsigned long *ls = lasat_board_info.li_flashpart_size;
+       int i;
 
        ls[LASAT_MTD_BOOTLOADER] = 0x40000;
        ls[LASAT_MTD_SERVICE] = 0xC0000;
@@ -79,9 +81,9 @@ static void init_flash_sizes(void)
                if (lasat_board_info.li_flash_size < 0x1000000) {
                        lb[LASAT_MTD_BOOTLOADER] = 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;
-                       }
+                       if (lasat_board_info.li_flash_size >= 0x400000)
+                               ls[LASAT_MTD_FS] =
+                                    lasat_board_info.li_flash_size - 0x300000;
                }
        }
 
@@ -94,7 +96,7 @@ int lasat_init_board_info(void)
        int c;
        unsigned long crc;
        unsigned long cfg0, cfg1;
-       const product_info_t   *ppi;
+       const struct product_info   *ppi;
        int i_n_base_models = N_BASE_MODELS;
        const char * const * i_txt_base_models = txt_base_models;
        int i_n_prids = N_PRIDS;
@@ -110,12 +112,13 @@ int lasat_init_board_info(void)
                    sizeof(struct lasat_eeprom_struct) - 4);
 
        if (crc != lasat_board_info.li_eeprom_info.crc32) {
-               prom_printf("WARNING...\nWARNING...\nEEPROM CRC does not match calculated, attempting to soldier on...\n");
+               printk(KERN_WARNING "WARNING...\nWARNING...\nEEPROM CRC does "
+                      "not match calculated, attempting to soldier on...\n");
        }
 
-       if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION)
-       {
-               prom_printf("WARNING...\nWARNING...\nEEPROM version %d, wanted version %d, attempting to soldier on...\n",
+       if (lasat_board_info.li_eeprom_info.version != LASAT_EEPROM_VERSION) {
+               printk(KERN_WARNING "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);
        }
@@ -123,8 +126,10 @@ int lasat_init_board_info(void)
        cfg0 = lasat_board_info.li_eeprom_info.cfg[0];
        cfg1 = lasat_board_info.li_eeprom_info.cfg[1];
 
-       if ( LASAT_W0_DSCTYPE(cfg0) != 1) {
-               prom_printf("WARNING...\nWARNING...\nInvalid configuration read from EEPROM, attempting to soldier on...");
+       if (LASAT_W0_DSCTYPE(cfg0) != 1) {
+               printk(KERN_WARNING "WARNING...\nWARNING...\n"
+                      "Invalid configuration read from EEPROM, attempting to "
+                      "soldier on...");
        }
        /* We have a valid configuration */
 
@@ -237,7 +242,8 @@ int lasat_init_board_info(void)
        /* 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]);
+       strcpy(lasat_board_info.li_bmstr,
+              i_txt_base_models[lasat_board_info.li_bmid]);
 
        /* Product ID dependent values */
        c = lasat_board_info.li_prid;
@@ -250,13 +256,9 @@ int lasat_init_board_info(void)
                if (ppi->pi_type)
                        strcpy(lasat_board_info.li_typestr, ppi->pi_type);
                else
-                       sprintf(lasat_board_info.li_typestr, "%d",10*c);
+                       sprintf(lasat_board_info.li_typestr, "%d", 10 * c);
        }
 
-#if defined(CONFIG_INET) && defined(CONFIG_SYSCTL)
-       update_bcastaddr();
-#endif
-
        return 0;
 }
 
@@ -264,6 +266,8 @@ void lasat_write_eeprom_info(void)
 {
        unsigned long crc;
 
+       mutex_lock(&lasat_eeprom_mutex);
+
        /* Generate the CRC */
        crc = EEPROM_CRC((unsigned char *)(&lasat_board_info.li_eeprom_info),
                    sizeof(struct lasat_eeprom_struct) - 4);
@@ -272,5 +276,6 @@ void lasat_write_eeprom_info(void)
        /* Write the EEPROM info */
        EEPROMWrite(0, (unsigned char *)&lasat_board_info.li_eeprom_info,
                    sizeof(struct lasat_eeprom_struct));
-}
 
+       mutex_unlock(&lasat_eeprom_mutex);
+}