link_buff.h

来自「AMLOGIC DPF source code」· C头文件 代码 · 共 90 行

H
90
字号
#ifndef __LINK_BUFF_H
#define __LINK_BUFF_H

#ifndef SMP_CACHE_BYTES
	#define SMP_CACHE_BYTES		4
#endif
#define LKB_DATA_ALIGN(X)		(((X) + (SMP_CACHE_BYTES - 1)) & ~(SMP_CACHE_BYTES - 1))

#define link_buff_malloc		bt_umalloc
#define link_buff_free			bt_ufree


typedef struct link_buff_head
{
	/* These two members must be first. */
	struct link_buff	*next;
	struct link_buff	*prev;

	__u32			dlen;	//total data length in queue
	__u32			qlen;
	spin_lock_t		lock;
} link_buff_head_t;

/** 
 *	struct link_buff - link buffer
 *	@next: Next buffer in list
 *	@prev: Previous buffer in list
 *	@list: List we are on
 *	@len: Length of actual data
 *	@data_len: Data length
 *	@truesize: Buffer size 
 *	@head: Head of buffer
 *	@data: Data head pointer
 *	@tail: Tail pointer
 *	@end: End pointer
 */

typedef struct link_buff
{
	/* These two members must be first. */
	struct link_buff		*next;
	struct link_buff		*prev;

	struct link_buff_head	*list;

	__u32				len,
						data_len;

	/* These elements must be at the end, see lkb_alloc() for details.  */
	__u32				truesize;
	__u8				*head,
						*data,
						*tail,
						*end;
} link_buff_t;


link_buff_t *lkb_alloc(__u32 size);
void lkb_free(link_buff_t *lkb);

int lkb_queue_not_valid(link_buff_head_t *list);
void lkb_queue_head_init(link_buff_head_t *list);
int lkb_queue_empty(const link_buff_head_t *list_);
__u32 lkb_queue_len(const link_buff_head_t *list_);
__u32 lkb_data_len(const link_buff_head_t *list_);
__u32 lkb_headroom(const link_buff_t *lkb);
__u32 lkb_tailroom(const link_buff_t *lkb);
__u32 lkb_headlen(const link_buff_t *lkb);

void lkb_queue_head(link_buff_head_t *list, link_buff_t *newlk);
void lkb_queue_tail(link_buff_head_t *list, link_buff_t *newlk);
link_buff_t *lkb_dequeue(link_buff_head_t *list);
link_buff_t *lkb_dequeue_tail(link_buff_head_t *list);
void lkb_queue_purge(link_buff_head_t *list);
void lkb_unlink(link_buff_t *lkb);

link_buff_t *lkb_peek(link_buff_head_t *list_);
link_buff_t *lkb_peek_tail(link_buff_head_t *list_);
link_buff_t *lkb_peek_next(link_buff_t *lkb);
link_buff_t *lkb_peek_prev(link_buff_t *lkb);

__u8 *lkb_put(link_buff_t *lkb, __u32 len);
void lkb_trim(link_buff_t *lkb, __u32 len);
__u8 *lkb_push(link_buff_t *lkb, __u32 len);
__u8 *lkb_pull(link_buff_t *lkb, __u32 len);
void lkb_reserve(link_buff_t *lkb, __u32 len);


#endif	//__LINK_BUFF_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?