Changeset 69146b93 in mainline for uspace/lib/c


Ignore:
Timestamp:
2012-11-26T19:02:45Z (13 years ago)
Author:
Adam Hraska <adam.hraska+hos@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
04552324
Parents:
5d230a30 (diff), 7462674 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merged mainline,1723.

Location:
uspace/lib/c
Files:
1 added
17 edited
2 moved

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/Makefile

    r5d230a30 r69146b93  
    141141        generic/net/socket_client.c \
    142142        generic/net/socket_parse.c \
     143        generic/stack.c \
    143144        generic/stacktrace.c \
    144145        generic/arg_parse.c \
    145146        generic/sort.c \
    146147        generic/stats.c \
    147         generic/assert.c
     148        generic/assert.c \
     149        generic/pio_trace.c
    148150
    149151ifeq ($(CONFIG_RTLD),y)
  • uspace/lib/c/arch/abs32le/include/ddi.h

    r5d230a30 r69146b93  
    3636#include <libarch/types.h>
    3737
    38 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     38static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    3939{
    4040        *port = v;
    4141}
    4242
    43 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     43static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    4444{
    4545        *port = v;
    4646}
    4747
    48 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     48static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    4949{
    5050        *port = v;
    5151}
    5252
    53 static inline uint8_t pio_read_8(ioport8_t *port)
     53static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    5454{
    5555        return *port;
    5656}
    5757
    58 static inline uint16_t pio_read_16(ioport16_t *port)
     58static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    5959{
    6060        return *port;
    6161}
    6262
    63 static inline uint32_t pio_read_32(ioport32_t *port)
     63static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    6464{
    6565        return *port;
  • uspace/lib/c/arch/arm32/Makefile.common

    r5d230a30 r69146b93  
    2929
    3030BASE_LIBS += $(LIBSOFTFLOAT_PREFIX)/libsoftfloat.a
    31 GCC_CFLAGS += -ffixed-r9 -mtp=soft -fno-omit-frame-pointer -march=armv4 -mapcs-frame
     31GCC_CFLAGS += -ffixed-r9 -mtp=soft -fno-omit-frame-pointer -mapcs-frame -march=$(subst _,-,$(PROCESSOR))
    3232
    3333ENDIANESS = LE
  • uspace/lib/c/arch/arm32/include/ddi.h

    r5d230a30 r69146b93  
    3737#include <libarch/types.h>
    3838
    39 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     39static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    4040{
    4141        *port = v;
    4242}
    4343
    44 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     44static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    4545{
    4646        *port = v;
    4747}
    4848
    49 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     49static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    5050{
    5151        *port = v;
    5252}
    5353
    54 static inline uint8_t pio_read_8(ioport8_t *port)
     54static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    5555{
    5656        return *port;
    5757}
    5858
    59 static inline uint16_t pio_read_16(ioport16_t *port)
     59static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    6060{
    6161        return *port;
    6262}
    6363
    64 static inline uint32_t pio_read_32(ioport32_t *port)
     64static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    6565{
    6666        return *port;
  • uspace/lib/c/arch/ia32/include/ddi.h

    r5d230a30 r69146b93  
    3939#define IO_SPACE_BOUNDARY  ((void *) (64 * 1024))
    4040
    41 static inline uint8_t pio_read_8(ioport8_t *port)
     41static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    4242{
    4343        if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
     
    5555}
    5656
    57 static inline uint16_t pio_read_16(ioport16_t *port)
     57static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    5858{
    5959        if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
     
    7171}
    7272
    73 static inline uint32_t pio_read_32(ioport32_t *port)
     73static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    7474{
    7575        if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
     
    8787}
    8888
    89 static inline void pio_write_8(ioport8_t *port, uint8_t val)
     89static inline void arch_pio_write_8(ioport8_t *port, uint8_t val)
    9090{
    9191        if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
     
    9898}
    9999
    100 static inline void pio_write_16(ioport16_t *port, uint16_t val)
     100static inline void arch_pio_write_16(ioport16_t *port, uint16_t val)
    101101{
    102102        if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
     
    109109}
    110110
    111 static inline void pio_write_32(ioport32_t *port, uint32_t val)
     111static inline void arch_pio_write_32(ioport32_t *port, uint32_t val)
    112112{
    113113        if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
  • uspace/lib/c/arch/ia64/include/ddi.h

    r5d230a30 r69146b93  
    5050            (ia64_iospace_address = get_ia64_iospace_address()))
    5151
    52 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     52static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    5353{
    5454        if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
     
    6565}
    6666
    67 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     67static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    6868{
    6969        if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
     
    8080}
    8181
    82 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     82static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    8383{
    8484        if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
     
    9595}
    9696
    97 static inline uint8_t pio_read_8(ioport8_t *port)
     97static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    9898{
    9999        uint8_t v;
     
    115115}
    116116
    117 static inline uint16_t pio_read_16(ioport16_t *port)
     117static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    118118{
    119119        uint16_t v;
     
    135135}
    136136
    137 static inline uint32_t pio_read_32(ioport32_t *port)
     137static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    138138{
    139139        uint32_t v;
  • uspace/lib/c/arch/ia64/src/ddi.c

    r5d230a30 r69146b93  
     1/*
     2 * Copyright (c) 2006 Martin Decky
     3 * All rights reserved.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 *
     9 * - Redistributions of source code must retain the above copyright
     10 *   notice, this list of conditions and the following disclaimer.
     11 * - Redistributions in binary form must reproduce the above copyright
     12 *   notice, this list of conditions and the following disclaimer in the
     13 *   documentation and/or other materials provided with the distribution.
     14 * - The name of the author may not be used to endorse or promote products
     15 *   derived from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
    128#include <libarch/ddi.h>
    229#include <sysinfo.h>
     
    1239        return addr;
    1340}
    14 
  • uspace/lib/c/arch/mips32/include/ddi.h

    r5d230a30 r69146b93  
    3737#include <libarch/types.h>
    3838
    39 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     39static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    4040{
    4141        *port = v;
    4242}
    4343
    44 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     44static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    4545{
    4646        *port = v;
    4747}
    4848
    49 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     49static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    5050{
    5151        *port = v;
    5252}
    5353
    54 static inline uint8_t pio_read_8(ioport8_t *port)
     54static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    5555{
    5656        return *port;
    5757}
    5858
    59 static inline uint16_t pio_read_16(ioport16_t *port)
     59static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    6060{
    6161        return *port;
    6262}
    6363
    64 static inline uint32_t pio_read_32(ioport32_t *port)
     64static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    6565{
    6666        return *port;
  • uspace/lib/c/arch/mips64/include/ddi.h

    r5d230a30 r69146b93  
    3737#include <libarch/types.h>
    3838
    39 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     39static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    4040{
    4141        *port = v;
    4242}
    4343
    44 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     44static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    4545{
    4646        *port = v;
    4747}
    4848
    49 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     49static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    5050{
    5151        *port = v;
    5252}
    5353
    54 static inline uint8_t pio_read_8(ioport8_t *port)
     54static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    5555{
    5656        return *port;
    5757}
    5858
    59 static inline uint16_t pio_read_16(ioport16_t *port)
     59static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    6060{
    6161        return *port;
    6262}
    6363
    64 static inline uint32_t pio_read_32(ioport32_t *port)
     64static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    6565{
    6666        return *port;
  • uspace/lib/c/arch/ppc32/include/ddi.h

    r5d230a30 r69146b93  
    3737#include <libarch/types.h>
    3838
    39 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     39static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    4040{
    4141        *port = v;
    4242}
    4343
    44 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     44static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    4545{
    4646        *port = v;
    4747}
    4848
    49 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     49static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    5050{
    5151        *port = v;
    5252}
    5353
    54 static inline uint8_t pio_read_8(ioport8_t *port)
     54static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    5555{
    5656        return *port;
    5757}
    5858
    59 static inline uint16_t pio_read_16(ioport16_t *port)
     59static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    6060{
    6161        return *port;
    6262}
    6363
    64 static inline uint32_t pio_read_32(ioport32_t *port)
     64static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    6565{
    6666        return *port;
  • uspace/lib/c/arch/sparc64/include/ddi.h

    r5d230a30 r69146b93  
    4545}
    4646
    47 static inline void pio_write_8(ioport8_t *port, uint8_t v)
     47static inline void arch_pio_write_8(ioport8_t *port, uint8_t v)
    4848{
    4949        *port = v;
     
    5151}
    5252
    53 static inline void pio_write_16(ioport16_t *port, uint16_t v)
     53static inline void arch_pio_write_16(ioport16_t *port, uint16_t v)
    5454{
    5555        *port = v;
     
    5757}
    5858
    59 static inline void pio_write_32(ioport32_t *port, uint32_t v)
     59static inline void arch_pio_write_32(ioport32_t *port, uint32_t v)
    6060{
    6161        *port = v;
     
    6363}
    6464
    65 static inline uint8_t pio_read_8(ioport8_t *port)
     65static inline uint8_t arch_pio_read_8(const ioport8_t *port)
    6666{
    6767        uint8_t rv;
     
    7373}
    7474
    75 static inline uint16_t pio_read_16(ioport16_t *port)
     75static inline uint16_t arch_pio_read_16(const ioport16_t *port)
    7676{
    7777        uint16_t rv;
     
    8383}
    8484
    85 static inline uint32_t pio_read_32(ioport32_t *port)
     85static inline uint32_t arch_pio_read_32(const ioport32_t *port)
    8686{
    8787        uint32_t rv;
  • uspace/lib/c/generic/ddi.c

    r5d230a30 r69146b93  
    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        }
     155#else
     156        (void) iospace_enable;
    151157#endif
    152        
     158        if (!virt)
     159                return EINVAL;
     160
    153161        void *phys_frame =
    154162            (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
     
    166174}
    167175
     176void pio_write_8(ioport8_t *reg, uint8_t val)
     177{
     178        pio_trace_log(reg, val, true);
     179        arch_pio_write_8(reg, val);
     180}
     181
     182void pio_write_16(ioport16_t *reg, uint16_t val)
     183{
     184        pio_trace_log(reg, val, true);
     185        arch_pio_write_16(reg, val);
     186}
     187
     188void pio_write_32(ioport32_t *reg, uint32_t val)
     189{
     190        pio_trace_log(reg, val, true);
     191        arch_pio_write_32(reg, val);
     192}
     193
     194uint8_t pio_read_8(const ioport8_t *reg)
     195{
     196        const uint8_t val = arch_pio_read_8(reg);
     197        pio_trace_log(reg, val, false);
     198        return val;
     199}
     200
     201uint16_t pio_read_16(const ioport16_t *reg)
     202{
     203        const uint16_t val = arch_pio_read_16(reg);
     204        pio_trace_log(reg, val, false);
     205        return val;
     206}
     207
     208uint32_t pio_read_32(const ioport32_t *reg)
     209{
     210        const uint32_t val = arch_pio_read_32(reg);
     211        pio_trace_log(reg, val, false);
     212        return val;
     213}
     214
    168215/** Register IRQ notification.
    169216 *
  • uspace/lib/c/generic/fibril.c

    r5d230a30 r69146b93  
    3737#include <fibril.h>
    3838#include <thread.h>
     39#include <stack.h>
    3940#include <tls.h>
    4041#include <malloc.h>
     42#include <abi/mm/as.h>
     43#include <as.h>
    4144#include <unistd.h>
    4245#include <stdio.h>
     
    4649#include <assert.h>
    4750#include <async.h>
    48 
    49 #ifndef FIBRIL_INITIAL_STACK_PAGES_NO
    50         #define FIBRIL_INITIAL_STACK_PAGES_NO  1
    51 #endif
    5251
    5352/**
     
    195194                                         * stack member filled.
    196195                                         */
    197                                         free(stack);
     196                                        as_area_destroy(stack);
    198197                                }
    199198                                fibril_teardown(srcf->clean_after_me);
     
    269268                return 0;
    270269       
    271         fibril->stack =
    272             (char *) malloc(FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize());
    273         if (!fibril->stack) {
     270        size_t stack_size = stack_size_get();
     271        fibril->stack = as_area_create((void *) -1, stack_size,
     272            AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
     273            AS_AREA_LATE_RESERVE);
     274        if (fibril->stack == (void *) -1) {
    274275                fibril_teardown(fibril);
    275276                return 0;
     
    281282        context_save(&fibril->ctx);
    282283        context_set(&fibril->ctx, FADDR(fibril_main), fibril->stack,
    283             FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize(), fibril->tcb);
     284            stack_size, fibril->tcb);
    284285
    285286        return (fid_t) fibril;
     
    298299        fibril_t *fibril = (fibril_t *) fid;
    299300       
    300         free(fibril->stack);
     301        as_area_destroy(fibril->stack);
    301302        fibril_teardown(fibril);
    302303}
  • uspace/lib/c/generic/malloc.c

    r5d230a30 r69146b93  
    289289        size_t asize = ALIGN_UP(size, PAGE_SIZE);
    290290        void *astart = as_area_create(AS_AREA_ANY, asize,
    291             AS_AREA_WRITE | AS_AREA_READ);
     291            AS_AREA_WRITE | AS_AREA_READ | AS_AREA_CACHEABLE);
    292292        if (astart == AS_MAP_FAILED)
    293293                return false;
  • uspace/lib/c/generic/stack.c

    r5d230a30 r69146b93  
    11/*
    2  * Copyright (c) 2011 Martin Sucha
     2 * Copyright (c) 2012 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libext2
     29/** @addtogroup libc
    3030 * @{
    3131 */
    32 /**
    33  * @file
     32/** @file
    3433 */
    3534
    36 #ifndef LIBEXT2_LIBEXT2_BLOCK_GROUP_H_
    37 #define LIBEXT2_LIBEXT2_BLOCK_GROUP_H_
     35#include <stack.h>
     36#include <sysinfo.h>
    3837
    39 #include <block.h>
     38size_t stack_size_get(void)
     39{
     40        static sysarg_t stack_size = 0;
    4041
    41 typedef struct ext2_block_group {
    42         uint32_t block_bitmap_block; // Block ID for block bitmap
    43         uint32_t inode_bitmap_block; // Block ID for inode bitmap
    44         uint32_t inode_table_first_block; // Block ID of first block of inode table
    45         uint16_t free_block_count; // Count of free blocks
    46         uint16_t free_inode_count; // Count of free inodes
    47         uint16_t directory_inode_count; // Number of inodes allocated to directories
    48 } ext2_block_group_t;
     42        if (!stack_size)
     43                sysinfo_get_value("default.stack_size", &stack_size);
    4944
    50 typedef struct ext2_block_group_ref {
    51         block_t *block; // Reference to a block containing this block group descr
    52         ext2_block_group_t *block_group;
    53 } ext2_block_group_ref_t;
    54 
    55 #define EXT2_BLOCK_GROUP_DESCRIPTOR_SIZE 32
    56 
    57 extern uint32_t ext2_block_group_get_block_bitmap_block(ext2_block_group_t *);
    58 extern uint32_t ext2_block_group_get_inode_bitmap_block(ext2_block_group_t *);
    59 extern uint32_t ext2_block_group_get_inode_table_first_block(ext2_block_group_t *);
    60 extern uint16_t ext2_block_group_get_free_block_count(ext2_block_group_t *);
    61 extern uint16_t ext2_block_group_get_free_inode_count(ext2_block_group_t *);
    62 extern uint16_t ext2_block_group_get_directory_inode_count(ext2_block_group_t *);
    63 
    64 extern void     ext2_block_group_set_free_block_count(ext2_block_group_t *, uint16_t);
    65 
    66 #endif
     45        return (size_t) stack_size;
     46}
    6747
    6848/** @}
  • uspace/lib/c/generic/thread.c

    r5d230a30 r69146b93  
    3939#include <abi/proc/uarg.h>
    4040#include <fibril.h>
     41#include <stack.h>
    4142#include <str.h>
    4243#include <async.h>
     
    4445#include <as.h>
    4546#include "private/thread.h"
    46 
    47 #ifndef THREAD_INITIAL_STACK_PAGES
    48         #define THREAD_INITIAL_STACK_PAGES  2
    49 #endif
    5047
    5148/** Main thread function.
     
    10198                return ENOMEM;
    10299       
    103         size_t stack_size = getpagesize() * THREAD_INITIAL_STACK_PAGES;
     100        size_t stack_size = stack_size_get();
    104101        void *stack = as_area_create(AS_AREA_ANY, stack_size,
    105             AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE);
     102            AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
     103            AS_AREA_LATE_RESERVE);
    106104        if (stack == AS_MAP_FAILED) {
    107105                free(uarg);
  • uspace/lib/c/include/ddi.h

    r5d230a30 r69146b93  
    3636#define LIBC_DDI_H_
    3737
     38#include <bool.h>
    3839#include <sys/types.h>
     40#include <sys/time.h>
    3941#include <abi/ddi/irq.h>
    4042#include <task.h>
     
    5052extern int dmamem_unmap_anonymous(void *);
    5153
    52 extern int iospace_enable(task_id_t, void *, unsigned long);
    5354extern int pio_enable(void *, size_t, void **);
     55
     56typedef void (*trace_fnc)(const volatile void *place, uint32_t val,
     57    volatile void* base, size_t size, void *data, bool write);
     58
     59extern int pio_trace_enable(void *, size_t, trace_fnc, void *);
     60extern void pio_trace_log(const volatile void *, uint32_t val, bool write);
     61extern void pio_trace_disable(void *);
     62
     63extern void pio_write_8(ioport8_t *, uint8_t);
     64extern void pio_write_16(ioport16_t *, uint16_t);
     65extern void pio_write_32(ioport32_t *, uint32_t);
     66
     67extern uint8_t pio_read_8(const ioport8_t *);
     68extern uint16_t pio_read_16(const ioport16_t *);
     69extern uint32_t pio_read_32(const ioport32_t *);
     70
     71static inline uint8_t pio_change_8(
     72    ioport8_t *reg, uint8_t val, uint8_t mask, useconds_t delay)
     73{
     74        uint8_t v = pio_read_8(reg);
     75        udelay(delay);
     76        pio_write_8(reg, (v & ~mask) | val);
     77        return v;
     78}
     79
     80static inline uint16_t pio_change_16(
     81    ioport16_t *reg, uint16_t val, uint16_t mask, useconds_t delay)
     82{
     83        uint16_t v = pio_read_16(reg);
     84        udelay(delay);
     85        pio_write_16(reg, (v & ~mask) | val);
     86        return v;
     87}
     88
     89static inline uint32_t pio_change_32(
     90    ioport32_t *reg, uint32_t val, uint32_t mask, useconds_t delay)
     91{
     92        uint32_t v = pio_read_32(reg);
     93        udelay(delay);
     94        pio_write_32(reg, (v & ~mask) | val);
     95        return v;
     96}
     97
     98static inline uint8_t pio_set_8(ioport8_t *r, uint8_t v, useconds_t d)
     99{
     100        return pio_change_8(r, v, 0, d);
     101}
     102static inline uint16_t pio_set_16(ioport16_t *r, uint16_t v, useconds_t d)
     103{
     104        return pio_change_16(r, v, 0, d);
     105}
     106static inline uint32_t pio_set_32(ioport32_t *r, uint32_t v, useconds_t d)
     107{
     108        return pio_change_32(r, v, 0, d);
     109}
     110
     111static inline uint8_t pio_clear_8(ioport8_t *r, uint8_t v, useconds_t d)
     112{
     113        return pio_change_8(r, 0, v, d);
     114}
     115static inline uint16_t pio_clear_16(ioport16_t *r, uint16_t v, useconds_t d)
     116{
     117        return pio_change_16(r, 0, v, d);
     118}
     119static inline uint32_t pio_clear_32(ioport32_t *r, uint32_t v, useconds_t d)
     120{
     121        return pio_change_32(r, 0, v, d);
     122}
    54123
    55124extern int irq_register(int, int, int, irq_code_t *);
  • uspace/lib/c/include/macros.h

    r5d230a30 r69146b93  
    6262#endif
    6363
     64#define _paddname(line) PADD_ ## line ## __
     65#define _padd(width, line) uint ## width ## _t _paddname(line)
     66#define PADD32 _padd(32, __LINE__)
     67#define PADD16 _padd(16, __LINE__)
     68#define PADD8 _padd(8, __LINE__)
     69
    6470/** @}
    6571 */
  • uspace/lib/c/include/stack.h

    r5d230a30 r69146b93  
    11/*
    2  * Copyright (c) 2011 Martin Sucha
     2 * Copyright (c) 2012 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libext2
     29/** @addtogroup libc
    3030 * @{
    3131 */
    32 /**
    33  * @file
     32/** @file
    3433 */
    3534
    36 #ifndef LIBEXT2_LIBEXT2_H_
    37 #define LIBEXT2_LIBEXT2_H_
     35#ifndef LIBC_STACK_H_
     36#define LIBC_STACK_H_
    3837
    39 #include "libext2_superblock.h"
    40 #include "libext2_block_group.h"
    41 #include "libext2_inode.h"
    42 #include "libext2_filesystem.h"
    43 #include "libext2_directory.h"
     38#include <libarch/types.h>
     39
     40extern size_t stack_size_get(void);
    4441
    4542#endif
Note: See TracChangeset for help on using the changeset viewer.