Skip to content

Commit

Permalink
Staging: csr: update to version 5.1.0 of the driver
Browse files Browse the repository at this point in the history
This brings the in-kernel driver up to the level of the
csr-linux-wifi-5.1.0-oss.tar.gz tarball.

Cc: Mikko Virkkilä <mikko.virkkila@bluegiga.com>
Cc: Lauri Hintsala <Lauri.Hintsala@bluegiga.com>
Cc: Riku Mettälä <riku.mettala@bluegiga.com>
Cc: Veli-Pekka Peltola <veli-pekka.peltola@bluegiga.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Greg Kroah-Hartman committed Jun 20, 2012
1 parent 635d2b0 commit 95edd09
Show file tree
Hide file tree
Showing 56 changed files with 3,845 additions and 1,670 deletions.
35 changes: 35 additions & 0 deletions drivers/staging/csr/csr_framework_ext.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,3 +211,38 @@ void CsrMemFree(void *pointer)
kfree(pointer);
}
EXPORT_SYMBOL_GPL(CsrMemFree);

/*----------------------------------------------------------------------------*
* NAME
* CsrMemAllocDma
*
* DESCRIPTION
* Allocate DMA capable dynamic memory of a given size.
*
* RETURNS
* Pointer to allocated memory, or NULL in case of failure.
* Allocated memory is not initialised.
*
*----------------------------------------------------------------------------*/
void *CsrMemAllocDma(CsrSize size)
{
return kmalloc(size, GFP_KERNEL | GFP_DMA);
}
EXPORT_SYMBOL_GPL(CsrMemAllocDma);

/*----------------------------------------------------------------------------*
* NAME
* CsrMemFreeDma
*
* DESCRIPTION
* Free DMA capable dynamic allocated memory.
*
* RETURNS
* void
*
*----------------------------------------------------------------------------*/
void CsrMemFreeDma(void *pointer)
{
kfree(pointer);
}
EXPORT_SYMBOL_GPL(CsrMemFreeDma);
1 change: 1 addition & 0 deletions drivers/staging/csr/csr_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <stddef.h>
#include <sys/types.h>
#include <stdarg.h>
#include <string.h>
#endif

#ifdef __cplusplus
Expand Down
4 changes: 4 additions & 0 deletions drivers/staging/csr/csr_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ void CsrUInt32ToHex(CsrUint32 number, CsrCharString *str)
/*------------------------------------------------------------------*/
/* String */
/*------------------------------------------------------------------*/
#ifndef CSR_USE_STDC_LIB
void *CsrMemCpy(void *dest, const void *src, CsrSize count)
{
return memcpy(dest, src, count);
Expand Down Expand Up @@ -257,7 +258,9 @@ void *CsrMemDup(const void *buf1, CsrSize count)

return buf2;
}
#endif

#ifndef CSR_USE_STDC_LIB
CsrCharString *CsrStrCpy(CsrCharString *dest, const CsrCharString *src)
{
return strcpy(dest, src);
Expand Down Expand Up @@ -303,6 +306,7 @@ CsrCharString *CsrStrChr(const CsrCharString *string, CsrCharString c)
{
return strchr(string, c);
}
#endif

CsrInt32 CsrVsnprintf(CsrCharString *string, CsrSize count, const CsrCharString *format, va_list args)
{
Expand Down
45 changes: 36 additions & 9 deletions drivers/staging/csr/csr_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,53 @@ void CsrUInt16ToHex(CsrUint16 number, CsrCharString *str);
void CsrUInt32ToHex(CsrUint32 number, CsrCharString *str);

/*------------------------------------------------------------------*/
/* String */
/* Standard C Library functions */
/*------------------------------------------------------------------*/
#ifdef CSR_USE_STDC_LIB
#define CsrMemCpy memcpy
#define CsrMemMove memmove
#define CsrStrCpy strcpy
#define CsrStrNCpy strncpy
#define CsrStrCat strcat
#define CsrStrNCat strncat
#define CsrMemCmp(s1, s2, n) ((CsrInt32) memcmp((s1), (s2), (n)))
#define CsrStrCmp(s1, s2) ((CsrInt32) strcmp((s1), (s2)))
#define CsrStrNCmp(s1, s2, n) ((CsrInt32) strncmp((s1), (s2), (n)))
/*#define CsrMemChr memchr*/
#define CsrStrChr strchr
/*#define CsrStrCSpn strcspn*/
/*#define CsrStrPBrk strpbrk*/
/*#define CsrStrRChr strrchr*/
/*#define CsrStrSpn strspn*/
#define CsrStrStr strstr
/*#define CsrStrTok strtok*/
#define CsrMemSet memset
#define CsrStrLen strlen
/*#define CsrVsnprintf(s, n, format, arg) ((CsrInt32) vsnprintf((s), (n), (format), (arg)))*/
#else /* !CSR_USE_STDC_LIB */
void *CsrMemCpy(void *dest, const void *src, CsrSize count);
void *CsrMemSet(void *dest, CsrUint8 c, CsrSize count);
void *CsrMemMove(void *dest, const void *src, CsrSize count);
CsrInt32 CsrMemCmp(const void *buf1, const void *buf2, CsrSize count);
void *CsrMemDup(const void *buf1, CsrSize count);
CsrCharString *CsrStrCpy(CsrCharString *dest, const CsrCharString *src);
CsrCharString *CsrStrNCpy(CsrCharString *dest, const CsrCharString *src, CsrSize count);
int CsrStrNICmp(const CsrCharString *string1, const CsrCharString *string2, CsrSize count);
CsrCharString *CsrStrCat(CsrCharString *dest, const CsrCharString *src);
CsrCharString *CsrStrNCat(CsrCharString *dest, const CsrCharString *src, CsrSize count);
CsrCharString *CsrStrStr(const CsrCharString *string1, const CsrCharString *string2);
CsrSize CsrStrLen(const CsrCharString *string);
CsrInt32 CsrMemCmp(const void *buf1, const void *buf2, CsrSize count);
CsrInt32 CsrStrCmp(const CsrCharString *string1, const CsrCharString *string2);
CsrInt32 CsrStrNCmp(const CsrCharString *string1, const CsrCharString *string2, CsrSize count);
CsrCharString *CsrStrDup(const CsrCharString *string);
CsrCharString *CsrStrChr(const CsrCharString *string, CsrCharString c);
CsrUint32 CsrStrToInt(const CsrCharString *string);
CsrCharString *CsrStrStr(const CsrCharString *string1, const CsrCharString *string2);
void *CsrMemSet(void *dest, CsrUint8 c, CsrSize count);
CsrSize CsrStrLen(const CsrCharString *string);
#endif /* !CSR_USE_STDC_LIB */
CsrInt32 CsrVsnprintf(CsrCharString *string, CsrSize count, const CsrCharString *format, va_list args);

/*------------------------------------------------------------------*/
/* Non-standard utility functions */
/*------------------------------------------------------------------*/
void *CsrMemDup(const void *buf1, CsrSize count);
int CsrStrNICmp(const CsrCharString *string1, const CsrCharString *string2, CsrSize count);
CsrCharString *CsrStrDup(const CsrCharString *string);
CsrUint32 CsrStrToInt(const CsrCharString *string);
CsrCharString *CsrStrNCpyZero(CsrCharString *dest, const CsrCharString *src, CsrSize count);

/*------------------------------------------------------------------*/
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/csr/csr_wifi_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ typedef struct
#define CSR_WIFI_RESULT_INVALID_INTERFACE_TAG ((CsrResult) 0x000B)
#define CSR_WIFI_RESULT_P2P_NOA_CONFIG_CONFLICT ((CsrResult) 0x000C)

#define CSR_WIFI_VERSION "5.0.3.0"
#define CSR_WIFI_VERSION "5.1.0.0"

#ifdef __cplusplus
}
Expand Down
11 changes: 10 additions & 1 deletion drivers/staging/csr/csr_wifi_hip_card.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*****************************************************************************
(c) Cambridge Silicon Radio Limited 2011
(c) Cambridge Silicon Radio Limited 2012
All rights reserved and confidential information of CSR
Refer to LICENSE.txt included with this source for details
Expand Down Expand Up @@ -81,6 +81,15 @@ CsrResult CardWriteBulkData(card_t *card, card_signal_t *csptr, unifi_TrafficQue
*/
void CardClearFromHostDataSlot(card_t *card, const CsrInt16 aSlotNum);

#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
/*****************************************************************************
* CardClearFromHostDataSlotWithoutFreeingBulkData - Clear the data stot
* without freeing the bulk data
*/

void CardClearFromHostDataSlotWithoutFreeingBulkData(card_t *card, const CsrInt16 aSlotNum);
#endif

/*****************************************************************************
* CardGetFreeFromHostDataSlots -
*/
Expand Down
85 changes: 71 additions & 14 deletions drivers/staging/csr/csr_wifi_hip_card_sdio.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*****************************************************************************
(c) Cambridge Silicon Radio Limited 2011
(c) Cambridge Silicon Radio Limited 2012
All rights reserved and confidential information of CSR
Refer to LICENSE.txt included with this source for details
Expand Down Expand Up @@ -323,7 +323,7 @@ CsrResult unifi_init(card_t *card)
* have requested a mini-coredump which needs to be captured now the
* SDIO interface is alive.
*/
unifi_coredump_handle_request(card);
(void)unifi_coredump_handle_request(card);

/*
* Probe to see if the UniFi has ROM/flash to boot from. CSR6xxx should do.
Expand Down Expand Up @@ -1616,14 +1616,14 @@ static CsrResult card_allocate_memory_resources(card_t *card)
/* Reset any state carried forward from a previous life */
card->fh_command_queue.q_rd_ptr = 0;
card->fh_command_queue.q_wr_ptr = 0;
CsrSnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
"fh_cmd_q");
(void)CsrSnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
"fh_cmd_q");
for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
{
card->fh_traffic_queue[i].q_rd_ptr = 0;
card->fh_traffic_queue[i].q_wr_ptr = 0;
CsrSnprintf(card->fh_traffic_queue[i].name,
UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
(void)CsrSnprintf(card->fh_traffic_queue[i].name,
UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
}
#ifndef CSR_WIFI_HIP_TA_DISABLE
unifi_ta_sampling_init(card);
Expand All @@ -1634,7 +1634,7 @@ static CsrResult card_allocate_memory_resources(card_t *card)
/*
* Allocate memory for the from-host and to-host signal buffers.
*/
card->fh_buffer.buf = CsrMemAlloc(UNIFI_FH_BUF_SIZE);
card->fh_buffer.buf = CsrMemAllocDma(UNIFI_FH_BUF_SIZE);
if (card->fh_buffer.buf == NULL)
{
unifi_error(card->ospriv, "Failed to allocate memory for F-H signals\n");
Expand All @@ -1645,7 +1645,7 @@ static CsrResult card_allocate_memory_resources(card_t *card)
card->fh_buffer.ptr = card->fh_buffer.buf;
card->fh_buffer.count = 0;

card->th_buffer.buf = CsrMemAlloc(UNIFI_FH_BUF_SIZE);
card->th_buffer.buf = CsrMemAllocDma(UNIFI_FH_BUF_SIZE);
if (card->th_buffer.buf == NULL)
{
unifi_error(card->ospriv, "Failed to allocate memory for T-H signals\n");
Expand Down Expand Up @@ -1693,6 +1693,12 @@ static CsrResult card_allocate_memory_resources(card_t *card)
return CSR_WIFI_HIP_RESULT_NO_MEMORY;
}

/* Initialise host tag entries for from-host bulk data slots */
for (i = 0; i < n; i++)
{
card->fh_slot_host_tag_record[i] = CSR_WIFI_HIP_RESERVED_HOST_TAG;
}


/* Allocate memory for the array of pointers */
n = cfg_data->num_tohost_data_slots;
Expand Down Expand Up @@ -1811,15 +1817,15 @@ static void card_free_memory_resources(card_t *card)

if (card->fh_buffer.buf)
{
CsrMemFree(card->fh_buffer.buf);
CsrMemFreeDma(card->fh_buffer.buf);
}
card->fh_buffer.ptr = card->fh_buffer.buf = NULL;
card->fh_buffer.bufsize = 0;
card->fh_buffer.count = 0;

if (card->th_buffer.buf)
{
CsrMemFree(card->th_buffer.buf);
CsrMemFreeDma(card->th_buffer.buf);
}
card->th_buffer.ptr = card->th_buffer.buf = NULL;
card->th_buffer.bufsize = 0;
Expand All @@ -1842,14 +1848,14 @@ static void card_init_soft_queues(card_t *card)
/* Reset any state carried forward from a previous life */
card->fh_command_queue.q_rd_ptr = 0;
card->fh_command_queue.q_wr_ptr = 0;
CsrSnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
"fh_cmd_q");
(void)CsrSnprintf(card->fh_command_queue.name, UNIFI_QUEUE_NAME_MAX_LENGTH,
"fh_cmd_q");
for (i = 0; i < UNIFI_NO_OF_TX_QS; i++)
{
card->fh_traffic_queue[i].q_rd_ptr = 0;
card->fh_traffic_queue[i].q_wr_ptr = 0;
CsrSnprintf(card->fh_traffic_queue[i].name,
UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
(void)CsrSnprintf(card->fh_traffic_queue[i].name,
UNIFI_QUEUE_NAME_MAX_LENGTH, "fh_data_q%d", i);
}
#ifndef CSR_WIFI_HIP_TA_DISABLE
unifi_ta_sampling_init(card);
Expand Down Expand Up @@ -2399,6 +2405,57 @@ void CardClearFromHostDataSlot(card_t *card, const CsrInt16 slot)
} /* CardClearFromHostDataSlot() */


#ifdef CSR_WIFI_REQUEUE_PACKET_TO_HAL
/*
* ---------------------------------------------------------------------------
* CardClearFromHostDataSlotWithoutFreeingBulkData
*
* Clear the given data slot with out freeing the bulk data.
*
* Arguments:
* card Pointer to Card object
* slot Index of the signal slot to clear.
*
* Returns:
* None.
* ---------------------------------------------------------------------------
*/
void CardClearFromHostDataSlotWithoutFreeingBulkData(card_t *card, const CsrInt16 slot)
{
CsrUint8 queue = card->from_host_data[slot].queue;

/* Initialise the from_host data slot so it can be re-used,
* Set length field in from_host_data array to 0.
*/
UNIFI_INIT_BULK_DATA(&card->from_host_data[slot].bd);

queue = card->from_host_data[slot].queue;

if (queue < UNIFI_NO_OF_TX_QS)
{
if (card->dynamic_slot_data.from_host_used_slots[queue] == 0)
{
unifi_error(card->ospriv, "Goofed up used slots q = %d used slots = %d\n",
queue,
card->dynamic_slot_data.from_host_used_slots[queue]);
}
else
{
card->dynamic_slot_data.from_host_used_slots[queue]--;
}
card->dynamic_slot_data.packets_txed[queue]++;
card->dynamic_slot_data.total_packets_txed++;
if (card->dynamic_slot_data.total_packets_txed >=
card->dynamic_slot_data.packets_interval)
{
CardReassignDynamicReservation(card);
}
}
} /* CardClearFromHostDataSlotWithoutFreeingBulkData() */


#endif

CsrUint16 CardGetDataSlotSize(card_t *card)
{
return card->config_data.data_slot_size;
Expand Down
Loading

0 comments on commit 95edd09

Please sign in to comment.