summaryrefslogtreecommitdiff
path: root/sta_dk_4_0_4_32/pform/linux
diff options
context:
space:
mode:
authorSan Mehat <>2009-03-24 21:26:31 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-24 21:26:31 -0700
commit30c7578b5310e2dea8ec949ed294fff998ad3401 (patch)
tree30a50688290929042402582683f6ada42ac8cf54 /sta_dk_4_0_4_32/pform/linux
parent28334f5ebb2cb84d2901109f1559a6d12f0cb4ab (diff)
downloadti-30c7578b5310e2dea8ec949ed294fff998ad3401.tar.gz
Automated import from //branches/donutburger/...@142092,142092
Diffstat (limited to 'sta_dk_4_0_4_32/pform/linux')
-rwxr-xr-xsta_dk_4_0_4_32/pform/linux/src/tnetw_sdio.c187
1 files changed, 54 insertions, 133 deletions
diff --git a/sta_dk_4_0_4_32/pform/linux/src/tnetw_sdio.c b/sta_dk_4_0_4_32/pform/linux/src/tnetw_sdio.c
index bc88b9c..a6bb7ba 100755
--- a/sta_dk_4_0_4_32/pform/linux/src/tnetw_sdio.c
+++ b/sta_dk_4_0_4_32/pform/linux/src/tnetw_sdio.c
@@ -25,17 +25,18 @@
#include "esta_drv.h"
#include "mmc_omap_api.h"
#include "osApi.h"
-#define DM_DMA_WORKAROUND
+
/*-------------------------------------------------------------------*/
extern int tiwlan_sdio_init(struct sdio_func *func);
extern int sdio_reset_comm(struct mmc_card *card);
+
/*-------------------------------------------------------------------*/
static struct sdio_func *tiwlan_func = NULL;
static int sdio_reset_flag = 0;
-#ifdef DM_DMA_WORKAROUND
+
#define DMA_THRESHOLD_SIZE 64
static void *sdio_dma_ptr = NULL;
-#endif
+
/*-------------------------------------------------------------------*/
void SDIO_SetFunc( struct sdio_func *func )
{
@@ -44,39 +45,37 @@ void SDIO_SetFunc( struct sdio_func *func )
struct sdio_func *SDIO_GetFunc( void )
{
- return( tiwlan_func );
+ return tiwlan_func;
}
SDIO_Status SDIO_Init(SDIO_ConfigParams *ConfigParams, SDIO_Handle *Handle)
{
- if( Handle == NULL ) {
+ if (Handle == NULL) {
printk(KERN_ERR "Error: SDIO_Init() called with NULL!\n");
return SDIO_FAILURE;
}
+
*Handle = (SDIO_Handle)SDIO_GetFunc();
- if( (*Handle) == NULL ) {
- printk(KERN_ERR "Error: SDIO_Init() called before SDIO probe completed!\n");
+ if ((*Handle) == NULL) {
+ printk(KERN_ERR "SDIO_Init() called before init!\n");
return SDIO_FAILURE;
}
-#ifdef DM_DMA_WORKAROUND
- if( !sdio_dma_ptr ) {
- sdio_dma_ptr = kmalloc( PAGE_SIZE, GFP_KERNEL );
- if( !sdio_dma_ptr )
- return SDIO_FAILURE;
- }
-#endif
+
+ if (!sdio_dma_ptr) {
+ if (!(sdio_dma_ptr = kmalloc(PAGE_SIZE, GFP_KERNEL))) {
+ printk(KERN_ERR "Failed to alloc DMA bounce buffer\n");
+ return SDIO_FAILURE;
+ }
+ }
return SDIO_SUCCESS;
}
SDIO_Status SDIO_Shutdown(SDIO_Handle Handle)
{
- /* printk("%s:\n", __FUNCTION__); */
-#ifdef DM_DMA_WORKAROUND
- if( sdio_dma_ptr ) {
- kfree( sdio_dma_ptr );
- sdio_dma_ptr = NULL;
- }
-#endif
+ if (sdio_dma_ptr) {
+ kfree(sdio_dma_ptr);
+ sdio_dma_ptr = NULL;
+ }
return SDIO_SUCCESS;
}
@@ -84,14 +83,14 @@ SDIO_Status SDIO_Start(SDIO_Handle Handle)
{
struct sdio_func *func = (struct sdio_func *)Handle;
- /* printk("%s:\n", __FUNCTION__); */
- if( func ) {
- if( sdio_reset_flag ) {
+ if (func) {
+ if (sdio_reset_flag) {
sdio_reset_flag = 0;
- if( tiwlan_sdio_init(func) ) {
- printk("TI: tiwlan_sdio_init Error !\n");
+ if (tiwlan_sdio_init(func)) {
+ printk("TI: tiwlan_sdio_init Error!\n");
return SDIO_FAILURE;
}
+
}
}
return SDIO_SUCCESS;
@@ -101,135 +100,57 @@ SDIO_Status SDIO_Reset(SDIO_Handle Handle)
{
struct sdio_func *func = (struct sdio_func *)Handle;
- /* printk("%s:\n", __FUNCTION__); */
- if( func && func->card ) {
+ if(func && func->card)
sdio_reset_comm(func->card);
- }
return SDIO_SUCCESS;
}
SDIO_Status SDIO_Stop(SDIO_Handle Handle, unsigned long Wait_Window)
{
- /* printk("%s:\n", __FUNCTION__); */
sdio_reset_flag = 1;
- return SDIO_Reset( Handle );
-}
-
-static int read_direct(struct sdio_func *func, unsigned char *buf,
- unsigned long addr, unsigned len)
-{
- unsigned i;
- int rc0, rc = 0;
-
- for(i=0;( i < len );i++,addr++) {
- *buf++ = (unsigned char)sdio_readb(func, addr, &rc0);
- if( rc0 != 0 )
- rc = rc0;
- }
- return rc;
-}
-
-static int write_direct(struct sdio_func *func, unsigned long addr,
- unsigned char *buf, unsigned len)
-{
- unsigned i;
- int rc0, rc = 0;
-
- for(i=0;( i < len );i++,addr++) {
- sdio_writeb(func, *buf++, addr, &rc0);
- if( rc0 != 0 )
- rc = rc0;
- }
- return rc;
+ return SDIO_Reset(Handle);
}
SDIO_Status SDIO_SyncRead(SDIO_Handle Handle, SDIO_Request_t *Req)
{
struct sdio_func *func = (struct sdio_func *)Handle;
- int rc, retries = 5;
-
-#if 0
- printk("%s: p_addr = 0x%.8lx, sz = %d\n",
- __FUNCTION__,
- Req->peripheral_addr,
- Req->buffer_len);
-#endif
+ int rc;
+
+ if (Req->buffer_len < DMA_THRESHOLD_SIZE) {
+ rc = sdio_memcpy_fromio(func, Req->buffer,
+ Req->peripheral_addr, Req->buffer_len);
+ } else {
+ rc = sdio_memcpy_fromio(func, sdio_dma_ptr,
+ Req->peripheral_addr, Req->buffer_len);
+ memcpy(Req->buffer, sdio_dma_ptr, Req->buffer_len);
+ }
- while(retries) {
- if( retries > 2 )
-#ifdef DM_DMA_WORKAROUND
- if( Req->buffer_len < DMA_THRESHOLD_SIZE ) {
- rc = sdio_memcpy_fromio(func, Req->buffer, Req->peripheral_addr, Req->buffer_len);
- }
- else {
- rc = sdio_memcpy_fromio(func, sdio_dma_ptr, Req->peripheral_addr, Req->buffer_len);
- memcpy( Req->buffer, sdio_dma_ptr, Req->buffer_len );
- }
-#else
- rc = sdio_memcpy_fromio(func, Req->buffer, Req->peripheral_addr, Req->buffer_len);
-#endif
- else
- rc = read_direct(func, Req->buffer, Req->peripheral_addr, Req->buffer_len);
-
- if (rc) {
- printk(KERN_ERR "%s: Read operation failed (%d) (retries = %d)\n",
- __FUNCTION__, rc, retries);
- retries--;
- continue;
- }
- if (retries != 5)
- printk(KERN_ERR "%s: Retry succeeded\n", __FUNCTION__);
+ if (!rc)
return SDIO_SUCCESS;
- }
- printk(KERN_ERR "%s: Giving up\n", __FUNCTION__);
+
+ printk("SDIO Write failure (%d)\n", rc);
return SDIO_FAILURE;
}
SDIO_Status SDIO_SyncWrite(SDIO_Handle Handle, SDIO_Request_t *Req)
{
struct sdio_func *func = (struct sdio_func *)Handle;
- int rc, retries = 5;
-#ifdef DM_DMA_WORKAROUND
- void *dma_ptr;
-#endif
-
-#if 0
- printk("%s: p_addr = 0x%.8lx, sz = %d\n",
- __FUNCTION__,
- Req->peripheral_addr,
- Req->buffer_len);
-#endif
-
- while(retries) {
- if( retries > 2 ) {
-#ifdef DM_DMA_WORKAROUND
- if( Req->buffer_len < DMA_THRESHOLD_SIZE ) {
- dma_ptr = Req->buffer;
- }
- else {
- dma_ptr = sdio_dma_ptr;
- memcpy( dma_ptr, Req->buffer, Req->buffer_len );
- }
- rc = sdio_memcpy_toio(func, Req->peripheral_addr, dma_ptr, Req->buffer_len);
-#else
- rc = sdio_memcpy_toio(func, Req->peripheral_addr, Req->buffer, Req->buffer_len);
-#endif
- }
- else
- rc = write_direct(func, Req->peripheral_addr, Req->buffer, Req->buffer_len);
-
- if (rc) {
- printk(KERN_ERR "%s: Write operation failed (%d) (retries = %d)\n",
- __FUNCTION__, rc, retries);
- retries--;
- continue;
- }
+ int rc;
+ void *dma_ptr;
+
+ if (Req->buffer_len < DMA_THRESHOLD_SIZE)
+ dma_ptr = Req->buffer;
+ else {
+ dma_ptr = sdio_dma_ptr;
+ memcpy(dma_ptr, Req->buffer, Req->buffer_len);
+ }
- if (retries != 5)
- printk(KERN_ERR "%s: Retry succeeded\n", __FUNCTION__);
+ rc = sdio_memcpy_toio(func, Req->peripheral_addr, dma_ptr,
+ Req->buffer_len);
+ if (!rc)
return SDIO_SUCCESS;
- }
- printk(KERN_ERR "%s: Giving up\n", __FUNCTION__);
+
+ printk("SDIO Write failure (%d)\n", rc);
return SDIO_FAILURE;
}
#endif