Change of vterm handling logic on backend chardev input event (#40)
[lunaix-os.git] / lunaix-os / includes / lunaix / device_num.h
1 #ifndef __LUNAIX_DEVICE_NUM_H
2 #define __LUNAIX_DEVICE_NUM_H
3
4 #include <lunaix/types.h>
5
6 /*
7     Device metadata field (device_def::meta)
8
9     31          16 15           0
10     |  interface  |   function  |
11
12     Where the interface identify how the device is connected with the processor
13     Lunaix identify the following values:
14
15         NON: device do not have hardware interfacing
16
17         SOC: device conntected through some System-on-Chip interconnect bus
18             for example, southbridge on x86 platform, AMBA for ARM's series.
19
20         PCI: device connected through the peripheral component interconnect bus
21             (PCI)
22
23         USB: device connected through the universal serial bus (USB)
24
25         SPI: device connected through the serial peripheral interface (SPI)
26
27         I2C: device connected through the IIC protocol
28
29         FMW: device is a system board firmware
30
31     The function defines the functionality that the device is designated to
32    serve. Lunaix identify the following values:
33
34         PSEDUO: a pseudo device which does not backed by any hardware. (e.g.
35                 /dev/null)
36
37         CHAR: a character device, which support read/write and dealing with
38              characters. Backed hardware might exist.
39
40         SERIAL: a serial interface which talks
41
42         STORAGE: a device that is used for storage of data
43
44         INPUT: a device that accept external input.
45
46         TIME: a device that provides time related services, for example, timing
47              and clocking
48
49         BUSIF: a device that is the interface or HBAs for accessing interconnect
50    bus.
51
52         TTY: a device which can be called as teletypewriter, system can use such
53             device for output into external environment
54
55         CFG: device that provide configuration service to the system or other
56    devices
57
58
59 */
60
61 #define DEV_FNGRP(if_, function)                                               \
62     (((if_) & 0xffff) << 16) | ((function) & 0xffff)
63 #define DEV_UNIQUE(devkind, variant)                                           \
64     (((devkind) & 0xffff) << 16) | ((variant) & 0xffff)
65 #define DEV_KIND_FROM(unique) ((unique) >> 16)
66 #define DEV_VAR_FROM(unique) ((unique) & 0xffff)
67
68 #define DEV_IF(fngrp) ((fngrp) >> 16)
69 #define DEV_FN(fngrp) (((fngrp) & 0xffff))
70
71 #define DEVIF_NON 0x0
72 #define DEVIF_SOC 0x1
73 #define DEVIF_PCI 0x2
74 #define DEVIF_USB 0x3
75 #define DEVIF_SPI 0x4
76 #define DEVIF_I2C 0x5
77 #define DEVIF_FMW 0x6
78
79 #define DEVFN_PSEUDO 0x0
80 #define DEVFN_CHAR 0x1
81 #define DEVFN_STORAGE 0x4
82 #define DEVFN_INPUT 0x5
83 #define DEVFN_TIME 0x6
84 #define DEVFN_BUSIF 0x7
85 #define DEVFN_TTY 0x8
86 #define DEVFN_DISP 0x9
87 #define DEVFN_CFG 0xa
88
89 #define DEV_BUILTIN 0
90 #define DEV_BUILTIN_NULL 0
91 #define DEV_BUILTIN_ZERO 1
92 #define DEV_BUILTIN_KMSG 2
93
94 #define DEV_VTERM 1
95 #define DEV_RNG 2
96 #define DEV_RTC 3
97 #define DEV_SATA 4
98 #define DEV_NVME 5
99 #define DEV_PCI 6
100 #define DEV_UART16550 7
101
102 #define DEV_TIMER 8
103 #define DEV_TIMER_APIC 0
104 #define DEV_TIMER_HEPT 1
105
106 #define DEV_NULL 9
107 #define DEV_ZERO 10
108 #define DEV_KBD 11
109 #define DEV_GFXA 12
110 #define DEV_VGA 13
111 #define DEV_ACPI 14
112
113 struct devident
114 {
115     u32_t fn_grp;
116     u32_t unique;
117 };
118
119 struct devclass
120 {
121     u32_t fn_grp;
122     u32_t device;
123     u32_t variant;
124     u32_t hash;
125 };
126
127 #endif /* __LUNAIX_DEVICE_NUM_H */