Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PSATA_PCI_CFG configHeader(byte busNo, byte deviceNo, byte functionNo){
- DWORD64 qwFuncAddr = PCI_CONFIG_START;
- qwFuncAddr = qwFuncAddr | (busNo << 20);
- qwFuncAddr = qwFuncAddr | (deviceNo << 15);
- qwFuncAddr = qwFuncAddr | (functionNo << 12);
- return (PSATA_PCI_CFG)qwFuncAddr;
- }
- DWORD myFunction(byte busNo, byte deviceNo, byte functionNo, int channel){
- DWORD result;
- PSATA_PCI_CFG sataConfig = configHeader(busNo, deviceNo, functionNo);
- if (channel == 0){
- DWORD pcmd = _inmdw((DWORD_PTR)&sataConfig->PCMD_BAR);
- DWORD pcnl = _inmdw((DWORD_PTR)&sataConfig->PCNL_BAR);
- pcmd = pcmd & 0xFFF8;
- pcnl = pcnl & 0xFFFC;
- result = (pcmd << 16) | pcnl;
- }
- else if (channel = 1){
- DWORD scmd = _inmdw((DWORD_PTR)&sataConfig->SCMD_BAR);
- DWORD scnl = _inmdw((DWORD_PTR)&sataConfig->SCNL_BAR);
- scmd = scmd & 0xFFF8;
- scnl = scnl & 0xFFFC;
- result = (scmd << 16) | scnl;
- }
- return result;
- }
- void myFunction2(WORD bAddr){
- BYTE status;
- while (true){
- if (status = __inp(bAddr + ATA_STATUS)){
- status = status & STATUS_BSY;
- status = status & STATUS_DRQ;
- }
- }
- }
- ////////////////////////////////////////
- DWORD secondaryResult;
- secondaryResult = myFunction(0, 31, 2, 1);
- WORD secondary1 = HIWORD(secondaryResult);
- WORD secondary2 = LOWORD(secondaryResult);
- wsprintf(szBuffer[cLine], "SCMD_BLK: %x", secondary1);
- cLine += 1;
- wsprintf(szBuffer[cLine], "SCNL_BLK: %x", secondary2);
- cLine += 2;
- DWORD primaryResult;
- primaryResult = myFunction(0, 31, 2, 0);
- WORD primary1 = HIWORD(primaryResult);
- WORD primary2 = LOWORD(primaryResult);
- wsprintf(szBuffer[cLine], "PCMD_BLK: %x", primary1);
- cLine += 1;
- wsprintf(szBuffer[cLine], "PCNL_BLK: %x", primary2);
- cLine += 2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement