Fennix  1.0.0
Full Documentation
aip.h
Go to the documentation of this file.
1 /*
2  This file is part of Fennix Kernel.
3 
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 
58 typedef 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;
72 } PS2_STATUSES;
73 
74 typedef 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 
90 typedef 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 void PIC_EOI(uint8_t IRQ);
107 void IRQ_MASK(uint8_t IRQ);
108 void IRQ_UNMASK(uint8_t IRQ);
109 void PS2Wait(const bool Output);
110 void PS2WriteCommand(uint8_t Command);
111 void PS2WriteData(uint8_t Data);
112 uint8_t PS2ReadData();
113 uint8_t PS2ReadStatus();
114 uint8_t PS2ReadAfterACK();
117 
118 #define WaitOutput PS2Wait(DriverID, true)
119 #define WaitInput PS2Wait(DriverID, false)
120 
121 
122 #define PS2_KBD_CMD_SET_LEDS 0xED
123 #define PS2_KBD_CMD_ECHO 0xEE
124 #define PS2_KBD_CMD_SCAN_CODE_SET 0xF0
125 #define PS2_KBD_CMD_IDENTIFY 0xF2
126 #define PS2_KBD_CMD_TYPEMATIC 0xF3
127 #define PS2_KBD_CMD_ENABLE_SCANNING 0xF4
128 #define PS2_KBD_CMD_DISABLE_SCANNING 0xF5
129 #define PS2_KBD_CMD_DEFAULTS 0xF6
130 #define PS2_KBD_CMD_ALL_TYPEMATIC 0xF7
131 #define PS2_KBD_CMD_ALL_MAKE_RELEASE 0xF8
132 #define PS2_KBD_CMD_ALL_MAKE 0xF9
133 #define PS2_KBD_CMD_ALL_TYPEMATIC_MAKE_RELEASE 0xFA
134 #define PS2_KBD_CMD_SPECIFIC_TYPEMATIC 0xFB
135 #define PS2_KBD_CMD_SPECIFIC_MAKE_RELEASE 0xFC
136 #define PS2_KBD_CMD_SPECIFIC_MAKE 0xFD
137 #define PS2_KBD_CMD_RESEND 0xFE
138 #define PS2_KBD_CMD_RESET 0xFF
139 
140 #define PS2_KBD_RESP_ACK 0xFA
141 #define PS2_KBD_RESP_ECHO 0xEE
142 #define PS2_KBD_RESP_RESEND 0xFE
143 #define PS2_KBD_RESP_TEST_PASSED 0xAA
144 #define PS2_KBD_RESP_TEST_FAILED 0xFC
145 #define PS2_KBD_RESP_TEST_FAILED_2 0xFD
146 
147 typedef enum
148 {
153 
154 typedef enum
155 {
160 
163  PS2_KBD_SC_SET_3 = 0x3F
165 
166 typedef union
167 {
168  struct
169  {
174  uint8_t RepeatRate : 5;
175 
182  uint8_t Delay : 2;
183 
187  uint8_t Zero : 1;
188  };
189  uint8_t Raw;
191 
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 
216 typedef enum
217 {
221  PS2_MOUSE_RES_8 = 3
223 
224 typedef 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:189
PS2_KBD_SCAN_CODE_SET
Definition: aip.h:155
@ PS2_KBD_SC_SET_3
Definition: aip.h:163
@ PS2_KBD_SCAN_CODE_GET_CURRENT
Definition: aip.h:156
@ PS2_KBD_SCAN_CODE_SET_3
Definition: aip.h:159
@ PS2_KBD_SCAN_CODE_SET_2
Definition: aip.h:158
@ PS2_KBD_SC_SET_1
Definition: aip.h:161
@ PS2_KBD_SC_SET_2
Definition: aip.h:162
@ PS2_KBD_SCAN_CODE_SET_1
Definition: aip.h:157
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:148
@ PS2_KBD_LED_SCROLL_LOCK
Definition: aip.h:149
@ PS2_KBD_LED_CAPS_LOCK
Definition: aip.h:151
@ PS2_KBD_LED_NUM_LOCK
Definition: aip.h:150
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
struct InodeOperations __attribute__((packed))