args_prep.c revision 1.4
1/* $Id: args_prep.c,v 1.4 2017/12/10 02:26:41 christos Exp $ */ 2 3/* 4 * Copyright (c) 2012 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Petri Laakso. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32/* (c) for ngets() below: 33 * 34 * Copyright (c) 1993 35 * The Regents of the University of California. All rights reserved. 36 * 37 * Redistribution and use in source and binary forms, with or without 38 * modification, are permitted provided that the following conditions 39 * are met: 40 * 1. Redistributions of source code must retain the above copyright 41 * notice, this list of conditions and the following disclaimer. 42 * 2. Redistributions in binary form must reproduce the above copyright 43 * notice, this list of conditions and the following disclaimer in the 44 * documentation and/or other materials provided with the distribution. 45 * 3. All advertising materials mentioning features or use of this software 46 * must display the following acknowledgement: 47 * This product includes software developed by the University of 48 * California, Berkeley and its contributors. 49 * 4. Neither the name of the University nor the names of its contributors 50 * may be used to endorse or promote products derived from this software 51 * without specific prior written permission. 52 * 53 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 54 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 55 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 56 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 57 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 58 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 59 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 60 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 61 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 62 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 63 * SUCH DAMAGE. 64 * 65 * @(#)gets.c 8.1 (Berkeley) 6/11/93 66 */ 67 68 69#include <sys/param.h> 70#include <sys/types.h> 71#include <sys/cdefs.h> 72 73#include <lib/libsa/stand.h> 74#include <lib/libkern/libkern.h> 75 76#include <arm/arm32/pte.h> 77#define _LOCORE 78#include <arm/imx/imx23var.h> 79#undef _LOCORE 80#include <machine/bootconfig.h> 81 82#include <arm/imx/imx23_digctlreg.h> 83#include <arm/imx/imx23_uartdbgreg.h> 84 85#include "common.h" 86 87static void ngets(char *, int); 88 89#define L1_PAGE_TABLE (DRAM_BASE + MEMSIZE * 1024 * 1024 - L1_TABLE_SIZE) 90#define BOOTIMX23_ARGS (L1_PAGE_TABLE - MAX_BOOT_STRING - 1) 91 92#define PROMPT_DELAY 5000000 /* Wait 5 seconds user to press any key. */ 93 94int 95args_prep(void) 96{ 97 u_int prompt; 98 char *boot_args = (char *)BOOTIMX23_ARGS; 99 100 /* Copy default boot arguments. */ 101 memset((void *)boot_args, 0x00, MAX_BOOT_STRING); 102 strcpy(boot_args, KERNEL_BOOT_ARGS); 103 104 prompt = 0; 105 106 /* Enable debug UART data reception which was not enabled by the ROM. */ 107 uint16_t cr = REG_RD_HW(HW_UARTDBG_BASE + HW_UARTDBGCR); 108 cr |= HW_UARTDBGCR_RXE; 109 REG_WR_HW(HW_UARTDBG_BASE + HW_UARTDBGCR, cr); 110 111 printf("Press any key to drop into boot prompt...\n\r"); 112 113 REG_WR(HW_DIGCTL_BASE + HW_DIGCTL_MICROSECONDS_CLR, 0xFFFFFFFF); 114 115 while (REG_RD(HW_DIGCTL_BASE + HW_DIGCTL_MICROSECONDS) < PROMPT_DELAY) { 116 if (!(REG_RD_HW(HW_UARTDBG_BASE + HW_UARTDBGFR) & 117 HW_UARTDBGFR_RXFE)) { 118 /* RX FIFO is not empty, some key was pressed. */ 119 REG_RD(HW_UARTDBG_BASE + HW_UARTDBGDR); /* Flush. */ 120 prompt = 1; 121 break; 122 } 123 } 124 125 if (prompt) { 126 memset((void *)boot_args, 0x00, MAX_BOOT_STRING); 127 printf("boot: "); 128 ngets(boot_args, MAX_BOOT_STRING); 129 } 130 131 return 0; 132} 133 134/* 135 * gets() with constrained input length. 136 * 137 * Copied from: sys/arch/ia64/stand/common/gets.c 138 */ 139static void 140ngets(char *buf, int n) 141{ 142 int c; 143 char *lp; 144 145 for (lp = buf;;) { 146 switch (c = getchar() & 0177) { 147 case '\n': 148 case '\r': 149 *lp = '\0'; 150 putchar('\n'); 151 return; 152 case '\b': 153 case '\177': 154 if (lp > buf) { 155 lp--; 156 putchar('\b'); 157 putchar(' '); 158 putchar('\b'); 159 } 160 break; 161 case 'r'&037: { 162 char *p; 163 164 putchar('\n'); 165 for (p = buf; p < lp; ++p) 166 putchar(*p); 167 break; 168 } 169 case 'u'&037: 170 case 'w'&037: 171 lp = buf; 172 putchar('\n'); 173 break; 174 default: 175 if ((n < 1) || ((lp - buf) < n)) { 176 *lp++ = c; 177 putchar(c); 178 } 179 } 180 } 181 /*NOTREACHED*/ 182} 183