Changeset 46321fb in mainline for kernel/arch/ia64/src/ddi/ddi.c


Ignore:
Timestamp:
2008-11-25T20:22:04Z (15 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
83d9712
Parents:
14c331a
Message:

IA64: Userspace I/O support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/ddi/ddi.c

    r14c331a r46321fb  
    11/*
    2  * Copyright (c) 2006 Jakub Jermar
     2 * Copyright (c) 2006 Jakub Jermar, Jakub vana
    33 * All rights reserved.
    44 *
     
    3636#include <proc/task.h>
    3737#include <arch/types.h>
     38#include <mm/slab.h>
     39#include <errno.h>
     40
     41#define IO_MEMMAP_PAGES 16384
     42#define PORTS_PER_PAGE 4
    3843
    3944/** Enable I/O space range for task.
     
    4954int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size)
    5055{
     56
     57        if(!task->arch.iomap)
     58        {
     59                uint8_t *map;
     60                task->arch.iomap=malloc(sizeof(bitmap_t),0);
     61                map=malloc(BITS2BYTES(IO_MEMMAP_PAGES),0);
     62                if(!map)
     63                        return ENOMEM;
     64                bitmap_initialize(task->arch.iomap,map,IO_MEMMAP_PAGES);       
     65                bitmap_clear_range(task->arch.iomap,0,IO_MEMMAP_PAGES);
     66        }
     67       
     68        uintptr_t iopage = ioaddr / PORTS_PER_PAGE;
     69        size = ALIGN_UP (size+ioaddr-4*iopage,PORTS_PER_PAGE);
     70        bitmap_set_range(task->arch.iomap,iopage,size/4);
     71
     72
    5173        return 0;
    5274}
Note: See TracChangeset for help on using the changeset viewer.