Changeset 1b93658 in mainline


Ignore:
Timestamp:
2011-11-14T11:08:19Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c885a21
Parents:
85c4cc45
Message:

isa: Add mutex to guard access to DMA controller.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/isa/dma_controller.c

    r85c4cc45 r1b93658  
    3535#include <bool.h>
    3636#include <errno.h>
     37#include <fibril_synch.h>
    3738#include <ddi.h> /* pio_enable */
    3839#include <libarch/ddi.h> /* pio_write */
     
    265266                return EINVAL;
    266267
     268        static fibril_mutex_t guard = FIBRIL_MUTEX_INITIALIZER(guard);
     269
     270        fibril_mutex_lock(&guard);
     271
    267272        if (!controller_8237.initialized)
    268273                dma_controller_init(&controller_8237);
    269274
    270         if (!controller_8237.initialized)
     275        if (!controller_8237.initialized) {
     276                fibril_mutex_unlock(&guard);
    271277                return EIO;
     278        }
    272279
    273280        /* 16 bit transfers are a bit special */
     
    275282        if (channel > 4) {
    276283                /* Size must be aligned to 16 bits */
    277                 if ((size & 1) != 0)
     284                if ((size & 1) != 0) {
     285                        fibril_mutex_unlock(&guard);
    278286                        return EINVAL;
     287                }
    279288                size >>= 1;
    280289                /* Address is fun: lower 16bits need to be shifted by 1 */
     
    339348        pio_write_8(dma_channel.single_mask_address, value);
    340349
     350        fibril_mutex_unlock(&guard);
     351
    341352        return EOK;
    342353}
Note: See TracChangeset for help on using the changeset viewer.