Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/mips/ralink/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 1 kB image not shown  

Quelle  early_printk.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 *
 *  Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
 */


#include <linux/io.h>
#include <linux/serial_reg.h>

#include <asm/addrspace.h>
#include <asm/setup.h>

#ifdef CONFIG_SOC_RT288X
#define EARLY_UART_BASE  0x300c00
#define CHIPID_BASE  0x300004
#elif defined(CONFIG_SOC_MT7621)
#define EARLY_UART_BASE  0x1E000c00
#define CHIPID_BASE  0x1E000004
#else
#define EARLY_UART_BASE  0x10000c00
#define CHIPID_BASE  0x10000004
#endif

#define MT7628_CHIP_NAME1 0x20203832

#define UART_REG_TX  0x04
#define UART_REG_LCR  0x0c
#define UART_REG_LSR  0x14
#define UART_REG_LSR_RT2880 0x1c

static __iomem void *uart_membase = (__iomem void *) KSEG1ADDR(EARLY_UART_BASE);
static __iomem void *chipid_membase = (__iomem void *) KSEG1ADDR(CHIPID_BASE);
static int init_complete;

static inline void uart_w32(u32 val, unsigned reg)
{
 __raw_writel(val, uart_membase + reg);
}

static inline u32 uart_r32(unsigned reg)
{
 return __raw_readl(uart_membase + reg);
}

static inline int soc_is_mt7628(void)
{
 return IS_ENABLED(CONFIG_SOC_MT7620) &&
  (__raw_readl(chipid_membase) == MT7628_CHIP_NAME1);
}

static void find_uart_base(void)
{
 int i;

 if (!soc_is_mt7628())
  return;

 for (i = 0; i < 3; i++) {
  u32 reg = uart_r32(UART_REG_LCR + (0x100 * i));

  if (!reg)
   continue;

  uart_membase = (__iomem void *) KSEG1ADDR(EARLY_UART_BASE +
         (0x100 * i));
  break;
 }
}

void prom_putchar(char ch)
{
 if (!init_complete) {
  find_uart_base();
  init_complete = 1;
 }

 if (IS_ENABLED(CONFIG_SOC_MT7621) || soc_is_mt7628()) {
  uart_w32((unsigned char)ch, UART_TX);
  while ((uart_r32(UART_REG_LSR) & UART_LSR_THRE) == 0)
   ;
 } else {
  while ((uart_r32(UART_REG_LSR_RT2880) & UART_LSR_THRE) == 0)
   ;
  uart_w32((unsigned char)ch, UART_REG_TX);
  while ((uart_r32(UART_REG_LSR_RT2880) & UART_LSR_THRE) == 0)
   ;
 }
}

Messung V0.5
C=98 H=75 G=87

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