1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
/*
********************************************************************************************************************
* usb host driver
*
* (c) Copyright 2007-2010, javen.China
* All Rights Reserved
*
* File Name : usb_list.c
*
* Author : javen
*
* Version : 2.0
*
* Date : 2010.03.02
*
* Description : 预先分配256个list head给list使用
*
* History :
*
********************************************************************************************************************
*/
#include "usb_host_base_types.h"
#include "usb_os_platform.h"
#include "usb_list.h"
#include "Horse.h"
static void *list_memory_base = NULL;
#define MAX_LIST_BLOCK_NUM 256
/*
*******************************************************************************
* ListMemoryInit
*
* Description:
* 预先分配256个list head
*
* Parameters:
* void
*
* Return value:
* 0 : success
* !0 : fail
*
* note:
* void
*
*******************************************************************************
*/
__s32 ListMemoryInit(void)
{
list_memory_base = HorseHeadInit(sizeof(struct list_head), MAX_LIST_BLOCK_NUM);
if (list_memory_base == NULL)
{
DMSG_PANIC("ERR: HorseHeadInit failed\n");
return -1;
}
return 0;
}
/*
*******************************************************************************
* ListMemoryExit
*
* Description:
* 释放分配的256个list head
*
* Parameters:
* void
*
* Return value:
* 0 : success
* !0 : fail
*
* note:
* void
*
*******************************************************************************
*/
__s32 ListMemoryExit(void)
{
if (list_memory_base)
{
HorseHeadExit(list_memory_base);
list_memory_base = NULL;
}
return 0;
}
/*
*******************************************************************************
* ListMemoryMalloc
*
* Description:
* 从事先分配好的256个list head中取出没有使用的list head。
*
* Parameters:
* void
*
* Return value:
* 返回可用的list head的地址
*
* note:
* void
*
*******************************************************************************
*/
void *ListMemoryMalloc(__u32 size, u8 *file_name, u32 line_nr)
{
void *addr = NULL;
addr = HorseBlockMalloc(list_memory_base);
if (addr == NULL)
{
addr = USB_OS_MALLOC(size, file_name, line_nr);
DMSG_INFO("HorseBlockMalloc failed, must USB_OS_MALLOC, addr = %x\n", addr);
}
return addr;
}
/*
*******************************************************************************
* ListMemoryFree
*
* Description:
* 释放ListMemoryMalloc分配的list head
*
* Parameters:
* void
*
* Return value:
* void
*
* note:
* void
*
*******************************************************************************
*/
void ListMemoryFree(void *addr, u8 *file_name, u32 line_nr)
{
if (addr)
{
if (HorseBlockFree(list_memory_base, addr) != 0)
{
DMSG_INFO("HorseBlockFree failed, must USB_OS_FREE, addr = %x\n", addr);
USB_OS_FREE(addr);
}
}
}
|