rt-thread-official/components/net/uip/rt-thread/uip_pbuf.c

50 lines
1.2 KiB
C

#include "uip_pbuf.h"
#include "rtdef.h"
typedef rt_uint32_t mem_ptr_t;
#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + RT_ALIGN_SIZE - 1) & ~(mem_ptr_t)(RT_ALIGN_SIZE-1)))
#define LWIP_MEM_ALIGN_SIZE(size) (((size) + RT_ALIGN_SIZE - 1) & ~(RT_ALIGN_SIZE-1))
#define SIZEOF_STRUCT_PBUF LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))
u8_t
pbuf_free(struct pbuf *p)
{
//struct pbuf *q;
if (p == RT_NULL) return 0;
rt_free(p);
//rt_free(&p->len);
return 1;
}
struct pbuf *
pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)
{
struct pbuf *p;
u16_t offset = 0;
offset += 16;
/* If pbuf is to be allocated in RAM, allocate memory for it. */
p = (struct pbuf*)rt_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length));
if (p == RT_NULL) return RT_NULL;
/* Set up internal structure of the pbuf. */
p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset));
p->len = length;
return p;
}
u8_t
pbuf_header(struct pbuf *p, s16_t header_size_increment) //
{
//extrat link header
uint8_t *ptr;
ptr = p->payload;
ptr -= header_size_increment;
p->payload = ptr;
p->len += header_size_increment;
return 0;
}