Changeset 1ae8f2b in mainline


Ignore:
Timestamp:
2009-03-03T22:56:33Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9cd98796
Parents:
06f96234
Message:

PIO functions for uspace.

Location:
uspace/lib/libc
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/arch/ia32/include/ddi.h

    r06f96234 r1ae8f2b  
    3434#define LIBC_ia32_DDI_H_
    3535
     36#include <sys/types.h>
     37#include <libarch/types.h>
     38
    3639#define IO_SPACE_BOUNDARY       ((void *) (64 * 1024))
    3740
    38 static inline void outb(int16_t port, uint8_t b)
    39 {
    40         asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port));
    41 }
    42 
    43 static inline void outw(int16_t port, int16_t w)
    44 {
    45         asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port));
    46 }
    47 
    48 static inline void outl(int16_t port, uint32_t l)
    49 {
    50         asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port));
    51 }
    52 
    53 static inline uint8_t inb(int16_t port)
     41static inline uint8_t pio_read_8(ioport8_t *port)
    5442{
    5543        uint8_t val;
    56 
    57         asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port));
     44       
     45        asm volatile (
     46                "inb %w[port], %b[val]\n"
     47                : [val] "=a" (val)
     48                : [port] "d" (port)
     49        );
     50       
    5851        return val;
    5952}
    6053
    61 static inline int16_t inw(int16_t port)
     54static inline uint16_t pio_read_16(ioport16_t *port)
    6255{
    63         int16_t val;
    64 
    65         asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port));
     56        uint16_t val;
     57       
     58        asm volatile (
     59                "inw %w[port], %w[val]\n"
     60                : [val] "=a" (val)
     61                : [port] "d" (port)
     62        );
     63       
    6664        return val;
    6765}
    6866
    69 static inline uint32_t inl(int16_t port)
     67static inline uint32_t pio_read_32(ioport32_t *port)
    7068{
    7169        uint32_t val;
    72 
    73         asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port));
     70       
     71        asm volatile (
     72                "inl %w[port], %[val]\n"
     73                : [val] "=a" (val)
     74                : [port] "d" (port)
     75        );
     76       
    7477        return val;
    7578}
    7679
     80static inline void pio_write_8(ioport8_t *port, uint8_t val)
     81{
     82        asm volatile (
     83                "outb %b[val], %w[port]\n"
     84                :: [val] "a" (val), [port] "d" (port)
     85        );
     86}
     87
     88static inline void pio_write_16(ioport16_t *port, uint16_t val)
     89{
     90        asm volatile (
     91                "outw %w[val], %w[port]\n"
     92                :: [val] "a" (val), [port] "d" (port)
     93        );
     94}
     95
     96static inline void pio_write_32(ioport32_t *port, uint32_t val)
     97{
     98        asm volatile (
     99                "outl %[val], %w[port]\n"
     100                :: [val] "a" (val), [port] "d" (port)
     101        );
     102}
     103
    77104#endif
  • uspace/lib/libc/arch/ia64/include/ddi.h

    r06f96234 r1ae8f2b  
    11/*
    2  * Copyright (c) 2005 Jakub Jermar, Jakub Vana
     2 * Copyright (c) 2005 Jakub Vana
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup ia64   
     29/** @addtogroup libcia64       
    3030 * @{
    3131 */
     
    3636#define LIBC_ia64_DDI_H_
    3737
     38#include <sys/types.h>
    3839#include <libarch/types.h>
    3940
    40 typedef uint64_t ioport_t;
     41#define IO_SPACE_BOUNDARY       (64 * 1024)
    4142
    4243uint64_t get_ia64_iospace_address(void);
     
    4445extern uint64_t ia64_iospace_address;
    4546
    46 #define IA64_IOSPACE_ADDRESS (ia64_iospace_address?ia64_iospace_address:(ia64_iospace_address=get_ia64_iospace_address()))
     47#define IA64_IOSPACE_ADDRESS \
     48        (ia64_iospace_address ? \
     49            ia64_iospace_address : \
     50            (ia64_iospace_address = get_ia64_iospace_address()))
    4751
    48 static inline void  outb(ioport_t port,uint8_t v)
     52static inline void pio_write_8(ioport8_t *port, uint8_t v)
    4953{
    50         *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v;
     54        uintptr_t prt = (uintptr_t) port;
     55
     56        *((uint8_t *)(IA64_IOSPACE_ADDRESS +
     57            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    5158
    5259        asm volatile ("mf\n" ::: "memory");
    5360}
    5461
    55 static inline void  outw(ioport_t port,uint16_t v)
     62static inline void pio_write_16(ioport16_t *port, uint16_t v)
    5663{
    57         *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v;
     64        uintptr_t prt = (uintptr_t) port;
     65
     66        *((uint16_t *)(IA64_IOSPACE_ADDRESS +
     67            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    5868
    5969        asm volatile ("mf\n" ::: "memory");
    6070}
    6171
    62 static inline void  outl(ioport_t port,uint32_t v)
     72static inline void pio_write_32(ioport32_t *port, uint32_t v)
    6373{
    64         *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v;
     74        uintptr_t prt = (uintptr_t) port;
     75
     76        *((uint32_t *)(IA64_IOSPACE_ADDRESS +
     77            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    6578
    6679        asm volatile ("mf\n" ::: "memory");
    6780}
    6881
     82static inline uint8_t pio_read_8(ioport8_t *port)
     83{
     84        uintptr_t prt = (uintptr_t) port;
    6985
    70 
    71 static inline uint8_t inb(ioport_t port)
    72 {
    7386        asm volatile ("mf\n" ::: "memory");
    7487
    75         return *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 ))));
     88        return *((uint8_t *)(IA64_IOSPACE_ADDRESS +
     89            ((prt & 0xfff) | ((prt >> 2) << 12))));
    7690}
    7791
    78 static inline uint16_t inw(ioport_t port)
     92static inline uint16_t pio_read_16(ioport16_t *port)
    7993{
     94        uintptr_t prt = (uintptr_t) port;
     95
    8096        asm volatile ("mf\n" ::: "memory");
    8197
    82         return *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xffE) | ( (port >> 2) << 12 ))));
     98        return *((uint16_t *)(IA64_IOSPACE_ADDRESS +
     99            ((prt & 0xffE) | ((prt >> 2) << 12))));
    83100}
    84101
    85 static inline uint32_t inl(ioport_t port)
     102static inline uint32_t pio_read_32(ioport32_t *port)
    86103{
     104        uintptr_t prt = (uintptr_t) port;
     105
    87106        asm volatile ("mf\n" ::: "memory");
    88107
    89         return *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 ))));
     108        return *((uint32_t *)(IA64_IOSPACE_ADDRESS +
     109            ((prt & 0xfff) | ((prt >> 2) << 12))));
    90110}
    91 
    92 
    93 
    94111
    95112#endif
  • uspace/lib/libc/generic/ddi.c

    r06f96234 r1ae8f2b  
    3434
    3535#include <ddi.h>
     36#include <libarch/ddi.h>
    3637#include <libc.h>
    3738#include <task.h>
  • uspace/lib/libc/include/sys/types.h

    r06f96234 r1ae8f2b  
    4343typedef int mode_t;
    4444
     45typedef volatile uint8_t ioport8_t;
     46typedef volatile uint16_t ioport16_t;
     47typedef volatile uint32_t ioport32_t;
     48
    4549#endif
    4650
Note: See TracChangeset for help on using the changeset viewer.