2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/input/i8042prt/registry.c
5 * PURPOSE: i8042 (ps/2 keyboard-mouse controller) driver
7 * PROGRAMMER: Victor Kirhenshtein (sauros@iname.com)
8 * Jason Filby (jasonfilby@yahoo.com)
12 /* INCLUDES ****************************************************************/
21 /* FUNCTIONS *****************************************************************/
24 * Read the registry keys associated with this device. The RegistryPath
25 * var is a hack. This should be more like what microsoft does, but I
26 * don't know exactly what they do except that it's a hack too...
28 VOID STDCALL
I8042ReadRegistry(PDRIVER_OBJECT DriverObject
,
29 PDEVICE_EXTENSION DevExt
)
32 RTL_QUERY_REGISTRY_TABLE Parameters
[19];
36 ULONG DefaultHeadless
= 0;
37 ULONG DefaultCrashScroll
= 0;
38 ULONG DefaultCrashSysRq
= 0;
39 ULONG DefaultReportResetErrors
= 0;
40 ULONG DefaultPollStatusIterations
= 1;
41 ULONG DefaultResendIterations
= 3;
42 ULONG DefaultPollingIterations
= 12000;
43 ULONG DefaultPollingIterationsMaximum
= 12000;
44 ULONG DefaultKeyboardDataQueueSize
= 100;
45 ULONG DefaultOverrideKeyboardType
= 0;
46 ULONG DefaultOverrideKeyboardSubtype
= 0;
47 ULONG DefaultMouseDataQueueSize
= 100;
48 ULONG DefaultMouseResendStallTime
= 1000;
49 ULONG DefaultMouseSynchIn100ns
= 20000000;
50 ULONG DefaultMouseResolution
= 3;
51 ULONG DefaultSampleRate
= 60;
52 ULONG DefaultNumberOfButtons
= 2;
53 ULONG DefaultEnableWheelDetection
= 1;
55 RtlZeroMemory(Parameters
, sizeof(Parameters
));
57 Parameters
[0].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
58 Parameters
[0].Name
= L
"Headless";
59 Parameters
[0].EntryContext
= &DevExt
->Settings
.Headless
;
60 Parameters
[0].DefaultType
= REG_DWORD
;
61 Parameters
[0].DefaultData
= &DefaultHeadless
;
62 Parameters
[0].DefaultLength
= sizeof(ULONG
);
64 Parameters
[1].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
65 Parameters
[1].Name
= L
"CrashOnCtrlScroll";
66 Parameters
[1].EntryContext
= &DevExt
->Settings
.CrashScroll
;
67 Parameters
[1].DefaultType
= REG_DWORD
;
68 Parameters
[1].DefaultData
= &DefaultCrashScroll
;
69 Parameters
[1].DefaultLength
= sizeof(ULONG
);
71 Parameters
[2].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
72 Parameters
[2].Name
= L
"BreakOnSysRq";
73 Parameters
[2].EntryContext
= &DevExt
->Settings
.CrashSysRq
;
74 Parameters
[2].DefaultType
= REG_DWORD
;
75 Parameters
[2].DefaultData
= &DefaultCrashSysRq
;
76 Parameters
[2].DefaultLength
= sizeof(ULONG
);
78 Parameters
[3].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
79 Parameters
[3].Name
= L
"ReportResetErrors";
80 Parameters
[3].EntryContext
= &DevExt
->Settings
.ReportResetErrors
;
81 Parameters
[3].DefaultType
= REG_DWORD
;
82 Parameters
[3].DefaultData
= &DefaultReportResetErrors
;
83 Parameters
[3].DefaultLength
= sizeof(ULONG
);
85 Parameters
[4].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
86 Parameters
[4].Name
= L
"PollStatusIterations";
87 Parameters
[4].EntryContext
= &DevExt
->Settings
.PollStatusIterations
;
88 Parameters
[4].DefaultType
= REG_DWORD
;
89 Parameters
[4].DefaultData
= &DefaultPollStatusIterations
;
90 Parameters
[4].DefaultLength
= sizeof(ULONG
);
92 Parameters
[5].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
93 Parameters
[5].Name
= L
"ResendIterations";
94 Parameters
[5].EntryContext
= &DevExt
->Settings
.ResendIterations
;
95 Parameters
[5].DefaultType
= REG_DWORD
;
96 Parameters
[5].DefaultData
= &DefaultResendIterations
;
97 Parameters
[5].DefaultLength
= sizeof(ULONG
);
99 Parameters
[6].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
100 Parameters
[6].Name
= L
"PollingIterations";
101 Parameters
[6].EntryContext
= &DevExt
->Settings
.PollingIterations
;
102 Parameters
[6].DefaultType
= REG_DWORD
;
103 Parameters
[6].DefaultData
= &DefaultPollingIterations
;
104 Parameters
[6].DefaultLength
= sizeof(ULONG
);
106 Parameters
[7].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
107 Parameters
[7].Name
= L
"PollingIterationsMaximum";
108 Parameters
[7].EntryContext
= &DevExt
->Settings
.PollingIterationsMaximum
;
109 Parameters
[7].DefaultType
= REG_DWORD
;
110 Parameters
[7].DefaultData
= &DefaultPollingIterationsMaximum
;
111 Parameters
[7].DefaultLength
= sizeof(ULONG
);
113 Parameters
[8].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
114 Parameters
[8].Name
= L
"KeyboardDataQueueSize";
115 Parameters
[8].EntryContext
=
116 &DevExt
->KeyboardAttributes
.InputDataQueueLength
;
117 Parameters
[8].DefaultType
= REG_DWORD
;
118 Parameters
[8].DefaultData
= &DefaultKeyboardDataQueueSize
;
119 Parameters
[8].DefaultLength
= sizeof(ULONG
);
121 Parameters
[9].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
122 Parameters
[9].Name
= L
"OverrideKeyboardType";
123 Parameters
[9].EntryContext
= &DevExt
->Settings
.OverrideKeyboardType
;
124 Parameters
[9].DefaultType
= REG_DWORD
;
125 Parameters
[9].DefaultData
= &DefaultOverrideKeyboardType
;
126 Parameters
[9].DefaultLength
= sizeof(ULONG
);
128 Parameters
[10].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
129 Parameters
[10].Name
= L
"OverrideKeyboardSubtype";
130 Parameters
[10].EntryContext
= &DevExt
->Settings
.OverrideKeyboardSubtype
;
131 Parameters
[10].DefaultType
= REG_DWORD
;
132 Parameters
[10].DefaultData
= &DefaultOverrideKeyboardSubtype
;
133 Parameters
[10].DefaultLength
= sizeof(ULONG
);
135 Parameters
[11].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
136 Parameters
[11].Name
= L
"MouseDataQueueSize";
137 Parameters
[11].EntryContext
=
138 &DevExt
->MouseAttributes
.InputDataQueueLength
;
139 Parameters
[11].DefaultType
= REG_DWORD
;
140 Parameters
[11].DefaultData
= &DefaultMouseDataQueueSize
;
141 Parameters
[11].DefaultLength
= sizeof(ULONG
);
143 Parameters
[12].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
144 Parameters
[12].Name
= L
"MouseResendStallTime";
145 Parameters
[12].EntryContext
= &DevExt
->Settings
.MouseResendStallTime
;
146 Parameters
[12].DefaultType
= REG_DWORD
;
147 Parameters
[12].DefaultData
= &DefaultMouseResendStallTime
;
148 Parameters
[12].DefaultLength
= sizeof(ULONG
);
150 Parameters
[13].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
151 Parameters
[13].Name
= L
"MouseSynchIn100ns";
152 Parameters
[13].EntryContext
= &DevExt
->Settings
.MouseSynchIn100ns
;
153 Parameters
[13].DefaultType
= REG_DWORD
;
154 Parameters
[13].DefaultData
= &DefaultMouseSynchIn100ns
;
155 Parameters
[13].DefaultLength
= sizeof(ULONG
);
157 Parameters
[14].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
158 Parameters
[14].Name
= L
"MouseResolution";
159 Parameters
[14].EntryContext
= &DevExt
->Settings
.MouseResolution
;
160 Parameters
[14].DefaultType
= REG_DWORD
;
161 Parameters
[14].DefaultData
= &DefaultMouseResolution
;
162 Parameters
[14].DefaultLength
= sizeof(ULONG
);
164 Parameters
[15].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
165 Parameters
[15].Name
= L
"SampleRate";
166 Parameters
[15].EntryContext
= &DevExt
->MouseAttributes
.SampleRate
;
167 Parameters
[15].DefaultType
= REG_DWORD
;
168 Parameters
[15].DefaultData
= &DefaultSampleRate
;
169 Parameters
[15].DefaultLength
= sizeof(ULONG
);
171 Parameters
[16].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
172 Parameters
[16].Name
= L
"NumberOfButtons";
173 Parameters
[16].EntryContext
= &DevExt
->Settings
.NumberOfButtons
;
174 Parameters
[16].DefaultType
= REG_DWORD
;
175 Parameters
[16].DefaultData
= &DefaultNumberOfButtons
;
176 Parameters
[16].DefaultLength
= sizeof(ULONG
);
178 Parameters
[17].Flags
= RTL_QUERY_REGISTRY_DIRECT
;
179 Parameters
[17].Name
= L
"EnableWheelDetection";
180 Parameters
[17].EntryContext
= &DevExt
->Settings
.EnableWheelDetection
;
181 Parameters
[17].DefaultType
= REG_DWORD
;
182 Parameters
[17].DefaultData
= &DefaultEnableWheelDetection
;
183 Parameters
[17].DefaultLength
= sizeof(ULONG
);
185 Status
= RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE
| RTL_REGISTRY_OPTIONAL
,
186 I8042RegistryPath
.Buffer
,
191 if (!NT_SUCCESS(Status
)) {
192 /* Actually, the defaults are not set when the function
193 * fails, as would happen during setup, so you have to
194 * set them manually anyway...
196 RTL_QUERY_REGISTRY_TABLE
*Current
= Parameters
;
197 DPRINT1 ("Can't read registry: %x\n", Status
);
198 while (Current
->Name
) {
199 *((PULONG
)Current
->EntryContext
) =
200 *((PULONG
)Current
->DefaultData
);
203 DPRINT1 ("Manually set defaults\n");
207 if (DevExt
->Settings
.MouseResolution
> 3)
208 DevExt
->Settings
.MouseResolution
= 3;
210 DPRINT("Done reading registry\n");