iPXE
Macros | Functions | Variables
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_
 
#define COMCONSOLE   NULL
 
#define COMSPEED   0
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
struct uartfixed_serial_console (void)
 Get fixed serial console UART. More...
 
static void serial_putchar (int character)
 Print a character to serial console. More...
 
static int serial_getchar (void)
 Get character from serial console. More...
 
static int serial_iskey (void)
 Check for character ready to read from serial console. More...
 
static void serial_init (void)
 Initialise serial console. More...
 
static void serial_shutdown (int flags __unused)
 Shut down serial console. More...
 
struct init_fn serial_console_init_fn __init_fn (INIT_CONSOLE)
 Serial console initialisation function. More...
 
struct startup_fn serial_startup_fn __startup_fn (STARTUP_EARLY)
 Serial console startup function. More...
 
 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. More...
 
struct console_driver serial_console_driver __console_driver
 Serial console. More...
 

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.

◆ COMCONSOLE

#define COMCONSOLE   NULL

Definition at line 56 of file serial.c.

◆ COMSPEED

#define COMSPEED   0

Definition at line 61 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 }
A generic UART.
Definition: uart.h:17
unsigned int baud
Baud rate (if specified)
Definition: uart.h:26
#define COMSPEED
Definition: serial.c:61
#define COMCONSOLE
Definition: serial.c:56

References uart::baud, COMCONSOLE, and COMSPEED.

Referenced by spcr_console().

◆ serial_putchar()

static 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()

static 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  {
108  uint8_t data;
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 }
struct uart * serial_console
Active serial console UART.
Definition: serial.c:69
unsigned char uint8_t
Definition: stdint.h:10
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, and serial_console.

◆ serial_iskey()

static 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 }
struct uart * serial_console
Active serial console UART.
Definition: serial.c:69

References serial_console.

◆ serial_init()

static 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:14
A generic UART.
Definition: uart.h:17
#define DBGC(...)
Definition: compiler.h:505
struct uart * default_serial_console(void)
Get serial console UART.
const char * name
Name.
Definition: uart.h:21
struct uart * serial_console
Active serial console UART.
Definition: serial.c:69
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78

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

◆ serial_shutdown()

static 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 }
struct uart * serial_console
Active serial console UART.
Definition: serial.c:69

References serial_console.

◆ __init_fn()

struct init_fn serial_console_init_fn __init_fn ( INIT_CONSOLE  )

Serial console initialisation function.

◆ __startup_fn()

struct startup_fn serial_startup_fn __startup_fn ( STARTUP_EARLY  )

Serial console startup function.

◆ PROVIDE_SERIAL_INLINE()

PROVIDE_SERIAL_INLINE ( null  ,
default_serial_console   
)

◆ PROVIDE_SERIAL()

PROVIDE_SERIAL ( fixed  ,
default_serial_console  ,
fixed_serial_console   
)

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 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 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
static void serial_putchar(int character)
Print a character to serial console.
Definition: serial.c:92

Serial console.

Definition at line 145 of file serial.c.