cregit-Linux how code gets into the kernel

Release 4.14 arch/powerpc/boot/ns16550.c

// SPDX-License-Identifier: GPL-2.0
/*
 * 16550 serial console support.
 *
 * Original copied from <file:arch/ppc/boot/common/ns16550.c>
 * (which had no copyright)
 * Modifications: 2006 (c) MontaVista Software, Inc.
 *
 * Modified by: Mark A. Greer <mgreer@mvista.com>
 */
#include <stdarg.h>
#include <stddef.h>
#include "types.h"
#include "string.h"
#include "stdio.h"
#include "io.h"
#include "ops.h"


#define UART_DLL	0	
/* Out: Divisor Latch Low */

#define UART_DLM	1	
/* Out: Divisor Latch High */

#define UART_FCR	2	
/* Out: FIFO Control Register */

#define UART_LCR	3	
/* Out: Line Control Register */

#define UART_MCR	4	
/* Out: Modem Control Register */

#define UART_LSR	5	
/* In:  Line Status Register */

#define UART_LSR_THRE	0x20	
/* Transmit-hold-register empty */

#define UART_LSR_DR	0x01	
/* Receiver data ready */

#define UART_MSR	6	
/* In:  Modem Status Register */

#define UART_SCR	7	
/* I/O: Scratch Register */


static unsigned char *reg_base;

static u32 reg_shift;


static int ns16550_open(void) { out_8(reg_base + (UART_FCR << reg_shift), 0x06); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer24100.00%1100.00%
Total24100.00%1100.00%


static void ns16550_putc(unsigned char c) { while ((in_8(reg_base + (UART_LSR << reg_shift)) & UART_LSR_THRE) == 0); out_8(reg_base, c); }

Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer37100.00%1100.00%
Total37100.00%1100.00%


static unsigned char ns16550_getc(void) { while ((in_8(reg_base + (UART_LSR << reg_shift)) & UART_LSR_DR) == 0); return in_8(reg_base); }

Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer35100.00%1100.00%
Total35100.00%1100.00%


static u8 ns16550_tstc(void) { return ((in_8(reg_base + (UART_LSR << reg_shift)) & UART_LSR_DR) != 0); }

Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer28100.00%1100.00%
Total28100.00%1100.00%


int ns16550_console_init(void *devp, struct serial_console_data *scdp) { int n; u32 reg_offset; if (dt_get_virtual_reg(devp, (void **)&reg_base, 1) < 1) return -1; n = getprop(devp, "reg-offset", &reg_offset, sizeof(reg_offset)); if (n == sizeof(reg_offset)) reg_base += reg_offset; n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift)); if (n != sizeof(reg_shift)) reg_shift = 0; scdp->open = ns16550_open; scdp->putc = ns16550_putc; scdp->getc = ns16550_getc; scdp->tstc = ns16550_tstc; scdp->close = NULL; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer8663.24%125.00%
John Linn3324.26%125.00%
Laurent Pinchart107.35%125.00%
Scott Wood75.15%125.00%
Total136100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Mark A. Greer29285.13%120.00%
John Linn339.62%120.00%
Laurent Pinchart102.92%120.00%
Scott Wood72.04%120.00%
Greg Kroah-Hartman10.29%120.00%
Total343100.00%5100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.