Index: proj/include/uart.h
===================================================================
--- proj/include/uart.h	(revision 241)
+++ proj/include/uart.h	(revision 242)
@@ -4,16 +4,21 @@
 #include "uart_macros.h"
 
 typedef struct {
-    int     base_addr;
-    uint8_t config;
-    uint8_t dll;
-    uint8_t dlm;
-    uint8_t bits_per_char;
-    uint8_t stop_bits;
-    uint8_t parity;
-    uint8_t break_control;
-    uint8_t dlab;
-    uint16_t divisor_latch;
+    int     base_addr               ;
+    uint8_t lcr                     ;
+    uint8_t dll                     ;
+    uint8_t dlm                     ;
+    uint8_t bits_per_char           ;
+    uint8_t stop_bits               ;
+    uint8_t parity                  ;
+    uint8_t break_control         :1;
+    uint8_t dlab                  :1;
+    uint16_t divisor_latch          ;
+    uint8_t ier                     ;
+    uint8_t received_data_int     :1;
+    uint8_t transmitter_empty_int :1;
+    uint8_t receiver_line_stat_int:1;
+    uint8_t modem_stat_int        :1;
 } uart_config;
 
 int uart_get_config(int base_addr, uart_config *config);
Index: proj/src/uart.c
===================================================================
--- proj/src/uart.c	(revision 241)
+++ proj/src/uart.c	(revision 242)
@@ -39,34 +39,59 @@
 #define UART_GET_DLL(n)           ((n)&0xFF)
 #define UART_GET_DLM(n)           (((n)>>8)&0xFF)
 
+#define UART_RECEIVED_DATA_POS      0
+#define UART_TRANSMITTER_EMPTY_POS  1
+#define UART_RECEIVER_LINE_STAT_POS 2
+#define UART_MODEM_STAT_POS         3
+
+#define UART_RECEIVED_DATA          (BIT(0))
+#define UART_TRANSMITTER_EMPTY      (BIT(1))
+#define UART_RECEIVER_LINE_STAT     (BIT(2))
+#define UART_MODEM_STAT             (BIT(3))
+
+#define UART_GET_RECEIVED_DATA(n)       (((n)&UART_RECEIVED_DATA     )>>UART_RECEIVED_DATA_POS     )
+#define UART_GET_TRANSMITTER_EMPTY(n)   (((n)&UART_TRANSMITTER_EMPTY )>>UART_TRANSMITTER_EMPTY_POS )
+#define UART_GET_RECEIVER_LINE_STAT(n)  (((n)&UART_RECEIVER_LINE_STAT)>>UART_RECEIVER_LINE_STAT_POS)
+#define UART_GET_MODEM_STAT(n)          (((n)&UART_MODEM_STAT        )>>UART_MODEM_STAT_POS        )
+
 int uart_get_config(int base_addr, uart_config *config){
     int ret = SUCCESS;
 
     config->base_addr = base_addr;
 
-    if((ret = util_sys_inb(base_addr+UART_LCR, &config->config))) return ret;
+    if((ret = util_sys_inb(base_addr+UART_LCR, &config->lcr))) return ret;
 
-    if((ret = uart_enable_divisor_latch(base_addr))) return ret;
+    if((ret = util_sys_inb(base_addr+UART_IER, &config->ier))) return ret;
+
+    if((ret = uart_enable_divisor_latch (base_addr))) return ret;
     if((ret = util_sys_inb(base_addr+UART_DLL, &config->dll   ))) return ret;
     if((ret = util_sys_inb(base_addr+UART_DLM, &config->dlm   ))) return ret;
+    if((ret = uart_disable_divisor_latch(base_addr))) return ret;
 
     uart_parse_config(config);
     return ret;
 }
 void uart_parse_config(uart_config *config){
-    config->bits_per_char        = UART_GET_BITS_PER_CHAR(config->config);
-    config->stop_bits            = UART_GET_STOP_BITS    (config->config);
-    config->parity               = UART_GET_PARITY       (config->config);
-    config->break_control        = UART_GET_BREAK_CONTROL(config->config);
-    config->dlab                 = UART_GET_DLAB         (config->config);
-    config->divisor_latch        = UART_GET_DIV_LATCH    (config->dlm, config->dll);
+    /// LCR
+    config->bits_per_char          = UART_GET_BITS_PER_CHAR     (config->lcr);
+    config->stop_bits              = UART_GET_STOP_BITS         (config->lcr);
+    config->parity                 = UART_GET_PARITY            (config->lcr);
+    config->break_control          = UART_GET_BREAK_CONTROL     (config->lcr);
+    config->dlab                   = UART_GET_DLAB              (config->lcr);
+    /// IER
+    config->received_data_int      = UART_GET_RECEIVED_DATA     (config->ier);
+    config->transmitter_empty_int  = UART_GET_TRANSMITTER_EMPTY (config->ier);
+    config->receiver_line_stat_int = UART_GET_RECEIVER_LINE_STAT(config->ier);
+    config->modem_stat_int         = UART_GET_MODEM_STAT        (config->ier);
+    /// DIV LATCH
+    config->divisor_latch          = UART_GET_DIV_LATCH(config->dlm, config->dll);
 }
 void uart_print_config(uart_config config){
-    printf("Base address: 0x%X\n", config.base_addr);
-    printf("Configuration: 0x%02X\n", config.config);
-    printf("Number of bits per char: %d\n", config.bits_per_char);
-    printf("Number of stop bits: %d\n", config.stop_bits);
-    printf("Parity: ");
+    printf("Base address                                   : 0x%X\n", config.base_addr);
+    printf("    LCR configuration                          : 0x%02X\n", config.lcr);
+    printf("        Number of bits per char                : %d\n", config.bits_per_char);
+    printf("        Number of stop bits                    : %d\n", config.stop_bits);
+    printf("        Parity                                 : ");
     if((config.parity&1) == 0) printf("no parity\n");
     else switch(config.parity){
         case uart_parity_odd : printf("odd parity\n"     ); break;
@@ -75,9 +100,17 @@
         case uart_parity_par0: printf("parity bit is 0\n"); break;
         default              : printf("invalid\n"        ); break;
     }
-    printf("Break control: %d\n", config.break_control);
-    printf("Divisor latch: %d\n", config.divisor_latch);
-    printf("Bit rate: %d\n", UART_BITRATE/config.divisor_latch);
+    printf("    Break control                              : %d\n", config.break_control);
+    printf("    DLAB                                       : %d\n", config.dlab);
+
+    printf("    IER configuration                          : 0x%02X\n", config.ier);
+    printf("        Received data interrupts enabled       : %d\n", config.received_data_int);
+    printf("        Transmitter empty interrupts enabled   : %d\n", config.transmitter_empty_int);
+    printf("        Receiver line status interrupts enabled: %d\n", config.receiver_line_stat_int);
+    printf("        Modem status interrupts enabled        : %d\n", config.modem_stat_int);
+
+    printf("    Divisor latch (DLM & DLL)                  : %d\n", config.divisor_latch);
+    printf("        Bit rate                               : %d\n", UART_BITRATE/config.divisor_latch);
 }
 
 int uart_enable_divisor_latch(int base_addr){
