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

Quelle  idprom.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * idprom.c: Routines to load the idprom into kernel addresses and
 *           interpret the data contained within.
 *
 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
 */


#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/export.h>
#include <linux/etherdevice.h>

#include <asm/oplib.h>
#include <asm/idprom.h>

struct idprom *idprom;
EXPORT_SYMBOL(idprom);

static struct idprom idprom_buffer;

#ifdef CONFIG_SPARC32
#include <asm/machines.h>  /* Fun with Sun released architectures. */

/* Here is the master table of Sun machines which use some implementation
 * of the Sparc CPU and have a meaningful IDPROM machtype value that we
 * know about.  See asm-sparc/machines.h for empirical constants.
 */

static struct Sun_Machine_Models Sun_Machines[] = {
/* First, Leon */
{ .name = "Leon3 System-on-a-Chip",  .id_machtype = (M_LEON | M_LEON3_SOC) },
/* Finally, early Sun4m's */
{ .name = "Sun4m SparcSystem600",    .id_machtype = (SM_SUN4M | SM_4M_SS60) },
{ .name = "Sun4m SparcStation10/20", .id_machtype = (SM_SUN4M | SM_4M_SS50) },
{ .name = "Sun4m SparcStation5",     .id_machtype = (SM_SUN4M | SM_4M_SS40) },
/* One entry for the OBP arch's which are sun4d, sun4e, and newer sun4m's */
{ .name = "Sun4M OBP based system",  .id_machtype = (SM_SUN4M_OBP | 0x0) } };

static void __init display_system_type(unsigned char machtype)
{
 char sysname[128];
 register int i;

 for (i = 0; i < ARRAY_SIZE(Sun_Machines); i++) {
  if (Sun_Machines[i].id_machtype == machtype) {
   if (machtype != (SM_SUN4M_OBP | 0x00) ||
       prom_getproperty(prom_root_node, "banner-name",
          sysname, sizeof(sysname)) <= 0)
    printk(KERN_WARNING "TYPE: %s\n",
           Sun_Machines[i].name);
   else
    printk(KERN_WARNING "TYPE: %s\n", sysname);
   return;
  }
 }

 prom_printf("IDPROM: Warning, bogus id_machtype value, 0x%x\n", machtype);
}
#else
static void __init display_system_type(unsigned char machtype)
{
}
#endif

unsigned char *arch_get_platform_mac_address(void)
{
 return idprom->id_ethaddr;
}

/* Calculate the IDPROM checksum (xor of the data bytes). */
static unsigned char __init calc_idprom_cksum(struct idprom *idprom)
{
 unsigned char cksum, i, *ptr = (unsigned char *)idprom;

 for (i = cksum = 0; i <= 0x0E; i++)
  cksum ^= *ptr++;

 return cksum;
}

/* Create a local IDPROM copy, verify integrity, and display information. */
void __init idprom_init(void)
{
 prom_get_idprom((char *) &idprom_buffer, sizeof(idprom_buffer));

 idprom = &idprom_buffer;

 if (idprom->id_format != 0x01)
  prom_printf("IDPROM: Warning, unknown format type!\n");

 if (idprom->id_cksum != calc_idprom_cksum(idprom))
  prom_printf("IDPROM: Warning, checksum failure (nvram=%x, calc=%x)!\n",
       idprom->id_cksum, calc_idprom_cksum(idprom));

 display_system_type(idprom->id_machtype);

 printk(KERN_WARNING "Ethernet address: %pM\n", idprom->id_ethaddr);
}

Messung V0.5
C=96 H=92 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© 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.