32 #define __INCLUDE_FROM_USB_DRIVER
35 #ifdef USB_CAN_BE_HOST
37 #include "../../../Common/Common.h"
45 typedef struct MemBlockInfo_t {
54 #define ALIGN_FOUR_BYTES (4) // FIXME only m3 is 1 byte alignment
58 #define HEADER_SIZE (sizeof(sMemBlockInfo))
59 #define HEADER_POINTER(x) ((uint8_t *)x - sizeof(sMemBlockInfo))
60 #define NEXT_BLOCK(x) ( ((PMemBlockInfo) ( ((x)->next==0) ? NULL : head + (x)->next )) )
61 #define LINK_TO_THIS_BLOCK(x) ( ((uint32_t) ((x)-head)) )
68 PMemBlockInfo head = (PMemBlockInfo) USB_Mem_Buffer;
71 head->size = (Memory_Pool_Size & 0xfffffffc) -
HEADER_SIZE ;
77 PMemBlockInfo freeBlock, newBlock, blk_ptr =
NULL;
78 PMemBlockInfo head = (PMemBlockInfo) USB_Mem_Buffer;
85 for (freeBlock = head; freeBlock !=
NULL; freeBlock =
NEXT_BLOCK(freeBlock))
87 if ((freeBlock->isFree == 1) && (freeBlock->size >= size))
94 if (blk_ptr ==
NULL) {
95 return ((uint8_t *)
NULL);
106 freeBlock = (PMemBlockInfo) (((uint8_t *) blk_ptr) + size +
HEADER_SIZE);
107 freeBlock->next = blk_ptr->next;
108 freeBlock->size = blk_ptr->size - (
HEADER_SIZE + size);
109 freeBlock->isFree = 1;
113 newBlock->size = size;
115 newBlock->isFree = 0;
124 PMemBlockInfo head = (PMemBlockInfo) USB_Mem_Buffer;
125 PMemBlockInfo blk_ptr;
134 if (blk_ptr->next != 0)
147 if (prev->isFree == 1)
149 prev->size = prev->size + blk_ptr->size +
HEADER_SIZE;
150 prev->next = blk_ptr->next;