/*---------------------------------------------------------------------------- *Function: JPGBuffMapping *Parameters: dwContext : *Return Value: True/False *Implementation Notes: JPG Buffer mapping from physical addr to virtual addr -----------------------------------------------------------------------------*/ BOOL JPGBuffMapping(S3C6410_JPG_CTX *base) { base->v_pJPGData_Buff = (volatile UINT8 *)Phy2VirAddr(JPG_DATA_BASE_ADDR, JPG_TOTAL_BUF_SIZE); if (base->v_pJPGData_Buff == NULL) { ERRORMSG(1,(TEXT("DD::v_pJPGData_Buff: VirtualAlloc failed!\r\n"))); return FALSE; } return TRUE; }
/*---------------------------------------------------------------------------- *Function: JPGMemMapping *Parameters: dwContext : *Return Value: True/False *Implementation Notes: JPG register mapping from physical addr to virtual addr -----------------------------------------------------------------------------*/ BOOL JPGMemMapping(S3C6400_JPG_CTX *base) { // JPG HOST Register base->v_pJPG_REG = (volatile S3C6400_JPG_HOSTIF_REG *)Phy2VirAddr(JPG_REG_BASE_ADDR, sizeof(S3C6400_JPG_HOSTIF_REG)); if (base->v_pJPG_REG == NULL) { JPEG_LOG_MSG(LOG_ERROR, "JPGMemMapping", "DD::v_pJPG_REG: VirtualAlloc failed!\r\n"); return FALSE; } return TRUE; }
/*---------------------------------------------------------------------------- *Function: JPG_Init *Parameters: dwContext : *Return Value: True/False *Implementation Notes: Initialize JPEG Hardware -----------------------------------------------------------------------------*/ DWORD JPG_Init( DWORD dwContext ) { S3C6410_JPG_CTX *JPGRegCtx; HANDLE h_Mutex; DWORD ret; RETAILMSG(ZONE_FUNCTION, (TEXT("JPG_Init().\r\n"))); // PWM clock Virtual alloc s6410PWR = (S3C6410_SYSCON_REG *)Phy2VirAddr(S3C6410_BASE_REG_PA_SYSCON, sizeof(S3C6410_SYSCON_REG)); if (s6410PWR == NULL) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG::For s6410PWR: MmMapIoSpace failed!\r\n"))); return FALSE;; } hPwrControl = CreateFile( L"PWC0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == hPwrControl ) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::PWC0 Open Device Failed\r\n"))); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } if(JPGSetClkDiv(JPG_CLOCK_DIVIDER_RATIO_QUARTER) == FALSE) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG :: Set Clock Divider Failed\r\n"))); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } // Mutex initialization h_Mutex = CreateJPGmutex(); if (h_Mutex == NULL) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JJPG Mutex Initialize error : %d\n"),GetLastError())); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } ret = LockJPGMutex(); if(!ret) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Mutex Lock Fail\r\n"))); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } // Register/Memory initialization JPGRegCtx = (S3C6410_JPG_CTX *)malloc(sizeof(S3C6410_JPG_CTX)); if (!JPGRegCtx) { RETAILMSG(ZONE_ERROR, (TEXT("JPEG ::JPG Memory Context Allocation Fail\r\n"))); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } memset(JPGRegCtx, 0x00, sizeof(S3C6410_JPG_CTX)); if( !JPGMemMapping(JPGRegCtx) ) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JPEG-HOST-MEMORY Initialize error : %d\r\n"),GetLastError())); free(JPGRegCtx); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } else { if(!JPGBuffMapping(JPGRegCtx)) { RETAILMSG(ZONE_ERROR,(TEXT("JPG_Init: JPEG-DATA-MEMORY Initialize error : %d\r\n"),GetLastError())); JPGMemFree(JPGRegCtx); free(JPGRegCtx); UnlockJPGMutex(); DeleteJPGMutex(); CloseHandle(hPwrControl); FreeVirAddr(s6410PWR, sizeof(S3C6410_SYSCON_REG)); return FALSE; } } instanceNo = 0; UnlockJPGMutex(); return (DWORD)JPGRegCtx; }