50 lines
1.3 KiB
C
50 lines
1.3 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;
|
|
} |