Ignore:
Timestamp:
2009-03-03T22:56:33Z (16 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.

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.