blob: eb312a4da676e478d789f025a7cdc6f20d269343 [file] [log] [blame]
/*
* Copyright (c) 2017, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "wlct_os.h"
#include "WlctPciAcss.h"
#include "LoggerSupport.h"
#define _DeviceTypeCOM 1
#define _DeviceTypePCI 2
#define _DeviceTypeJTAG 3
#define _DeviceTypeMEMORY 4
#define MAX_DEVICE_NAME_LEN 256
class IDeviceAccess
{
public:
typedef enum
{
ETypeUnknown = -1, // Unknown
ETypeCOM = _DeviceTypeCOM,
ETypePCI = _DeviceTypePCI,
ETypeJTAG = _DeviceTypeJTAG,
ETypeMEMORY = _DeviceTypeMEMORY,
}
EType;
IDeviceAccess(const TCHAR* tchDeviceName, DType devType);
IDeviceAccess(){deviceType = MST_NONE;}
virtual ~IDeviceAccess(void){}
virtual int CloseDevice() = 0;
virtual int GetType() = 0;
virtual int r32(DWORD addr, DWORD & val) = 0;
virtual int w32(DWORD addr, DWORD val) = 0;
// read block
virtual int rb(DWORD addr, DWORD blockSize, char *arrBlock) = 0;
// write block
virtual int wb(DWORD addr, DWORD blockSize, const char *arrBlock) = 0;
// read repeat
virtual int rr(DWORD addr, DWORD num_repeat, DWORD *arrBlock) = 0;
virtual int getFwDbgMsg(FW_DBG_MSG** pMsg) = 0;
virtual int clearAllFwDbgMsg() = 0;
virtual int do_reset(BOOL bFirstTime = TRUE) = 0;
virtual int do_sw_reset() = 0;
virtual int do_interface_reset() = 0;
virtual int startSampling(
DWORD* pRegsArr,
DWORD regArrSize,
DWORD interval,
DWORD maxSampling,
DWORD transferMethod)
{
//do something with params
(void)pRegsArr;
(void)regArrSize;
(void)interval;
(void)maxSampling;
(void)transferMethod;
LOG_MESSAGE_ERROR(_T("NOT IMPLEMENTED"));
return WLCT_OS_ERROR_CALL_NOT_IMPLEMENTED;
}
virtual int stopSampling()
{
LOG_MESSAGE_ERROR(_T("NOT IMPLEMENTED"));
return WLCT_OS_ERROR_CALL_NOT_IMPLEMENTED;
}
virtual int getSamplingData(DWORD** pDataSamples)
{
//do something with params
(void)pDataSamples;
LOG_MESSAGE_ERROR(_T("NOT IMPLEMENTED"));
return WLCT_OS_ERROR_CALL_NOT_IMPLEMENTED;
}
virtual int alloc_pmc(int num_of_descriptors, int size_of_descriptor)
{
//do something with params
(void)num_of_descriptors;
(void)size_of_descriptor;
LOG_MESSAGE_ERROR(_T("NOT IMPLEMENTED"));
return WLCT_OS_ERROR_CALL_NOT_IMPLEMENTED;
}
bool isInitialized()
{
return bInitialized;
}
wlct_os_err_t GetLastError()
{
return lastError;
}
void SetLastError(wlct_os_err_t err)
{
lastError = err;
}
TCHAR* GetInterfaceName()
{
return szInterfaceName;
}
DType GetDeviceType()
{
return deviceType;
}
DEVICE_STEP GetDeviceStep()
{
return deviceStep;
}
void SetDeviceStep(DEVICE_STEP devStep)
{
deviceStep = devStep;
}
//virtual int alloc_pmc(){
// return WLCT_OS_ERROR_CALL_NOT_IMPLEMENTED;
//}
protected:
bool bInitialized;
DType deviceType;
DEVICE_STEP deviceStep;
TCHAR szInterfaceName[MAX_DEVICE_NAME_LEN];
std::deque<FW_DBG_MSG*> m_dbgMsgsList;
public:
// Sampling
DWORD m_no_sampling_regs;
DWORD m_interval;
DWORD m_maxSampling;
DWORD* m_pRegsArr;
DWORD m_sampling_head;
DWORD m_sampling_tail;
DWORD m_loops;
DWORD oneSamplingSize;
// cyclic buffer that hold the sampling
DWORD* m_sampling_arr;
// I'm using this buffer for optimizations
// when getSamplingData will called, we will copy the data that was capture
// till now to this buffer.
// We do not need to allocate it each time and not release it.
DWORD* m_get_sampling_arr;
DWORD m_transferMethod; // 1-save to file 2-save to buffer
LONG m_flag_busy;
wlct_os_err_t lastError;
};