From 800a239fd39bf9c400be06ef43bfcbf7a5dc94fb Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Thu, 9 Jun 2005 22:06:18 +0000 Subject: bitkeeper revision 1.1668.1.11 (42a8bd5aCFsumaFg9rk2nWmEBa7opA) Oops, yet another file for Greg's checkin --- .rootkeys | 1 + xen/arch/ia64/sn_console.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 xen/arch/ia64/sn_console.c diff --git a/.rootkeys b/.rootkeys index 33c01b74d3..2c6dcb0d75 100644 --- a/.rootkeys +++ b/.rootkeys @@ -1099,6 +1099,7 @@ 41a26ebcJ30TFl1v2kR8rqpEBvOtVw xen/arch/ia64/regionreg.c 421098b69pUiIJrqu_w0JMUnZ2uc2A xen/arch/ia64/smp.c 421098b6_ToSGrf6Pk1Uwg5aMAIBxg xen/arch/ia64/smpboot.c +42a8bd43dIEIsS-EoQqt5Df1RTr5Hg xen/arch/ia64/sn_console.c 428b9f38JJDW35iDn5DlfXTu700rkQ xen/arch/ia64/tools/README.RunVT 421098b6AUdbxR3wyn1ATcmNuTao_Q xen/arch/ia64/tools/README.xenia64 42376c6dfyY0eq8MS2dK3BW2rFuEGg xen/arch/ia64/tools/README.xenia64linux diff --git a/xen/arch/ia64/sn_console.c b/xen/arch/ia64/sn_console.c new file mode 100644 index 0000000000..d29a82935c --- /dev/null +++ b/xen/arch/ia64/sn_console.c @@ -0,0 +1,84 @@ +/* + * C-Brick Serial Port (and console) driver for SGI Altix machines. + * + * Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. + */ + +#include +#include +#include + +void sn_putc(struct serial_port *, char); + +static struct uart_driver sn_sal_console = { + .putc = sn_putc, +}; + +/** + * early_sn_setup - early setup routine for SN platforms + * + * pulled from arch/ia64/sn/kernel/setup.c + */ +static void __init early_sn_setup(void) +{ + efi_system_table_t *efi_systab; + efi_config_table_t *config_tables; + struct ia64_sal_systab *sal_systab; + struct ia64_sal_desc_entry_point *ep; + char *p; + int i, j; + + /* + * Parse enough of the SAL tables to locate the SAL entry point. Since, console + * IO on SN2 is done via SAL calls, early_printk won't work without this. + * + * This code duplicates some of the ACPI table parsing that is in efi.c & sal.c. + * Any changes to those file may have to be made hereas well. + */ + 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) { + sal_systab = __va(config_tables[i].table); + p = (char *)(sal_systab + 1); + for (j = 0; j < sal_systab->entry_count; j++) { + if (*p == SAL_DESC_ENTRY_POINT) { + ep = (struct ia64_sal_desc_entry_point + *)p; + ia64_sal_handler_init(__va + (ep->sal_proc), + __va(ep->gp)); + return; + } + p += SAL_DESC_SIZE(*p); + } + } + } + /* Uh-oh, SAL not available?? */ + printk(KERN_ERR "failed to find SAL entry point\n"); +} + +/** + * sn_serial_console_early_setup - Sets up early console output support + * + * pulled from drivers/serial/sn_console.c + */ +int __init sn_serial_console_early_setup(void) +{ + if (strcmp("sn2",acpi_get_sysname())) + return -1; + + early_sn_setup(); /* Find SAL entry points */ + serial_register_uart(0, &sn_sal_console, NULL); + + return 0; +} + +/* + * sn_putc - Send a character to the console, polled or interrupt mode + */ +void sn_putc(struct serial_port *port, char c) +{ + return ia64_sn_console_putc(c); +} -- cgit v1.2.3