WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] SN2 polling console driver

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] SN2 polling console driver
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 16 Jun 2007 05:36:27 -0700
Delivery-date: Sat, 16 Jun 2007 05:34:53 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1180037638 21600
# Node ID 40542d29da2bda69fb3ed17b303e01d723b0aa9a
# Parent  03e04b861d91b78fbbf392b118dabfbbd61fe75f
[IA64] SN2 polling console driver

First cut of super simple console driver with polled input support. In
addition switch driver to use ia64_sn_console_putb() post-boot to get
interactive response.

Signed-off-by: Jes Sorensen <jes@xxxxxxx>
---
 xen/arch/ia64/xen/sn_console.c |   74 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 69 insertions(+), 5 deletions(-)

diff -r 03e04b861d91 -r 40542d29da2b xen/arch/ia64/xen/sn_console.c
--- a/xen/arch/ia64/xen/sn_console.c    Wed May 23 10:40:19 2007 -0600
+++ b/xen/arch/ia64/xen/sn_console.c    Thu May 24 14:13:58 2007 -0600
@@ -8,18 +8,83 @@
 #include <asm/acpi.h>
 #include <asm/sn/sn_sal.h>
 #include <xen/serial.h>
+#include <xen/sched.h>
+
+struct sn_console_data {
+       struct timer timer;
+       unsigned int timeout_ms;
+       int booted;
+};
+
+static struct sn_console_data console_data = {
+       .timeout_ms = 8 * 16 * 1000 / 9600,
+};
+
 
 /*
  * sn_putc - Send a character to the console, polled or interrupt mode
  */
 static void sn_putc(struct serial_port *port, char c)
 {
-       ia64_sn_console_putc(c);
+       struct sn_console_data *sndata = port->uart;
+
+       if (sndata->booted)
+               ia64_sn_console_putb(&c, 1);
+       else
+               ia64_sn_console_putc(c);
 }
 
+/*
+ * sn_getc - Get a character from the console, polled or interrupt mode
+ */
+static int sn_getc(struct serial_port *port, char *pc)
+{
+       int ch;
+
+       ia64_sn_console_getc(&ch);
+       *pc = ch & 0xff;
+       return 1;
+}
+
+static void sn_endboot(struct serial_port *port)
+{
+       struct sn_console_data *sndata = port->uart;
+
+       sndata->booted = 1;
+}
+
+
+static void sn_poll(void *data)
+{
+       int ch, status;
+       struct serial_port *port = data;
+       struct sn_console_data *sndata = port->uart;
+       struct cpu_user_regs *regs = guest_cpu_user_regs();
+
+       status = ia64_sn_console_check(&ch);
+       if (!status && ch) {
+               serial_rx_interrupt(port, regs);
+       }
+       set_timer(&sndata->timer, NOW() + MILLISECS(sndata->timeout_ms));
+}
+
+
+static void sn_init_postirq(struct serial_port *port)
+{
+       struct sn_console_data *sndata = port->uart;
+
+        init_timer(&sndata->timer, sn_poll, port, 0);
+        set_timer(&sndata->timer, NOW() + MILLISECS(console_data.timeout_ms));
+}
+
+
 static struct uart_driver sn_sal_console = {
+       .init_postirq = sn_init_postirq,
        .putc = sn_putc,
+       .getc = sn_getc,
+       .endboot = sn_endboot,
 };
+
 
 /**
  * early_sn_setup - early setup routine for SN platforms
@@ -45,8 +110,7 @@ static void __init early_sn_setup(void)
        efi_systab = (efi_system_table_t *) __va(ia64_boot_param->efi_systab);
        config_tables = __va(efi_systab->tables);
        for (i = 0; i < efi_systab->nr_tables; i++) {
-               if (efi_guidcmp(config_tables[i].guid, SAL_SYSTEM_TABLE_GUID) ==
-                   0) {
+               if (!efi_guidcmp(config_tables[i].guid, SAL_SYSTEM_TABLE_GUID)) 
{
                        sal_systab = __va(config_tables[i].table);
                        p = (char *)(sal_systab + 1);
                        for (j = 0; j < sal_systab->entry_count; j++) {
@@ -73,11 +137,11 @@ static void __init early_sn_setup(void)
  */
 int __init sn_serial_console_early_setup(void)
 {
-       if (strcmp("sn2",acpi_get_sysname()))
+       if (strcmp("sn2", acpi_get_sysname()))
                return -1;
 
        early_sn_setup();       /* Find SAL entry points */
-       serial_register_uart(0, &sn_sal_console, NULL);
+       serial_register_uart(0, &sn_sal_console, &console_data);
 
        return 0;
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] SN2 polling console driver, Xen patchbot-unstable <=