Changeset cfe7716 in mainline for uspace/srv/drivers/serial/serial.c


Ignore:
Timestamp:
2010-04-29T14:13:28Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7f8b581
Parents:
953bc1ef
Message:

backup (unstable)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/drivers/serial/serial.c

    r953bc1ef rcfe7716  
    238238}
    239239
     240static int serial_interrupt_enable(device_t *dev)
     241{
     242        serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data;
     243       
     244        // enable interrupt globally   
     245        enable_interrupt(data->irq);
     246       
     247        // enable interrupt on the serial port
     248        pio_write_8(data->port + 1 , 0x01);   // Interrupt when data received
     249        pio_write_8(data->port + 4, 0x0B);
     250       
     251        return EOK;
     252}
     253
     254static void serial_initialize_port(device_t *dev)
     255{
     256        serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data;
     257        ioport8_t *port = data->port;
     258       
     259        pio_write_8(port + 1, 0x00);    // Disable all interrupts
     260        pio_write_8(port + 3, 0x80);    // Enable DLAB (set baud rate divisor)
     261        pio_write_8(port + 0, 0x60);    // Set divisor to 96 (lo byte) 1200 baud
     262        pio_write_8(port + 1, 0x00);    //                   (hi byte)
     263        pio_write_8(port + 3, 0x07);    // 8 bits, no parity, two stop bits
     264        pio_write_8(port + 2, 0xC7);    // Enable FIFO, clear them, with 14-byte threshold
     265        pio_write_8(port + 4, 0x0B);    // RTS/DSR set (Request to Send and Data Terminal Ready lines enabled),
     266                                                                        // Aux Output2 set - needed for interrupts     
     267}
     268
    240269static int serial_add_device(device_t *dev)
    241270{
     
    250279                serial_dev_cleanup(dev);
    251280                return EADDRNOTAVAIL;
    252         }
    253        
    254        
     281        }       
     282       
     283        // find out whether the device is present
    255284        if (!serial_dev_probe(dev)) {
    256285                serial_dev_cleanup(dev);
     
    258287        }       
    259288       
    260         // TODO interrupt and serial port initialization (baud rate etc.)
     289        // serial port initialization (baud rate etc.)
     290        serial_initialize_port(dev);
     291       
     292        // TODO register interrupt handler
     293       
     294        // enable interrupt
     295        if (0 != (res = serial_interrupt_enable(dev))) {
     296                serial_dev_cleanup(dev);
     297                return res;
     298        }               
    261299       
    262300        return EOK;
Note: See TracChangeset for help on using the changeset viewer.