char pmc_verify_cksum (void *bufp) { FLD_TYPE1 *buf1 = bufp; FLD_TYPE2 *buf2 = bufp; u_int32_t crc1, crc2; /* CRC read from EEPROM */ /* Retrieve contents of CRC field */ crc1 = pmcGetBuffValue (&buf1->Crc32[0], sizeof (buf1->Crc32)); #ifdef EEPROM_TYPE_DEBUG pr_info("EEPROM: chksum 1 reads as %08x\n", crc1); /* RLD DEBUG */ #endif if ((buf1->type == PROM_FORMAT_TYPE1) && (pmcCalcCrc_T01 ((void *) buf1) == crc1)) return PROM_FORMAT_TYPE1; /* checksum type 1 verified */ crc2 = pmcGetBuffValue (&buf2->Crc32[0], sizeof (buf2->Crc32)); #ifdef EEPROM_TYPE_DEBUG pr_info("EEPROM: chksum 2 reads as %08x\n", crc2); /* RLD DEBUG */ #endif if ((buf2->type == PROM_FORMAT_TYPE2) && (pmcCalcCrc_T02 ((void *) buf2) == crc2)) return PROM_FORMAT_TYPE2; /* checksum type 2 verified */ return PROM_FORMAT_Unk; /* failed to validate */ }
char pmc_verify_cksum (void *bufp) { FLD_TYPE1 *buf1 = bufp; FLD_TYPE2 *buf2 = bufp; u_int32_t crc1, crc2; /* */ /* */ crc1 = pmcGetBuffValue (&buf1->Crc32[0], sizeof (buf1->Crc32)); #ifdef EEPROM_TYPE_DEBUG pr_info("EEPROM: chksum 1 reads as %08x\n", crc1); /* */ #endif if ((buf1->type == PROM_FORMAT_TYPE1) && (pmcCalcCrc_T01 ((void *) buf1) == crc1)) return PROM_FORMAT_TYPE1; /* */ crc2 = pmcGetBuffValue (&buf2->Crc32[0], sizeof (buf2->Crc32)); #ifdef EEPROM_TYPE_DEBUG pr_info("EEPROM: chksum 2 reads as %08x\n", crc2); /* */ #endif if ((buf2->type == PROM_FORMAT_TYPE2) && (pmcCalcCrc_T02 ((void *) buf2) == crc2)) return PROM_FORMAT_TYPE2; /* */ return PROM_FORMAT_Unk; /* */ }
void pmc_init_seeprom (u_int32_t addr, u_int32_t serialNum) { PROMFORMAT buffer; /* Memory image of structure */ u_int32_t crc; /* CRC of structure */ time_t createTime; int i; createTime = get_seconds (); /* use template data */ for (i = 0; i < sizeof (FLD_TYPE2); ++i) buffer.bytes[i] = mfg_template[i]; /* Update serial number field in buffer */ pmcSetBuffValue (&buffer.fldType2.Serial[3], serialNum, 3); /* Update create time field in buffer */ pmcSetBuffValue (&buffer.fldType2.CreateTime[0], createTime, 4); /* Update CRC field in buffer */ crc = pmcCalcCrc_T02 (&buffer); pmcSetBuffValue (&buffer.fldType2.Crc32[0], crc, 4); #ifdef DEBUG for (i = 0; i < sizeof (FLD_TYPE2); ++i) pr_info("[%02X] = %02X\n", i, buffer.bytes[i] & 0xFF); #endif /* Write structure to serial EEPROM */ pmc_eeprom_write_buffer (addr, EE_MFG, (char *) &buffer, sizeof (FLD_TYPE2)); }
void pmc_init_seeprom (u_int32_t addr, u_int32_t serialNum) { PROMFORMAT buffer; /* */ u_int32_t crc; /* */ time_t createTime; int i; createTime = get_seconds (); /* */ for (i = 0; i < sizeof (FLD_TYPE2); ++i) buffer.bytes[i] = mfg_template[i]; /* */ pmcSetBuffValue (&buffer.fldType2.Serial[3], serialNum, 3); /* */ pmcSetBuffValue (&buffer.fldType2.CreateTime[0], createTime, 4); /* */ crc = pmcCalcCrc_T02 (&buffer); pmcSetBuffValue (&buffer.fldType2.Crc32[0], crc, 4); #ifdef DEBUG for (i = 0; i < sizeof (FLD_TYPE2); ++i) pr_info("[%02X] = %02X\n", i, buffer.bytes[i] & 0xFF); #endif /* */ pmc_eeprom_write_buffer (addr, EE_MFG, (char *) &buffer, sizeof (FLD_TYPE2)); }