Fennix  1.0.0
Full Documentation
Loading...
Searching...
No Matches
aip.h
Go to the documentation of this file.
1/*
2 This file is part of Fennix Kernel.
4 Fennix Kernel is free software: you can redistribute it and/or
5 modify it under the terms of the GNU General Public License as
6 published by the Free Software Foundation, either version 3 of
7 the License, or (at your option) any later version.
8
9 Fennix Kernel is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with Fennix Kernel. If not, see <https://www.gnu.org/licenses/>.
16*/
17
18#ifndef __FENNIX_API_AIP_H__
19#define __FENNIX_API_AIP_H__
20
21#include <types.h>
22
23#define PIC1_CMD 0x20
24#define PIC1_DATA (PIC1_CMD + 1)
25#define PIC2_CMD 0xA0
26#define PIC2_DATA (PIC2_CMD + 1)
27#define _PIC_EOI 0x20
28
29#define PS2_DATA 0x60
30#define PS2_STATUS 0x64
31#define PS2_CMD PS2_STATUS
32#define PS2_ACK 0xFA
33#define PS2_TEST_PASSED 0x55
34#define PS2_TEST_FAILED 0xFC
35
36#define PS2_CMD_READ_CONFIG 0x20
37#define PS2_CMD_READ_CONFIG_N(n) (PS2_CMD_READ_CONFIG + n)
38#define PS2_CMD_WRITE_CONFIG 0x60
39#define PS2_CMD_WRITE_CONFIG_N(n) (PS2_CMD_WRITE_CONFIG + n)
40#define PS2_CMD_DISABLE_PORT_2 0xA7
41#define PS2_CMD_ENABLE_PORT_2 0xA8
42#define PS2_CMD_TEST_PORT_2 0xA9
43#define PS2_CMD_TEST_CONTROLLER 0xAA
44#define PS2_CMD_TEST_PORT_1 0xAB
45#define PS2_CMD_DIAGNOSTIC_DUMP 0xAC
46#define PS2_CMD_DISABLE_PORT_1 0xAD
47#define PS2_CMD_ENABLE_PORT_1 0xAE
48#define PS2_CMD_READ_INPUT_PORT 0xC0
49#define PS2_CMD_COPY_INPUT_0_3_TO_4_7_STATUS 0xC1
50#define PS2_CMD_COPY_INPUT_4_7_TO_4_7_STATUS 0xC2
51#define PS2_CMD_READ_OUTPUT_PORT 0xD0
52#define PS2_CMD_WRITE_NEXT_BYTE_TO_OUTPUT_PORT 0xD1
53#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_1_OUTPUT 0xD2
54#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_2_OUTPUT 0xD3
55#define PS2_CMD_WRITE_NEXT_BYTE_TO_PS2_PORT_2_INPUT 0xD4
56#define PS2_CMD_PULSE_OUTPUT_LINE(n) (0xF0 + n)
57
58typedef union
59{
60 struct
61 {
62 uint8_t OutputBufferFull : 1;
63 uint8_t InputBufferFull : 1;
64 uint8_t SystemFlag : 1;
65 uint8_t CommandData : 1;
66 uint8_t Unknown1 : 1;
67 uint8_t Unknown2 : 1;
68 uint8_t TimeoutError : 1;
69 uint8_t ParityError : 1;
70 };
71 uint8_t Raw;
73
74typedef union
75{
76 struct
77 {
78 uint8_t Port1Interrupt : 1;
79 uint8_t Port2Interrupt : 1;
80 uint8_t SystemFlag : 1;
81 uint8_t Zero0 : 1;
82 uint8_t Port1Clock : 1;
83 uint8_t Port2Clock : 1;
84 uint8_t Port1Translation : 1;
85 uint8_t Zero1 : 1;
86 };
87 uint8_t Raw;
89
90typedef union
91{
92 struct
93 {
94 uint8_t SystemReset : 1;
95 uint8_t A20Gate : 1;
96 uint8_t Port2Clock : 1;
97 uint8_t Port2Data : 1;
98 uint8_t Port1OutputBufferFull : 1;
99 uint8_t Port2OutputBufferFull : 1;
100 uint8_t Port1InputBufferFull : 1;
101 uint8_t Port2InputBufferFull : 1;
102 };
103 uint8_t Raw;
105
106#ifndef __kernel__
107void PIC_EOI(uint8_t IRQ);
108void IRQ_MASK(uint8_t IRQ);
109void IRQ_UNMASK(uint8_t IRQ);
110void PS2Wait(const bool Output);
111void PS2WriteCommand(uint8_t Command);
112void PS2WriteData(uint8_t Data);
113uint8_t PS2ReadData();
118#endif // !__kernel__
119
120#define WaitOutput PS2Wait(DriverID, true)
121#define WaitInput PS2Wait(DriverID, false)
122
123#define PS2_KBD_CMD_SET_LEDS 0xED
124#define PS2_KBD_CMD_ECHO 0xEE
125#define PS2_KBD_CMD_SCAN_CODE_SET 0xF0
126#define PS2_KBD_CMD_IDENTIFY 0xF2
127#define PS2_KBD_CMD_TYPEMATIC 0xF3
128#define PS2_KBD_CMD_ENABLE_SCANNING 0xF4
129#define PS2_KBD_CMD_DISABLE_SCANNING 0xF5
130#define PS2_KBD_CMD_DEFAULTS 0xF6
131#define PS2_KBD_CMD_ALL_TYPEMATIC 0xF7
132#define PS2_KBD_CMD_ALL_MAKE_RELEASE 0xF8
133#define PS2_KBD_CMD_ALL_MAKE 0xF9
134#define PS2_KBD_CMD_ALL_TYPEMATIC_MAKE_RELEASE 0xFA
135#define PS2_KBD_CMD_SPECIFIC_TYPEMATIC 0xFB
136#define PS2_KBD_CMD_SPECIFIC_MAKE_RELEASE 0xFC
137#define PS2_KBD_CMD_SPECIFIC_MAKE 0xFD
138#define PS2_KBD_CMD_RESEND 0xFE
139#define PS2_KBD_CMD_RESET 0xFF
140
141#define PS2_KBD_RESP_ACK 0xFA
142#define PS2_KBD_RESP_ECHO 0xEE
143#define PS2_KBD_RESP_RESEND 0xFE
144#define PS2_KBD_RESP_TEST_PASSED 0xAA
145#define PS2_KBD_RESP_TEST_FAILED 0xFC
146#define PS2_KBD_RESP_TEST_FAILED_2 0xFD
147
154
166
167typedef union
168{
169 struct
170 {
175 uint8_t RepeatRate : 5;
176
183 uint8_t Delay : 2;
184
188 uint8_t Zero : 1;
189 };
190 uint8_t Raw;
192
193#define PS2_MOUSE_CMD_SET_SCALING_1_1 0xE6
194#define PS2_MOUSE_CMD_SET_SCALING_2_1 0xE7
195#define PS2_MOUSE_CMD_SET_RESOLUTION 0xE8
196#define PS2_MOUSE_CMD_GET_STATUS 0xE9
197#define PS2_MOUSE_CMD_SET_STREAM_MODE 0xEA
198#define PS2_MOUSE_CMD_READ_DATA 0xEB
199#define PS2_MOUSE_CMD_RESET_WRAP_MODE 0xEC
200#define PS2_MOUSE_CMD_SET_WRAP_MODE 0xEE
201#define PS2_MOUSE_CMD_SET_REMOTE_MODE 0xF0
202#define PS2_MOUSE_CMD_READ_ID 0xF2
204#define PS2_MOUSE_CMD_SET_SAMPLE_RATE 0xF3
205#define PS2_MOUSE_CMD_ENABLE_DATA_REPORTING 0xF4
206#define PS2_MOUSE_CMD_DISABLE_DATA_REPORTING 0xF5
207#define PS2_MOUSE_CMD_SET_DEFAULTS 0xF6
208#define PS2_MOUSE_CMD_RESEND 0xFE
209#define PS2_MOUSE_CMD_RESET 0xFF
210
211#define PS2_MOUSE_RESP_ACK 0xFA
212#define PS2_MOUSE_RESP_RESEND 0xFE
213#define PS2_MOUSE_RESP_TEST_PASSED 0xAA
214#define PS2_MOUSE_RESP_TEST_FAILED 0xFC
215
223
224typedef struct
225{
226 union
227 {
228 struct
229 {
230 uint8_t LeftButton : 1;
231 uint8_t RightButton : 1;
232 uint8_t MiddleButton : 1;
233 uint8_t Always1 : 1;
234 uint8_t XSign : 1;
235 uint8_t YSign : 1;
236 uint8_t XOverflow : 1;
237 uint8_t YOverflow : 1;
238 } __attribute__((packed));
239 uint8_t Raw;
240 } Base;
241
242 uint8_t XMovement;
243 uint8_t YMovement;
244
245 union
246 {
247 struct
248 {
249 uint8_t Z : 4;
250 uint8_t Button4 : 1;
251 uint8_t Button5 : 1;
252 uint8_t Always0 : 1;
253 uint8_t Always0_2 : 1;
254 } __attribute__((packed));
255 uint8_t Raw;
256 } ZMovement;
258
259#endif // !__FENNIX_API_AIP_H__
uint8_t YOverflow
Definition aip.h:7
uint8_t XMovement
Definition aip.h:242
void PIC_EOI(uint8_t IRQ)
uint8_t Raw
Definition aip.h:71
void PS2WriteCommand(uint8_t Command)
uint8_t PS2ReadAfterACK()
uint8_t Raw
Definition aip.h:190
PS2_KBD_SCAN_CODE_SET
Definition aip.h:156
@ PS2_KBD_SC_SET_3
Definition aip.h:164
@ PS2_KBD_SCAN_CODE_GET_CURRENT
Definition aip.h:157
@ PS2_KBD_SCAN_CODE_SET_3
Definition aip.h:160
@ PS2_KBD_SCAN_CODE_SET_2
Definition aip.h:159
@ PS2_KBD_SC_SET_1
Definition aip.h:162
@ PS2_KBD_SC_SET_2
Definition aip.h:163
@ PS2_KBD_SCAN_CODE_SET_1
Definition aip.h:158
int PS2ACKTimeout()
void IRQ_MASK(uint8_t IRQ)
uint8_t Z
Definition aip.h:0
uint8_t YSign
Definition aip.h:5
uint8_t Button5
Definition aip.h:2
uint8_t Always0_2
Definition aip.h:4
uint8_t Raw
Definition aip.h:103
uint8_t Always1
Definition aip.h:3
uint8_t MiddleButton
Definition aip.h:2
uint8_t XSign
Definition aip.h:4
uint8_t Button4
Definition aip.h:1
uint8_t XOverflow
Definition aip.h:6
PS2_KBD_LEDS
Definition aip.h:149
@ PS2_KBD_LED_SCROLL_LOCK
Definition aip.h:150
@ PS2_KBD_LED_CAPS_LOCK
Definition aip.h:152
@ PS2_KBD_LED_NUM_LOCK
Definition aip.h:151
uint8_t Raw
Definition aip.h:87
uint8_t PS2ReadStatus()
void PS2ClearOutputBuffer()
void IRQ_UNMASK(uint8_t IRQ)
uint8_t PS2ReadData()
void PS2WriteData(uint8_t Data)
uint8_t Always0
Definition aip.h:3
uint8_t RightButton
Definition aip.h:1
uint8_t YMovement
Definition aip.h:243
PS2_MOUSE_RESOLUTION
Definition aip.h:217
@ PS2_MOUSE_RES_2
Definition aip.h:219
@ PS2_MOUSE_RES_1
Definition aip.h:218
@ PS2_MOUSE_RES_8
Definition aip.h:221
@ PS2_MOUSE_RES_4
Definition aip.h:220
void PS2Wait(const bool Output)
uint8_t LeftButton
Definition aip.h:0