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

Quelle  tsunami_flash.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * tsunami_flash.c
 *
 * flash chip on alpha ds10...
 */

#include <asm/io.h>
#include <asm/core_tsunami.h>
#include <linux/init.h>
#include <linux/mtd/map.h>
#include <linux/mtd/mtd.h>

#define FLASH_ENABLE_PORT 0x00C00001
#define FLASH_ENABLE_BYTE 0x01
#define FLASH_DISABLE_BYTE 0x00

#define MAX_TIG_FLASH_SIZE (12*1024*1024)
static inline map_word tsunami_flash_read8(struct map_info *map, unsigned long offset)
{
 map_word val;
 val.x[0] = tsunami_tig_readb(offset);
 return val;
}

static void tsunami_flash_write8(struct map_info *map, map_word value, unsigned long offset)
{
 tsunami_tig_writeb(value.x[0], offset);
}

static void tsunami_flash_copy_from(
 struct map_info *map, void *addr, unsigned long offset, ssize_t len)
{
 unsigned char *dest;
 dest = addr;
 while(len && (offset < MAX_TIG_FLASH_SIZE)) {
  *dest = tsunami_tig_readb(offset);
  offset++;
  dest++;
  len--;
 }
}

static void tsunami_flash_copy_to(
 struct map_info *map, unsigned long offset,
 const void *addr, ssize_t len)
{
 const unsigned char *src;
 src = addr;
 while(len && (offset < MAX_TIG_FLASH_SIZE)) {
  tsunami_tig_writeb(*src, offset);
  offset++;
  src++;
  len--;
 }
}

/*
 * Deliberately don't provide operations wider than 8 bits.  I don't
 * have then and it scares me to think how you could mess up if
 * you tried to use them.   Buswidth is correctly so I'm safe.
 */

static struct map_info tsunami_flash_map = {
 .name = "flash chip on the Tsunami TIG bus",
 .size = MAX_TIG_FLASH_SIZE,
 .phys = NO_XIP,
 .bankwidth = 1,
 .read = tsunami_flash_read8,
 .copy_from = tsunami_flash_copy_from,
 .write = tsunami_flash_write8,
 .copy_to = tsunami_flash_copy_to,
};

static struct mtd_info *tsunami_flash_mtd;

static void __exit  cleanup_tsunami_flash(void)
{
 struct mtd_info *mtd;
 mtd = tsunami_flash_mtd;
 if (mtd) {
  mtd_device_unregister(mtd);
  map_destroy(mtd);
 }
 tsunami_flash_mtd = 0;
}

static const char * const rom_probe_types[] = {
 "cfi_probe""jedec_probe""map_rom", NULL };

static int __init init_tsunami_flash(void)
{
 const char * const *type;

 tsunami_tig_writeb(FLASH_ENABLE_BYTE, FLASH_ENABLE_PORT);

 tsunami_flash_mtd = 0;
 type = rom_probe_types;
 for(; !tsunami_flash_mtd && *type; type++) {
  tsunami_flash_mtd = do_map_probe(*type, &tsunami_flash_map);
 }
 if (tsunami_flash_mtd) {
  tsunami_flash_mtd->owner = THIS_MODULE;
  mtd_device_register(tsunami_flash_mtd, NULL, 0);
  return 0;
 }
 return -ENXIO;
}

module_init(init_tsunami_flash);
module_exit(cleanup_tsunami_flash);

Messung V0.5
C=98 H=83 G=90

¤ Dauer der Verarbeitung: 0.10 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.