1 //-----------------------------------------------------------------------------
3 // Mail : hiyohiyo@crystalmark.info
4 // Web : http://openlibsys.org/
5 // License : The modified BSD license
7 // Copyright 2007-2009 OpenLibSys.org. All rights reserved.
8 //-----------------------------------------------------------------------------
13 typedef unsigned char BYTE
;
16 typedef unsigned short WORD
;
17 typedef unsigned long DWORD
;
19 typedef DWORD
*PDWORD
;
20 typedef unsigned __int64 ULONG_PTR
;
21 typedef ULONG_PTR DWORD_PTR
;
22 typedef DWORD_PTR
*PDWORD_PTR
;
24 #define WINAPI __stdcall
27 /******************************************************************************
31 ******************************************************************************/
33 //-----------------------------------------------------------------------------
35 //-----------------------------------------------------------------------------
36 DWORD
// DLL Status, defined OLS_DLL_****
37 WINAPI
GetDllStatus();
39 //-----------------------------------------------------------------------------
41 //-----------------------------------------------------------------------------
42 DWORD
// DLL Version, defined OLS_VERSION
44 PBYTE major
, // major version
45 PBYTE minor
, // minor version
46 PBYTE revision
, // revision
47 PBYTE release
// release/build
50 //-----------------------------------------------------------------------------
52 //-----------------------------------------------------------------------------
53 DWORD
// Device Driver Version, defined OLS_DRIVER_VERSION
54 WINAPI
GetDriverVersion(
55 PBYTE major
, // major version
56 PBYTE minor
, // minor version
57 PBYTE revision
, // revision
58 PBYTE release
// release/build
61 //-----------------------------------------------------------------------------
63 //-----------------------------------------------------------------------------
64 DWORD
// Device Driver Type, defined OLS_DRIVER_TYPE_****
65 WINAPI
GetDriverType();
67 //-----------------------------------------------------------------------------
69 //-----------------------------------------------------------------------------
70 BOOL
// TRUE: success, FALSE: failure
71 WINAPI
InitializeOls();
73 //-----------------------------------------------------------------------------
75 //-----------------------------------------------------------------------------
76 VOID WINAPI
DeinitializeOls();
78 /******************************************************************************
82 ******************************************************************************/
84 //-----------------------------------------------------------------------------
86 //-----------------------------------------------------------------------------
87 BOOL
// TRUE: support CPUID instruction, FALSE: not support CPUID instruction
90 //-----------------------------------------------------------------------------
92 //-----------------------------------------------------------------------------
93 BOOL
// TRUE: support MSR(Model-Specific Register), FALSE: not support MSR
96 //-----------------------------------------------------------------------------
98 //-----------------------------------------------------------------------------
99 BOOL
// TRUE: support TSC(Time Stamp Counter), FALSE: not support TSC
102 //-----------------------------------------------------------------------------
104 //-----------------------------------------------------------------------------
105 BOOL
// TRUE: success, FALSE: failure
107 DWORD index
, // MSR index
108 PDWORD eax
, // bit 0-31
109 PDWORD edx
// bit 32-63
112 //-----------------------------------------------------------------------------
114 //-----------------------------------------------------------------------------
115 BOOL
// TRUE: success, FALSE: failure
117 DWORD index
, // MSR index
118 PDWORD eax
, // bit 0-31
119 PDWORD edx
, // bit 32-63
120 DWORD_PTR threadAffinityMask
123 //-----------------------------------------------------------------------------
125 //-----------------------------------------------------------------------------
126 BOOL
// TRUE: success, FALSE: failure
128 DWORD index
, // MSR index
129 PDWORD eax
, // bit 0-31
130 PDWORD edx
, // bit 32-63
131 DWORD_PTR processAffinityMask
134 //-----------------------------------------------------------------------------
136 //-----------------------------------------------------------------------------
137 BOOL
// TRUE: success, FALSE: failure
139 DWORD index
, // MSR index
140 DWORD eax
, // bit 0-31
141 DWORD edx
// bit 32-63
144 //-----------------------------------------------------------------------------
146 //-----------------------------------------------------------------------------
147 BOOL
// TRUE: success, FALSE: failure
149 DWORD index
, // MSR index
150 DWORD eax
, // bit 0-31
151 DWORD edx
, // bit 32-63
152 DWORD_PTR threadAffinityMask
155 //-----------------------------------------------------------------------------
157 //-----------------------------------------------------------------------------
158 BOOL
// TRUE: success, FALSE: failure
160 DWORD index
, // MSR index
161 DWORD eax
, // bit 0-31
162 DWORD edx
, // bit 32-63
163 DWORD_PTR processAffinityMask
166 //-----------------------------------------------------------------------------
168 //-----------------------------------------------------------------------------
169 BOOL
// TRUE: success, FALSE: failure
171 DWORD index
, // PMC index
172 PDWORD eax
, // bit 0-31
173 PDWORD edx
// bit 32-63
176 //-----------------------------------------------------------------------------
178 //-----------------------------------------------------------------------------
179 BOOL
// TRUE: success, FALSE: failure
181 DWORD index
, // PMC index
182 PDWORD eax
, // bit 0-31
183 PDWORD edx
, // bit 32-63
184 DWORD_PTR threadAffinityMask
187 //-----------------------------------------------------------------------------
189 //-----------------------------------------------------------------------------
190 BOOL
// TRUE: success, FALSE: failure
192 DWORD index
, // PMC index
193 PDWORD eax
, // bit 0-31
194 PDWORD edx
, // bit 32-63
195 DWORD_PTR processAffinityMask
198 //-----------------------------------------------------------------------------
200 //-----------------------------------------------------------------------------
201 BOOL
// TRUE: success, FALSE: failure
203 DWORD index
, // CPUID index
210 //-----------------------------------------------------------------------------
212 //-----------------------------------------------------------------------------
213 BOOL
// TRUE: success, FALSE: failure
215 DWORD index
, // CPUID index
220 DWORD_PTR threadAffinityMask
223 //-----------------------------------------------------------------------------
225 //-----------------------------------------------------------------------------
226 BOOL
// TRUE: success, FALSE: failure
228 DWORD index
, // CPUID index
233 DWORD_PTR processAffinityMask
236 //-----------------------------------------------------------------------------
238 //-----------------------------------------------------------------------------
239 BOOL
// TRUE: success, FALSE: failure
241 PDWORD eax
, // bit 0-31
242 PDWORD edx
// bit 32-63
245 //-----------------------------------------------------------------------------
247 //-----------------------------------------------------------------------------
248 BOOL
// TRUE: success, FALSE: failure
250 PDWORD eax
, // bit 0-31
251 PDWORD edx
, // bit 32-63
252 DWORD_PTR threadAffinityMask
255 //-----------------------------------------------------------------------------
257 //-----------------------------------------------------------------------------
258 BOOL
// TRUE: success, FALSE: failure
260 PDWORD eax
, // bit 0-31
261 PDWORD edx
, // bit 32-63
262 DWORD_PTR processAffinityMask
265 //-----------------------------------------------------------------------------
267 //-----------------------------------------------------------------------------
268 BOOL
// TRUE: success, FALSE: failure
271 //-----------------------------------------------------------------------------
273 //-----------------------------------------------------------------------------
274 BOOL
// TRUE: success, FALSE: failure
276 DWORD_PTR threadAffinityMask
279 //-----------------------------------------------------------------------------
281 //-----------------------------------------------------------------------------
282 BOOL
// TRUE: success, FALSE: failure
284 DWORD_PTR processAffinityMask
287 /******************************************************************************
291 ******************************************************************************/
293 //-----------------------------------------------------------------------------
295 //-----------------------------------------------------------------------------
297 WINAPI
ReadIoPortByte(
298 WORD port
// I/O port address
301 //-----------------------------------------------------------------------------
303 //-----------------------------------------------------------------------------
305 WINAPI
ReadIoPortWord(
306 WORD port
// I/O port address
309 //-----------------------------------------------------------------------------
311 //-----------------------------------------------------------------------------
313 WINAPI
ReadIoPortDword(
314 WORD port
// I/O port address
317 //-----------------------------------------------------------------------------
319 //-----------------------------------------------------------------------------
320 BOOL
// TRUE: success, FALSE: failure
321 WINAPI
ReadIoPortByteEx(
322 WORD port
, // I/O port address
323 PBYTE value
// Read Value
325 //-----------------------------------------------------------------------------
327 //-----------------------------------------------------------------------------
328 BOOL
// TRUE: success, FALSE: failure
329 WINAPI
ReadIoPortWordEx(
330 WORD port
, // I/O port address
331 PWORD value
// Read Value
333 //-----------------------------------------------------------------------------
335 //-----------------------------------------------------------------------------
336 BOOL
// TRUE: success, FALSE: failure
337 WINAPI
ReadIoPortDwordEx(
338 WORD port
, // I/O port address
339 PDWORD value
// Read Value
342 //-----------------------------------------------------------------------------
344 //-----------------------------------------------------------------------------
346 WINAPI
WriteIoPortByte(
347 WORD port
, // I/O port address
348 BYTE value
// Write Value
351 //-----------------------------------------------------------------------------
353 //-----------------------------------------------------------------------------
355 WINAPI
WriteIoPortDword(
356 WORD port
, // I/O port address
357 DWORD value
// Write Value
361 //-----------------------------------------------------------------------------
363 //-----------------------------------------------------------------------------
365 WINAPI
WriteIoPortWord(
366 WORD port
, // I/O port address
367 WORD value
// Write Value
370 //-----------------------------------------------------------------------------
372 //-----------------------------------------------------------------------------
373 BOOL
// TRUE: success, FALSE: failure
374 WINAPI
WriteIoPortByteEx(
375 WORD port
, // I/O port address
376 BYTE value
// Write Value
379 //-----------------------------------------------------------------------------
381 //-----------------------------------------------------------------------------
382 BOOL
// TRUE: success, FALSE: failure
383 WINAPI
WriteIoPortWordEx(
384 WORD port
, // I/O port address
385 WORD value
// Write Value
389 //-----------------------------------------------------------------------------
390 // WriteIoPortDwordEx
391 //-----------------------------------------------------------------------------
392 BOOL
// TRUE: success, FALSE: failure
393 WINAPI
WriteIoPortDwordEx(
394 WORD port
, // I/O port address
395 DWORD value
// Write Value
398 /******************************************************************************
402 ******************************************************************************/
404 // 0- 2: Function Number
405 // 3- 7: Device Number
406 // 8-15: PCI Bus Number
408 // 0xFFFFFFFF : Error
410 //-----------------------------------------------------------------------------
412 //-----------------------------------------------------------------------------
414 WINAPI
SetPciMaxBusIndex(
415 BYTE max
// Max PCI Bus to Scan
418 //-----------------------------------------------------------------------------
420 //-----------------------------------------------------------------------------
422 WINAPI
ReadPciConfigByte(
423 DWORD pciAddress
, // PCI Device Address
424 BYTE regAddress
// Configuration Address 0-255
427 //-----------------------------------------------------------------------------
429 //-----------------------------------------------------------------------------
431 WINAPI
ReadPciConfigWord(
432 DWORD pciAddress
, // PCI Device Address
433 BYTE regAddress
// Configuration Address 0-255
436 //-----------------------------------------------------------------------------
437 // ReadPciConfigDword
438 //-----------------------------------------------------------------------------
440 WINAPI
ReadPciConfigDword(
441 DWORD pciAddress
, // PCI Device Address
442 BYTE regAddress
// Configuration Address 0-255
445 //-----------------------------------------------------------------------------
446 // ReadPciConfigPByte
447 //-----------------------------------------------------------------------------
449 WINAPI
ReadPciConfigPByte(
450 DWORD pciAddress
, // PCI Device Address
451 DWORD regAddress
, // Configuration Address 0-whatever
452 PBYTE value
, // Read Value
456 //-----------------------------------------------------------------------------
457 // ReadPciConfigByteEx
458 //-----------------------------------------------------------------------------
459 BOOL
// TRUE: success, FALSE: failure
460 WINAPI
ReadPciConfigByteEx(
461 DWORD pciAddress
, // PCI Device Address
462 DWORD regAddress
, // Configuration Address 0-whatever
463 PBYTE value
// Read Value
466 //-----------------------------------------------------------------------------
467 // ReadPciConfigWordEx
468 //-----------------------------------------------------------------------------
469 BOOL
// TRUE: success, FALSE: failure
470 WINAPI
ReadPciConfigWordEx(
471 DWORD pciAddress
, // PCI Device Address
472 DWORD regAddress
, // Configuration Address 0-whatever
473 PWORD value
// Read Value
476 //-----------------------------------------------------------------------------
477 // ReadPciConfigDwordEx
478 //-----------------------------------------------------------------------------
479 BOOL
// TRUE: success, FALSE: failure
480 WINAPI
ReadPciConfigDwordEx(
481 DWORD pciAddress
, // PCI Device Address
482 DWORD regAddress
, // Configuration Address 0-whatever
483 PDWORD value
// Read Value
486 //-----------------------------------------------------------------------------
487 // ReadPciConfigPByteEx
488 //-----------------------------------------------------------------------------
489 BOOL
// TRUE: success, FALSE: failure
490 WINAPI
ReadPciConfigPByteEx(
491 DWORD pciAddress
, // PCI Device Address
492 DWORD regAddress
, // Configuration Address 0-whatever
493 PBYTE value
, // Read Value
497 //-----------------------------------------------------------------------------
498 // WritePciConfigByte
499 //-----------------------------------------------------------------------------
501 WINAPI
WritePciConfigByte(
502 DWORD pciAddress
, // PCI Device Address
503 BYTE regAddress
, // Configuration Address 0-255
504 BYTE value
// Write Value
507 //-----------------------------------------------------------------------------
508 // WritePciConfigWord
509 //-----------------------------------------------------------------------------
511 WINAPI
WritePciConfigWord(
512 DWORD pciAddress
, // PCI Device Address
513 BYTE regAddress
, // Configuration Address 0-255
514 WORD value
// Write Value
517 //-----------------------------------------------------------------------------
518 // WritePciConfigDword
519 //-----------------------------------------------------------------------------
521 WINAPI
WritePciConfigDword(
522 DWORD pciAddress
, // PCI Device Address
523 BYTE regAddress
, // Configuration Address 0-255
524 DWORD value
// Write Value
527 //-----------------------------------------------------------------------------
528 // WritePciConfigPByte
529 //-----------------------------------------------------------------------------
531 WINAPI
WritePciConfigPByte(
532 DWORD pciAddress
, // PCI Device Address
533 BYTE regAddress
, // Configuration Address 0-255
534 PBYTE value
, // Write Value
538 //-----------------------------------------------------------------------------
539 // WritePciConfigByteEx
540 //-----------------------------------------------------------------------------
541 BOOL
// TRUE: success, FALSE: failure
542 WINAPI
WritePciConfigByteEx(
543 DWORD pciAddress
, // PCI Device Address
544 DWORD regAddress
, // Configuration Address 0-whatever
545 BYTE value
// Write Value
548 //-----------------------------------------------------------------------------
549 // WritePciConfigWordEx
550 //-----------------------------------------------------------------------------
551 BOOL
// TRUE: success, FALSE: failure
552 WINAPI
WritePciConfigWordEx(
553 DWORD pciAddress
, // PCI Device Address
554 DWORD regAddress
, // Configuration Address 0-whatever
555 WORD value
// Write Value
558 //-----------------------------------------------------------------------------
559 // WritePciConfigDwordEx
560 //-----------------------------------------------------------------------------
561 BOOL
// TRUE: success, FALSE: failure
562 WINAPI
WritePciConfigDwordEx(
563 DWORD pciAddress
, // PCI Device Address
564 DWORD regAddress
, // Configuration Address 0-whatever
565 DWORD value
// Write Value
568 //-----------------------------------------------------------------------------
569 // WritePciConfigPByte
570 //-----------------------------------------------------------------------------
571 BOOL
// TRUE: success, FALSE: failure
572 WINAPI
WritePciConfigPByteEx(
573 DWORD pciAddress
, // PCI Device Address
574 BYTE regAddress
, // Configuration Address 0-255
575 PBYTE value
, // Write Value
579 //-----------------------------------------------------------------------------
581 //-----------------------------------------------------------------------------
582 DWORD
// pciAddress, 0xFFFFFFFF: failure
583 WINAPI
FindPciDeviceById(
584 WORD vendorId
, // Vendor ID
585 WORD deviceId
, // Device ID
589 //-----------------------------------------------------------------------------
590 // FindPciDeviceByClass
591 //-----------------------------------------------------------------------------
592 DWORD
// pciAddress, 0xFFFFFFFF: failure
593 WINAPI
FindPciDeviceByClass(
594 BYTE baseClass
, // Base Class
595 BYTE subClass
, // Sub Class
596 BYTE programIf
, // Program Interface
600 /******************************************************************************
602 ** Memory (Special API)
604 ******************************************************************************/
606 #ifdef _PHYSICAL_MEMORY_SUPPORT
607 //-----------------------------------------------------------------------------
609 //-----------------------------------------------------------------------------
610 DWORD
// Read size(byte), 0: failure
611 WINAPI
ReadDmiMemory(
612 PBYTE buffer
, // Buffer
613 DWORD count
, // Count
614 DWORD unitSize
// Unit Size (BYTE, WORD, DWORD)
617 //-----------------------------------------------------------------------------
618 // ReadPhysicalMemory
619 //-----------------------------------------------------------------------------
620 DWORD
// Read size(byte), 0: failure
621 WINAPI
ReadPhysicalMemory(
622 DWORD_PTR address
, // Physical Memory Address
623 PBYTE buffer
, // Buffer
624 DWORD count
, // Count
625 DWORD unitSize
// Unit Size (BYTE, WORD, DWORD)
628 //-----------------------------------------------------------------------------
629 // WritePhysicalMemory
630 //-----------------------------------------------------------------------------
631 DWORD
// Write size(byte), 0: failure
632 WINAPI
WritePhysicalMemory(
633 DWORD_PTR address
, // Physical Memory Address
634 PBYTE buffer
, // Buffer
635 DWORD count
, // Count
636 DWORD unitSize
// Unit Size (BYTE, WORD, DWORD)