Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/arm/mach-rpc/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  riscpc.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 *  linux/arch/arm/mach-rpc/riscpc.c
 *
 *  Copyright (C) 1998-2001 Russell King
 *
 *  Architecture specific fixups.
 */

#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/device.h>
#include <linux/serial_8250.h>
#include <linux/ata_platform.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <linux/reboot.h>

#include <asm/elf.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>
#include <asm/hardware/iomd.h>
#include <asm/page.h>
#include <asm/domain.h>
#include <asm/setup.h>
#include <asm/system_misc.h>

#include <asm/mach/map.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>

extern void rpc_init_irq(void);

unsigned int vram_size;
unsigned int memc_ctrl_reg;
unsigned int number_mfm_drives;

static int __init parse_tag_acorn(const struct tag *tag)
{
 memc_ctrl_reg = tag->u.acorn.memc_control_reg;
 number_mfm_drives = tag->u.acorn.adfsdrives;

 switch (tag->u.acorn.vram_pages) {
 case 512:
  vram_size += PAGE_SIZE * 256;
  fallthrough; /* ??? */
 case 256:
  vram_size += PAGE_SIZE * 256;
  break;
 default:
  break;
 }
#if 0
 if (vram_size) {
  desc->video_start = 0x02000000;
  desc->video_end   = 0x02000000 + vram_size;
 }
#endif
 return 0;
}

__tagtable(ATAG_ACORN, parse_tag_acorn);

static struct map_desc rpc_io_desc[] __initdata = {
  { /* VRAM */
  .virtual =  SCREEN_BASE,
  .pfn  = __phys_to_pfn(SCREEN_START),
  .length  =  2*1048576,
  .type  = MT_DEVICE
 }, { /* IO space */
  .virtual =  (u32)IO_BASE,
  .pfn  = __phys_to_pfn(IO_START),
  .length  =  IO_SIZE  ,
  .type  = MT_DEVICE
 }, { /* EASI space */
  .virtual = (unsigned long)EASI_BASE,
  .pfn  = __phys_to_pfn(EASI_START),
  .length  = EASI_SIZE,
  .type  = MT_DEVICE
 }
};

static void __init rpc_map_io(void)
{
 iotable_init(rpc_io_desc, ARRAY_SIZE(rpc_io_desc));

 /*
 * Turn off floppy.
 */

 writeb(0xc, PCIO_BASE + (0x3f2 << 2));

 /*
 * RiscPC can't handle half-word loads and stores
 */

 elf_hwcap &= ~HWCAP_HALF;
}

static struct resource acornfb_resources[] = {
 /* VIDC */
 DEFINE_RES_MEM(0x03400000, 0x00200000),
 DEFINE_RES_IRQ(IRQ_VSYNCPULSE),
};

static struct platform_device acornfb_device = {
 .name   = "acornfb",
 .id   = -1,
 .dev   = {
  .coherent_dma_mask = 0xffffffff,
 },
 .num_resources  = ARRAY_SIZE(acornfb_resources),
 .resource  = acornfb_resources,
};

static struct resource iomd_resources[] = {
 DEFINE_RES_MEM(0x03200000, 0x10000),
};

static struct platform_device iomd_device = {
 .name   = "iomd",
 .id   = -1,
 .num_resources  = ARRAY_SIZE(iomd_resources),
 .resource  = iomd_resources,
};

static struct resource iomd_kart_resources[] = {
 DEFINE_RES_IRQ(IRQ_KEYBOARDRX),
 DEFINE_RES_IRQ(IRQ_KEYBOARDTX),
};

static struct platform_device kbd_device = {
 .name   = "kart",
 .id   = -1,
 .dev   = {
  .parent  = &iomd_device.dev,
 },
 .num_resources  = ARRAY_SIZE(iomd_kart_resources),
 .resource  = iomd_kart_resources,
};

static struct plat_serial8250_port serial_platform_data[] = {
 {
  .mapbase = 0x03010fe0,
  .irq  = IRQ_SERIALPORT,
  .uartclk = 1843200,
  .regshift = 2,
  .iotype  = UPIO_MEM,
  .flags  = UPF_BOOT_AUTOCONF | UPF_IOREMAP | UPF_SKIP_TEST,
 },
 { },
};

static struct platform_device serial_device = {
 .name   = "serial8250",
 .id   = PLAT8250_DEV_PLATFORM,
 .dev   = {
  .platform_data = serial_platform_data,
 },
};

static struct pata_platform_info pata_platform_data = {
 .ioport_shift  = 2,
};

static struct resource pata_resources[] = {
 DEFINE_RES_MEM(0x030107c0, 0x20),
 DEFINE_RES_MEM(0x03010fd8, 0x04),
 DEFINE_RES_IRQ(IRQ_HARDDISK),
};

static struct platform_device pata_device = {
 .name   = "pata_platform",
 .id   = -1,
 .num_resources  = ARRAY_SIZE(pata_resources),
 .resource  = pata_resources,
 .dev   = {
  .platform_data = &pata_platform_data,
  .coherent_dma_mask = ~0, /* grumble */
 },
};

static struct platform_device *devs[] __initdata = {
 &iomd_device,
 &kbd_device,
 &serial_device,
 &acornfb_device,
 &pata_device,
};

static struct i2c_board_info i2c_rtc = {
 I2C_BOARD_INFO("pcf8583", 0x50)
};

static int __init rpc_init(void)
{
 i2c_register_board_info(0, &i2c_rtc, 1);
 return platform_add_devices(devs, ARRAY_SIZE(devs));
}

arch_initcall(rpc_init);

static void rpc_restart(enum reboot_mode mode, const char *cmd)
{
 iomd_writeb(0, IOMD_ROMCR0);

 /*
 * Jump into the ROM
 */

 soft_restart(0);
}

void ioc_timer_init(void);

MACHINE_START(RISCPC, "Acorn-RiscPC")
 /* Maintainer: Russell King */
 .atag_offset = 0x100,
 .reserve_lp0 = 1,
 .reserve_lp1 = 1,
 .map_io  = rpc_map_io,
 .init_irq = rpc_init_irq,
 .init_time = ioc_timer_init,
 .restart = rpc_restart,
MACHINE_END

Messung V0.5
C=95 H=75 G=85

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