]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/lib/uart/io_regblock_port.h
update
[l4.git] / kernel / fiasco / src / lib / uart / io_regblock_port.h
1 #pragma once
2
3 #include "io_regblock.h"
4
5 namespace L4
6 {
7   class Io_register_block_port : public Io_register_block
8   {
9   public:
10     Io_register_block_port(unsigned long base)
11     : _base(base)
12     {}
13
14     unsigned char  read8(unsigned long reg) const
15     {
16       unsigned char val;
17       asm volatile("inb %w1, %b0" : "=a" (val) : "Nd" (_base + reg));
18       return val;
19     }
20
21     unsigned short read16(unsigned long reg) const
22     {
23       unsigned short val;
24       asm volatile("inw %w1, %w0" : "=a" (val) : "Nd" (_base + reg));
25       return val;
26     }
27
28     unsigned int   read32(unsigned long reg) const
29     {
30       unsigned int val;
31       asm volatile("in %w1, %0" : "=a" (val) : "Nd" (_base + reg));
32       return val;
33     }
34
35     void write8(unsigned long reg, unsigned char val) const
36     { asm volatile("outb %b0, %w1" : : "a" (val), "Nd" (_base + reg)); }
37
38     void write16(unsigned long reg, unsigned short val) const
39     { asm volatile("outw %w0, %w1" : : "a" (val), "Nd" (_base + reg)); }
40
41     void write32(unsigned long reg, unsigned int val) const
42     { asm volatile("out %0, %w1" : : "a" (val), "Nd" (_base + reg)); }
43
44     void delay() const
45     { asm volatile ("outb %al,$0x80"); }
46
47   private:
48     unsigned long _base;
49   };
50 }