Changes in uspace/drv/uhci-hcd/utils/malloc32.h [23f40280:fb2de0a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/utils/malloc32.h
r23f40280 rfb2de0a 41 41 #include <as.h> 42 42 43 #include "slab.h"44 45 43 #define UHCI_STRCUTURES_ALIGNMENT 16 46 44 #define UHCI_REQUIRED_PAGE_SIZE 4096 … … 59 57 uintptr_t result; 60 58 const int ret = as_get_physical_mapping(addr, &result); 61 assert(ret == EOK);62 63 59 if (ret != EOK) 64 60 return 0; … … 72 68 */ 73 69 static inline void * malloc32(size_t size) { 74 if (size <= SLAB_ELEMENT_SIZE) 75 return slab_malloc_g(); 76 assert(false); 77 return memalign(UHCI_STRCUTURES_ALIGNMENT, size); 70 /* This works only when the host has less than 4GB of memory as 71 * physical address needs to fit into 32 bits */ 72 73 /* If we need more than one page there is no guarantee that the 74 * memory will be continuous */ 75 if (size > PAGE_SIZE) 76 return NULL; 77 /* Calculate alignment to make sure the block won't cross page 78 * boundary */ 79 size_t alignment = UHCI_STRCUTURES_ALIGNMENT; 80 while (alignment < size) 81 alignment *= 2; 82 return memalign(alignment, size); 78 83 } 79 84 /*----------------------------------------------------------------------------*/ … … 85 90 if (!addr) 86 91 return; 87 if (slab_in_range_g(addr))88 return slab_free_g(addr);89 92 free(addr); 90 93 } … … 97 100 { 98 101 void *free_address = as_get_mappable_page(UHCI_REQUIRED_PAGE_SIZE); 99 assert(free_address); /* TODO: remove this assert */100 102 if (free_address == 0) 101 103 return NULL;
Note:
See TracChangeset
for help on using the changeset viewer.