summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/HEADER/Object.h
blob: e630c33989afb9c7151848805301111aced1c271 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef __INC_OBJECT_H
#define __INC_OBJECT_H


typedef struct _RT_OBJECT{
	RT_LIST_ENTRY	ListEntry;
	void*			pStartVa;
	unsigned int	SizeAlloc;
}RT_OBJECT, *PRT_OBJECT;

#define DECLARE_RT_OBJECT(__DATA_TYPE) RT_OBJECT __Object

#define INIT_RT_OBJECT_LIST(__pObjectList) RTInitializeListHead(__pObjectList);


#define ADD_RT_OBJECT(__pObjectList, __pPtr, __DATA_TYPE) \
	{ \
		PRT_OBJECT pObject = &(((__DATA_TYPE *)(__pPtr))->__Object); \
		pObject->pStartVa = (__pPtr); \
		pObject->SizeAlloc = sizeof(__DATA_TYPE); \
		RTInsertTailList(__pObjectList, &(pObject->ListEntry) ); \
	}

#define REMOVE_RT_OBJECT(__pObjectList) RTRemoveHeadList(__pObjectList)

#define HAS_RT_OBJECT(__pObjectList) RTIsListNotEmpty(__pObjectList)

#define ALLOC_RT_OBJECT(__pAdapter, __pObjectList, __ppOutPtr, __DATA_TYPE) \
	{ \
		*(__ppOutPtr) = NULL; \
		if( RT_STATUS_SUCCESS == PlatformAllocateMemory((__pAdapter), (__ppOutPtr),  sizeof(__DATA_TYPE)) ) { \
			PlatformZeroMemory(*(__ppOutPtr), sizeof(__DATA_TYPE)); \
			ADD_RT_OBJECT(__pObjectList, *(__ppOutPtr), __DATA_TYPE); \
		} \
	}

#define FREE_RT_OBJECT(__pObjectList) \
	{ \
		PRT_OBJECT __pObject = (PRT_OBJECT)REMOVE_RT_OBJECT(__pObjectList); \
		PlatformFreeMemory((__pObject)->pStartVa, (__pObject)->SizeAlloc); \
	}

#endif