arch/powerpc/kernel/udbg_16550.c
Source file repositories/reference/linux-study-clean/arch/powerpc/kernel/udbg_16550.c
File Facts
- System
- Linux kernel
- Corpus path
arch/powerpc/kernel/udbg_16550.c- Extension
.c- Size
- 6194 bytes
- Lines
- 285
- Domain
- Architecture Layer
- Bucket
- arch/powerpc
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
Dependency Surface
linux/types.hasm/udbg.hasm/io.hasm/early_ioremap.hplatforms/44x/44x.h
Detected Declarations
function udbg_uart_flushfunction udbg_uart_putcfunction udbg_uart_getc_pollfunction udbg_uart_getcfunction udbg_use_uartfunction udbg_uart_setupfunction udbg_probe_uart_speedfunction udbg_uart_in_piofunction udbg_uart_out_piofunction udbg_uart_init_piofunction udbg_uart_in_mmiofunction udbg_uart_out_mmiofunction udbg_uart_init_mmiofunction udbg_uart_in_pasfunction udbg_uart_out_pasfunction udbg_init_pas_realmodefunction udbg_uart_in_44x_as1function udbg_uart_out_44x_as1function udbg_init_44x_as1function udbg_init_debug_16550function udbg_init_debug_16550_ioremap
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* udbg for NS16550 compatible serial ports
*
* Copyright (C) 2001-2005 PPC 64 Team, IBM Corp
*/
#include <linux/types.h>
#include <asm/udbg.h>
#include <asm/io.h>
#include <asm/early_ioremap.h>
extern u8 real_readb(volatile u8 __iomem *addr);
extern void real_writeb(u8 data, volatile u8 __iomem *addr);
extern u8 real_205_readb(volatile u8 __iomem *addr);
extern void real_205_writeb(u8 data, volatile u8 __iomem *addr);
#define UART_RBR 0
#define UART_IER 1
#define UART_FCR 2
#define UART_LCR 3
#define UART_MCR 4
#define UART_LSR 5
#define UART_MSR 6
#define UART_SCR 7
#define UART_THR UART_RBR
#define UART_IIR UART_FCR
#define UART_DLL UART_RBR
#define UART_DLM UART_IER
#define UART_DLAB UART_LCR
#define LSR_DR 0x01 /* Data ready */
#define LSR_OE 0x02 /* Overrun */
#define LSR_PE 0x04 /* Parity error */
#define LSR_FE 0x08 /* Framing error */
#define LSR_BI 0x10 /* Break */
#define LSR_THRE 0x20 /* Xmit holding register empty */
#define LSR_TEMT 0x40 /* Xmitter empty */
#define LSR_ERR 0x80 /* Error */
#define LCR_DLAB 0x80
static u8 (*udbg_uart_in)(unsigned int reg);
static void (*udbg_uart_out)(unsigned int reg, u8 data);
static void udbg_uart_flush(void)
{
if (!udbg_uart_in)
return;
/* wait for idle */
while ((udbg_uart_in(UART_LSR) & LSR_THRE) == 0)
cpu_relax();
}
static void udbg_uart_putc(char c)
{
if (!udbg_uart_out)
return;
if (c == '\n')
udbg_uart_putc('\r');
udbg_uart_flush();
udbg_uart_out(UART_THR, c);
}
static int udbg_uart_getc_poll(void)
{
if (!udbg_uart_in)
return -1;
if (!(udbg_uart_in(UART_LSR) & LSR_DR))
return udbg_uart_in(UART_RBR);
return -1;
}
static int udbg_uart_getc(void)
{
if (!udbg_uart_in)
return -1;
/* wait for char */
while (!(udbg_uart_in(UART_LSR) & LSR_DR))
cpu_relax();
return udbg_uart_in(UART_RBR);
}
static void __init udbg_use_uart(void)
{
udbg_putc = udbg_uart_putc;
udbg_flush = udbg_uart_flush;
Annotation
- Immediate include surface: `linux/types.h`, `asm/udbg.h`, `asm/io.h`, `asm/early_ioremap.h`, `platforms/44x/44x.h`.
- Detected declarations: `function udbg_uart_flush`, `function udbg_uart_putc`, `function udbg_uart_getc_poll`, `function udbg_uart_getc`, `function udbg_use_uart`, `function udbg_uart_setup`, `function udbg_probe_uart_speed`, `function udbg_uart_in_pio`, `function udbg_uart_out_pio`, `function udbg_uart_init_pio`.
- Atlas domain: Architecture Layer / arch/powerpc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.