MRESULT EXPENTRY fnwpClient(HWND hwnd,USHORT msg,MPARAM mp1,MPARAM mp2) { RECTL rcl; USHORT Command; ULONG *pulPtr; switch(msg) { case WM_CREATE: stCell.cy = 12; stCell.cx = 8; hdcPs = WinOpenWindowDC(hwnd); /****************************************************************/ /* Set the size and position of the frame window by making the */ /* client area width and height integral numbers of AVIO cell */ /* units. Calculate the frame window values necessary to */ /* achieve this. */ /****************************************************************/ rcl.yBottom = 0L; rcl.xLeft = 0L; rcl.yTop = 20 * stCell.cy; rcl.xRight = 40 * stCell.cx; WinCalcFrameRect(WinQueryWindow(hwnd,QW_PARENT),&rcl,FALSE); WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT), 0, 7 * stCell.cx, 2 * stCell.cy, (SHORT)(rcl.xRight - rcl.xLeft), (SHORT)(rcl.yTop - rcl.yBottom), SWP_MOVE | SWP_SIZE); WinPostMsg(hwnd,UM_INIT,0L,0L); break; case WM_ACTIVATE: if(LOUSHORT(LONGFROMMP(mp1))) WinSetFocus(HWND_DESKTOP,hwnd); break; case UM_INIT: if (szPortName[0] != 0) WinSetWindowText(hwndFrame,szPortName); else MenuItemEnable(hwndFrame,IDM_PROCESS,FALSE); WinShowWindow(hwndFrame,TRUE); WinQueryWindowRect(hwndClient,&rcl); ulWindowWidth = rcl.xRight; ulWindowHeight = rcl.yTop; ClearScreen(); break; case WM_PAINT: Paint(); break; case WM_SIZE: WndSize(hwnd,mp2); ClearScreen(); return WinDefWindowProc(hwnd,msg,mp1,mp2); case WM_COMMAND: switch (SHORT1FROMMP(mp1)) { case IDM_SELECT: if (WinDlgBox(HWND_DESKTOP, hwnd, (PFNWP)fnwpSelectPortDlg, (USHORT)NULL, PS_DLG, NULL)) WinSetWindowText(hwndFrame,szPortDesc); break; case IDM_RECOVER_USER_INI: RecoverProfile(HINI_USERPROFILE); break; case IDM_RECOVER_SYS_INI: RecoverProfile(HINI_SYSTEMPROFILE); break; case IDM_EXIT: WinPostMsg(hwnd,WM_QUIT,0L,0L); break; case IDM_SETUP: SetupPort(); break; case IDM_REMOVE: RemovePort(); break; case IDM_INSTALL: InstallPort(); break; case IDM_INIT: InitializePort(); break; case IDM_TERM: TerminatePort(); // TerminatePort(szPortName); break; case IDM_QUERY: ulItemCount = QueryPort(achBuffer,4096); break; default: return WinDefWindowProc(hwnd,msg,mp1,mp2); } break; case WM_CLOSE: WinPostMsg(hwnd,WM_QUIT,0L,0L); /* Cause termination */ break; default: return WinDefWindowProc(hwnd,msg,mp1,mp2); } return(FALSE); }
BOOL CRomiDisk::Init( HKEY hActiveKey ) { BOOL bRet = FALSE; m_f16Bit = TRUE; // PCI is 16-bit // configure port if (!InitializePort()) { DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T( "Atapi!CRomiDisk::Init> Failed to configure port; device(%u)\r\n" ), m_dwDeviceId)); goto exit; } // assign the appropriate folder name m_szDiskName = (IsCDRomDevice() ? g_szPCICDRomDisk : g_szPCIHardDisk); // reserve memory for DMA buffers m_pStartMemory = (LPBYTE)VirtualAlloc(NULL, 0x10000, MEM_RESERVE, PAGE_READWRITE); if (!m_pStartMemory) { bRet = FALSE; } WriteReg(ATA_CONTROL, ReadReg(ATA_CONTROL) | 0x1); // finish intialization; i.e., initialize device bRet = CDisk::Init(hActiveKey); if ((m_pPort->m_pDskReg[m_dwDeviceId]->dwEnablePDMA || m_pPort->m_pDskReg[m_dwDeviceId]->dwEnableUDMA) && m_pDMAVirtualAddress == NULL) { DMA_ADAPTER_OBJECT dmaAdapter; dmaAdapter.ObjectSize = sizeof(dmaAdapter); dmaAdapter.InterfaceType = Internal; dmaAdapter.BusNumber = 0; m_pDMAVirtualAddress= (PBYTE)HalAllocateCommonBuffer( &dmaAdapter, m_pPort->m_pDskReg[m_dwDeviceId]->dwDoubleBufferSize, &m_DMAPhyaddress, FALSE ); } if (m_pPort->m_pDskReg[m_dwDeviceId]->dwEnableUDMA && ( m_Id.UltraDMASupport & 0x3f)) { for(int i=5;i>=0;i--) { if(m_Id.UltraDMASupport & (0x01<<i)) { m_dwCurrentUDMAMode = (i > 4) ? 4 : i; break; } } SetPioMode(PIO0); SetUdmaMode(); DEBUGMSG(ZONE_INIT, (_T("### ATA-Disk supports UDMA to 0x%x 0x%x\r\n"), m_Id.UltraDMASupport,m_dwCurrentUDMAMode)); m_pPort->m_pDskReg[m_dwDeviceId]->dwEnablePDMA = FALSE; } else if (m_pPort->m_pDskReg[m_dwDeviceId]->dwEnablePDMA) { SetPioMode(m_Id.AdvancedPIOxferreserved); m_pPort->m_pDskReg[m_dwDeviceId]->dwEnableUDMA = FALSE;; DEBUGMSG(ZONE_INIT, (_T("### ATA-Disk dose not support UDMA. It is running on PDMA\r\n"))); } else { SetPioMode(m_Id.AdvancedPIOxferreserved); m_pPort->m_pDskReg[m_dwDeviceId]->dwEnableUDMA = FALSE;; m_pPort->m_pDskReg[m_dwDeviceId]->dwEnablePDMA = FALSE;; DEBUGMSG(ZONE_INIT, (_T("### ATA-Disk is running on PIO MODE\r\n"))); DEBUGMSG(ZONE_INIT, (_T("Atapi!CDisk::Init> Disabled DMA\r\n"))); } // associate interrupt event with IRQ if (!InterruptInitialize( m_pPort->m_dwSysIntr, m_pPort->m_hIRQEvent, NULL, 0) ) { DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T( "Atapi!CRomiDisk::ConfigPort> Failed to initialize interrupt(SysIntr(%d)) for device(%d)\r\n" ), m_pPort->m_dwSysIntr, m_dwDeviceId)); bRet = FALSE; } if (!bRet) { goto exit; } exit:; return bRet; }