Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/ddi.c

    r9d58539 racc0efb  
    3434
    3535#include <assert.h>
     36#include <atomic.h>
    3637#include <unistd.h>
     38#include <stdio.h>
    3739#include <errno.h>
    3840#include <sys/types.h>
     
    4749#include "private/libc.h"
    4850
     51
    4952/** Return unique device number.
    5053 *
     
    120123 *
    121124 */
    122 int iospace_enable(task_id_t id, void *ioaddr, unsigned long size)
    123 {
    124         ddi_ioarg_t arg;
    125        
    126         arg.task_id = id;
    127         arg.ioaddr = ioaddr;
    128         arg.size = size;
     125static int iospace_enable(task_id_t id, void *ioaddr, size_t size)
     126{
     127        const ddi_ioarg_t arg = {
     128                .task_id = id,
     129                .ioaddr = ioaddr,
     130                .size = size
     131        };
    129132       
    130133        return __SYSCALL1(SYS_IOSPACE_ENABLE, (sysarg_t) &arg);
     
    136139 * @param size     Size of the I/O region.
    137140 * @param virt     Virtual address for application's
    138  *                 PIO operations.
     141 *                 PIO operations. Can be NULL for PMIO.
    139142 *
    140143 * @return EOK on success.
     
    146149#ifdef IO_SPACE_BOUNDARY
    147150        if (pio_addr < IO_SPACE_BOUNDARY) {
    148                 *virt = pio_addr;
     151                if (virt)
     152                        *virt = pio_addr;
    149153                return iospace_enable(task_get_id(), pio_addr, size);
    150154        }
    151155#endif
    152        
     156        if (!virt)
     157                return EINVAL;
     158
    153159        void *phys_frame =
    154160            (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
     
    166172}
    167173
     174void pio_write_8(ioport8_t *reg, uint8_t val)
     175{
     176        pio_trace_log(reg, val, true);
     177        arch_pio_write_8(reg, val);
     178}
     179
     180void pio_write_16(ioport16_t *reg, uint16_t val)
     181{
     182        pio_trace_log(reg, val, true);
     183        arch_pio_write_16(reg, val);
     184}
     185
     186void pio_write_32(ioport32_t *reg, uint32_t val)
     187{
     188        pio_trace_log(reg, val, true);
     189        arch_pio_write_32(reg, val);
     190}
     191
     192uint8_t pio_read_8(ioport8_t *reg)
     193{
     194        const uint8_t val = arch_pio_read_8(reg);
     195        pio_trace_log(reg, val, false);
     196        return val;
     197}
     198
     199uint16_t pio_read_16(ioport16_t *reg)
     200{
     201        const uint16_t val = arch_pio_read_16(reg);
     202        pio_trace_log(reg, val, false);
     203        return val;
     204}
     205
     206uint32_t pio_read_32(ioport32_t *reg)
     207{
     208        const uint32_t val = arch_pio_read_32(reg);
     209        pio_trace_log(reg, val, false);
     210        return val;
     211}
     212
    168213/** Register IRQ notification.
    169214 *
Note: See TracChangeset for help on using the changeset viewer.