Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ns8250/ns8250.c

    raf6b5157 r77429d3  
    11/*
    22 * Copyright (c) 2010 Lenka Trochtova
    3  * Copyright (c) 2011 Jiri Svoboda
    43 * All rights reserved.
    54 *
     
    5352#include <libarch/ddi.h>
    5453
    55 #include <ddf/driver.h>
    56 #include <ddf/interrupt.h>
     54#include <driver.h>
    5755#include <ops/char_dev.h>
    5856
     
    6967#define MAX_BAUD_RATE 115200
    7068#define DLAB_MASK (1 << 7)
    71 
    72 /** Obtain soft-state structure from function node */
    73 #define NS8250(fnode) ((ns8250_t *) ((fnode)->dev->driver_data))
    74 
    75 /** Obtain soft-state structure from device node */
    76 #define NS8250_FROM_DEV(dnode) ((ns8250_t *) ((dnode)->driver_data))
    7769
    7870/** The number of bits of one data unit send by the serial port. */
     
    9385
    9486/** The driver data for the serial port devices. */
    95 typedef struct ns8250 {
    96         /** DDF device node */
    97         ddf_dev_t *dev;
    98         /** DDF function node */
    99         ddf_fun_t *fun;
     87typedef struct ns8250_dev_data {
    10088        /** Is there any client conntected to the device? */
    10189        bool client_connected;
     
    11098        /** The fibril mutex for synchronizing the access to the device. */
    11199        fibril_mutex_t mutex;
    112 } ns8250_t;
    113 
    114 /** Create per-device soft-state structure.
    115  *
    116  * @return      Pointer to soft-state structure.
    117  */
    118 static ns8250_t *ns8250_new(void)
    119 {
    120         ns8250_t *ns;
    121        
    122         ns = (ns8250_t *) calloc(1, sizeof(ns8250_t));
    123         if (ns == NULL)
    124                 return NULL;
    125        
    126         fibril_mutex_initialize(&ns->mutex);
    127         return ns;
    128 }
    129 
    130 /** Delete soft-state structure.
    131  *
    132  * @param ns    The driver data structure.
    133  */
    134 static void ns8250_delete(ns8250_t *ns)
    135 {
    136         assert(ns != NULL);
    137         free(ns);
     100} ns8250_dev_data_t;
     101
     102/** Create driver data for a device.
     103 *
     104 * @return              The driver data.
     105 */
     106static ns8250_dev_data_t *create_ns8250_dev_data(void)
     107{
     108        ns8250_dev_data_t *data;
     109       
     110        data = (ns8250_dev_data_t *) malloc(sizeof(ns8250_dev_data_t));
     111        if (NULL != data) {
     112                memset(data, 0, sizeof(ns8250_dev_data_t));
     113                fibril_mutex_initialize(&data->mutex);
     114        }
     115        return data;
     116}
     117
     118/** Delete driver data.
     119 *
     120 * @param data          The driver data structure.
     121 */
     122static void delete_ns8250_dev_data(ns8250_dev_data_t *data)
     123{
     124        if (data != NULL)
     125                free(data);
    138126}
    139127
     
    183171/** Read data from the serial port device.
    184172 *
    185  * @param fun           The serial port function
     173 * @param dev           The serial port device.
    186174 * @param buf           The ouput buffer for read data.
    187175 * @param count         The number of bytes to be read.
     
    190178 *                      error number otherwise.
    191179 */
    192 static int ns8250_read(ddf_fun_t *fun, char *buf, size_t count)
    193 {
    194         ns8250_t *ns = NS8250(fun);
     180static int ns8250_read(device_t *dev, char *buf, size_t count)
     181{
    195182        int ret = EOK;
    196        
    197         fibril_mutex_lock(&ns->mutex);
    198         while (!buf_is_empty(&ns->input_buffer) && (size_t)ret < count) {
    199                 buf[ret] = (char)buf_pop_front(&ns->input_buffer);
     183        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     184       
     185        fibril_mutex_lock(&data->mutex);
     186        while (!buf_is_empty(&data->input_buffer) && (size_t)ret < count) {
     187                buf[ret] = (char)buf_pop_front(&data->input_buffer);
    200188                ret++;
    201189        }
    202         fibril_mutex_unlock(&ns->mutex);
     190        fibril_mutex_unlock(&data->mutex);
    203191       
    204192        return ret;
     
    207195/** Write a character to the serial port.
    208196 *
    209  * @param ns            Serial port device
    210  * @param c             The character to be written
    211  */
    212 static inline void ns8250_putchar(ns8250_t *ns, uint8_t c)
    213 {
    214         fibril_mutex_lock(&ns->mutex);
    215         ns8250_write_8(ns->port, c);
    216         fibril_mutex_unlock(&ns->mutex);
     197 * @param data          The serial port device's driver data.
     198 * @param c             The character to be written.
     199 */
     200static inline void ns8250_putchar(ns8250_dev_data_t *data, uint8_t c)
     201{
     202        fibril_mutex_lock(&data->mutex);
     203        ns8250_write_8(data->port, c);
     204        fibril_mutex_unlock(&data->mutex);
    217205}
    218206
    219207/** Write data to the serial port.
    220208 *
    221  * @param fun           The serial port function
    222  * @param buf           The data to be written
    223  * @param count         The number of bytes to be written
    224  * @return              Zero on success
    225  */
    226 static int ns8250_write(ddf_fun_t *fun, char *buf, size_t count)
    227 {
    228         ns8250_t *ns = NS8250(fun);
     209 * @param dev           The serial port device.
     210 * @param buf           The data to be written.
     211 * @param count         The number of bytes to be written.
     212 * @return              Zero on success.
     213 */
     214static int ns8250_write(device_t *dev, char *buf, size_t count)
     215{
     216        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
    229217        size_t idx;
    230218       
    231219        for (idx = 0; idx < count; idx++)
    232                 ns8250_putchar(ns, (uint8_t) buf[idx]);
     220                ns8250_putchar(data, (uint8_t) buf[idx]);
    233221       
    234222        return 0;
    235223}
    236224
    237 static ddf_dev_ops_t ns8250_dev_ops;
     225static device_ops_t ns8250_dev_ops;
    238226
    239227/** The character interface's callbacks. */
     
    243231};
    244232
    245 static int ns8250_add_device(ddf_dev_t *dev);
     233static int ns8250_add_device(device_t *dev);
    246234
    247235/** The serial port device driver's standard operations. */
     
    256244};
    257245
    258 /** Clean up the serial port soft-state
    259  *
    260  * @param ns            Serial port device
    261  */
    262 static void ns8250_dev_cleanup(ns8250_t *ns)
    263 {
    264         if (ns->dev->parent_phone > 0) {
    265                 async_hangup(ns->dev->parent_phone);
    266                 ns->dev->parent_phone = 0;
     246/** Clean up the serial port device structure.
     247 *
     248 * @param dev           The device structure.
     249 */
     250static void ns8250_dev_cleanup(device_t *dev)
     251{
     252        if (dev->driver_data != NULL) {
     253                delete_ns8250_dev_data((ns8250_dev_data_t*) dev->driver_data);
     254                dev->driver_data = NULL;
     255        }
     256       
     257        if (dev->parent_phone > 0) {
     258                ipc_hangup(dev->parent_phone);
     259                dev->parent_phone = 0;
    267260        }
    268261}
     
    270263/** Enable the i/o ports of the device.
    271264 *
    272  * @param ns            Serial port device
    273  * @return              True on success, false otherwise
    274  */
    275 static bool ns8250_pio_enable(ns8250_t *ns)
    276 {
    277         printf(NAME ": ns8250_pio_enable %s\n", ns->dev->name);
     265 * @param dev           The serial port device.
     266 * @return              True on success, false otherwise.
     267 */
     268static bool ns8250_pio_enable(device_t *dev)
     269{
     270        printf(NAME ": ns8250_pio_enable %s\n", dev->name);
     271       
     272        ns8250_dev_data_t *data = (ns8250_dev_data_t *)dev->driver_data;
    278273       
    279274        /* Gain control over port's registers. */
    280         if (pio_enable((void *)(uintptr_t) ns->io_addr, REG_COUNT,
    281             (void **) &ns->port)) {
     275        if (pio_enable((void *)(uintptr_t) data->io_addr, REG_COUNT,
     276            (void **) &data->port)) {
    282277                printf(NAME ": error - cannot gain the port %#" PRIx32 " for device "
    283                     "%s.\n", ns->io_addr, ns->dev->name);
     278                    "%s.\n", data->io_addr, dev->name);
    284279                return false;
    285280        }
     
    290285/** Probe the serial port device for its presence.
    291286 *
    292  * @param ns            Serial port device
    293  * @return              True if the device is present, false otherwise
    294  */
    295 static bool ns8250_dev_probe(ns8250_t *ns)
    296 {
    297         printf(NAME ": ns8250_dev_probe %s\n", ns->dev->name);
    298        
    299         ioport8_t *port_addr = ns->port;
     287 * @param dev           The serial port device.
     288 * @return              True if the device is present, false otherwise.
     289 */
     290static bool ns8250_dev_probe(device_t *dev)
     291{
     292        printf(NAME ": ns8250_dev_probe %s\n", dev->name);
     293       
     294        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     295        ioport8_t *port_addr = data->port;
    300296        bool res = true;
    301297        uint8_t olddata;
     
    314310       
    315311        if (!res)
    316                 printf(NAME ": device %s is not present.\n", ns->dev->name);
     312                printf(NAME ": device %s is not present.\n", dev->name);
    317313       
    318314        return res;
     
    321317/** Initialize serial port device.
    322318 *
    323  * @param ns            Serial port device
    324  * @return              Zero on success, negative error number otherwise
    325  */
    326 static int ns8250_dev_initialize(ns8250_t *ns)
    327 {
    328         printf(NAME ": ns8250_dev_initialize %s\n", ns->dev->name);
     319 * @param dev           The serial port device.
     320 * @return              Zero on success, negative error number otherwise.
     321 */
     322static int ns8250_dev_initialize(device_t *dev)
     323{
     324        printf(NAME ": ns8250_dev_initialize %s\n", dev->name);
    329325       
    330326        int ret = EOK;
     
    333329        memset(&hw_resources, 0, sizeof(hw_resource_list_t));
    334330       
     331        /* Allocate driver data for the device. */
     332        ns8250_dev_data_t *data = create_ns8250_dev_data();
     333        if (data == NULL)
     334                return ENOMEM;
     335        dev->driver_data = data;
     336       
    335337        /* Connect to the parent's driver. */
    336         ns->dev->parent_phone = devman_parent_device_connect(ns->dev->handle,
     338        dev->parent_phone = devman_parent_device_connect(dev->handle,
    337339            IPC_FLAG_BLOCKING);
    338         if (ns->dev->parent_phone < 0) {
     340        if (dev->parent_phone < 0) {
    339341                printf(NAME ": failed to connect to the parent driver of the "
    340                     "device %s.\n", ns->dev->name);
    341                 ret = ns->dev->parent_phone;
     342                    "device %s.\n", dev->name);
     343                ret = dev->parent_phone;
    342344                goto failed;
    343345        }
    344346       
    345347        /* Get hw resources. */
    346         ret = hw_res_get_resource_list(ns->dev->parent_phone, &hw_resources);
     348        ret = hw_res_get_resource_list(dev->parent_phone, &hw_resources);
    347349        if (ret != EOK) {
    348350                printf(NAME ": failed to get hw resources for the device "
    349                     "%s.\n", ns->dev->name);
     351                    "%s.\n", dev->name);
    350352                goto failed;
    351353        }
     
    360362                switch (res->type) {
    361363                case INTERRUPT:
    362                         ns->irq = res->res.interrupt.irq;
     364                        data->irq = res->res.interrupt.irq;
    363365                        irq = true;
    364366                        printf(NAME ": the %s device was asigned irq = 0x%x.\n",
    365                             ns->dev->name, ns->irq);
     367                            dev->name, data->irq);
    366368                        break;
    367369                       
    368370                case IO_RANGE:
    369                         ns->io_addr = res->res.io_range.address;
     371                        data->io_addr = res->res.io_range.address;
    370372                        if (res->res.io_range.size < REG_COUNT) {
    371373                                printf(NAME ": i/o range assigned to the device "
    372                                     "%s is too small.\n", ns->dev->name);
     374                                    "%s is too small.\n", dev->name);
    373375                                ret = ELIMIT;
    374376                                goto failed;
     
    376378                        ioport = true;
    377379                        printf(NAME ": the %s device was asigned i/o address = "
    378                             "0x%x.\n", ns->dev->name, ns->io_addr);
     380                            "0x%x.\n", dev->name, data->io_addr);
    379381                        break;
    380382                       
     
    386388        if (!irq || !ioport) {
    387389                printf(NAME ": missing hw resource(s) for the device %s.\n",
    388                     ns->dev->name);
     390                    dev->name);
    389391                ret = ENOENT;
    390392                goto failed;
     
    395397       
    396398failed:
    397         ns8250_dev_cleanup(ns);
     399        ns8250_dev_cleanup(dev);
    398400        hw_res_clean_resource_list(&hw_resources);
    399401        return ret;
     
    402404/** Enable interrupts on the serial port device.
    403405 *
    404  * Interrupt when data is received
     406 * Interrupt when data is received.
    405407 *
    406408 * @param port          The base address of the serial port device's ports.
    407409 */
    408410static inline void ns8250_port_interrupts_enable(ioport8_t *port)
    409 {
     411{       
    410412        pio_write_8(port + 1, 0x1);     /* Interrupt when data received. */
    411413        pio_write_8(port + 4, 0xB);
     
    414416/** Disable interrupts on the serial port device.
    415417 *
    416  * @param port          The base address of the serial port device's ports
     418 * @param port          The base address of the serial port device's ports.
    417419 */
    418420static inline void ns8250_port_interrupts_disable(ioport8_t *port)
     
    423425/** Enable interrupts for the serial port device.
    424426 *
    425  * @param ns            Serial port device
    426  * @return              Zero on success, negative error number otherwise
    427  */
    428 static int ns8250_interrupt_enable(ns8250_t *ns)
    429 {
     427 * @param dev           The device.
     428 * @return              Zero on success, negative error number otherwise.
     429 */
     430static int ns8250_interrupt_enable(device_t *dev)
     431{
     432        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     433       
    430434        /* Enable interrupt on the serial port. */
    431         ns8250_port_interrupts_enable(ns->port);
     435        ns8250_port_interrupts_enable(data->port);
    432436       
    433437        return EOK;
     
    614618 * Set the default parameters of the serial communication.
    615619 *
    616  * @param ns            Serial port device
    617  */
    618 static void ns8250_initialize_port(ns8250_t *ns)
    619 {
    620         ioport8_t *port = ns->port;
     620 * @param dev           The serial port device.
     621 */
     622static void ns8250_initialize_port(device_t *dev)
     623{
     624        ns8250_dev_data_t *data = (ns8250_dev_data_t *)dev->driver_data;
     625        ioport8_t *port = data->port;
    621626       
    622627        /* Disable interrupts. */
     
    638643 * buffer.
    639644 *
    640  * @param ns            Serial port device
    641  */
    642 static void ns8250_read_from_device(ns8250_t *ns)
    643 {
    644         ioport8_t *port = ns->port;
     645 * @param dev           The serial port device.
     646 */
     647static void ns8250_read_from_device(device_t *dev)
     648{
     649        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     650        ioport8_t *port = data->port;
    645651        bool cont = true;
    646652       
    647653        while (cont) {
    648                 fibril_mutex_lock(&ns->mutex);
     654                fibril_mutex_lock(&data->mutex);
    649655               
    650656                cont = ns8250_received(port);
     
    652658                        uint8_t val = ns8250_read_8(port);
    653659                       
    654                         if (ns->client_connected) {
    655                                 if (!buf_push_back(&ns->input_buffer, val)) {
     660                        if (data->client_connected) {
     661                                if (!buf_push_back(&data->input_buffer, val)) {
    656662                                        printf(NAME ": buffer overflow on "
    657                                             "%s.\n", ns->dev->name);
     663                                            "%s.\n", dev->name);
    658664                                } else {
    659665                                        printf(NAME ": the character %c saved "
    660666                                            "to the buffer of %s.\n",
    661                                             val, ns->dev->name);
     667                                            val, dev->name);
    662668                                }
    663669                        }
    664670                }
    665671               
    666                 fibril_mutex_unlock(&ns->mutex);
     672                fibril_mutex_unlock(&data->mutex);
    667673                fibril_yield();
    668674        }
     
    676682 * @param dev           The serial port device.
    677683 */
    678 static inline void ns8250_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
     684static inline void ns8250_interrupt_handler(device_t *dev, ipc_callid_t iid,
    679685    ipc_call_t *icall)
    680686{
    681         ns8250_read_from_device(NS8250_FROM_DEV(dev));
     687        ns8250_read_from_device(dev);
    682688}
    683689
    684690/** Register the interrupt handler for the device.
    685691 *
    686  * @param ns            Serial port device
    687  */
    688 static inline int ns8250_register_interrupt_handler(ns8250_t *ns)
    689 {
    690         return register_interrupt_handler(ns->dev, ns->irq,
     692 * @param dev           The serial port device.
     693 */
     694static inline int ns8250_register_interrupt_handler(device_t *dev)
     695{
     696        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     697       
     698        return register_interrupt_handler(dev, data->irq,
    691699            ns8250_interrupt_handler, NULL);
    692700}
     
    694702/** Unregister the interrupt handler for the device.
    695703 *
    696  * @param ns            Serial port device
    697  */
    698 static inline int ns8250_unregister_interrupt_handler(ns8250_t *ns)
    699 {
    700         return unregister_interrupt_handler(ns->dev, ns->irq);
     704 * @param dev           The serial port device.
     705 */
     706static inline int ns8250_unregister_interrupt_handler(device_t *dev)
     707{
     708        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
     709       
     710        return unregister_interrupt_handler(dev, data->irq);
    701711}
    702712
     
    707717 * @param dev           The serial port device.
    708718 */
    709 static int ns8250_add_device(ddf_dev_t *dev)
    710 {
    711         ns8250_t *ns = NULL;
    712         ddf_fun_t *fun = NULL;
    713         bool need_cleanup = false;
    714         int rc;
    715        
     719static int ns8250_add_device(device_t *dev)
     720{
    716721        printf(NAME ": ns8250_add_device %s (handle = %d)\n",
    717722            dev->name, (int) dev->handle);
    718723       
    719         /* Allocate soft-state for the device */
    720         ns = ns8250_new();
    721         if (ns == NULL) {
    722                 rc = ENOMEM;
    723                 goto fail;
    724         }
    725        
    726         ns->dev = dev;
    727         dev->driver_data = ns;
    728        
    729         rc = ns8250_dev_initialize(ns);
    730         if (rc != EOK)
    731                 goto fail;
    732        
    733         need_cleanup = true;
    734        
    735         if (!ns8250_pio_enable(ns)) {
    736                 rc = EADDRNOTAVAIL;
    737                 goto fail;
     724        int res = ns8250_dev_initialize(dev);
     725        if (res != EOK)
     726                return res;
     727       
     728        if (!ns8250_pio_enable(dev)) {
     729                ns8250_dev_cleanup(dev);
     730                return EADDRNOTAVAIL;
    738731        }
    739732       
    740733        /* Find out whether the device is present. */
    741         if (!ns8250_dev_probe(ns)) {
    742                 rc = ENOENT;
    743                 goto fail;
     734        if (!ns8250_dev_probe(dev)) {
     735                ns8250_dev_cleanup(dev);
     736                return ENOENT;
    744737        }
    745738       
    746739        /* Serial port initialization (baud rate etc.). */
    747         ns8250_initialize_port(ns);
     740        ns8250_initialize_port(dev);
    748741       
    749742        /* Register interrupt handler. */
    750         if (ns8250_register_interrupt_handler(ns) != EOK) {
     743        if (ns8250_register_interrupt_handler(dev) != EOK) {
    751744                printf(NAME ": failed to register interrupt handler.\n");
    752                 rc = EADDRNOTAVAIL;
    753                 goto fail;
     745                ns8250_dev_cleanup(dev);
     746                return res;
    754747        }
    755748       
    756749        /* Enable interrupt. */
    757         rc = ns8250_interrupt_enable(ns);
    758         if (rc != EOK) {
     750        res = ns8250_interrupt_enable(dev);
     751        if (res != EOK) {
    759752                printf(NAME ": failed to enable the interrupt. Error code = "
    760                     "%d.\n", rc);
    761                 goto fail;
    762         }
    763        
    764         fun = ddf_fun_create(dev, fun_exposed, "a");
    765         if (fun == NULL) {
    766                 printf(NAME ": error creating function.\n");
    767                 goto fail;
     753                    "%d.\n", res);
     754                ns8250_dev_cleanup(dev);
     755                ns8250_unregister_interrupt_handler(dev);
     756                return res;
    768757        }
    769758       
    770759        /* Set device operations. */
    771         fun->ops = &ns8250_dev_ops;
    772         rc = ddf_fun_bind(fun);
    773         if (rc != EOK) {
    774                 printf(NAME ": error binding function.\n");
    775                 goto fail;
    776         }
    777 
    778         ns->fun = fun;
    779        
    780         ddf_fun_add_to_class(fun, "serial");
     760        dev->ops = &ns8250_dev_ops;
     761       
     762        add_device_to_class(dev, "serial");
    781763       
    782764        printf(NAME ": the %s device has been successfully initialized.\n",
     
    784766       
    785767        return EOK;
    786 fail:
    787         if (fun != NULL)
    788                 ddf_fun_destroy(fun);
    789         if (need_cleanup)
    790                 ns8250_dev_cleanup(ns);
    791         if (ns != NULL)
    792                 ns8250_delete(ns);
    793         return rc;
    794768}
    795769
     
    801775 * @param dev           The device.
    802776 */
    803 static int ns8250_open(ddf_fun_t *fun)
    804 {
    805         ns8250_t *data = (ns8250_t *) fun->dev->driver_data;
     777static int ns8250_open(device_t *dev)
     778{
     779        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
    806780        int res;
    807781       
     
    814788        }
    815789        fibril_mutex_unlock(&data->mutex);
    816        
     790
    817791        return res;
    818792}
     
    825799 * @param dev           The device.
    826800 */
    827 static void ns8250_close(ddf_fun_t *fun)
    828 {
    829         ns8250_t *data = (ns8250_t *) fun->dev->driver_data;
     801static void ns8250_close(device_t *dev)
     802{
     803        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
    830804       
    831805        fibril_mutex_lock(&data->mutex);
     
    849823 */
    850824static void
    851 ns8250_get_props(ddf_dev_t *dev, unsigned int *baud_rate, unsigned int *parity,
     825ns8250_get_props(device_t *dev, unsigned int *baud_rate, unsigned int *parity,
    852826    unsigned int *word_length, unsigned int* stop_bits)
    853827{
    854         ns8250_t *data = (ns8250_t *) dev->driver_data;
     828        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
    855829        ioport8_t *port = data->port;
    856830       
     
    876850 * @param stop_bits     The number of stop bits to be used.
    877851 */
    878 static int ns8250_set_props(ddf_dev_t *dev, unsigned int baud_rate,
     852static int ns8250_set_props(device_t *dev, unsigned int baud_rate,
    879853    unsigned int parity, unsigned int word_length, unsigned int stop_bits)
    880854{
     
    883857            stop_bits);
    884858       
    885         ns8250_t *data = (ns8250_t *) dev->driver_data;
     859        ns8250_dev_data_t *data = (ns8250_dev_data_t *) dev->driver_data;
    886860        ioport8_t *port = data->port;
    887861        int ret;
     
    903877 * Configure the parameters of the serial communication.
    904878 */
    905 static void ns8250_default_handler(ddf_fun_t *fun, ipc_callid_t callid,
     879static void ns8250_default_handler(device_t *dev, ipc_callid_t callid,
    906880    ipc_call_t *call)
    907881{
     
    912886        switch (method) {
    913887        case SERIAL_GET_COM_PROPS:
    914                 ns8250_get_props(fun->dev, &baud_rate, &parity, &word_length,
     888                ns8250_get_props(dev, &baud_rate, &parity, &word_length,
    915889                    &stop_bits);
    916                 async_answer_4(callid, EOK, baud_rate, parity, word_length,
     890                ipc_answer_4(callid, EOK, baud_rate, parity, word_length,
    917891                    stop_bits);
    918892                break;
     
    923897                word_length = IPC_GET_ARG3(*call);
    924898                stop_bits = IPC_GET_ARG4(*call);
    925                 ret = ns8250_set_props(fun->dev, baud_rate, parity, word_length,
     899                ret = ns8250_set_props(dev, baud_rate, parity, word_length,
    926900                    stop_bits);
    927                 async_answer_0(callid, ret);
     901                ipc_answer_0(callid, ret);
    928902                break;
    929903               
    930904        default:
    931                 async_answer_0(callid, ENOTSUP);
     905                ipc_answer_0(callid, ENOTSUP);
    932906        }
    933907}
     
    951925        printf(NAME ": HelenOS serial port driver\n");
    952926        ns8250_init();
    953         return ddf_driver_main(&ns8250_driver);
     927        return driver_main(&ns8250_driver);
    954928}
    955929
Note: See TracChangeset for help on using the changeset viewer.