#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "libmio.h"
#include "debug.h"
using namespace std;
CLibmio *gpLibio = NULL;
int
main(
int argc,
char* argv[])
{
try
{
gpLibio = new CLibmio();
char
szChar[20];
BYTE v1 = 0;
WORD v2 = 0;
DWORD
v4 = 0,
dwVersion = 0;
ULARGE_INTEGER
v8_1,
v8_2;
if ( gpLibio->GetVersion(dwVersion) ) printf("1. PASS. GetVersion = %08X\n", dwVersion);
if ( gpLibio->GetVersionString(szChar, 20) ) printf("2. PASS. GetVersionString = %s\n", szChar);
if ( gpLibio->Rdmsr(0x10, v8_1) ) printf("3. PASS. Rdmsr(TSC=0x10) = %08X, %08X\n", v8_1.HighPart, v8_1.LowPart);
if ( gpLibio->Rdmsr(0x17, v8_1) ) printf("3. PASS. Rdmsr(PLATFORM_ID=0x17) = %08X, %08X\n", v8_1.HighPart, v8_1.LowPart);
if ( gpLibio->Rdmsr(0x1b, v8_1) ) printf("3. PASS. Rdmsr(APIC_BASE=0x1b) = %08X, %08X\n", v8_1.HighPart, v8_1.LowPart);
if ( gpLibio->Rdmsr(0x21, v8_1) ) printf("3. PASS. Rdmsr(PREFETCH_CTL=0x21) = %08X, %08X\n", v8_1.HighPart, v8_1.LowPart);
if ( gpLibio->Rdmsr(0x2a, v8_1) ) printf("3. PASS. Rdmsr(HARD_POWERON=0x2a) = %08X, %08X\n", v8_1.HighPart, v8_1.LowPart);
if ( gpLibio->Rdpmc(0, v8_2) ) printf("6. PASS. Rdpmc(0) = %08X, %08X\n", v8_2.HighPart, v8_2.LowPart);
printf("7. PASS. Halt\n");
if ( gpLibio->Inp(0x80, v1) ) printf("8. PASS. Inp(%02X)\n", v1);
if ( gpLibio->Outp(0x80, ++v1) ) printf("9. PASS. Outp(%02X)\n", v1);
if ( gpLibio->Inp(0x80, v1) ) printf("10. PASS. Inp(%02X)\n", v1);
if ( gpLibio->Outp(0x80, --v1) ) printf("11. PASS. Outp(%02X)\n", v1);
if ( gpLibio->Inp(0x80, v1) ) printf("12. PASS. Inp(%02X)\n", v1);
if ( gpLibio->Inp(0x80, v2) ) printf("13. PASS. Inp(%04X)\n", v2);
if ( gpLibio->Outp(0x80, ++v2) ) printf("14. PASS. Outp(%04X)\n", v2);
if ( gpLibio->Inp(0x80, v2) ) printf("15. PASS. Inp(%04X)\n", v2);
if ( gpLibio->Outp(0x80, --v2) ) printf("16. PASS. Outp(%04X)\n", v2);
if ( gpLibio->Inp(0x80, v2) ) printf("17. PASS. Inp(%04X)\n", v2);
if ( gpLibio->Inp(0x80, v4) ) printf("18. PASS. Inp(%08X)\n", v4);
if ( gpLibio->Outp(0x80, ++v4) ) printf("19. PASS. Outp(%08X)\n", v4);
if ( gpLibio->Inp(0x80, v4) ) printf("20. PASS. Inp(%08X)\n", v4);
if ( gpLibio->Outp(0x80, --v4) ) printf("21. PASS. Outp(%08X)\n", v4);
if ( gpLibio->Inp(0x80, v4) ) printf("22. PASS. Inp(%08X)\n", v4);
if ( gpLibio->ReadPort(0x80, v1) ) printf("23. PASS. ReadPort(%02X)\n", v1);
if ( gpLibio->WritePort(0x80, ++v1) ) printf("24. PASS. WritePort(%02X)\n", v1);
if ( gpLibio->ReadPort(0x80, v1) ) printf("25. PASS. ReadPort(%02X)\n", v1);
if ( gpLibio->WritePort(0x80, --v1) ) printf("26. PASS. WritePort(%02X)\n", v1);
if ( gpLibio->ReadPort(0x80, v1) ) printf("27. PASS. ReadPort(%02X)\n", v1);
if ( gpLibio->ReadPort(0x80, v2) ) printf("28. PASS. ReadPort(%04X)\n", v2);
if ( gpLibio->WritePort(0x80, ++v2) ) printf("29. PASS. WritePort(%04X)\n", v2);
if ( gpLibio->ReadPort(0x80, v2) ) printf("30. PASS. ReadPort(%04X)\n", v2);
if ( gpLibio->WritePort(0x80, --v2) ) printf("31. PASS. WritePort(%04X)\n", v2);
if ( gpLibio->ReadPort(0x80, v2) ) printf("32. PASS. ReadPort(%04X)\n", v2);
if ( gpLibio->ReadPort(0x82, v4) ) printf("33. PASS. ReadPort(%08X)\n", v4);
if ( gpLibio->WritePort(0x80, ++v4) ) printf("34. PASS. WritePort(%08X)\n", v4);
if ( gpLibio->ReadPort(0x82, v4) ) printf("35. PASS. ReadPort(%08X)\n", v4);
if ( gpLibio->WritePort(0x80, --v4) ) printf("36. PASS. WritePort(%08X)\n", v4);
if ( gpLibio->ReadPort(0x82, v4) ) printf("37. PASS. ReadPort(%08X)\n", v4);
if ( gpLibio->PciReadConfig(0x4, 0x0, 0x0, 0x0C, &v4, sizeof(DWORD)) ) printf("38. PASS. PciReadConfig(%08X)\n", v4++);
if ( gpLibio->PciWriteConfig(0x4, 0x0, 0x0, 0x0C, &v4, sizeof(DWORD)) ) printf("39. PASS. PciWriteConfig(%08X)\n", v4);
if ( gpLibio->PciReadConfig(0x4, 0x0, 0x0, 0x0C, &v4, sizeof(DWORD)) ) printf("40. PASS. PciReadConfig(%08X)\n", v4--);
if ( gpLibio->PciWriteConfig(0x4, 0x0, 0x0, 0x0C, &v4, sizeof(DWORD)) ) printf("41. PASS. PciWriteConfig(%08X)\n", v4);
if ( gpLibio->PciReadConfig(0x4, 0x0, 0x0, 0x0C, &v4, sizeof(DWORD)) ) printf("42. PASS. PciReadConfig(%08X)\n", v4);
if ( (v4 = (DWORD)gpLibio->MapPhyMemory(reinterpret_cast<LPVOID>(0x3400), 0x04)) ) printf("43. PASS. MapPhyMemory(%p = %08X)\n", v4, *((DWORD*)v4));
if ( gpLibio->UnmapPhyMemory(reinterpret_cast<LPVOID>(v4)) ) printf("44. PASS. UnmapPhyMemory(%p)\n", v4);
if ( gpLibio->ReadPhyMemory(reinterpret_cast<LPVOID>(0x3400), &v4, 0x04) ) printf("45. PASS. ReadPhyMemory(%p)\n", v4++);
if ( gpLibio->WritePhyMemory(reinterpret_cast<LPVOID>(0x3400), &v4, 0x04) ) printf("46. PASS. WritePhyMemory(%p)\n", v4);
if ( gpLibio->ReadPhyMemory(reinterpret_cast<LPVOID>(0x3400), &v4, 0x04) ) printf("47. PASS. ReadPhyMemory(%p)\n", v4--);
if ( gpLibio->WritePhyMemory(reinterpret_cast<LPVOID>(0x3400), &v4, 0x04) ) printf("48. PASS. WritePhyMemory(%p)\n", v4);
// pci_enum_device(PCI_DEV_BASE_CLASS_STORAGE, PCI_DEV_SUB_CLASS_IDE, device_enum_proc);
// pci_enum_device(PCI_DEV_BASE_CLASS_STORAGE, PCI_DEV_SUB_CLASS_AHCI, device_enum_proc);
}
catch(CLibmioException *e)
{
e->ShowError();
delete e;
}
catch(...)
{
cerr << "Unknown exception." << endl;
}
if ( gpLibio )
delete gpLibio;
gpLibio = NULL;
return 0;
}