| 
									
										
										
										
											2014-12-21 01:46:27 +02:00
										 |  |  | #ifndef __MCACHE_H__
 | 
					
						
							|  |  |  | #define	__MCACHE_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdint.h>
 | 
					
						
							|  |  |  | #include <time.h>
 | 
					
						
							|  |  |  | #include <sys/types.h>
 | 
					
						
							|  |  |  | #include <pthread.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <tdata/usrtc.h>
 | 
					
						
							|  |  |  | #include <tdata/idx_allocator.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define _MCACHE_MAGIC  0xabcdbeef
 | 
					
						
							|  |  |  | #define _MPG_SIZE      4096
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define _MCACHE_EMINSIZE  sizeof(unsigned long) + 8
 | 
					
						
							|  |  |  | #define _MCACHE_EMAXSIZE  sizeof(unsigned long) + 224
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define _MCACHE_PREALLOC    (1 << 1)  /* preallocate elements on initialization */
 | 
					
						
							|  |  |  | #define _MCACHE_ALLOCAHEAD  (1 << 2)  /* allocate more ahead */
 | 
					
						
							|  |  |  | #define _MCACHE_MEMFREE     (1 << 3)  /* free as possible */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* this structure used to store info on page, and located
 | 
					
						
							|  |  |  |  * at the beginning of the allocated page | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct _mpg { | 
					
						
							|  |  |  |   void *addr; | 
					
						
							|  |  |  |   unsigned int use; | 
					
						
							|  |  |  |   usrtc_node_t node; | 
					
						
							| 
									
										
										
										
											2014-12-26 17:25:33 +02:00
										 |  |  | } __attribute__((packed)); | 
					
						
							| 
									
										
										
										
											2014-12-21 01:46:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct __sntl_mcache_ { | 
					
						
							|  |  |  |   unsigned int magic; /** < first 32bit to check it */ | 
					
						
							|  |  |  |   usrtc_t pg_tree;    /** < pages tree */ | 
					
						
							|  |  |  |   size_t esize;       /** < element size*/ | 
					
						
							|  |  |  |   pthread_rwlock_t lock;  /** < thread safe cap */ | 
					
						
							|  |  |  |   usrtc_t allocated;  /** < allocated elements to increase allocation */ | 
					
						
							|  |  |  |   usrtc_t used;       /** < used ones */ | 
					
						
							|  |  |  |   unsigned int epc;   /** < elements per cache page */ | 
					
						
							|  |  |  |   int flags;          /** < flags of the cache */ | 
					
						
							| 
									
										
										
										
											2014-12-26 17:25:33 +02:00
										 |  |  | } sntl_mcache_t; | 
					
						
							| 
									
										
										
										
											2014-12-21 01:46:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | int sntl_mcache_init(sntl_mcache_t*, size_t, int); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void* sntl_mcache_alloc(sntl_mcache_t*); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void sntl_mcache_free(void*); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void sntl_mcache_destroy(sntl_mcache_t*); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* __MCACHE_H__ */
 |