Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/include/linux/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  bcm963xx_nvram.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __LINUX_BCM963XX_NVRAM_H__
#define __LINUX_BCM963XX_NVRAM_H__

#include <linux/crc32.h>
#include <linux/if_ether.h>
#include <linux/sizes.h>
#include <linux/types.h>

/*
 * Broadcom BCM963xx SoC board nvram data structure.
 *
 * The nvram structure varies in size depending on the SoC board version. Use
 * the appropriate minimum BCM963XX_NVRAM_*_SIZE define for the information
 * you need instead of sizeof(struct bcm963xx_nvram) as this may change.
 */


#define BCM963XX_NVRAM_V4_SIZE  300
#define BCM963XX_NVRAM_V5_SIZE  (1 * SZ_1K)

#define BCM963XX_DEFAULT_PSI_SIZE 64

enum bcm963xx_nvram_nand_part {
 BCM963XX_NVRAM_NAND_PART_BOOT = 0,
 BCM963XX_NVRAM_NAND_PART_ROOTFS_1,
 BCM963XX_NVRAM_NAND_PART_ROOTFS_2,
 BCM963XX_NVRAM_NAND_PART_DATA,
 BCM963XX_NVRAM_NAND_PART_BBT,

 __BCM963XX_NVRAM_NAND_NR_PARTS
};

struct bcm963xx_nvram {
 u32 version;
 char bootline[256];
 char name[16];
 u32 main_tp_number;
 u32 psi_size;
 u32 mac_addr_count;
 u8 mac_addr_base[ETH_ALEN];
 u8 __reserved1[2];
 u32 checksum_v4;

 u8 __reserved2[292];
 u32 nand_part_offset[__BCM963XX_NVRAM_NAND_NR_PARTS];
 u32 nand_part_size[__BCM963XX_NVRAM_NAND_NR_PARTS];
 u8 __reserved3[388];
 u32 checksum_v5;
};

#define BCM963XX_NVRAM_NAND_PART_OFFSET(nvram, part) \
 bcm963xx_nvram_nand_part_offset(nvram, BCM963XX_NVRAM_NAND_PART_ ##part)

static inline u64 __pure bcm963xx_nvram_nand_part_offset(
 const struct bcm963xx_nvram *nvram,
 enum bcm963xx_nvram_nand_part part)
{
 return nvram->nand_part_offset[part] * SZ_1K;
}

#define BCM963XX_NVRAM_NAND_PART_SIZE(nvram, part) \
 bcm963xx_nvram_nand_part_size(nvram, BCM963XX_NVRAM_NAND_PART_ ##part)

static inline u64 __pure bcm963xx_nvram_nand_part_size(
 const struct bcm963xx_nvram *nvram,
 enum bcm963xx_nvram_nand_part part)
{
 return nvram->nand_part_size[part] * SZ_1K;
}

/*
 * bcm963xx_nvram_checksum - Verify nvram checksum
 *
 * @nvram: pointer to full size nvram data structure
 * @expected_out: optional pointer to store expected checksum value
 * @actual_out: optional pointer to store actual checksum value
 *
 * Return: 0 if the checksum is valid, otherwise -EINVAL
 */

static int __maybe_unused bcm963xx_nvram_checksum(
 const struct bcm963xx_nvram *nvram,
 u32 *expected_out, u32 *actual_out)
{
 const u32 zero = 0;
 u32 expected, actual;
 size_t len;

 if (nvram->version <= 4) {
  expected = nvram->checksum_v4;
  len = BCM963XX_NVRAM_V4_SIZE;
 } else {
  expected = nvram->checksum_v5;
  len = BCM963XX_NVRAM_V5_SIZE;
 }

 /* Calculate the CRC32 of the nvram with the checksum field set to 0. */
 actual = crc32_le(~0, nvram, len - sizeof(u32));
 actual = crc32_le(actual, &zero, sizeof(u32));

 if (expected_out)
  *expected_out = expected;

 if (actual_out)
  *actual_out = actual;

 return expected == actual ? 0 : -EINVAL;
};

#endif /* __LINUX_BCM963XX_NVRAM_H__ */

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.