iPXE
serial.c File Reference

Serial console. More...

#include <stddef.h>
#include <string.h>
#include <ipxe/init.h>
#include <ipxe/uart.h>
#include <ipxe/console.h>
#include <ipxe/serial.h>
#include <ipxe/ns16550.h>
#include <config/console.h>
#include <config/serial.h>

Go to the source code of this file.

Macros

#define CONSOLE_SERIAL   ( CONSOLE_USAGE_ALL & ~CONSOLE_USAGE_LOG )
#define SERIAL_PREFIX_fixed   __fixed_

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
struct uartfixed_serial_console (void)
 Get fixed serial console UART.
static void serial_putchar (int character)
 Print a character to serial console.
static int serial_getchar (void)
 Get character from serial console.
static int serial_iskey (void)
 Check for character ready to read from serial console.
static void serial_init (void)
 Initialise serial console.
static void serial_shutdown (int flags __unused)
 Shut down serial console.
struct init_fn serial_console_init_fn __init_fn (INIT_CONSOLE)
 Serial console initialisation function.
struct startup_fn serial_startup_fn __startup_fn (STARTUP_EARLY)
 Serial console startup function.
 PROVIDE_SERIAL_INLINE (null, default_serial_console)
 PROVIDE_SERIAL (fixed, default_serial_console, fixed_serial_console)

Variables

struct uartserial_console = NULL
 Active serial console UART.
struct console_driver serial_console_driver __console_driver
 Serial console.

Detailed Description

Serial console.

Definition in file serial.c.

Macro Definition Documentation

◆ CONSOLE_SERIAL

#define CONSOLE_SERIAL   ( CONSOLE_USAGE_ALL & ~CONSOLE_USAGE_LOG )

Definition at line 45 of file serial.c.

◆ SERIAL_PREFIX_fixed

#define SERIAL_PREFIX_fixed   __fixed_

Definition at line 51 of file serial.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ fixed_serial_console()

struct uart * fixed_serial_console ( void )

Get fixed serial console UART.

Return values
uartSerial console UART, or NULL

Definition at line 76 of file serial.c.

76 {
77 struct uart *uart = COMCONSOLE;
78 unsigned int baud = COMSPEED;
79
80 /* Set default baud rate, if applicable */
81 if ( uart && baud )
82 uart->baud = baud;
83
84 return uart;
85}
#define COMCONSOLE
Definition serial.h:18
#define COMSPEED
Definition serial.h:26
A generic UART.
Definition uart.h:17
unsigned int baud
Baud rate (if specified)
Definition uart.h:26

References uart::baud, COMCONSOLE, and COMSPEED.

Referenced by PROVIDE_SERIAL(), and spcr_console().

◆ serial_putchar()

void serial_putchar ( int character)
static

Print a character to serial console.

Parameters
characterCharacter to be printed

Definition at line 92 of file serial.c.

92 {
93
94 /* Do nothing if we have no UART */
95 if ( ! serial_console )
96 return;
97
98 /* Transmit character */
99 uart_transmit ( serial_console, character );
100}
struct uart * serial_console
Active serial console UART.
Definition serial.c:69

References serial_console.

◆ serial_getchar()

int serial_getchar ( void )
static

Get character from serial console.

Return values
characterCharacter read from console

Definition at line 107 of file serial.c.

107 {
109
110 /* Do nothing if we have no UART */
111 if ( ! serial_console )
112 return 0;
113
114 /* Wait for data to be ready */
115 while ( ! uart_data_ready ( serial_console ) ) {}
116
117 /* Receive data */
118 data = uart_receive ( serial_console );
119
120 /* Strip any high bit and convert DEL to backspace */
121 data &= 0x7f;
122 if ( data == 0x7f )
123 data = 0x08;
124
125 return data;
126}
unsigned char uint8_t
Definition stdint.h:10
uint8_t data[48]
Additional event data.
Definition ena.h:11

References data, and serial_console.

◆ serial_iskey()

int serial_iskey ( void )
static

Check for character ready to read from serial console.

Return values
TrueCharacter available to read
FalseNo character available to read

Definition at line 134 of file serial.c.

134 {
135
136 /* Do nothing if we have no UART */
137 if ( ! serial_console )
138 return 0;
139
140 /* Check UART */
141 return uart_data_ready ( serial_console );
142}

References serial_console.

◆ serial_init()

void serial_init ( void )
static

Initialise serial console.

Definition at line 153 of file serial.c.

153 {
154 struct uart *uart;
155 int rc;
156
157 /* Get default serial console, if any */
159 if ( ! uart )
160 return;
161
162 /* Initialise UART */
163 if ( ( rc = uart_init ( uart ) ) != 0 ) {
164 DBGC ( uart, "SERIAL could not initialise %s: %s\n",
165 uart->name, strerror ( rc ) );
166 return;
167 }
168
169 /* Record UART as serial console */
171 DBGC ( uart, "SERIAL using %s\n", uart->name );
172}
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
#define DBGC(...)
Definition compiler.h:505
struct uart * default_serial_console(void)
Get serial console UART.
char * strerror(int errno)
Retrieve string representation of error number.
Definition strerror.c:79
const char * name
Name.
Definition uart.h:21

References DBGC, default_serial_console(), uart::name, rc, serial_console, and strerror().

Referenced by __init_fn().

◆ serial_shutdown()

void serial_shutdown ( int flags __unused)
static

Shut down serial console.

Parameters
flagsShutdown flags

Definition at line 179 of file serial.c.

179 {
180
181 /* Do nothing if we have no UART */
182 if ( ! serial_console )
183 return;
184
185 /* Flush any pending output */
186 uart_flush ( serial_console );
187
188 /* Leave console enabled; it's still usable */
189}

References __unused, flags, and serial_console.

Referenced by __startup_fn().

◆ __init_fn()

struct init_fn serial_console_init_fn __init_fn ( INIT_CONSOLE )

Serial console initialisation function.

References __init_fn, INIT_CONSOLE, and serial_init().

◆ __startup_fn()

struct startup_fn serial_startup_fn __startup_fn ( STARTUP_EARLY )

Serial console startup function.

References __startup_fn, serial_shutdown(), and STARTUP_EARLY.

◆ PROVIDE_SERIAL_INLINE()

PROVIDE_SERIAL_INLINE ( null ,
default_serial_console  )

◆ PROVIDE_SERIAL()

Variable Documentation

◆ serial_console

struct uart* serial_console = NULL

Active serial console UART.

Explicitly initialised to NULL since this variable may be accessed before .bss has been zeroed.

Definition at line 69 of file serial.c.

Referenced by default_serial_console(), int21(), int22(), serial_getchar(), serial_init(), serial_iskey(), serial_putchar(), and serial_shutdown().

◆ __console_driver

struct console_driver serial_console_driver __console_driver
Initial value:
= {
.putchar = serial_putchar,
.getchar = serial_getchar,
.iskey = serial_iskey,
.usage = CONSOLE_SERIAL,
}
static void serial_putchar(int character)
Print a character to serial console.
Definition serial.c:92
static int serial_iskey(void)
Check for character ready to read from serial console.
Definition serial.c:134
static int serial_getchar(void)
Get character from serial console.
Definition serial.c:107
#define CONSOLE_SERIAL
Definition serial.c:45

Serial console.

Definition at line 145 of file serial.c.

145 {
146 .putchar = serial_putchar,
147 .getchar = serial_getchar,
148 .iskey = serial_iskey,
149 .usage = CONSOLE_SERIAL,
150};