102 lines
2.7 KiB
C
102 lines
2.7 KiB
C
/*****************************************************************************
|
|
|
|
(c) Cambridge Silicon Radio Limited 2010
|
|
All rights reserved and confidential information of CSR
|
|
|
|
Refer to LICENSE.txt included with this source for details
|
|
on the license terms.
|
|
|
|
*****************************************************************************/
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/slab.h>
|
|
#include "csr_prim_defs.h"
|
|
#include "csr_msgconv.h"
|
|
#include "csr_macro.h"
|
|
#include "csr_lib.h"
|
|
|
|
void CsrUint8Des(u8 *value, u8 *buffer, size_t *offset)
|
|
{
|
|
*value = buffer[*offset];
|
|
*offset += sizeof(*value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint8Des);
|
|
|
|
void CsrUint16Des(u16 *value, u8 *buffer, size_t *offset)
|
|
{
|
|
*value = (buffer[*offset + 0] << 0) |
|
|
(buffer[*offset + 1] << 8);
|
|
*offset += sizeof(*value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint16Des);
|
|
|
|
void CsrUint32Des(u32 *value, u8 *buffer, size_t *offset)
|
|
{
|
|
*value = (buffer[*offset + 0] << 0) |
|
|
(buffer[*offset + 1] << 8) |
|
|
(buffer[*offset + 2] << 16) |
|
|
(buffer[*offset + 3] << 24);
|
|
*offset += sizeof(*value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint32Des);
|
|
|
|
void CsrMemCpyDes(void *value, u8 *buffer, size_t *offset, size_t length)
|
|
{
|
|
memcpy(value, &buffer[*offset], length);
|
|
*offset += length;
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrMemCpyDes);
|
|
|
|
void CsrCharStringDes(char **value, u8 *buffer, size_t *offset)
|
|
{
|
|
*value = kstrdup((char *) &buffer[*offset], GFP_KERNEL);
|
|
*offset += strlen(*value) + 1;
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrCharStringDes);
|
|
|
|
void CsrUint8Ser(u8 *buffer, size_t *offset, u8 value)
|
|
{
|
|
buffer[*offset] = value;
|
|
*offset += sizeof(value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint8Ser);
|
|
|
|
void CsrUint16Ser(u8 *buffer, size_t *offset, u16 value)
|
|
{
|
|
buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
|
|
buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
|
|
*offset += sizeof(value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint16Ser);
|
|
|
|
void CsrUint32Ser(u8 *buffer, size_t *offset, u32 value)
|
|
{
|
|
buffer[*offset + 0] = (u8) ((value >> 0) & 0xFF);
|
|
buffer[*offset + 1] = (u8) ((value >> 8) & 0xFF);
|
|
buffer[*offset + 2] = (u8) ((value >> 16) & 0xFF);
|
|
buffer[*offset + 3] = (u8) ((value >> 24) & 0xFF);
|
|
*offset += sizeof(value);
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrUint32Ser);
|
|
|
|
void CsrMemCpySer(u8 *buffer, size_t *offset, const void *value, size_t length)
|
|
{
|
|
memcpy(&buffer[*offset], value, length);
|
|
*offset += length;
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrMemCpySer);
|
|
|
|
void CsrCharStringSer(u8 *buffer, size_t *offset, const char *value)
|
|
{
|
|
if (value)
|
|
{
|
|
strcpy(((char *) &buffer[*offset]), value);
|
|
*offset += strlen(value) + 1;
|
|
}
|
|
else
|
|
{
|
|
CsrUint8Ser(buffer, offset, 0);
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(CsrCharStringSer);
|