1981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*
2981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * osmemapi.c
3981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
4981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * All rights reserved.
6981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
7981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * modification, are permitted provided that the following conditions
9981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * are met:
10981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
11981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    the documentation and/or other materials provided with the
16981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    distribution.
17981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    contributors may be used to endorse or promote products derived
19981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    from this software without specific prior written permission.
20981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
21981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */
33981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
34981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
35981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*
36981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * src/osmemapi.c
37981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
38981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */
39981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
40981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "arch_ti.h"
41981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
42981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/stddef.h>
43981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/string.h>
44981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/time.h>
45981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/timer.h>
46981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
47981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/module.h>
48981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/kernel.h>
49981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/netdevice.h>
50981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/etherdevice.h>
51981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/vmalloc.h>
52981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/string.h>
53981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/delay.h>
54981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/time.h>
55981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include <linux/list.h>
56981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
57981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "osApi.h"
58981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "tidef.h"
59981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "WlanDrvIf.h"
60981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
61981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidttypedef void (*os_free)(void *);
62981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstruct os_mem_block
63981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
646a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	struct list_head blk_list;
656a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_free f_free;
666a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	__u32 size;
676a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	__u32 signature;
68981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt};
69981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define MEM_BLOCK_START  (('m'<<24) | ('e'<<16) | ('m'<<8) | 's')
70981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define MEM_BLOCK_END    (('m'<<24) | ('e'<<16) | ('m'<<8) | 'e')
71981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
72981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
73981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        																*
74981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *						OS Memory API													*
75981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *																						*
76981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************/
77981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
78981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
79981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryAlloc()
80981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
81981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    Allocates resident (nonpaged) system-space memory.
82981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
83981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
84981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		- Specifies the size, in bytes, to be allocated.
85981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
86981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			Pointer to the allocated memory.
87981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				NULL if there is insufficient memory available.
88981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
89981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:         	With the call to vmalloc it is assumed that this function will
90981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				never be called in an interrupt context. vmalloc has the potential to
91981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				sleep the caller while waiting for memory to become available.
92981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
93981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
94981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid*
95981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryAlloc(
96981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_HANDLE OsContext,
97981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT32 Size
98981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        )
99981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
1006a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	struct os_mem_block *blk;
1016a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	__u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32);
102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef TI_MEM_ALLOC_TRACE
1046a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_printf("MTT:%s:%d ::os_memoryAlloc(0x%p, %lu) : %lu\n",__FUNCTION__, __LINE__,OsContext,Size,total_size);
105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif
106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	/*
1076a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	Memory optimization issue. Allocate up to 2 pages (8k) from the SLAB
1086a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	    allocator (2^n), otherwise allocate from virtual pool.
1096a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	If full Async mode is used, allow up to 6 pages (24k) for DMA-able
1106a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	  memory, so the TxCtrlBlk table can be transacted over DMA.
111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	*/
112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef FULL_ASYNC_MODE
1136a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (total_size < 6 * 4096)
114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#else
1156a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (total_size < 2 * 4096)
116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif
1176a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
1186a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		if (in_atomic())
1196a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			blk = kmalloc(total_size, GFP_ATOMIC);
1206a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		else
1216a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			blk = kmalloc(total_size, GFP_KERNEL);
1226a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		if (!blk) {
1236a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			printk("%s: NULL\n",__func__);
1246a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			return NULL;
1256a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		}
1266a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		blk->f_free = (os_free)kfree;
1276a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
1286a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	else {
1296a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		/* We expect that the big allocations should be made outside
1306a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		     the interrupt, otherwise fail
131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		*/
1326a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		if (in_interrupt()) {
1336a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			printk("%s: NULL\n",__func__);
134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt			return NULL;
1356a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		}
1366a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	        blk = vmalloc(total_size);
1376a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	        if (!blk) {
1386a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			printk("%s: NULL\n",__func__);
1396a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			return NULL;
1406a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		}
1416a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		blk->f_free = (os_free)vfree;
1426a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
1436a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
1446a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_profile (OsContext, 4, total_size);
1456a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
1466a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	/*list_add(&blk->blk_list, &drv->mem_blocks);*/
1476a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk->size = Size;
1486a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk->signature = MEM_BLOCK_START;
1496a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	*(__u32 *)((unsigned char *)blk + total_size - sizeof(__u32)) = MEM_BLOCK_END;
1506a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return (void *)((char *)blk + sizeof(struct os_mem_block));
151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryCAlloc()
156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    Allocates an array in memory with elements initialized to 0.
158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	-	our adapter context.
160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Number		-	Number of elements
161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		-	Length in bytes of each element
162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid*
168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryCAlloc(
169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_HANDLE OsContext,
170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT32 Number,
171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT32 Size
172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        )
173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
1746a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	void* pAllocatedMem;
1756a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	TI_UINT32 MemSize;
176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef TI_MEM_ALLOC_TRACE
1786a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_printf("MTT:%s:%d ::os_memoryCAlloc(0x%p, %lu, %lu) : %lu\n",__FUNCTION__,__LINE__,OsContext,Number,Size,Number*Size);
179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif
1806a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	MemSize = Number * Size;
181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
1826a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	pAllocatedMem = os_memoryAlloc(OsContext, MemSize);
183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
1846a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (!pAllocatedMem)
1856a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return NULL;
186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
1876a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	memset(pAllocatedMem,0,MemSize);
188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
1896a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return pAllocatedMem;
190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryFree()
196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function releases a block of memory previously allocated with the
198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				os_memoryAlloc function.
199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	-	our adapter context.
202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pMemPtr		-	Pointer to the base virtual address of the allocated memory.
203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								This address was returned by the os_memoryAlloc function.
204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		-	Specifies the size, in bytes, of the memory block to be released.
205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								This parameter must be identical to the Length that was passed to
206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								os_memoryAlloc.
207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid
213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryFree(
214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_HANDLE OsContext,
215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        void* pMemPtr,
216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT32 Size
217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        )
218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
2196a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	struct os_mem_block *blk;
2206a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
2216a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (!pMemPtr) {
2226a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		printk("%s: NULL\n",__func__);
2236a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
2246a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
2256a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk = (struct os_mem_block *)((char *)pMemPtr - sizeof(struct os_mem_block));
2266a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef TI_MEM_ALLOC_TRACE
2286a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_printf("MTT:%s:%d ::os_memoryFree(0x%p, 0x%p, %lu) : %d\n",__FUNCTION__,__LINE__,OsContext,pMemPtr,Size,-Size);
229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif
230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	if (blk->signature != MEM_BLOCK_START)
2316a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		printk("\n\n%s: memory block signature is incorrect - 0x%x\n\n\n",
2336a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			__FUNCTION__, blk->signature);
2346a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
2356a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
2366a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	*(char *)(&blk->signature) = '~';
2376a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
2386a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		!= MEM_BLOCK_END)
2396a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		printk("\n\n%s: memory block corruption. Size=%u\n\n\n",
2416a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			__FUNCTION__, blk->size);
2426a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
2446a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	os_profile (OsContext, 5, blk->size + sizeof(struct os_mem_block) + sizeof(__u32));
245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
2466a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk->f_free(blk);
247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memorySet()
252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function fills a block of memory with given value.
254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pMemPtr		- Specifies the base address of a block of memory
257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Value		- Specifies the value to set
258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Length		- Specifies the size, in bytes, to copy.
259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid
265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memorySet(
266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE OsContext,
267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pMemPtr,
268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_INT32 Value,
269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Length
270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
2726a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (!pMemPtr) {
2736a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		printk("%s: NULL\n",__func__);
2746a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
2756a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
2766a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	memset(pMemPtr,Value,Length);
277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        _os_memoryAlloc4HwDma()
281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    Allocates resident (nonpaged) system-space memory for DMA operations.
283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		- Specifies the size, in bytes, to be allocated.
286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			Pointer to the allocated memory.
288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				NULL if there is insufficient memory available.
289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid*
294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryAlloc4HwDma(
295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE pOsContext,
296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Size
297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
2996a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	struct os_mem_block *blk;
300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	__u32 total_size = Size + sizeof(struct os_mem_block) + sizeof(__u32);
301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	/*
3026a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if the size is greater than 2 pages then we cant allocate the memory
3036a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	    through kmalloc so the function fails
304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	*/
305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	if (Size < 2 * OS_PAGE_SIZE)
3066a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
3076a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		blk = kmalloc(total_size, GFP_ATOMIC|GFP_DMA);
3086a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		if (!blk) {
3096a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			printk("%s: NULL\n",__func__);
310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt			return NULL;
3116a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		}
3126a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		blk->f_free = (os_free)kfree;
313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	}
3146a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	else
3156a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		printk("\n\n%s: memory cant be allocated-Size = %d\n\n\n",
3176a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			__FUNCTION__, Size);
318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		return NULL;
319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	}
320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	blk->size = Size;
321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	blk->signature = MEM_BLOCK_START;
322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	*(__u32 *)((unsigned char *)blk + total_size - sizeof(__u32)) = MEM_BLOCK_END;
323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
3246a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return (void *)((char *)blk + sizeof(struct os_mem_block));
325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        _os_memory4HwDmaFree()
329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function releases a block of memory previously allocated with the
331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				_os_memoryAlloc4HwDma function.
332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	-	our adapter context.
335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pMemPtr		-	Pointer to the base virtual address of the allocated memory.
336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								This address was returned by the os_memoryAlloc function.
337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		-	Specifies the size, in bytes, of the memory block to be released.
338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								This parameter must be identical to the Length that was passed to
339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt								os_memoryAlloc.
340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid
346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memory4HwDmaFree(
347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE pOsContext,
348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pMem_ptr,
349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Size
350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
3526a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	struct os_mem_block *blk;
3536a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
3546a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (!pMem_ptr) {
3556a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		printk("%s: NULL\n",__func__);
3566a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
3576a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
3586a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk = (struct os_mem_block *)((char *)pMem_ptr - sizeof(struct os_mem_block));
359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	if (blk->signature != MEM_BLOCK_START)
3616a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		printk("\n\n%s: memory block signature is incorrect - 0x%x\n\n\n",
3636a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			__FUNCTION__, blk->signature);
3646a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
3656a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
3666a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	*(char *)(&blk->signature) = '~';
3676a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (*(__u32 *)((unsigned char *)blk + blk->size + sizeof(struct os_mem_block))
3686a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		!= MEM_BLOCK_END)
3696a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	{
370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt		printk("\n\n%s: memory block corruption. Size=%u\n\n\n",
3716a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt			__FUNCTION__, blk->size);
3726a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
373981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
3746a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	blk->f_free(blk);
375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryZero()
379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function fills a block of memory with 0s.
381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pMemPtr		- Specifies the base address of a block of memory
384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Length		- Specifies how many bytes to fill with 0s.
385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid
391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryZero(
392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE OsContext,
393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pMemPtr,
394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Length
395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
3976a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	if (!pMemPtr) {
3986a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		printk("%s: NULL\n",__func__);
3996a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt		return;
4006a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	}
4016a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	memset(pMemPtr,0,Length);
402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryCopy()
407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function copies a specified number of bytes from one caller-supplied
409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				location to another.
410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pDstPtr		- Destination buffer
413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pSrcPtr		- Source buffer
414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		- Specifies the size, in bytes, to copy.
415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid
421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryCopy(
422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE OsContext,
423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pDstPtr,
424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pSrcPtr,
425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Size
426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
4286a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt
4296a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	memcpy(pDstPtr,pSrcPtr,Size);
430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryCompare()
434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    Compare characters in two buffers.
436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Buf1		- First buffer
439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Buf2		- Second buffer
440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Count		- Number of characters
441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			The return value indicates the relationship between the buffers:
443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                < 0 Buf1 less than Buf2
444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                0 Buf1 identical to Buf2
445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                > 0 Buf1 greater than Buf2
446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_INT32
450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryCompare(
451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_HANDLE OsContext,
452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT8* Buf1,
453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_UINT8* Buf2,
454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TI_INT32 Count
455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        )
456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
4576a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return memcmp(Buf1, Buf2, Count);
458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryCopyFromUser()
465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function copies a specified number of bytes from one caller-supplied
467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				location to another. source buffer is in USER-MODE address space
468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pDstPtr		- Destination buffer
471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pSrcPtr		- Source buffer
472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		- Specifies the size, in bytes, to copy.
473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtint
479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryCopyFromUser(
480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE OsContext,
481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pDstPtr,
482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pSrcPtr,
483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Size
484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
4866a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return copy_from_user(pDstPtr,pSrcPtr,Size);
487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/****************************************************************************************
490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *                        os_memoryCopyToUser()
491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt ****************************************************************************************
492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtDESCRIPTION:    This function copies a specified number of bytes from one caller-supplied
493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				location to another. desination buffer is in USER-MODE address space
494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtARGUMENTS:		OsContext	- our adapter context.
496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pDstPtr		- Destination buffer
497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				pSrcPtr		- Source buffer
498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt				Size		- Specifies the size, in bytes, to copy.
499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtRETURN:			None
501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtNOTES:
503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************************/
504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtint
505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtos_memoryCopyToUser(
506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_HANDLE OsContext,
507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pDstPtr,
508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    void* pSrcPtr,
509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT32 Size
510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    )
511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
5126a0d0824f00909557486f113d52716238595aaa0Dmitry Shmidt	return copy_to_user(pDstPtr,pSrcPtr,Size);
513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
514