]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/io/server/src/gpio
update: sync
[l4.git] / l4 / pkg / io / server / src / gpio
1 // vi:ft=cpp
2
3 #pragma once
4
5 #include "hw_device.h"
6 #include <l4/vbus/vbus_gpio.h>
7
8 namespace Hw {
9
10 class Gpio_chip
11 {
12 public:
13   enum Fix_mode
14   {
15     Input  = L4VBUS_GPIO_SETUP_INPUT,
16     Output = L4VBUS_GPIO_SETUP_OUTPUT,
17     Irq    = L4VBUS_GPIO_SETUP_IRQ,
18   };
19
20   virtual void request(unsigned pin) = 0;
21   virtual void free(unsigned pin) = 0;
22
23
24   virtual void setup(unsigned pin, unsigned mode, int value = 0) = 0;
25   virtual void config_pad(unsigned pin, unsigned pinmask,
26                           unsigned func, unsigned value) = 0;
27
28   virtual int get(unsigned pin) = 0;
29   virtual void set(unsigned pin, int value) = 0;
30   virtual int get_irq(unsigned pin) = 0;
31
32
33   virtual void multi_setup(unsigned mask, unsigned mode, unsigned outvalue = 0) = 0;
34   virtual void multi_config_pad(unsigned mask, unsigned func, unsigned value) = 0;
35   virtual void multi_set(unsigned mask, unsigned data) = 0;
36   virtual unsigned multi_get() = 0;
37
38
39   void ouput(unsigned pin, int value)
40   { setup(pin, Output, value); }
41
42   void input(unsigned pin)
43   { setup(pin, Input); }
44
45   void multi_output(unsigned mask, unsigned data)
46   { multi_setup(mask, mask, data); }
47
48   void multi_input(unsigned mask)
49   { multi_setup(mask, ~mask); }
50 };
51
52 class Gpio_device :
53   public Gpio_chip,
54   public Hw::Device
55 {
56 };
57
58 }