pintos/src/devices/serial.c File Reference

#include "devices/serial.h"
#include <debug.h>
#include "devices/input.h"
#include "devices/intq.h"
#include "devices/timer.h"
#include "threads/io.h"
#include "threads/interrupt.h"
#include "threads/synch.h"
#include "threads/thread.h"

Go to the source code of this file.

Defines

#define IO_BASE   0x3f8
#define RBR_REG   (IO_BASE + 0)
#define THR_REG   (IO_BASE + 0)
#define IER_REG   (IO_BASE + 1)
#define LS_REG   (IO_BASE + 0)
#define MS_REG   (IO_BASE + 1)
#define IIR_REG   (IO_BASE + 2)
#define FCR_REG   (IO_BASE + 2)
#define LCR_REG   (IO_BASE + 3)
#define MCR_REG   (IO_BASE + 4)
#define LSR_REG   (IO_BASE + 5)
#define IER_RECV   0x01
#define IER_XMIT   0x02
#define LCR_N81   0x03
#define LCR_DLAB   0x80
#define MCR_OUT2   0x08
#define LSR_DR   0x01
#define LSR_THRE   0x20

Enumerations

enum  { UNINIT, POLL, QUEUE }

Functions

static void set_serial (int bps)
static void putc_poll (uint8_t)
static void write_ier (void)
static void init_poll (void)
void serial_init_queue (void)
void serial_putc (uint8_t byte)
void serial_flush (void)
void serial_notify (void)
static void serial_interrupt (struct intr_frame *f UNUSED)

Variables

static enum { ... }  mode
static struct intq txq
static intr_handler_func serial_interrupt


Define Documentation

#define FCR_REG   (IO_BASE + 2)

Definition at line 32 of file serial.c.

Referenced by init_poll().

#define IER_RECV   0x01

Definition at line 38 of file serial.c.

Referenced by write_ier().

#define IER_REG   (IO_BASE + 1)

Definition at line 24 of file serial.c.

Referenced by init_poll(), and write_ier().

#define IER_XMIT   0x02

Definition at line 39 of file serial.c.

Referenced by write_ier().

#define IIR_REG   (IO_BASE + 2)

Definition at line 31 of file serial.c.

Referenced by serial_interrupt().

#define IO_BASE   0x3f8

Definition at line 19 of file serial.c.

#define LCR_DLAB   0x80

Definition at line 43 of file serial.c.

Referenced by set_serial().

#define LCR_N81   0x03

Definition at line 42 of file serial.c.

Referenced by set_serial().

#define LCR_REG   (IO_BASE + 3)

Definition at line 33 of file serial.c.

Referenced by set_serial().

#define LS_REG   (IO_BASE + 0)

Definition at line 27 of file serial.c.

Referenced by set_serial().

#define LSR_DR   0x01

Definition at line 49 of file serial.c.

Referenced by serial_interrupt().

#define LSR_REG   (IO_BASE + 5)

Definition at line 35 of file serial.c.

Referenced by putc_poll(), and serial_interrupt().

#define LSR_THRE   0x20

Definition at line 50 of file serial.c.

Referenced by putc_poll(), and serial_interrupt().

#define MCR_OUT2   0x08

Definition at line 46 of file serial.c.

Referenced by init_poll().

#define MCR_REG   (IO_BASE + 4)

Definition at line 34 of file serial.c.

Referenced by init_poll().

#define MS_REG   (IO_BASE + 1)

Definition at line 28 of file serial.c.

Referenced by set_serial().

#define RBR_REG   (IO_BASE + 0)

Definition at line 22 of file serial.c.

Referenced by serial_interrupt().

#define THR_REG   (IO_BASE + 0)

Definition at line 23 of file serial.c.

Referenced by putc_poll(), and serial_interrupt().


Enumeration Type Documentation

anonymous enum

Enumerator:
UNINIT 
POLL 
QUEUE 

Definition at line 53 of file serial.c.


Function Documentation

static void init_poll ( void   )  [static]

Definition at line 68 of file serial.c.

References ASSERT, FCR_REG, IER_REG, intq_init(), MCR_OUT2, MCR_REG, mode, outb(), POLL, set_serial(), txq, and UNINIT.

Referenced by serial_init_queue(), and serial_putc().

static void putc_poll ( uint8_t  byte  )  [static]

Definition at line 200 of file serial.c.

References ASSERT, inb(), intr_get_level(), INTR_OFF, LSR_REG, LSR_THRE, outb(), and THR_REG.

Referenced by serial_flush(), and serial_putc().

void serial_flush ( void   ) 

Definition at line 136 of file serial.c.

References intq_empty(), intq_getc(), intr_disable(), intr_set_level(), putc_poll(), and txq.

Referenced by debug_panic(), and power_off().

void serial_init_queue ( void   ) 

static void serial_interrupt ( struct intr_frame *f  UNUSED  )  [static]

void serial_notify ( void   ) 

Definition at line 149 of file serial.c.

References ASSERT, intr_get_level(), INTR_OFF, mode, QUEUE, and write_ier().

Referenced by input_getc(), and input_putc().

void serial_putc ( uint8_t  byte  ) 

static void set_serial ( int  bps  )  [static]

Definition at line 158 of file serial.c.

References ASSERT, LCR_DLAB, LCR_N81, LCR_REG, LS_REG, MS_REG, and outb().

Referenced by init_poll().

static void write_ier ( void   )  [static]


Variable Documentation

enum { ... } mode [static]

intr_handler_func serial_interrupt [static]

Definition at line 61 of file serial.c.

Referenced by serial_init_queue().

struct intq txq [static]

Definition at line 56 of file serial.c.

Referenced by init_poll(), serial_flush(), serial_interrupt(), serial_putc(), and write_ier().


Generated on Mon Jan 10 16:43:58 2011 for Pintos by  doxygen 1.5.6