int EndJob(PORTHANDLE hPort) { PSPCB pSPCB; TRACE0(TEXT("--EndJob\r\n")); if (!ValidHandle(hPort)) { return(QP_BAD_PARAMETER); } pSPCB = &SPCBTable[hPort]; pSPCB->DeviceState.bJobPresent = FALSE; pSPCB->DeviceState.bManualPaused = FALSE; // close the port if (ClosePort(PORT_OWN_QP,pSPCB)) { TRACE0(TEXT("--ClosePort failed\r\n")); return(QP_FAIL); } return(QP_SUCCESS); }
static Bit8u EMM_MapPage(Bitu phys_page,Bit16u handle,Bit16u log_page) { // LOG_MSG("EMS MapPage handle %d phys %d log %d",handle,phys_page,log_page); /* Check for too high physical page */ if (phys_page>=EMM_MAX_PHYS) return EMM_ILL_PHYS; /* unmapping doesn't need valid handle (as handle isn't used) */ if (log_page==NULL_PAGE) { /* Unmapping */ emm_mappings[phys_page].handle=NULL_HANDLE; emm_mappings[phys_page].page=NULL_PAGE; for (Bitu i=0;i<4;i++) PAGING_MapPage(EMM_PAGEFRAME4K+phys_page*4+i,EMM_PAGEFRAME4K+phys_page*4+i); PAGING_ClearTLB(); return EMM_NO_ERROR; } /* Check for valid handle */ if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; if (log_page<emm_handles[handle].pages) { /* Mapping it is */ emm_mappings[phys_page].handle=handle; emm_mappings[phys_page].page=log_page; MemHandle memh=MEM_NextHandleAt(emm_handles[handle].mem,log_page*4);; for (Bitu i=0;i<4;i++) { PAGING_MapPage(EMM_PAGEFRAME4K+phys_page*4+i,memh); memh=MEM_NextHandle(memh); } PAGING_ClearTLB(); return EMM_NO_ERROR; } else { /* Illegal logical page it is */ return EMM_LOG_OUT_RANGE; } }
int JobResume(PORTHANDLE hPort) { TRACE0(TEXT("--JobResume\r\n")); if (!ValidHandle(hPort)) { TRACE0(TEXT("--Bad parameter\r\n")); return(QP_BAD_PARAMETER); } SPCBTable[hPort].DeviceState.bManualPaused = FALSE; return(QP_SUCCESS); }
static Bit8u EMM_ReallocatePages(Bit16u handle,Bit16u & pages) { /* Check for valid handle */ if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; if (emm_handles[handle].pages != 0) { /* Check for enough pages */ if (!MEM_ReAllocatePages(emm_handles[handle].mem,pages*4,false)) return EMM_OUT_OF_LOG; } else { MemHandle mem = MEM_AllocatePages(pages*4,false); if (!mem) E_Exit("EMS:Memory allocation failure during reallocation"); emm_handles[handle].mem = mem; } /* Update size */ emm_handles[handle].pages=pages; return EMM_NO_ERROR; }
int WriteJob(PORTHANDLE hPort,LPCVOID lpvBuf,int cbBufLen,LPINT lpcbWrite) { PSPCB pSPCB; int rv; TRACE0(TEXT("--WriteJob\r\n")); if (!ValidHandle(hPort)) { return(QP_BAD_PARAMETER); } pSPCB = &SPCBTable[hPort]; rv = (int) WritePort(lpvBuf,cbBufLen,lpcbWrite,pSPCB); TRACE3(TEXT("--Poll@%8u,Last = %8u,Curr = %8u\r\n"),PollRate,pSPCB->nTimeAtLastPoll, GetTickCount()); // read device status ? if (pSPCB->bTwoWay) { if (PollRate != 0 && GetTickCount() - pSPCB->nTimeAtLastPoll > PollRate) { PJLGetMessage(pSPCB,NULL,NULL); pSPCB->nTimeAtLastPoll = GetTickCount(); } else TRACE1(TEXT("--WriteJob: Skip Poll %s\r\n"),pSPCB->szPortName); } #ifndef WIN32 switch (rv) { case RC_SUCCESS: rv = QP_PORT_OK; break; case RC_CE_PTO: rv = QP_PORT_BUSY; break; default: rv = QP_PORT_ERROR; break; } #endif return(rv); }
static Bit8u EMM_MapSegment(Bitu segment,Bit16u handle,Bit16u log_page) { // LOG_MSG("EMS MapSegment handle %d segment %d log %d",handle,segment,log_page); if (((segment>=0xa000) && (segment<0xb000)) || ((segment>=EMM_PAGEFRAME-0x1000) && (segment<EMM_PAGEFRAME+0x1000))) { Bit32s tphysPage = ((Bit32s)segment-EMM_PAGEFRAME)/(0x1000/EMM_MAX_PHYS); /* unmapping doesn't need valid handle (as handle isn't used) */ if (log_page==NULL_PAGE) { /* Unmapping */ if ((tphysPage>=0) && (tphysPage<EMM_MAX_PHYS)) { emm_mappings[tphysPage].handle=NULL_HANDLE; emm_mappings[tphysPage].page=NULL_PAGE; } else { emm_segmentmappings[segment>>10].handle=NULL_HANDLE; emm_segmentmappings[segment>>10].page=NULL_PAGE; } for (Bitu i=0;i<4;i++) PAGING_MapPage(segment*16/4096+i,segment*16/4096+i); PAGING_ClearTLB(); return EMM_NO_ERROR; } /* Check for valid handle */ if (!ValidHandle(handle)) return EMM_INVALID_HANDLE; if (log_page<emm_handles[handle].pages) { /* Mapping it is */ if ((tphysPage>=0) && (tphysPage<EMM_MAX_PHYS)) { emm_mappings[tphysPage].handle=handle; emm_mappings[tphysPage].page=log_page; } else { emm_segmentmappings[segment>>10].handle=handle; emm_segmentmappings[segment>>10].page=log_page; } MemHandle memh=MEM_NextHandleAt(emm_handles[handle].mem,log_page*4);; for (Bitu i=0;i<4;i++) { PAGING_MapPage(segment*16/4096+i,memh); memh=MEM_NextHandle(memh); } PAGING_ClearTLB(); return EMM_NO_ERROR; } else { /* Illegal logical page it is */ return EMM_LOG_OUT_RANGE;