/****************************************************************************** * * Copyright (c) 2019 Intel. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *******************************************************************************/ #ifndef __SYSLIB_H__ #define __SYSLIB_H__ typedef unsigned char U8; /* unsigned 8-bit integer */ typedef unsigned short U16; /* unsigned 16-bit integer */ typedef unsigned int U32; /* unsigned 32-bit integer */ #ifdef __x86_64__ typedef unsigned long U64; /* unsigned 64-bit integer */ #else typedef unsigned long long U64; /* unsigned 64-bit integer */ #endif typedef volatile unsigned char V8; typedef volatile unsigned short V16; typedef volatile unsigned int V32; typedef volatile unsigned long V4; typedef signed char S8; /* 8-bit signed integer */ typedef signed short S16; /* 16-bit signed integer */ typedef signed int S32; /* 32-bit signed integer */ #ifdef __x86_64__ typedef signed long S64; /* unsigned 64-bit integer */ #else typedef signed long long S64; /* unsigned 64-bit integer */ #endif #ifndef _PVOID_ #define _PVOID_ typedef void *PVOID; #endif typedef U64 (*wls_us_addr_conv)(void*, U64); #define K 1024 #define M (K*K) #define KHZ 1000 #define MHZ (KHZ * KHZ) #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif #ifndef NULL #define NULL ((PVOID)(0)) #endif #define HANDLE PVOID #ifdef __KERNEL__ #define DSB() smp_mb() #define DMB() smp_wmb() #else #define DSB() __asm__ __volatile__("mfence": : :"memory") #define DMB() __asm__ __volatile__("sfence": : :"memory") #endif typedef struct tagWLS_MSG_HANDLE { U64 pIaPaMsg; U32 pWlsPaMsg; U32 MsgSize; U16 TypeID; // used to identify destination U16 flags; U32 res1; } WLS_MSG_HANDLE, *PWLS_MSG_HANDLE; /* 4 x QW */ typedef struct tagFASTQUEUE { U64 pStorage; U32 BlockSize; U32 sema; V32 get; V32 put; U32 size; U32 res; } FASTQUEUE, *PFASTQUEUE; typedef struct tagWLS_MSG_QUEUE { U64 pStorage; U32 sema; V32 get; V32 put; U32 size; } WLS_MSG_QUEUE, *PWLS_MSG_QUEUE; #define COUNT(some_array) ( sizeof(some_array)/sizeof((some_array)[0]) ) void SFL_DefQueue(PFASTQUEUE pq, void *pStorage, int StorageSize); int SFL_WlsEnqueue(PFASTQUEUE pq, U64 pData, wls_us_addr_conv change_addr, void* hWls); int SFL_Enqueue_NoSync(PFASTQUEUE pq, PVOID pData); U64 SFL_WlsDequeue(PFASTQUEUE pq, wls_us_addr_conv change_addr, void *hWls); PVOID SFL_Dequeue_NoSync(PFASTQUEUE pq); U32 SFL_Queue_BatchRead( PFASTQUEUE pq, unsigned long *pDestArr, U32 Count); U32 SFL_Queue_BatchWrite( PFASTQUEUE pq, unsigned long *pSrcArr, U32 Count); void WLS_MsgDefineQueue(PWLS_MSG_QUEUE pq, PWLS_MSG_HANDLE pStorage, U32 size, U32 sema); U32 WLS_MsgEnqueue(PWLS_MSG_QUEUE pq, U64 pIaPaMsg, U32 MsgSize, U16 TypeID, U16 flags, wls_us_addr_conv change_addr, void* h); int WLS_MsgDequeue(PWLS_MSG_QUEUE pq, PWLS_MSG_HANDLE pDestItem, wls_us_addr_conv change_addr, void *hWls); U32 WLS_GetNumItemsInTheQueue(PWLS_MSG_QUEUE fpq); U32 SFL_GetNumItemsInTheQueue(FASTQUEUE *fpq); #endif // __SYSLIB_H__