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


Ignore:
Timestamp:
2010-04-23T11:30:25Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5af21c5
Parents:
a78fa2a
Message:

added device states (usable, invalid, not present, not initialized); add_device driver callback method returns integer (errno) instead of bool

File:
1 edited

Legend:

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

    ra78fa2a rdf747b9c  
    9393static device_class_t serial_dev_class;
    9494
    95 static bool serial_add_device(device_t *dev);
     95static int serial_add_device(device_t *dev);
    9696
    9797/** The serial port device driver's standard operations.
     
    123123static bool serial_pio_enable(device_t *dev)
    124124{
    125         printf(NAME ": serial_pio_enable = %s\n", dev->name);
     125        printf(NAME ": serial_pio_enable %s\n", dev->name);
    126126       
    127127        serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data;
     
    138138static bool serial_dev_probe(device_t *dev)
    139139{
    140         printf(NAME ": serial_dev_probe dev = %s\n", dev->name);
     140        printf(NAME ": serial_dev_probe %s\n", dev->name);
    141141       
    142142        serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data;
     
    166166}
    167167
    168 static bool serial_dev_initialize(device_t *dev)
    169 {
    170         printf(NAME ": serial_dev_initialize dev = %s\n", dev->name);
    171        
     168static int serial_dev_initialize(device_t *dev)
     169{
     170        printf(NAME ": serial_dev_initialize %s\n", dev->name);
     171       
     172        int ret = EOK;
    172173        hw_resource_list_t hw_resources;
    173174        memset(&hw_resources, 0, sizeof(hw_resource_list_t));
     
    176177        serial_dev_data_t *data = create_serial_dev_data();     
    177178        if (NULL == data) {
    178                 return false;
     179                return ENOMEM;
    179180        }
    180181        dev->driver_data = data;
     
    184185        if (dev->parent_phone <= 0) {
    185186                printf(NAME ": failed to connect to the parent driver of the device %s.\n", dev->name);
     187                ret = EPARTY;
    186188                goto failed;
    187189        }
     
    191193        if (!get_hw_resources(dev->parent_phone, &hw_resources)) {
    192194                printf(NAME ": failed to get hw resources for the device %s.\n", dev->name);
     195                ret = EPARTY;
    193196                goto failed;
    194197        }       
     
    211214                        if (res->res.io_range.size < REG_COUNT) {
    212215                                printf(NAME ": i/o range assigned to the device %s is too small.\n", dev->name);
     216                                ret = EPARTY;
    213217                                goto failed;
    214218                        }
     
    221225        if (!irq || !ioport) {
    222226                printf(NAME ": missing hw resource(s) for the device %s.\n", dev->name);
     227                ret = EPARTY;
    223228                goto failed;
    224229        }               
    225230       
    226231        clean_hw_resource_list(&hw_resources);
    227         return true;
     232        return ret;
    228233       
    229234failed:
    230235        serial_dev_cleanup(dev);       
    231236        clean_hw_resource_list(&hw_resources); 
    232         return false;   
    233 }
    234 
    235 static bool serial_add_device(device_t *dev)
    236 {
    237         printf(NAME ": serial_add_device, device handle = %d\n", dev->handle);
    238        
    239         if (!serial_dev_initialize(dev)) {
    240                 return false;
     237        return ret;     
     238}
     239
     240static int serial_add_device(device_t *dev)
     241{
     242        printf(NAME ": serial_add_device %s (handle = %d)\n", dev->name, dev->handle);
     243       
     244        int res = serial_dev_initialize(dev);
     245        if (EOK != res) {
     246                return res;
    241247        }
    242248       
    243249        if (!serial_pio_enable(dev)) {
    244250                serial_dev_cleanup(dev);
    245                 return false;
    246         }
     251                return EADDRNOTAVAIL;
     252        }
     253       
    247254       
    248255        if (!serial_dev_probe(dev)) {
    249256                serial_dev_cleanup(dev);
    250                 return false;
     257                return ENOENT;
    251258        }       
    252259       
    253260        // TODO interrupt and serial port initialization (baud rate etc.)
    254261       
    255         return true;
     262        return EOK;
    256263}
    257264
Note: See TracChangeset for help on using the changeset viewer.