linux/arch/mips/mti-malta/malta-display.c
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Display routines for display messages in MIPS boards ascii display.
   7 *
   8 * Copyright (C) 1999,2000,2012  MIPS Technologies, Inc.
   9 * All rights reserved.
  10 * Authors: Carsten Langgaard <carstenl@mips.com>
  11 *          Steven J. Hill <sjhill@mips.com>
  12 */
  13#include <linux/compiler.h>
  14#include <linux/timer.h>
  15#include <linux/io.h>
  16
  17#include <asm/mips-boards/generic.h>
  18
  19extern const char display_string[];
  20static unsigned int display_count;
  21static unsigned int max_display_count;
  22
  23void mips_display_message(const char *str)
  24{
  25        static unsigned int __iomem *display = NULL;
  26        int i;
  27
  28        if (unlikely(display == NULL))
  29                display = ioremap(ASCII_DISPLAY_POS_BASE, 16*sizeof(int));
  30
  31        for (i = 0; i <= 14; i += 2) {
  32                if (*str)
  33                        __raw_writel(*str++, display + i);
  34                else
  35                        __raw_writel(' ', display + i);
  36        }
  37}
  38
  39static void scroll_display_message(unsigned long data);
  40static DEFINE_TIMER(mips_scroll_timer, scroll_display_message, HZ, 0);
  41
  42static void scroll_display_message(unsigned long data)
  43{
  44        mips_display_message(&display_string[display_count++]);
  45        if (display_count == max_display_count)
  46                display_count = 0;
  47
  48        mod_timer(&mips_scroll_timer, jiffies + HZ);
  49}
  50
  51void mips_scroll_message(void)
  52{
  53        del_timer_sync(&mips_scroll_timer);
  54        max_display_count = strlen(display_string) + 1 - 8;
  55        mod_timer(&mips_scroll_timer, jiffies + 1);
  56}
  57