Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/include/asm.h

    rc22531fc r667a4f8  
    4141#include <trace.h>
    4242
    43 #define IO_SPACE_BOUNDARY       ((void *) (64 * 1024))
    44 
    4543/** Return base address of current stack.
    4644 *
     
    7977}
    8078
     79#define IO_SPACE_BOUNDARY       ((void *) (64 * 1024))
     80
    8181/** Byte from port
    8282 *
     
    8989NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port)
    9090{
    91         if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
     91        if (((void *)port) < IO_SPACE_BOUNDARY) {
    9292                uint8_t val;
    93                
    9493                asm volatile (
    9594                        "inb %w[port], %b[val]\n"
     
    9796                        : [port] "d" (port)
    9897                );
    99                
    10098                return val;
    101         } else
     99        } else {
    102100                return (uint8_t) *port;
     101        }
    103102}
    104103
     
    113112NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port)
    114113{
    115         if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
     114        if (((void *)port) < IO_SPACE_BOUNDARY) {
    116115                uint16_t val;
    117                
    118116                asm volatile (
    119117                        "inw %w[port], %w[val]\n"
     
    121119                        : [port] "d" (port)
    122120                );
    123                
    124121                return val;
    125         } else
     122        } else {
    126123                return (uint16_t) *port;
     124        }
    127125}
    128126
     
    137135NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port)
    138136{
    139         if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
     137        if (((void *)port) < IO_SPACE_BOUNDARY) {
    140138                uint32_t val;
    141                
    142139                asm volatile (
    143140                        "inl %w[port], %[val]\n"
     
    145142                        : [port] "d" (port)
    146143                );
    147                
    148144                return val;
    149         } else
     145        } else {
    150146                return (uint32_t) *port;
     147        }
    151148}
    152149
     
    161158NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t val)
    162159{
    163         if (port < (ioport8_t *) IO_SPACE_BOUNDARY) {
     160        if (((void *)port) < IO_SPACE_BOUNDARY) {
    164161                asm volatile (
    165162                        "outb %b[val], %w[port]\n"
    166163                        :: [val] "a" (val), [port] "d" (port)
    167164                );     
    168         } else
    169                 *port = val;
     165        } else {
     166                *((uint8_t *) port) = val;
     167        }
    170168}
    171169
     
    180178NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val)
    181179{
    182         if (port < (ioport16_t *) IO_SPACE_BOUNDARY) {
     180        if (((void *)port) < IO_SPACE_BOUNDARY) {
    183181                asm volatile (
    184182                        "outw %w[val], %w[port]\n"
    185183                        :: [val] "a" (val), [port] "d" (port)
    186184                );
    187         } else
    188                 *port = val;
     185        } else {
     186                *((uint16_t *) port) = val;
     187        }
    189188}
    190189
     
    199198NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val)
    200199{
    201         if (port < (ioport32_t *) IO_SPACE_BOUNDARY) {
     200        if (((void *)port) < IO_SPACE_BOUNDARY) {
    202201                asm volatile (
    203202                        "outl %[val], %w[port]\n"
    204203                        :: [val] "a" (val), [port] "d" (port)
    205204                );
    206         } else
    207                 *port = val;
     205        } else {
     206                *((uint32_t *) port) = val;
     207        }
    208208}
    209209
Note: See TracChangeset for help on using the changeset viewer.