summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/scanmerge.c183
-rw-r--r--lib/scanmerge.h28
-rw-r--r--sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk2
-rw-r--r--sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c14
-rw-r--r--sta_dk_4_0_4_32/pform/common/src/osRgstry.c12
-rw-r--r--sta_dk_4_0_4_32/pform/linux/src/esta_drv.c10
-rw-r--r--sta_dk_4_0_4_32/wpa_supplicant_lib/Android.mk8
-rw-r--r--sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c9
-rw-r--r--wilink_6_1/external_drivers/zoom2/Linux/sdio/Makefile59
-rw-r--r--wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.c1257
-rw-r--r--wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.h155
-rw-r--r--wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrvDbg.h58
-rw-r--r--wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.c330
-rw-r--r--wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.h143
-rw-r--r--wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.c317
-rw-r--r--wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.h99
-rw-r--r--wilink_6_1/platforms/os/linux/src/WlanDrvWext.c175
-rw-r--r--wilink_6_1/platforms/os/linux/src/osapi.c39
-rw-r--r--wilink_6_1/platforms/os/linux/zoom2_env.bash2
-rw-r--r--wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c3
-rw-r--r--wilink_6_1/stad/src/Connection_Managment/connInfra.c2
-rw-r--r--wilink_6_1/stad/src/Data_link/rx.c13
-rw-r--r--wilink_6_1/wpa_supplicant_lib/Android.mk44
-rw-r--r--wilink_6_1/wpa_supplicant_lib/driver_ti.c217
-rw-r--r--wilink_6_1/wpa_supplicant_lib/driver_ti.h11
25 files changed, 571 insertions, 2619 deletions
diff --git a/lib/scanmerge.c b/lib/scanmerge.c
index 2b376ff..36f17a2 100644
--- a/lib/scanmerge.c
+++ b/lib/scanmerge.c
@@ -19,6 +19,25 @@
#include "shlist.h"
#define IS_HIDDEN_AP(a) (((a)->ssid_len == 0) || ((a)->ssid[0] == '\0'))
+
+scan_ssid_t *scan_get_ssid( scan_result_t *res_ptr )
+{
+ static scan_ssid_t ssid_temp;
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ const u8 *res_ie;
+
+ res_ie = wpa_scan_get_ie(res_ptr, WLAN_EID_SSID);
+ if (!res_ie)
+ return NULL;
+ ssid_temp.ssid_len = (size_t)res_ie[1];
+ os_memcpy(ssid_temp.ssid, (res_ie + 2), ssid_temp.ssid_len);
+#else
+ ssid_temp.ssid_len = res_ptr->ssid_len;
+ os_memcpy(ssid_temp.ssid, res_ptr->ssid, ssid_temp.ssid_len);
+#endif
+ return &ssid_temp;
+}
+
/*-----------------------------------------------------------------------------
Routine Name: scan_init
Routine Description: Inits scan merge list
@@ -29,7 +48,7 @@ Return Value:
void scan_init( struct wpa_driver_ti_data *mydrv )
{
mydrv->last_scan = -1;
- shListInitList( &(mydrv->scan_merge_list) );
+ shListInitList(&(mydrv->scan_merge_list));
}
/*-----------------------------------------------------------------------------
@@ -41,7 +60,7 @@ Return Value:
-----------------------------------------------------------------------------*/
static void scan_free( void *ptr )
{
- os_free( ptr );
+ os_free(ptr);
}
/*-----------------------------------------------------------------------------
@@ -53,7 +72,19 @@ Return Value:
-----------------------------------------------------------------------------*/
void scan_exit( struct wpa_driver_ti_data *mydrv )
{
- shListDelAllItems( &(mydrv->scan_merge_list), scan_free );
+ shListDelAllItems(&(mydrv->scan_merge_list), scan_free);
+}
+
+/*-----------------------------------------------------------------------------
+Routine Name: scan_count
+Routine Description: Gives number of list elements
+Arguments:
+ mydrv - pointer to private driver data structure
+Return Value: Number of elements in the list
+-----------------------------------------------------------------------------*/
+unsigned long scan_count( struct wpa_driver_ti_data *mydrv )
+{
+ return shListGetCount(&(mydrv->scan_merge_list));
}
/*-----------------------------------------------------------------------------
@@ -66,17 +97,27 @@ Return Value: 1 - if equal, 0 - if not
-----------------------------------------------------------------------------*/
static int scan_equal( void *val, void *idata )
{
- struct wpa_scan_result *new_res = (struct wpa_scan_result *)val;
- struct wpa_scan_result *lst_res =
- (struct wpa_scan_result *)(&(((scan_merge_t *)idata)->scanres));
+ scan_ssid_t n_ssid, l_ssid, *p_ssid;
+ scan_result_t *new_res = (scan_result_t *)val;
+ scan_result_t *lst_res =
+ (scan_result_t *)(&(((scan_merge_t *)idata)->scanres));
int ret;
size_t len;
- len = (IS_HIDDEN_AP(new_res) || IS_HIDDEN_AP(lst_res)) ?
- 0 : new_res->ssid_len;
- ret = ((lst_res->ssid_len != new_res->ssid_len) && (len != 0)) ||
+ p_ssid = scan_get_ssid(new_res);
+ if (!p_ssid)
+ return 0;
+ os_memcpy(&n_ssid, p_ssid, sizeof(scan_ssid_t));
+ p_ssid = scan_get_ssid(lst_res);
+ if (!p_ssid)
+ return 0;
+ os_memcpy(&l_ssid, p_ssid, sizeof(scan_ssid_t));
+
+ len = (IS_HIDDEN_AP(&n_ssid) || IS_HIDDEN_AP(&l_ssid)) ?
+ 0 : n_ssid.ssid_len;
+ ret = ((l_ssid.ssid_len != n_ssid.ssid_len) && (len != 0)) ||
(os_memcmp(new_res->bssid, lst_res->bssid, ETH_ALEN) ||
- os_memcmp(new_res->ssid, lst_res->ssid, len));
+ os_memcmp(n_ssid.ssid, l_ssid.ssid, len));
return !ret;
}
@@ -88,13 +129,15 @@ Arguments:
src - source pointer to scan result structure
Return Value: NONE
-----------------------------------------------------------------------------*/
-void copy_scan_res( struct wpa_scan_result *dst, struct wpa_scan_result *src )
+void copy_scan_res( scan_result_t *dst, scan_result_t *src )
{
+#ifdef WPA_SUPPLICANT_VER_0_5_X
if( IS_HIDDEN_AP(src) ) {
- os_memcpy( src->ssid, dst->ssid, dst->ssid_len );
+ os_memcpy(src->ssid, dst->ssid, dst->ssid_len);
src->ssid_len = dst->ssid_len;
}
- os_memcpy( dst, src, sizeof(struct wpa_scan_result) );
+#endif
+ os_memcpy(dst, src, sizeof(scan_result_t));
}
/*-----------------------------------------------------------------------------
@@ -105,16 +148,20 @@ Arguments:
res_ptr - pointer to scan result structure
Return Value: Pointer to scan merge item
-----------------------------------------------------------------------------*/
-static scan_merge_t *scan_add( SHLIST *head, struct wpa_scan_result *res_ptr )
+static scan_merge_t *scan_add( SHLIST *head, scan_result_t *res_ptr )
{
scan_merge_t *scan_ptr;
+ unsigned size = 0;
- scan_ptr = (scan_merge_t *)os_malloc( sizeof(scan_merge_t) );
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ size += res_ptr->ie_len;
+#endif
+ scan_ptr = (scan_merge_t *)os_malloc(sizeof(scan_merge_t) + size);
if( !scan_ptr )
return( NULL );
- os_memcpy( &(scan_ptr->scanres), res_ptr, sizeof(struct wpa_scan_result) );
+ os_memcpy(&(scan_ptr->scanres), res_ptr, sizeof(scan_result_t) + size);
scan_ptr->count = SCAN_MERGE_COUNT;
- shListInsLastItem( head, (void *)scan_ptr );
+ shListInsLastItem(head, (void *)scan_ptr);
return scan_ptr;
}
@@ -127,18 +174,45 @@ Arguments:
number_items - current number of items
Return Value: 1 - if item was found, 0 - otherwise
-----------------------------------------------------------------------------*/
-static int scan_find( scan_merge_t *scan_ptr, struct wpa_scan_result *results,
+static int scan_find( scan_merge_t *scan_ptr, scan_result_t *results,
unsigned int number_items )
{
unsigned int i;
for(i=0;( i < number_items );i++) {
- if( scan_equal( &(results[i]), scan_ptr ) )
+ if( scan_equal(&(results[i]), scan_ptr) )
return 1;
}
return 0;
}
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+/*-----------------------------------------------------------------------------
+Routine Name: scan_dup
+Routine Description: Create copy of scan results entry
+Arguments:
+ res_ptr - pointer to scan result item
+Return Value: pointer to new scan result item, or NULL
+-----------------------------------------------------------------------------*/
+static scan_result_t *scan_dup( scan_result_t *res_ptr )
+{
+ unsigned size;
+ scan_result_t *new_ptr;
+
+ if (!res_ptr)
+ return NULL;
+
+ size = sizeof(scan_result_t) + res_ptr->ie_len;
+ new_ptr = os_malloc(size);
+ if (!new_ptr)
+ return NULL;
+ if (res_ptr) {
+ os_memcpy(new_ptr, res_ptr, size);
+ }
+ return new_ptr;
+}
+#endif
+
/*-----------------------------------------------------------------------------
Routine Name: scan_merge
Routine Description: Merges current scan results with previous
@@ -149,33 +223,59 @@ Arguments:
max_size - maximum namber of items
Return Value: Merged number of items
-----------------------------------------------------------------------------*/
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+unsigned int scan_merge( struct wpa_driver_ti_data *mydrv,
+ scan_result_t **results, int force_flag,
+ unsigned int number_items, unsigned int max_size )
+#else
unsigned int scan_merge( struct wpa_driver_ti_data *mydrv,
- struct wpa_scan_result *results, int force_flag,
+ scan_result_t *results, int force_flag,
unsigned int number_items, unsigned int max_size )
+#endif
{
SHLIST *head = &(mydrv->scan_merge_list);
SHLIST *item, *del_item;
+ scan_result_t *res_ptr;
scan_merge_t *scan_ptr;
unsigned int i;
/* Prepare items for removal */
- item = shListGetFirstItem( head );
+ item = shListGetFirstItem(head);
while( item != NULL ) {
scan_ptr = (scan_merge_t *)(item->data);
if( scan_ptr->count != 0 )
scan_ptr->count--;
- item = shListGetNextItem( head, item );
+ item = shListGetNextItem(head, item);
}
for(i=0;( i < number_items );i++) { /* Find/Add new items */
- item = shListFindItem( head, &(results[i]), scan_equal );
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ res_ptr = results[i];
+#else
+ res_ptr = &(results[i]);
+#endif
+ item = shListFindItem( head, res_ptr, scan_equal );
if( item ) {
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ scan_ssid_t *p_ssid;
+ scan_result_t *new_ptr;
+#endif
scan_ptr = (scan_merge_t *)(item->data);
- copy_scan_res(&(scan_ptr->scanres), &(results[i]));
+ copy_scan_res(&(scan_ptr->scanres), res_ptr);
scan_ptr->count = SCAN_MERGE_COUNT;
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ p_ssid = scan_get_ssid(res_ptr);
+ if (p_ssid && IS_HIDDEN_AP(p_ssid)) {
+ new_ptr = scan_dup(res_ptr);
+ if (new_ptr) {
+ results[i] = new_ptr;
+ os_free(res_ptr);
+ }
+ }
+#endif
}
else {
- scan_add( head, &(results[i]) );
+ scan_add(head, res_ptr);
}
}
@@ -185,18 +285,27 @@ unsigned int scan_merge( struct wpa_driver_ti_data *mydrv,
scan_ptr = (scan_merge_t *)(item->data);
if( scan_ptr->count != SCAN_MERGE_COUNT ) {
if( !force_flag && ((scan_ptr->count == 0) ||
- (mydrv->last_scan == SCAN_TYPE_NORMAL_ACTIVE)) )
+ (mydrv->last_scan == SCAN_TYPE_NORMAL_ACTIVE)) ) {
del_item = item;
+ }
else {
if( number_items < max_size ) {
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ res_ptr = scan_dup(&(scan_ptr->scanres));
+ if (res_ptr) {
+ results[number_items] = res_ptr;
+ number_items++;
+ }
+#else
os_memcpy(&(results[number_items]),
- &(scan_ptr->scanres),sizeof(struct wpa_scan_result));
+ &(scan_ptr->scanres), sizeof(scan_result_t));
number_items++;
+#endif
}
}
}
- item = shListGetNextItem( head, item );
- shListDelItem( head, del_item, scan_free );
+ item = shListGetNextItem(head, item);
+ shListDelItem(head, del_item, scan_free);
}
return( number_items );
@@ -210,24 +319,24 @@ Arguments:
bssid - pointer to bssid value
Return Value: pointer to scan_result item
-----------------------------------------------------------------------------*/
-struct wpa_scan_result *scan_get_by_bssid( struct wpa_driver_ti_data *mydrv,
- u8 *bssid )
+scan_result_t *scan_get_by_bssid( struct wpa_driver_ti_data *mydrv, u8 *bssid )
{
SHLIST *head = &(mydrv->scan_merge_list);
SHLIST *item;
- struct wpa_scan_result *cur_res;
+ scan_result_t *cur_res;
+ scan_ssid_t *p_ssid;
- item = shListGetFirstItem( head ); /* Add/Remove missing items */
+ item = shListGetFirstItem(head);
if( item == NULL )
return( NULL );
do {
- cur_res =
- (struct wpa_scan_result *)&(((scan_merge_t *)(item->data))->scanres);
+ cur_res = (scan_result_t *)&(((scan_merge_t *)(item->data))->scanres);
+ p_ssid = scan_get_ssid(cur_res);
if( (!os_memcmp(cur_res->bssid, bssid, ETH_ALEN)) &&
- (!IS_HIDDEN_AP(cur_res)) ) {
+ (!IS_HIDDEN_AP(p_ssid)) ) {
return( cur_res );
}
- item = shListGetNextItem( head, item );
+ item = shListGetNextItem(head, item);
} while( item != NULL );
return( NULL );
diff --git a/lib/scanmerge.h b/lib/scanmerge.h
index 4d50cd4..35843bc 100644
--- a/lib/scanmerge.h
+++ b/lib/scanmerge.h
@@ -23,16 +23,36 @@
#define SCAN_MERGE_COUNT 4
+typedef
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ struct wpa_scan_res
+#else
+ struct wpa_scan_result
+#endif
+scan_result_t;
+
+typedef struct {
+ u8 ssid[MAX_SSID_LEN];
+ size_t ssid_len;
+} scan_ssid_t;
+
typedef struct SCANMERGE_STRUCT {
- struct wpa_scan_result scanres;
unsigned long count;
+ scan_result_t scanres;
} scan_merge_t;
void scan_init( struct wpa_driver_ti_data *mydrv );
void scan_exit( struct wpa_driver_ti_data *mydrv );
+unsigned long scan_count( struct wpa_driver_ti_data *mydrv );
+scan_ssid_t *scan_get_ssid( scan_result_t *res_ptr );
+#ifdef WPA_SUPPLICANT_VER_0_6_X
unsigned int scan_merge( struct wpa_driver_ti_data *mydrv,
- struct wpa_scan_result *results, int force_flag,
+ scan_result_t **results, int force_flag,
unsigned int number_items, unsigned int max_size );
-struct wpa_scan_result *scan_get_by_bssid( struct wpa_driver_ti_data *mydrv,
- u8 *bssid );
+#else
+unsigned int scan_merge( struct wpa_driver_ti_data *mydrv,
+ scan_result_t *results, int force_flag,
+ unsigned int number_items, unsigned int max_size );
+#endif
+scan_result_t *scan_get_by_bssid( struct wpa_driver_ti_data *mydrv, u8 *bssid );
#endif
diff --git a/sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk b/sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk
index 1d828db..1851248 100644
--- a/sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk
+++ b/sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk
@@ -79,7 +79,7 @@ LOCAL_STATIC_LIBRARIES := libWifiApi
else
LOCAL_SHARED_LIBRARIES := libWifiApi
endif
-LOCAL_SHARED_LIBRARIES += libc libhardware_legacy
+LOCAL_SHARED_LIBRARIES += libcutils liblog libc libhardware_legacy
INCLUDES = $(DK_INCS) $(CLI_STA_DK_ROOT)/pform/linux/inc \
$(CLI_CUDK_ROOT)/Inc \
diff --git a/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c b/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
index 16e444c..57fe2da 100644
--- a/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
+++ b/sta_dk_4_0_4_32/common/src/core/sme/siteMgr/select.c
@@ -253,19 +253,18 @@ siteEntry_t* siteMgr_selectSiteFromTable(TI_HANDLE hSiteMgr)
UINT32 prevMatchingLevel = 0;
UINT8 siteIndex, tableIndex, numberOfSites = 0;
siteMgr_t *pSiteMgr = (siteMgr_t *)hSiteMgr;
- siteEntry_t *pSiteEntry, *pLastMatchSite = NULL;
+ siteEntry_t *pSiteEntry, *pLastMatchSite = NULL;
rsnData_t rsnData;
- dot11_RSN_t *pRsnIe;
- UINT8 rsnIECount=0;
- UINT8 curRsnData[255];
- UINT8 length=0;
+ dot11_RSN_t *pRsnIe;
+ UINT8 rsnIECount=0;
+ UINT8 length=0;
paramInfo_t param;
- radioBand_e radioBand;
+ radioBand_e radioBand;
BOOL bRegulatoryDomainEnabled;
siteTablesParams_t* currTable = pSiteMgr->pSitesMgmtParams->pCurrentSiteTable;
- WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
+ WLAN_REPORT_INFORMATION(pSiteMgr->hReport, SITE_MGR_MODULE_LOG,
("SITE MATCH , Desired ssid (%s) len= (%d)\n\n",
pSiteMgr->pDesiredParams->siteMgrDesiredSSID.ssidString,
pSiteMgr->pDesiredParams->siteMgrDesiredSSID.len));
@@ -1438,4 +1437,3 @@ TI_STATUS systemConfig(siteMgr_t *pSiteMgr)
return OK;
}
-
diff --git a/sta_dk_4_0_4_32/pform/common/src/osRgstry.c b/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
index d625868..5a37e59 100644
--- a/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
+++ b/sta_dk_4_0_4_32/pform/common/src/osRgstry.c
@@ -1041,7 +1041,7 @@ regFillInitTable(
/*defaults values for beacon IE table*/
/*UINT8 defBeaconIETableSize = 0 ;*/
- UINT8 defBeaconIETable[] = "00 01 01 01 32 01 2a 01 03 01 06 01 07 01 20 01 25 01 23 01 30 01 28 01 2e 01 85 01 dd 01 00 52 f2 02 00 01";
+ static UINT8 defBeaconIETable[] = "00 01 01 01 32 01 2a 01 03 01 06 01 07 01 20 01 25 01 23 01 30 01 28 01 2e 01 85 01 dd 01 00 52 f2 02 00 01";
/*UINT8 tmpIeTable[BEACON_FILTER_TABLE_MAX_SIZE] ;*/
UINT8 staBeaconFilterIETable[BEACON_FILTER_STRING_MAX_LEN] ;
UINT8 tmpIeTableSize = 35;
@@ -1056,11 +1056,11 @@ regFillInitTable(
initTable_t* p = (initTable_t*) pInitTable;
USHORT tableLen = 0;
USHORT loopIndex = 0;
- UINT8 ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
- UINT8 ScanControlTable5Tmp[2 * A_5G_BAND_NUM_CHANNELS];
- UINT8 ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- UINT8 ScanControlTable5Def[2 * A_5G_BAND_NUM_CHANNELS] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF00000000000000000000000000000000000000";
- UINT8 reportSeverityTableDefaults[WLAN_MAX_SEVERITIES] = "000000000000";
+ static UINT8 ScanControlTable24Tmp[2 * NUM_OF_CHANNELS_24];
+ static UINT8 ScanControlTable5Tmp[2 * A_5G_BAND_NUM_CHANNELS];
+ static UINT8 ScanControlTable24Def[2* NUM_OF_CHANNELS_24] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFF";
+ static UINT8 ScanControlTable5Def[2 * A_5G_BAND_NUM_CHANNELS] = "FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000000000000000000000000000000000000000000000000000000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000000000000000FF000000FF000000FF000000FF00000000000000000000000000000000000000";
+ UINT8 reportSeverityTableDefaults[WLAN_MAX_SEVERITIES] = "00000000000";
UINT8 reportModuleTableDefaults[WLAN_MAX_LOG_MODULES];
UINT16 reportSeverityTableLen;
UINT16 reportModuleTableLen;
diff --git a/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c b/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
index 669e9cc..9770803 100644
--- a/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
+++ b/sta_dk_4_0_4_32/pform/linux/src/esta_drv.c
@@ -1814,10 +1814,12 @@ int omap1610_drv_create(void)
#define TROUT_IRQ MSM_GPIO_TO_INT(29)
+#ifdef SDIO_INTERRUPT_HANDLING_ON
static void tiwlan_sdio_irq(struct sdio_func *func)
{
printk("%s:\n", __FUNCTION__);
}
+#endif
static const struct sdio_device_id tiwlan_sdio_ids[] = {
{ SDIO_DEVICE_CLASS(SDIO_CLASS_WLAN) },
@@ -1865,11 +1867,11 @@ static int tiwlan_sdio_probe(struct sdio_func *func, const struct sdio_device_id
rc = tiwlan_sdio_init(func);
if (rc)
goto err2;
-
+#ifdef SDIO_INTERRUPT_HANDLING_ON
rc = sdio_claim_irq(func, tiwlan_sdio_irq);
if (rc)
goto err1;
-
+#endif
SDIO_SetFunc( func );
rc = tiwlan_create_drv(0, 0, 0, 0, 0, TROUT_IRQ, NULL, NULL);
@@ -1877,8 +1879,10 @@ static int tiwlan_sdio_probe(struct sdio_func *func, const struct sdio_device_id
printk(KERN_INFO "TIWLAN: Driver initialized (rc %d)\n", rc);
complete(&sdio_wait);
return rc;
+#ifdef SDIO_INTERRUPT_HANDLING_ON
err1:
sdio_disable_func(func);
+#endif
err2:
sdio_release_host(func);
complete(&sdio_wait);
@@ -1889,7 +1893,9 @@ err2:
static void tiwlan_sdio_remove(struct sdio_func *func)
{
printk(KERN_DEBUG "TIWLAN: Releasing SDIO resources\n");
+#ifdef SDIO_INTERRUPT_HANDLING_ON
sdio_release_irq(func);
+#endif
sdio_disable_func(func);
sdio_release_host(func);
printk(KERN_DEBUG "TIWLAN: SDIO resources released\n");
diff --git a/sta_dk_4_0_4_32/wpa_supplicant_lib/Android.mk b/sta_dk_4_0_4_32/wpa_supplicant_lib/Android.mk
index 7f5a5cb..c8b760a 100644
--- a/sta_dk_4_0_4_32/wpa_supplicant_lib/Android.mk
+++ b/sta_dk_4_0_4_32/wpa_supplicant_lib/Android.mk
@@ -24,6 +24,13 @@ ifeq ($(TARGET_SIMULATOR),true)
$(error This makefile must not be included when building the simulator)
endif
+ifndef WPA_SUPPLICANT_VERSION
+WPA_SUPPLICANT_VERSION := VER_0_5_X
+endif
+ifneq ($(WPA_SUPPLICANT_VERSION),VER_0_5_X)
+ $(error This wlan can be used only with 0.5.X version of the wpa_supplicant)
+endif
+
DK_ROOT = $(BOARD_WLAN_TI_STA_DK_ROOT)
OS_ROOT = $(BOARD_WLAN_TI_STA_DK_ROOT)/pform
COMMON = $(DK_ROOT)/common
@@ -129,6 +136,7 @@ INCLUDES = $(COMMON)/inc \
$(DK_ROOT)/../lib
L_CFLAGS += -DCONFIG_DRIVER_CUSTOM -DHOST_COMPILE
+L_CFLAGS += -DWPA_SUPPLICANT_VER=$(WPA_SUPPLICANT_VERSION)
ifeq ($(notdir $(BOARD_WLAN_TI_STA_DK_ROOT)),sta_dk_5_0_0_94)
L_CFLAGS += -DSTA_DK_VER_5_0_0_94
endif
diff --git a/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c b/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
index f5c1aa9..9639859 100644
--- a/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
+++ b/sta_dk_4_0_4_32/wpa_supplicant_lib/driver_ti.c
@@ -1677,6 +1677,8 @@ int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_le
else if( os_strcasecmp(cmd, "rssi") == 0 ) {
#if 1
u8 ssid[MAX_SSID_LEN];
+ struct wpa_scan_result *cur_res;
+ struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(myDrv->hWpaSupplicant);
int rssi, len;
wpa_printf(MSG_DEBUG,"rssi command");
@@ -1688,9 +1690,12 @@ int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_le
os_memcpy( (void *)buf, (void *)ssid, len );
ret = len;
ret += snprintf(&buf[ret], buf_len-len, " rssi %d\n", rssi);
- if (ret < (int)buf_len) {
+ if( !wpa_s )
return( ret );
- }
+ cur_res = scan_get_by_bssid( myDrv, wpa_s->bssid );
+ if( cur_res )
+ cur_res->level = rssi;
+ return( ret );
}
}
#else
diff --git a/wilink_6_1/external_drivers/zoom2/Linux/sdio/Makefile b/wilink_6_1/external_drivers/zoom2/Linux/sdio/Makefile
deleted file mode 100644
index 9524131..0000000
--- a/wilink_6_1/external_drivers/zoom2/Linux/sdio/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-
-DK_ROOT = ../../../..
-PLATRFORM_SRC=$(DK_ROOT)/platforms/hw/host_platform_zoom2/linux
-WLAN_INCS := \
- $(DK_ROOT)/Txn \
- $(DK_ROOT)/external_drivers/zoom2/Linux/sdio \
- $(DK_ROOT)/platforms/hw/host_platform_zoom2/linux
-
-EXTRA_CFLAGS += $(addprefix -I, $(WLAN_INCS)) -DTI_SDIO_STANDALONE
-
-SDIO_IN_BAND ?= n
-TRACE ?= n
-STRIP = n
-
-ifeq ($(SDIO_IN_BAND),y)
-EXTRA_CFLAGS += -DSDIO_IN_BAND_INTERRUPT
-endif
-
-ifeq ($(KERNEL_DEBUGGER),y)
- EXTRA_CFLAGS += -g -O2
-endif
-ifeq ($(DEBUG),y)
- EXTRA_CFLAGS += -DSDIO_DEBUG -O2
-else
- EXTRA_CFLAGS += -O2
- STRIP = y
-endif
-
-ifneq ($(KERNELRELEASE),)
-
-obj-m := sdio.o
-ifeq ($(TEST),y)
-obj-m += testsdio.o
-endif
-
-sdio-objs := SdioDrv.o
-ifeq ($(TEST),y)
-testsdio-objs += testdrv.o $(PLATRFORM_SRC)/SdioAdapter.o
-endif
-else
-
-PWD := $(shell pwd)
-all:
- pwd
- @echo EXTRA_CFLAGS = $(EXTRA_CFLAGS)
- $(MAKE) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) -C $(KERNEL_DIR) M=$(PWD) modules
-ifeq ($(STRIP),y)
- @echo $(CROSS_COMPILE)strip -g sdio.ko
- $(CROSS_COMPILE)strip -g sdio.ko
-ifeq ($(TEST),y)
- $(CROSS_COMPILE)strip -g testsdio.ko
-endif
-endif
-endif
-
-clean:
- rm -f *.o *~ *.~* core .depend dep $(PLATRFORM_SRC)/SdioAdapter.o
- rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
-
diff --git a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.c b/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.c
deleted file mode 100644
index 353caa1..0000000
--- a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.c
+++ /dev/null
@@ -1,1257 +0,0 @@
-/*
- * SdioDrv.c
- *
- * Copyright (C) 2009 Texas Instruments, Inc. - http://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/slab.h>
-#include <mach/io.h>
-#include <linux/types.h>
-#include <linux/dma-mapping.h>
-#include <mach/hardware.h>
-#include <linux/platform_device.h>
-#include <mach/hardware.h>
-#include <linux/i2c/twl4030.h>
-#include <mach/board.h>
-#include <linux/errno.h>
-#include <linux/clk.h>
-#include <mach/clock.h>
-#include <mach/dma.h>
-#include <mach/io.h>
-#include <mach/resource.h>
-typedef void* TI_HANDLE;
-#include "host_platform.h"
-#include "SdioDrvDbg.h"
-#include "SdioDrv.h"
-
-#define TIWLAN_MMC_CONTROLLER 3
-#define TIWLAN_MMC_CONTROLLER_BASE_ADDR OMAP_HSMMC3_BASE
-#define TIWLAN_MMC_CONTROLLER_BASE_SIZE 512
-#define TIWLAN_MMC_MAX_DMA 8192
-
-#define OMAP_MMC_MASTER_CLOCK 96000000
-/*
- * HSMMC Host Controller Registers
- */
-#define OMAP_HSMMC_SYSCONFIG 0x0010
-#define OMAP_HSMMC_SYSSTATUS 0x0014
-#define OMAP_HSMMC_CSRE 0x0024
-#define OMAP_HSMMC_SYSTEST 0x0028
-#define OMAP_HSMMC_CON 0x002C
-#define OMAP_HSMMC_BLK 0x0104
-#define OMAP_HSMMC_ARG 0x0108
-#define OMAP_HSMMC_CMD 0x010C
-#define OMAP_HSMMC_RSP10 0x0110
-#define OMAP_HSMMC_RSP32 0x0114
-#define OMAP_HSMMC_RSP54 0x0118
-#define OMAP_HSMMC_RSP76 0x011C
-#define OMAP_HSMMC_DATA 0x0120
-#define OMAP_HSMMC_PSTATE 0x0124
-#define OMAP_HSMMC_HCTL 0x0128
-#define OMAP_HSMMC_SYSCTL 0x012C
-#define OMAP_HSMMC_STAT 0x0130
-#define OMAP_HSMMC_IE 0x0134
-#define OMAP_HSMMC_ISE 0x0138
-#define OMAP_HSMMC_AC12 0x013C
-#define OMAP_HSMMC_CAPA 0x0140
-#define OMAP_HSMMC_CUR_CAPA 0x0148
-#define OMAP_HSMMC_REV 0x01FC
-
-#define VS18 (1 << 26)
-#define VS30 (1 << 25)
-#define SRA (1 << 24)
-#define SDVS18 (0x5 << 9)
-#define SDVS30 (0x6 << 9)
-#define SDVSCLR 0xFFFFF1FF
-#define SDVSDET 0x00000400
-#define SIDLE_MODE (0x2 << 3)
-#define AUTOIDLE 0x1
-#define SDBP (1 << 8)
-#define DTO 0xE
-#define ICE 0x1
-#define ICS 0x2
-#define CEN (1 << 2)
-#define CLKD_MASK 0x0000FFC0
-#define IE_EN_MASK 0x317F0137
-#define INIT_STREAM (1 << 1)
-#define DP_SELECT (1 << 21)
-#define DDIR (1 << 4)
-#define DMA_EN 0x1
-#define MSBS (1 << 5)
-#define BCE (1 << 1)
-#define ONE_BIT (~(0x2))
-#define EIGHT_BIT (~(0x20))
-#define CC 0x1
-#define TC 0x02
-#define OD 0x1
-#define BRW 0x400
-#define BRR 0x800
-#define BRE (1 << 11)
-#define BWE (1 << 10)
-#define SBGR (1 << 16)
-#define CT (1 << 17)
-#define SDIO_READ (1 << 31)
-#define SDIO_BLKMODE (1 << 27)
-#define OMAP_HSMMC_ERR (1 << 15) /* Any error */
-#define OMAP_HSMMC_CMD_TIMEOUT (1 << 16) /* Com mand response time-out */
-#define OMAP_HSMMC_DATA_TIMEOUT (1 << 20) /* Data response time-out */
-#define OMAP_HSMMC_CMD_CRC (1 << 17) /* Command CRC error */
-#define OMAP_HSMMC_DATA_CRC (1 << 21) /* Date CRC error */
-#define OMAP_HSMMC_CARD_ERR (1 << 28) /* Card ERR */
-#define OMAP_HSMMC_STAT_CLEAR 0xFFFFFFFF
-#define INIT_STREAM_CMD 0x00000000
-#define INT_CLEAR 0x00000000
-#define BLK_CLEAR 0x00000000
-
-/* SCM CONTROL_DEVCONF1 MMC1 overwrite but */
-
-#define MMC1_ACTIVE_OVERWRITE (1 << 31)
-
-#define sdio_blkmode_regaddr 0x2000
-#define sdio_blkmode_mask 0xFF00
-
-#define IO_RW_DIRECT_MASK 0xF000FF00
-#define IO_RW_DIRECT_ARG_MASK 0x80001A00
-
-#define RMASK (MMC_RSP_MASK | MMC_RSP_CRC)
-#define MMC_TIMEOUT_MS 100 /*on the new 2430 it was 20, i changed back to 100*//* obc */
-#define MMCA_VSN_4 4
-
-#define VMMC1_DEV_GRP 0x27
-#define P1_DEV_GRP 0x20
-#define VMMC1_DEDICATED 0x2A
-#define VSEL_3V 0x02
-#define VSEL_18V 0x00
-#define PBIAS_3V 0x03
-#define PBIAS_18V 0x02
-#define PBIAS_LITE 0x04A0
-#define PBIAS_CLR 0x00
-
-#define OMAP_MMC_REGS_BASE IO_ADDRESS(TIWLAN_MMC_CONTROLLER_BASE_ADDR)
-
-#define INT_MMC3_IRQ 94
-#define OMAP_MMC_IRQ INT_MMC3_IRQ
-/*
- * MMC Host controller read/write API's.
- */
-#define OMAP_HSMMC_READ_OFFSET(offset) (__raw_readl((OMAP_MMC_REGS_BASE) + (offset)))
-#define OMAP_HSMMC_READ(reg) (__raw_readl((OMAP_MMC_REGS_BASE) + OMAP_HSMMC_##reg))
-#define OMAP_HSMMC_WRITE(reg, val) (__raw_writel((val), (OMAP_MMC_REGS_BASE) + OMAP_HSMMC_##reg))
-
-#define OMAP_HSMMC_SEND_COMMAND(cmd, arg) do \
-{ \
- OMAP_HSMMC_WRITE(ARG, arg); \
- OMAP_HSMMC_WRITE(CMD, cmd); \
-} while (0)
-
-#define OMAP_HSMMC_CMD52_WRITE ((SD_IO_RW_DIRECT << 24) | (OMAP_HSMMC_CMD_SHORT_RESPONSE << 16))
-#define OMAP_HSMMC_CMD52_READ (((SD_IO_RW_DIRECT << 24) | (OMAP_HSMMC_CMD_SHORT_RESPONSE << 16)) | DDIR)
-#define OMAP_HSMMC_CMD53_WRITE (((SD_IO_RW_EXTENDED << 24) | (OMAP_HSMMC_CMD_SHORT_RESPONSE << 16)) | DP_SELECT)
-#define OMAP_HSMMC_CMD53_READ (((SD_IO_RW_EXTENDED << 24) | (OMAP_HSMMC_CMD_SHORT_RESPONSE << 16)) | DP_SELECT | DDIR)
-#define OMAP_HSMMC_CMD53_READ_DMA (OMAP_HSMMC_CMD53_READ | DMA_EN)
-#define OMAP_HSMMC_CMD53_WRITE_DMA (OMAP_HSMMC_CMD53_WRITE | DMA_EN)
-
-/* Macros to build commands 52 and 53 in format according to SDIO spec */
-#define SDIO_CMD52_READ(v1,v2,v3,v4) (SDIO_RWFLAG(v1)|SDIO_FUNCN(v2)|SDIO_RAWFLAG(v3)| SDIO_ADDRREG(v4))
-#define SDIO_CMD52_WRITE(v1,v2,v3,v4,v5) (SDIO_RWFLAG(v1)|SDIO_FUNCN(v2)|SDIO_RAWFLAG(v3)| SDIO_ADDRREG(v4)|(v5))
-#define SDIO_CMD53_READ(v1,v2,v3,v4,v5,v6) (SDIO_RWFLAG(v1)|SDIO_FUNCN(v2)|SDIO_BLKM(v3)| SDIO_OPCODE(v4)|SDIO_ADDRREG(v5)|(v6&0x1ff))
-#define SDIO_CMD53_WRITE(v1,v2,v3,v4,v5,v6) (SDIO_RWFLAG(v1)|SDIO_FUNCN(v2)|SDIO_BLKM(v3)| SDIO_OPCODE(v4)|SDIO_ADDRREG(v5)|(v6&0x1ff))
-
-#define SDIODRV_MAX_LOOPS 50000
-
-#define VMMC2_DEV_GRP 0x2B
-#define VMMC2_DEDICATED 0x2E
-#define VSEL_S2_18V 0x05
-#define LDO_CLR 0x00
-#define VSEL_S2_CLR 0x40
-#define GPIO_0_BIT_POS 1 << 0
-#define GPIO_1_BIT_POS 1 << 1
-#define VSIM_DEV_GRP 0x37
-#define VSIM_DEDICATED 0x3A
-#define TWL4030_MODULE_PM_RECIEVER 0x13
-
-typedef struct OMAP3430_sdiodrv
-{
- struct clk *fclk, *iclk, *dbclk;
- int ifclks_enabled;
- spinlock_t clk_lock;
- int dma_tx_channel;
- int dma_rx_channel;
- int irq;
- void (*BusTxnCB)(void* BusTxnHandle, int status);
- void* BusTxnHandle;
- unsigned int uBlkSize;
- unsigned int uBlkSizeShift;
- char *dma_buffer;
- void *async_buffer;
- unsigned int async_length;
- int async_status;
- int (*wlanDrvIf_pm_resume)(void);
- int (*wlanDrvIf_pm_suspend)(void);
- struct device *dev;
- dma_addr_t dma_read_addr;
- size_t dma_read_size;
- dma_addr_t dma_write_addr;
- size_t dma_write_size;
-} OMAP3430_sdiodrv_t;
-
-struct omap_hsmmc_regs {
- u32 hctl;
- u32 capa;
- u32 sysconfig;
- u32 ise;
- u32 ie;
- u32 con;
- u32 sysctl;
-};
-static struct omap_hsmmc_regs hsmmc_ctx;
-
-#define SDIO_DRIVER_NAME "TIWLAN_SDIO"
-
-module_param(g_sdio_debug_level, int, 0644);
-MODULE_PARM_DESC(g_sdio_debug_level, "debug level");
-int g_sdio_debug_level = SDIO_DEBUGLEVEL_ERR;
-EXPORT_SYMBOL( g_sdio_debug_level);
-
-OMAP3430_sdiodrv_t g_drv;
-
-struct work_struct sdiodrv_work;
-
-static int sdiodrv_dma_on = 0;
-static int sdiodrv_irq_requested = 0;
-
-static int sdioDrv_clk_enable(void);
-static void sdioDrv_clk_disable(void);
-
-static int sdiodrv_iclk_got = 0;
-static int sdiodrv_fclk_got = 0;
-
-static void sdioDrv_hsmmc_save_ctx()
-{
- /* MMC : context save */
- hsmmc_ctx.hctl = OMAP_HSMMC_READ(HCTL);
- hsmmc_ctx.capa = OMAP_HSMMC_READ(CAPA);
- hsmmc_ctx.sysconfig = OMAP_HSMMC_READ(SYSCONFIG);
- hsmmc_ctx.ise = OMAP_HSMMC_READ(ISE);
- hsmmc_ctx.ie = OMAP_HSMMC_READ(IE);
- hsmmc_ctx.con = OMAP_HSMMC_READ(CON);
- hsmmc_ctx.sysctl = OMAP_HSMMC_READ(SYSCTL);
-}
-
-static void sdioDrv_hsmmc_restore_ctx()
-{
- /* MMC : context restore */
- OMAP_HSMMC_WRITE(HCTL, hsmmc_ctx.hctl);
- OMAP_HSMMC_WRITE(CAPA, hsmmc_ctx.capa);
- OMAP_HSMMC_WRITE(SYSCONFIG, hsmmc_ctx.sysconfig);
- OMAP_HSMMC_WRITE(CON, hsmmc_ctx.con);
- OMAP_HSMMC_WRITE(ISE, hsmmc_ctx.ise);
- OMAP_HSMMC_WRITE(IE, hsmmc_ctx.ie);
- OMAP_HSMMC_WRITE(SYSCTL, hsmmc_ctx.sysctl);
- OMAP_HSMMC_WRITE(HCTL, OMAP_HSMMC_READ(HCTL) | SDBP);
-}
-
-void sdiodrv_task(struct work_struct *unused)
-{
- PDEBUG("sdiodrv_tasklet()\n");
-
- if (g_drv.dma_read_addr != 0) {
- dma_unmap_single(g_drv.dev, g_drv.dma_read_addr, g_drv.dma_read_size, DMA_FROM_DEVICE);
- g_drv.dma_read_addr = 0;
- g_drv.dma_read_size = 0;
- }
-
- if (g_drv.dma_write_addr != 0) {
- dma_unmap_single(g_drv.dev, g_drv.dma_write_addr, g_drv.dma_write_size, DMA_TO_DEVICE);
- g_drv.dma_write_addr = 0;
- g_drv.dma_write_size = 0;
- }
-
- if (g_drv.async_buffer) {
- memcpy(g_drv.async_buffer, g_drv.dma_buffer, g_drv.async_length);
- g_drv.async_buffer = NULL;
- }
-
- if (g_drv.BusTxnCB != NULL) {
- g_drv.BusTxnCB(g_drv.BusTxnHandle, g_drv.async_status);
- }
-}
-
-irqreturn_t sdiodrv_irq(int irq, void *drv)
-{
- int status;
-
- PDEBUG("sdiodrv_irq()\n");
-
- status = OMAP_HSMMC_READ(STAT);
- OMAP_HSMMC_WRITE(ISE, 0);
- g_drv.async_status = status & (OMAP_HSMMC_ERR);
- if (g_drv.async_status) {
- PERR("sdiodrv_irq: ERROR in STAT = 0x%x\n", status);
- }
- schedule_work(&sdiodrv_work);
-
- return IRQ_HANDLED;
-}
-
-void sdiodrv_dma_read_cb(int lch, u16 ch_status, void *data)
-{
- PDEBUG("sdiodrv_dma_read_cb() channel=%d status=0x%x\n", lch, (int)ch_status);
-
- g_drv.async_status = ch_status & (1 << 7);
-
- schedule_work(&sdiodrv_work);
-}
-
-void sdiodrv_dma_write_cb(int lch, u16 ch_status, void *data)
-{
-}
-
-int sdiodrv_dma_init(void)
-{
- int rc;
-
- rc = omap_request_dma(OMAP34XX_DMA_MMC3_TX, "SDIO WRITE", sdiodrv_dma_write_cb, &g_drv, &g_drv.dma_tx_channel);
- if (rc != 0) {
- PERR("sdiodrv_dma_init() omap_request_dma(OMAP34XX_DMA_MMC2_TX) FAILED\n");
- goto out;
- }
-
- rc = omap_request_dma(OMAP34XX_DMA_MMC3_RX, "SDIO READ", sdiodrv_dma_read_cb, &g_drv, &g_drv.dma_rx_channel);
- if (rc != 0) {
- PERR("sdiodrv_dma_init() omap_request_dma(OMAP24XX_DMA_MMC2_RX) FAILED\n");
- goto freetx;
- }
-
- omap_set_dma_src_params(g_drv.dma_rx_channel,
- 0, // src_port is only for OMAP1
- OMAP_DMA_AMODE_CONSTANT,
- (OMAP_HSMMC3_BASE) + OMAP_HSMMC_DATA, 0, 0);
-
- omap_set_dma_dest_params(g_drv.dma_tx_channel,
- 0, // dest_port is only for OMAP1
- OMAP_DMA_AMODE_CONSTANT,
- (OMAP_HSMMC3_BASE) + OMAP_HSMMC_DATA, 0, 0);
-
- if ((g_drv.dma_buffer = kmalloc(TIWLAN_MMC_MAX_DMA, GFP_ATOMIC|GFP_DMA)) == NULL) {
- rc = -ENOMEM;
- goto freerx;
- }
-
- return 0;
-
-freerx:
- omap_free_dma(g_drv.dma_rx_channel);
-freetx:
- omap_free_dma(g_drv.dma_tx_channel);
-out:
- return rc;
-}
-
-void sdiodrv_dma_shutdown(void)
-{
- omap_free_dma(g_drv.dma_tx_channel);
- omap_free_dma(g_drv.dma_rx_channel);
- if (g_drv.dma_buffer) {
- kfree(g_drv.dma_buffer);
- g_drv.dma_buffer = NULL;
- }
-} /* sdiodrv_dma_shutdown() */
-
-static u32 sdiodrv_poll_status(u32 reg_offset, u32 stat, unsigned int msecs)
-{
- u32 status=0, loops=0;
-
- do
- {
- status=OMAP_HSMMC_READ_OFFSET(reg_offset);
- if(( status & stat))
- {
- break;
- }
- } while (loops++ < SDIODRV_MAX_LOOPS);
-
- return status;
-} /* sdiodrv_poll_status */
-
-void dumpreg(void)
-{
- printk(KERN_ERR "\n MMCHS_SYSCONFIG for mmc3 = %x ", omap_readl( 0x480AD010 ));
- printk(KERN_ERR "\n MMCHS_SYSSTATUS for mmc3 = %x ", omap_readl( 0x480AD014 ));
- printk(KERN_ERR "\n MMCHS_CSRE for mmc3 = %x ", omap_readl( 0x480AD024 ));
- printk(KERN_ERR "\n MMCHS_SYSTEST for mmc3 = %x ", omap_readl( 0x480AD028 ));
- printk(KERN_ERR "\n MMCHS_CON for mmc3 = %x ", omap_readl( 0x480AD02C ));
- printk(KERN_ERR "\n MMCHS_PWCNT for mmc3 = %x ", omap_readl( 0x480AD030 ));
- printk(KERN_ERR "\n MMCHS_BLK for mmc3 = %x ", omap_readl( 0x480AD104 ));
- printk(KERN_ERR "\n MMCHS_ARG for mmc3 = %x ", omap_readl( 0x480AD108 ));
- printk(KERN_ERR "\n MMCHS_CMD for mmc3 = %x ", omap_readl( 0x480AD10C ));
- printk(KERN_ERR "\n MMCHS_RSP10 for mmc3 = %x ", omap_readl( 0x480AD110 ));
- printk(KERN_ERR "\n MMCHS_RSP32 for mmc3 = %x ", omap_readl( 0x480AD114 ));
- printk(KERN_ERR "\n MMCHS_RSP54 for mmc3 = %x ", omap_readl( 0x480AD118 ));
- printk(KERN_ERR "\n MMCHS_RSP76 for mmc3 = %x ", omap_readl( 0x480AD11C ));
- printk(KERN_ERR "\n MMCHS_DATA for mmc3 = %x ", omap_readl( 0x480AD120 ));
- printk(KERN_ERR "\n MMCHS_PSTATE for mmc3 = %x ", omap_readl( 0x480AD124 ));
- printk(KERN_ERR "\n MMCHS_HCTL for mmc3 = %x ", omap_readl( 0x480AD128 ));
- printk(KERN_ERR "\n MMCHS_SYSCTL for mmc3 = %x ", omap_readl( 0x480AD12C ));
- printk(KERN_ERR "\n MMCHS_STAT for mmc3 = %x ", omap_readl( 0x480AD130 ));
- printk(KERN_ERR "\n MMCHS_IE for mmc3 = %x ", omap_readl( 0x480AD134 ));
- printk(KERN_ERR "\n MMCHS_ISE for mmc3 = %x ", omap_readl( 0x480AD138 ));
- printk(KERN_ERR "\n MMCHS_AC12 for mmc3 = %x ", omap_readl( 0x480AD13C ));
- printk(KERN_ERR "\n MMCHS_CAPA for mmc3 = %x ", omap_readl( 0x480AD140 ));
- printk(KERN_ERR "\n MMCHS_CUR_CAPA for mmc3 = %x ", omap_readl( 0x480AD148 ));
-}
-
-//cmd flow p. 3609 obc
-static int sdiodrv_send_command(u32 cmdreg, u32 cmdarg)
-{
- OMAP_HSMMC_WRITE(STAT, OMAP_HSMMC_STAT_CLEAR);
- OMAP_HSMMC_SEND_COMMAND(cmdreg, cmdarg);
-
- return sdiodrv_poll_status(OMAP_HSMMC_STAT, CC, MMC_TIMEOUT_MS);
-
-} /* sdiodrv_send_command() */
-
-/*
- * Disable clock to the card
- */
-static void OMAP3430_mmc_stop_clock(void)
-{
- OMAP_HSMMC_WRITE(SYSCTL, OMAP_HSMMC_READ(SYSCTL) & ~CEN);
- if ((OMAP_HSMMC_READ(SYSCTL) & CEN) != 0x0)
- {
- PERR("MMC clock not stoped, clock freq can not be altered\n");
- }
-} /* OMAP3430_mmc_stop_clock */
-
-/*
- * Reset the SD system
- */
-int OMAP3430_mmc_reset(void)
-{
- int status, loops=0;
- //p. 3598 - need to set SOFTRESET to 0x1 0bc
- OMAP_HSMMC_WRITE(SYSCTL, OMAP_HSMMC_READ(SYSCTL) | SRA);
- while ((status = OMAP_HSMMC_READ(SYSCTL) & SRA) && loops++ < SDIODRV_MAX_LOOPS);
- if (status & SRA)
- {
- PERR("OMAP3430_mmc_reset() MMC reset FAILED!! status=0x%x\n",status);
- }
-
- return status;
-
-} /* OMAP3430_mmc_reset */
-
-//p. 3611
-static void OMAP3430_mmc_set_clock(unsigned int clock, OMAP3430_sdiodrv_t *host)
-{
- u16 dsor = 0;
- unsigned long regVal;
- int status;
-
- PDEBUG("OMAP3430_mmc_set_clock(%d)\n",clock);
- if (clock) {
- /* Enable MMC_SD_CLK */
- dsor = OMAP_MMC_MASTER_CLOCK / clock;
- if (dsor < 1) {
- dsor = 1;
- }
- if (OMAP_MMC_MASTER_CLOCK / dsor > clock) {
- dsor++;
- }
- if (dsor > 250) {
- dsor = 250;
- }
- }
- OMAP3430_mmc_stop_clock();
- regVal = OMAP_HSMMC_READ(SYSCTL);
- regVal = regVal & ~(CLKD_MASK);//p. 3652
- regVal = regVal | (dsor << 6);
- regVal = regVal | (DTO << 16);//data timeout
- OMAP_HSMMC_WRITE(SYSCTL, regVal);
- OMAP_HSMMC_WRITE(SYSCTL, OMAP_HSMMC_READ(SYSCTL) | ICE);//internal clock enable. obc not mentioned in the spec
- /*
- * wait till the the clock is stable (ICS) bit is set
- */
- status = sdiodrv_poll_status(OMAP_HSMMC_SYSCTL, ICS, MMC_TIMEOUT_MS);
- if(!(status & ICS)) {
- PERR("OMAP3430_mmc_set_clock() clock not stable!! status=0x%x\n",status);
- }
- /*
- * Enable clock to the card
- */
- OMAP_HSMMC_WRITE(SYSCTL, OMAP_HSMMC_READ(SYSCTL) | CEN);
-
-} /* OMAP3430_mmc_set_clock() */
-
-static void sdiodrv_free_resources(void)
-{
- if(g_drv.ifclks_enabled) {
- sdioDrv_clk_disable();
- }
-
- if (sdiodrv_fclk_got) {
- clk_put(g_drv.fclk);
- sdiodrv_fclk_got = 0;
- }
-
- if (sdiodrv_iclk_got) {
- clk_put(g_drv.iclk);
- sdiodrv_iclk_got = 0;
- }
-
- if (sdiodrv_irq_requested) {
- free_irq(OMAP_MMC_IRQ, &g_drv);
- sdiodrv_irq_requested = 0;
- }
-
- if (sdiodrv_dma_on) {
- sdiodrv_dma_shutdown();
- sdiodrv_dma_on = 0;
- }
-}
-
-int sdioDrv_InitHw(void)
-{
- return 0;
-} /* sdiodrv_init */
-
-void sdiodrv_shutdown(void)
-{
- PDEBUG("entering %s()\n" , __FUNCTION__ );
-
- sdiodrv_free_resources();
-
- PDEBUG("exiting %s\n", __FUNCTION__);
-} /* sdiodrv_shutdown() */
-
-static int sdiodrv_send_data_xfer_commad(u32 cmd, u32 cmdarg, int length, u32 buffer_enable_status, unsigned int bBlkMode)
-{
- int status;
-
- PDEBUG("%s() writing CMD 0x%x ARG 0x%x\n",__FUNCTION__, cmd, cmdarg);
-
- /* block mode */
- if(bBlkMode) {
- /*
- * Bits 31:16 of BLK reg: NBLK Blocks count for current transfer.
- * in case of Block MOde the lenght is treated here as number of blocks
- * (and not as a length).
- * Bits 11:0 of BLK reg: BLEN Transfer Block Size. in case of block mode set that field to block size.
- */
- OMAP_HSMMC_WRITE(BLK, (length << 16) | (g_drv.uBlkSize << 0));
-
- /*
- * In CMD reg:
- * BCE: Block Count Enable
- * MSBS: Multi/Single block select
- */
- cmd |= MSBS | BCE ;
- } else {
- OMAP_HSMMC_WRITE(BLK, length);
- }
-
- status = sdiodrv_send_command(cmd, cmdarg);
- if(!(status & CC)) {
- PERR("sdiodrv_send_data_xfer_commad() SDIO Command error! STAT = 0x%x\n", status);
- return 0;
- }
- PDEBUG("%s() length = %d(%dw) BLK = 0x%x\n",
- __FUNCTION__, length,((length + 3) >> 2), OMAP_HSMMC_READ(BLK));
-
- return sdiodrv_poll_status(OMAP_HSMMC_PSTATE, buffer_enable_status, MMC_TIMEOUT_MS);
-
-} /* sdiodrv_send_data_xfer_commad() */
-
-int sdiodrv_data_xfer_sync(u32 cmd, u32 cmdarg, void *data, int length, u32 buffer_enable_status)
-{
- u32 buf_start, buf_end, data32;
- int status;
-
- status = sdiodrv_send_data_xfer_commad(cmd, cmdarg, length, buffer_enable_status, 0);
- if(!(status & buffer_enable_status))
- {
- PERR("sdiodrv_data_xfer_sync() buffer disabled! length = %d BLK = 0x%x PSTATE = 0x%x\n",
- length, OMAP_HSMMC_READ(BLK), status);
- return -1;
- }
- buf_end = (u32)data+(u32)length;
-
- //obc need to check BRE/BWE every time, see p. 3605
- /*
- * Read loop
- */
- if (buffer_enable_status == BRE)
- {
- if (((u32)data & 3) == 0) /* 4 bytes aligned */
- {
- for (buf_start = (u32)data; (u32)data < buf_end; data += sizeof(unsigned long))
- {
- *((unsigned long*)(data)) = OMAP_HSMMC_READ(DATA);
- }
- }
- else /* 2 bytes aligned */
- {
- for (buf_start = (u32)data; (u32)data < buf_end; data += sizeof(unsigned long))
- {
- data32 = OMAP_HSMMC_READ(DATA);
- *((unsigned short *)data) = (unsigned short)data32;
- *((unsigned short *)data + 1) = (unsigned short)(data32 >> 16);
- }
- }
- }
- /*
- * Write loop
- */
- else
- {
- if (((u32)data & 3) == 0) /* 4 bytes aligned */
- {
- for (buf_start = (u32)data; (u32)data < buf_end; data += sizeof(unsigned long))
- {
- OMAP_HSMMC_WRITE(DATA,*((unsigned long*)(data)));
- }
- }
- else /* 2 bytes aligned */
- {
- for (buf_start = (u32)data; (u32)data < buf_end; data += sizeof(unsigned long))
- {
- OMAP_HSMMC_WRITE(DATA,*((unsigned short*)data) | *((unsigned short*)data+1) << 16 );
- }
-
- }
- }
- status = sdiodrv_poll_status(OMAP_HSMMC_STAT, TC, MMC_TIMEOUT_MS);
- if(!(status & TC))
- {
- PERR("sdiodrv_data_xfer_sync() transfer error! STAT = 0x%x\n", status);
- return -1;
- }
-
- return 0;
-
-} /* sdiodrv_data_xfer_sync() */
-
-int sdioDrv_ConnectBus (void * fCbFunc,
- void * hCbArg,
- unsigned int uBlkSizeShift,
- unsigned int uSdioThreadPriority,
- unsigned char **pTxDmaSrcAddr)
-{
- g_drv.BusTxnCB = fCbFunc;
- g_drv.BusTxnHandle = hCbArg;
- g_drv.uBlkSizeShift = uBlkSizeShift;
- g_drv.uBlkSize = 1 << uBlkSizeShift;
-
- INIT_WORK(&sdiodrv_work, sdiodrv_task);
-
- /* Provide the DMA buffer address to the upper layer so it will use it as the transactions host buffer. */
- if (pTxDmaSrcAddr)
- {
- *pTxDmaSrcAddr = g_drv.dma_buffer;
- }
-
- return sdioDrv_InitHw ();
-}
-
-int sdioDrv_DisconnectBus (void)
-{
- return 0;
-}
-
-//p.3609 cmd flow
-int sdioDrv_ExecuteCmd (unsigned int uCmd,
- unsigned int uArg,
- unsigned int uRespType,
- void * pResponse,
- unsigned int uLen)
-{
- unsigned int uCmdReg = 0;
- unsigned int uStatus = 0;
- unsigned int uResponse = 0;
-
- PDEBUG("sdioDrv_ExecuteCmd() starting cmd %02x arg %08x\n", (int)uCmd, (int)uArg);
-
- uCmdReg = (uCmd << 24) | (uRespType << 16) ;
-
- uStatus = sdiodrv_send_command(uCmdReg, uArg);
-
- if (!(uStatus & CC))
- {
- PERR("sdioDrv_ExecuteCmd() SDIO Command error status = 0x%x\n", uStatus);
- return -1;
- }
- if ((uLen > 0) && (uLen <= 4))/*obc - Len > 4 ? shouldn't read anything ? */
- {
- uResponse = OMAP_HSMMC_READ(RSP10);
- memcpy (pResponse, (char *)&uResponse, uLen);
- PDEBUG("sdioDrv_ExecuteCmd() response = 0x%x\n", uResponse);
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------------------*/
-
-int sdioDrv_ReadSync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bIncAddr,
- unsigned int bMore)
-{
- unsigned int uCmdArg;
- int iStatus;
-
-// printk(KERN_INFO "in sdioDrv_ReadSync\n");
-
- uCmdArg = SDIO_CMD53_READ(0, uFunc, 0, bIncAddr, uHwAddr, uLen);
-
- iStatus = sdiodrv_data_xfer_sync(OMAP_HSMMC_CMD53_READ, uCmdArg, pData, uLen, BRE);
- if (iStatus != 0)
- {
- PERR("sdioDrv_ReadSync() FAILED!!\n");
- }
-
- return iStatus;
-}
-
-/*--------------------------------------------------------------------------------------*/
-int sdioDrv_ReadAsync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bBlkMode,
- unsigned int bIncAddr,
- unsigned int bMore)
-{
- int iStatus;
- unsigned int uCmdArg;
- unsigned int uNumBlks;
- unsigned int uDmaBlockCount;
- unsigned int uNumOfElem;
- void *dma_buffer;
- dma_addr_t dma_bus_address;
-
- //printk(KERN_INFO "in sdioDrv_ReadAsync\n");
-
- if (bBlkMode)
- {
- /* For block mode use number of blocks instead of length in bytes */
- uNumBlks = uLen >> g_drv.uBlkSizeShift;
- uDmaBlockCount = uNumBlks;
- /* due to the DMA config to 32Bit per element (OMAP_DMA_DATA_TYPE_S32) the division is by 4 */
- uNumOfElem = g_drv.uBlkSize >> 2;
- }
- else
- {
- uNumBlks = uLen;
- uDmaBlockCount = 1;
- uNumOfElem = (uLen + 3) >> 2;
- }
-
- if (((u32)pData & 3) == 0) /* 4 bytes aligned */
- {
- dma_buffer = pData;
- }
- else /* 2 bytes aligned */
- {
- dma_buffer = g_drv.dma_buffer;
- g_drv.async_buffer = pData;
- g_drv.async_length = uLen;
- }
-
- uCmdArg = SDIO_CMD53_READ(0, uFunc, bBlkMode, bIncAddr, uHwAddr, uNumBlks);
-
- iStatus = sdiodrv_send_data_xfer_commad(OMAP_HSMMC_CMD53_READ_DMA, uCmdArg, uNumBlks, BRE, bBlkMode);
-
- if (!(iStatus & BRE))
- {
- PERR("sdioDrv_ReadAsync() buffer disabled! length = %d BLK = 0x%x PSTATE = 0x%x, BlkMode = %d\n",
- uLen, OMAP_HSMMC_READ(BLK), iStatus, bBlkMode);
- goto err;
- }
-
- PDEBUG("sdiodrv_read_async() dma_ch=%d \n",g_drv.dma_rx_channel);
-
- dma_bus_address = dma_map_single(g_drv.dev, dma_buffer, uLen, DMA_FROM_DEVICE);
- if (!dma_bus_address) {
- PERR("sdioDrv_ReadAsync: dma_map_single failed\n");
- goto err;
- }
-
- if (g_drv.dma_read_addr != 0) {
- printk(KERN_ERR "sdioDrv_ReadAsync: previous DMA op is not finished!\n");
- BUG();
- }
-
- g_drv.dma_read_addr = dma_bus_address;
- g_drv.dma_read_size = uLen;
-
- omap_set_dma_dest_params (g_drv.dma_rx_channel,
- 0, // dest_port is only for OMAP1
- OMAP_DMA_AMODE_POST_INC,
- dma_bus_address,
- 0, 0);
-
- omap_set_dma_transfer_params(g_drv.dma_rx_channel, OMAP_DMA_DATA_TYPE_S32, uNumOfElem , uDmaBlockCount , OMAP_DMA_SYNC_FRAME, OMAP34XX_DMA_MMC3_RX, OMAP_DMA_SRC_SYNC);
-
- omap_start_dma(g_drv.dma_rx_channel);
-
- /* Continued at sdiodrv_irq() after DMA transfer is finished */
- return 0;
-err:
- return -1;
-
-}
-
-
-/*--------------------------------------------------------------------------------------*/
-
-int sdioDrv_WriteSync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bIncAddr,
- unsigned int bMore)
-{
- unsigned int uCmdArg;
- int iStatus;
-// printk(KERN_INFO "in sdioDrv_WriteSync\n");
-
- uCmdArg = SDIO_CMD53_WRITE(1, uFunc, 0, bIncAddr, uHwAddr, uLen);
-
- iStatus = sdiodrv_data_xfer_sync(OMAP_HSMMC_CMD53_WRITE, uCmdArg, pData, uLen, BWE);
- if (iStatus != 0)
- {
- PERR("sdioDrv_WriteSync() FAILED!!\n");
- }
-
- return iStatus;
-}
-
-/*--------------------------------------------------------------------------------------*/
-int sdioDrv_WriteAsync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bBlkMode,
- unsigned int bIncAddr,
- unsigned int bMore)
-{
- int iStatus;
- unsigned int uCmdArg;
- unsigned int uNumBlks;
- unsigned int uDmaBlockCount;
- unsigned int uNumOfElem;
- dma_addr_t dma_bus_address;
-
-// printk(KERN_INFO "in sdioDrv_WriteAsync\n");
-
- if (bBlkMode)
- {
- /* For block mode use number of blocks instead of length in bytes */
- uNumBlks = uLen >> g_drv.uBlkSizeShift;
- uDmaBlockCount = uNumBlks;
- /* due to the DMA config to 32Bit per element (OMAP_DMA_DATA_TYPE_S32) the division is by 4 */
- uNumOfElem = g_drv.uBlkSize >> 2;
- }
- else
- {
- uNumBlks = uLen;
- uDmaBlockCount = 1;
- uNumOfElem = (uLen + 3) >> 2;
- }
-
- uCmdArg = SDIO_CMD53_WRITE(1, uFunc, bBlkMode, bIncAddr, uHwAddr, uNumBlks);
-
- iStatus = sdiodrv_send_data_xfer_commad(OMAP_HSMMC_CMD53_WRITE_DMA, uCmdArg, uNumBlks, BWE, bBlkMode);
- if (!(iStatus & BWE))
- {
- PERR("sdioDrv_WriteAsync() buffer disabled! length = %d, BLK = 0x%x, Status = 0x%x\n",
- uLen, OMAP_HSMMC_READ(BLK), iStatus);
- goto err;
- }
-
- OMAP_HSMMC_WRITE(ISE, TC);
-
- dma_bus_address = dma_map_single(g_drv.dev, pData, uLen, DMA_TO_DEVICE);
- if (!dma_bus_address) {
- PERR("sdioDrv_WriteAsync: dma_map_single failed\n");
- goto err;
- }
-
- if (g_drv.dma_write_addr != 0) {
- PERR("sdioDrv_WriteAsync: previous DMA op is not finished!\n");
- BUG();
- }
-
- g_drv.dma_write_addr = dma_bus_address;
- g_drv.dma_write_size = uLen;
-
- omap_set_dma_src_params (g_drv.dma_tx_channel,
- 0, // src_port is only for OMAP1
- OMAP_DMA_AMODE_POST_INC,
- dma_bus_address,
- 0, 0);
-
- omap_set_dma_transfer_params(g_drv.dma_tx_channel, OMAP_DMA_DATA_TYPE_S32, uNumOfElem, uDmaBlockCount, OMAP_DMA_SYNC_FRAME, OMAP34XX_DMA_MMC3_TX, OMAP_DMA_DST_SYNC);
-
- omap_start_dma(g_drv.dma_tx_channel);
-
- /* Continued at sdiodrv_irq() after DMA transfer is finished */
- return 0;
-err:
- return -1;
-}
-
-/*--------------------------------------------------------------------------------------*/
-
-int sdioDrv_ReadSyncBytes (unsigned int uFunc,
- unsigned int uHwAddr,
- unsigned char *pData,
- unsigned int uLen,
- unsigned int bMore)
-{
- unsigned int uCmdArg;
- unsigned int i;
- int iStatus;
-
- for (i = 0; i < uLen; i++)
- {
- uCmdArg = SDIO_CMD52_READ(0, uFunc, 0, uHwAddr);
-
- iStatus = sdiodrv_send_command(OMAP_HSMMC_CMD52_READ, uCmdArg);
-
- if (!(iStatus & CC))
- {
- PERR("sdioDrv_ReadSyncBytes() SDIO Command error status = 0x%x\n", iStatus);
- return -1;
- }
- else
- {
- *pData = (unsigned char)(OMAP_HSMMC_READ(RSP10));
- }
-
- uHwAddr++;
- pData++;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------------------------------------------*/
-
-int sdioDrv_WriteSyncBytes (unsigned int uFunc,
- unsigned int uHwAddr,
- unsigned char *pData,
- unsigned int uLen,
- unsigned int bMore)
-{
- unsigned int uCmdArg;
- unsigned int i;
- int iStatus;
-
- for (i = 0; i < uLen; i++)
- {
- uCmdArg = SDIO_CMD52_WRITE(1, uFunc, 0, uHwAddr, *pData);
-
- iStatus = sdiodrv_send_command(OMAP_HSMMC_CMD52_WRITE, uCmdArg);
-
- if (!(iStatus & CC))
- {
- PERR("sdioDrv_WriteSyncBytes() SDIO Command error status = 0x%x\n", iStatus);
- return -1;
- }
-
- uHwAddr++;
- pData++;
- }
-
- return 0;
-}
-
-
-static int sdioDrv_probe(struct platform_device *pdev)
-{
- int rc;
- u32 status;
-#ifdef SDIO_1_BIT /* see also in SdioAdapter.c */
- unsigned long clock_rate = 6000000;
-#else
- unsigned long clock_rate = 24000000;
-#endif
-
- printk(KERN_INFO "TIWLAN SDIO probe: initializing mmc%d device\n", pdev->id + 1);
-
- /* remember device struct for future DMA operations */
- g_drv.dev = &pdev->dev;
- g_drv.irq = platform_get_irq(pdev, 0);
- if (g_drv.irq < 0)
- return -ENXIO;
-
- rc= request_irq(OMAP_MMC_IRQ, sdiodrv_irq, 0, SDIO_DRIVER_NAME, &g_drv);
- if (rc != 0) {
- PERR("sdioDrv_InitHw() - request_irq FAILED!!\n");
- return rc;
- }
- sdiodrv_irq_requested = 1;
-
- rc = sdiodrv_dma_init();
- if (rc != 0) {
- PERR("sdiodrv_init() - sdiodrv_dma_init FAILED!!\n");
- free_irq(OMAP_MMC_IRQ, &g_drv);
- return rc;
- }
- sdiodrv_dma_on = 1;
-
- spin_lock_init(&g_drv.clk_lock);
-
- g_drv.fclk = clk_get(&pdev->dev, "mmchs_fck");
- if (IS_ERR(g_drv.fclk)) {
- rc = PTR_ERR(g_drv.fclk);
- PERR("clk_get(fclk) FAILED !!!\n");
- goto err;
- }
- sdiodrv_fclk_got = 1;
-
- g_drv.iclk = clk_get(&pdev->dev, "mmchs_ick");
- if (IS_ERR(g_drv.iclk)) {
- rc = PTR_ERR(g_drv.iclk);
- PERR("clk_get(iclk) FAILED !!!\n");
- goto err;
- }
- sdiodrv_iclk_got = 1;
-
- rc = clk_enable(g_drv.iclk);
- if (rc) {
- PERR("clk_enable(iclk) FAILED !!!\n");
- goto err;
- }
-
- rc = clk_enable(g_drv.fclk);
- if (rc) {
- PERR("clk_enable(fclk) FAILED !!!\n");
- goto err;
- }
- g_drv.ifclks_enabled = 1;
-
- OMAP3430_mmc_reset();
-
- //obc - init sequence p. 3600,3617
- /* 1.8V */
- OMAP_HSMMC_WRITE(CAPA, OMAP_HSMMC_READ(CAPA) | VS18);
- OMAP_HSMMC_WRITE(HCTL, OMAP_HSMMC_READ(HCTL) | SDVS18);//SDVS fits p. 3650
- /* clock gating */
- OMAP_HSMMC_WRITE(SYSCONFIG, OMAP_HSMMC_READ(SYSCONFIG) | AUTOIDLE);
-
- /* bus power */
- OMAP_HSMMC_WRITE(HCTL, OMAP_HSMMC_READ(HCTL) | SDBP);//SDBP fits p. 3650
- /* interrupts */
- OMAP_HSMMC_WRITE(ISE, 0);
- OMAP_HSMMC_WRITE(IE, IE_EN_MASK);
-
- //p. 3601 suggests moving to the end
- OMAP3430_mmc_set_clock(clock_rate, &g_drv);
- printk("SDIO clock Configuration is now set to %dMhz\n",(int)clock_rate/1000000);
-
- /* Bus width */
-#ifdef SDIO_1_BIT /* see also in SdioAdapter.c */
- PDEBUG("%s() setting %d data lines\n",__FUNCTION__, 1);
- OMAP_HSMMC_WRITE(HCTL, OMAP_HSMMC_READ(HCTL) & (ONE_BIT));
-#else
- PDEBUG("%s() setting %d data lines\n",__FUNCTION__, 4);
- OMAP_HSMMC_WRITE(HCTL, OMAP_HSMMC_READ(HCTL) | (1 << 1));//DTW 4 bits - p. 3650
-#endif
-
- /* send the init sequence. 80 clocks of synchronization in the SDIO */
- //doesn't match p. 3601,3617 - obc
- OMAP_HSMMC_WRITE( CON, OMAP_HSMMC_READ(CON) | INIT_STREAM);
- OMAP_HSMMC_SEND_COMMAND( 0, 0);
- status = sdiodrv_poll_status(OMAP_HSMMC_STAT, CC, MMC_TIMEOUT_MS);
- if (!(status & CC)) {
- PERR("sdioDrv_InitHw() SDIO Command error status = 0x%x\n", status);
- rc = -1;
- goto err;
- }
- OMAP_HSMMC_WRITE(CON, OMAP_HSMMC_READ(CON) & ~INIT_STREAM);
-
- return 0;
-err:
- sdiodrv_free_resources();
- return rc;
-}
-
-static int sdioDrv_remove(struct platform_device *pdev)
-{
- printk(KERN_INFO "sdioDrv_remove: calling sdiodrv_shutdown\n");
-
- sdiodrv_shutdown();
-
- return 0;
-}
-
-#ifdef CONFIG_PM
-static int sdioDrv_suspend(struct platform_device *pdev, pm_message_t state)
-{
- int rc = 0;
-
- /* Tell WLAN driver to suspend, if a suspension function has been registered */
- if (g_drv.wlanDrvIf_pm_suspend) {
- printk(KERN_INFO "TISDIO: Asking TIWLAN to suspend\n");
- rc = g_drv.wlanDrvIf_pm_suspend();
- if (rc != 0)
- return rc;
- }
-
- printk(KERN_INFO "TISDIO: sdioDrv is suspending\n");
-
- sdiodrv_shutdown();
-
- return rc;
-}
-
-/* Routine to resume the MMC device */
-static int sdioDrv_resume(struct platform_device *pdev)
-{
- int rc;
-
- printk(KERN_INFO "TISDIO: sdioDrv is resuming\n");
-
- rc = sdioDrv_probe(pdev);
- if (rc != 0) {
- printk(KERN_ERR "TISDIO: resume error\n");
- return rc;
- }
-
- if (g_drv.wlanDrvIf_pm_resume) {
- printk(KERN_INFO "TISDIO: Asking TIWLAN to resume\n");
- return(g_drv.wlanDrvIf_pm_resume());
- }
- else
- return 0;
-}
-#else
-#define omap_mmc_suspend NULL
-#define omap_mmc_resume NULL
-#endif
-
-static struct platform_driver sdioDrv_struct = {
- .probe = sdioDrv_probe,
- .remove = sdioDrv_remove,
- .suspend = sdioDrv_suspend,
- .resume = sdioDrv_resume,
- .driver = {
- .name = SDIO_DRIVER_NAME,
- },
-};
-
-void sdioDrv_register_pm(int (*wlanDrvIf_Start)(void),
- int (*wlanDrvIf_Stop)(void))
-{
- g_drv.wlanDrvIf_pm_resume = wlanDrvIf_Start;
- g_drv.wlanDrvIf_pm_suspend = wlanDrvIf_Stop;
-}
-
-static int sdioDrv_clk_enable(void)
-{
- unsigned long flags;
- int ret = 0;
-
- spin_lock_irqsave(&g_drv.clk_lock, flags);
- if (g_drv.ifclks_enabled)
- goto done;
- ret = clk_enable(g_drv.iclk);
- if (ret)
- goto clk_en_err1;
- ret = clk_enable(g_drv.fclk);
- if (ret)
- goto clk_en_err2;
- g_drv.ifclks_enabled = 1;
-
- sdioDrv_hsmmc_restore_ctx();
-
-done:
- spin_unlock_irqrestore(&g_drv.clk_lock, flags);
- return ret;
-
-clk_en_err2:
- clk_disable(g_drv.iclk);
-clk_en_err1:
- spin_unlock_irqrestore(&g_drv.clk_lock, flags);
- return ret;
-}
-
-static void sdioDrv_clk_disable(void)
-{
- unsigned long flags;
- spin_lock_irqsave(&g_drv.clk_lock, flags);
- if (!g_drv.ifclks_enabled)
- goto done;
-
- sdioDrv_hsmmc_save_ctx();
-
- clk_disable(g_drv.fclk);
- clk_disable(g_drv.iclk);
- g_drv.ifclks_enabled = 0;
-
-done:
- spin_unlock_irqrestore(&g_drv.clk_lock, flags);
-}
-#ifdef TI_SDIO_STANDALONE
-static
-#endif
-int __init sdioDrv_init(void)
-{
- memset(&g_drv, 0, sizeof(g_drv));
- memset(&hsmmc_ctx, 0, sizeof(hsmmc_ctx));
-
- printk(KERN_INFO "TIWLAN SDIO init\n");
-
- /* Register the sdio driver */
- return platform_driver_register(&sdioDrv_struct);
-}
-
-#ifdef TI_SDIO_STANDALONE
-static
-#endif
-void __exit sdioDrv_exit(void)
-{
- /* Unregister sdio driver */
- platform_driver_unregister(&sdioDrv_struct);
-}
-
-#ifdef TI_SDIO_STANDALONE
-module_init(sdioDrv_init);
-module_exit(sdioDrv_exit);
-#endif
-EXPORT_SYMBOL(sdioDrv_clk_enable);
-EXPORT_SYMBOL(sdioDrv_clk_disable);
-
-EXPORT_SYMBOL(sdioDrv_ConnectBus);
-EXPORT_SYMBOL(sdioDrv_DisconnectBus);
-EXPORT_SYMBOL(sdioDrv_ExecuteCmd);
-EXPORT_SYMBOL(sdioDrv_ReadSync);
-EXPORT_SYMBOL(sdioDrv_WriteSync);
-EXPORT_SYMBOL(sdioDrv_ReadAsync);
-EXPORT_SYMBOL(sdioDrv_WriteAsync);
-EXPORT_SYMBOL(sdioDrv_ReadSyncBytes);
-EXPORT_SYMBOL(sdioDrv_WriteSyncBytes);
-EXPORT_SYMBOL(sdioDrv_register_pm);
-MODULE_DESCRIPTION("TI WLAN SDIO driver");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS(SDIO_DRIVER_NAME);
-MODULE_AUTHOR("Texas Instruments Inc");
diff --git a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.h b/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.h
deleted file mode 100644
index 56ab052..0000000
--- a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrv.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * SdioDrv.h
- *
- * Copyright (C) 2009 Texas Instruments, Inc. - http://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#ifndef __OMAP3430_SDIODRV_API_H
-#define __OMAP3430_SDIODRV_API_H
-
-#include <asm/types.h>
-#include <linux/mmc/mmc.h>
-
-/* Card Common Control Registers (CCCR) */
-
-#define CCCR_SDIO_REVISION 0x00
-#define CCCR_SD_SPECIFICATION_REVISION 0x01
-#define CCCR_IO_ENABLE 0x02
-#define CCCR_IO_READY 0x03
-#define CCCR_INT_ENABLE 0x04
-#define CCCR_INT_PENDING 0x05
-#define CCCR_IO_ABORT 0x06
-#define CCCR_BUS_INTERFACE_CONTOROL 0x07
-#define CCCR_CARD_CAPABILITY 0x08
-#define CCCR_COMMON_CIS_POINTER 0x09 /*0x09-0x0B*/
-#define CCCR_FNO_BLOCK_SIZE 0x10 /*0x10-0x11*/
-#define FN0_CCCR_REG_32 0x64
-
-/* Pprotocol defined constants */
-
-#define SD_IO_GO_IDLE_STATE 0
-#define SD_IO_SEND_RELATIVE_ADDR 3
-#define SDIO_CMD5 5
-#define SD_IO_SELECT_CARD 7
-#define SDIO_CMD52 52
-#define SDIO_CMD53 53
-#define SD_IO_SEND_OP_COND SDIO_CMD5
-#define SD_IO_RW_DIRECT SDIO_CMD52
-#define SD_IO_RW_EXTENDED SDIO_CMD53
-#define SDIO_SHIFT(v,n) (v<<n)
-#define SDIO_RWFLAG(v) (SDIO_SHIFT(v,31))
-#define SDIO_FUNCN(v) (SDIO_SHIFT(v,28))
-#define SDIO_RAWFLAG(v) (SDIO_SHIFT(v,27))
-#define SDIO_BLKM(v) (SDIO_SHIFT(v,27))
-#define SDIO_OPCODE(v) (SDIO_SHIFT(v,26))
-#define SDIO_ADDRREG(v) (SDIO_SHIFT(v,9))
-
-
-#define VDD_VOLTAGE_WINDOW 0xffffc0
-#define FN2_OBI_INV 0x0002
-
-#define MMC_RSP_NONE (0 << 0)
-#define MMC_RSP_SHORT (1 << 0)
-#define MMC_RSP_LONG (2 << 0)
-#define MMC_RSP_MASK (3 << 0)
-#define MMC_RSP_CRC (1 << 3)
-#define MMC_RSP_BUSY (1 << 4)
-
-#define MMC_RSP_R1 (MMC_RSP_SHORT|MMC_RSP_CRC)
-#define MMC_RSP_R1B (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_BUSY)
-#define MMC_RSP_R2 (MMC_RSP_LONG|MMC_RSP_CRC)
-#define MMC_RSP_R3 (MMC_RSP_SHORT)
-
-/* HSMMC controller bit definitions
- * */
-#define OMAP_HSMMC_CMD_NO_RESPONSE 0 << 0
-#define OMAP_HSMMC_CMD_LONG_RESPONSE 1 << 0
-#define OMAP_HSMMC_CMD_SHORT_RESPONSE 2 << 0
-
-#define MMC_ERR_NONE 0
-#define MMC_ERR_TIMEOUT 1
-#define MMC_ERR_BADCRC 2
-#define MMC_ERR_FIFO 3
-#define MMC_ERR_FAILED 4
-#define MMC_ERR_INVALID 5
-
-#undef MMC_RSP_R4
-#define MMC_RSP_R4 OMAP_HSMMC_CMD_SHORT_RESPONSE
-#undef MMC_RSP_R5
-#define MMC_RSP_R5 OMAP_HSMMC_CMD_SHORT_RESPONSE
-#undef MMC_RSP_R6
-#define MMC_RSP_R6 OMAP_HSMMC_CMD_SHORT_RESPONSE
-
-/********************************************************************/
-/* SDIO driver functions prototypes */
-/********************************************************************/
-int sdioDrv_ConnectBus (void * fCbFunc,
- void * hCbArg,
- unsigned int uBlkSizeShift,
- unsigned int uSdioThreadPriority,
- unsigned char **pTxDmaSrcAddr);
-
-int sdioDrv_DisconnectBus (void);
-
-int sdioDrv_ExecuteCmd (unsigned int uCmd,
- unsigned int uArg,
- unsigned int uRespType,
- void * pResponse,
- unsigned int uLen);
-
-int sdioDrv_ReadSync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bIncAddr,
- unsigned int bMore);
-
-int sdioDrv_ReadAsync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bBlkMode,
- unsigned int bIncAddr,
- unsigned int bMore);
-
-int sdioDrv_WriteSync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bIncAddr,
- unsigned int bMore);
-
-int sdioDrv_WriteAsync (unsigned int uFunc,
- unsigned int uHwAddr,
- void * pData,
- unsigned int uLen,
- unsigned int bBlkMode,
- unsigned int bIncAddr,
- unsigned int bMore);
-
-int sdioDrv_ReadSyncBytes (unsigned int uFunc,
- unsigned int uHwAddr,
- unsigned char *pData,
- unsigned int uLen,
- unsigned int bMore);
-
-int sdioDrv_WriteSyncBytes (unsigned int uFunc,
- unsigned int uHwAddr,
- unsigned char *pData,
- unsigned int uLen,
- unsigned int bMore);
-
-void sdioDrv_register_pm(int (*wlanDrvIf_Start)(void),
- int (*wlanDrvIf_Stop)(void));
-
-
-#endif/* _OMAP3430_SDIODRV_H */
diff --git a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrvDbg.h b/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrvDbg.h
deleted file mode 100644
index 0c0f06a..0000000
--- a/wilink_6_1/external_drivers/zoom2/Linux/sdio/SdioDrvDbg.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * SdioDrvDbg.h
- *
- * Copyright (C) 2009 Texas Instruments, Inc. - http://www.ti.com/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation version 2.
- *
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- * kind, whether express or implied; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#ifndef OMAP3430_SDIODRV_DEBUG_H
-#define OMAP3430_SDIODRV_DEBUG_H
-
-#include <linux/kernel.h>
-
-typedef enum{
-SDIO_DEBUGLEVEL_EMERG=1,
-SDIO_DEBUGLEVEL_ALERT,
-SDIO_DEBUGLEVEL_CRIT,
-SDIO_DEBUGLEVEL_ERR=4,
-SDIO_DEBUGLEVEL_WARNING,
-SDIO_DEBUGLEVEL_NOTICE,
-SDIO_DEBUGLEVEL_INFO,
-SDIO_DEBUGLEVEL_DEBUG=8
-}sdio_debuglevel;
-
-extern int g_sdio_debug_level;
-
-#ifdef SDIO_DEBUG
-
-#define PERR(format, args... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_ERR) printk(format , ##args)
-#define PDEBUG(format, args... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_DEBUG) printk(format , ##args)
-#define PINFO(format, ... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_INFO) printk( format , ##__VA_ARGS__)
-#define PNOTICE(format, ... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_NOTICE) printk( format , ##__VA_ARGS__)
-#define PWARNING(format, ... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_WARNING) printk(format , ##__VA_ARGS__)
-
-#else
-
-#define PERR(format, args... ) if(g_sdio_debug_level >= SDIO_DEBUGLEVEL_ERR) printk(format , ##args)
-#define PDEBUG(format, args... )
-#define PINFO(format, ... )
-#define PNOTICE(format, ... )
-#define PWARNING(format, ... )
-
-#endif
-
-/* we want errors reported anyway */
-
-#define PERR1 PERR
-#define PERR2 PERR
-#define PERR3 PERR
-
-#endif /* OMAP3430_SDIODRV_DEBUG_H */
diff --git a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.c b/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.c
deleted file mode 100644
index ea99e12..0000000
--- a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * SdioAdapter.c
- *
- * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name Texas Instruments nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/** \file SdioAdapter.c
- * \brief The SDIO driver adapter. Platform dependent.
- *
- * An adaptation layer between the lower SDIO driver (in BSP) and the upper SdioBusDrv.
- * Used for issuing all SDIO transaction types towards the lower SDIO-driver.
- * Makes the decision whether to use Sync or Async transaction, and reflects it to the caller
- * by the return value and calling its callback in case of Async.
- *
- * \see SdioAdapter.h, SdioDrv.c & h
- */
-
-#include "SdioDrvDbg.h"
-#include "TxnDefs.h"
-#include "SdioAdapter.h"
-#include "SdioDrv.h"
-#include "bmtrace_api.h"
-
-#ifdef SDIO_1_BIT /* see also in SdioDrv.c */
-#define SDIO_BITS_CODE 0x80 /* 1 bits */
-#else
-#define SDIO_BITS_CODE 0x82 /* 4 bits */
-#endif
-
-/* remove it after moving SdioAdapter into Sdio driver */
-int g_ssd_debug_level=4;
-
-/************************************************************************
- * Defines
- ************************************************************************/
-/* Sync/Async Threshold */
-#ifdef FULL_ASYNC_MODE
-#define SYNC_ASYNC_LENGTH_THRESH 0 /* Use Async for all transactions */
-#else
-#define SYNC_ASYNC_LENGTH_THRESH 360 /* Use Async for transactions longer than this threshold (in bytes) */
-#endif
-
-#define MAX_RETRIES 10
-
-/* For block mode configuration */
-#define FN0_FBR2_REG_108 0x210
-#define FN0_FBR2_REG_108_BIT_MASK 0xFFF
-
-int sdioDrv_clk_enable(void);
-void sdioDrv_clk_disable(void);
-
-int sdioAdapt_ConnectBus (void * fCbFunc,
- void * hCbArg,
- unsigned int uBlkSizeShift,
- unsigned int uSdioThreadPriority,
- unsigned char **pTxDmaSrcAddr)
-
-{
- unsigned char uByte;
- unsigned long uLong;
- unsigned long uCount = 0;
- unsigned int uBlkSize = 1 << uBlkSizeShift;
- int iStatus;
-
- if (uBlkSize < SYNC_ASYNC_LENGTH_THRESH)
- {
- PERR1("%s(): Block-Size should be bigger than SYNC_ASYNC_LENGTH_THRESH!!\n", __FUNCTION__ );
- }
-
- /* Init SDIO driver and HW */
- iStatus = sdioDrv_ConnectBus (fCbFunc, hCbArg, uBlkSizeShift,uSdioThreadPriority, pTxDmaSrcAddr);
- if (iStatus) { return iStatus; }
-
-
- /* Send commands sequence: 0, 5, 3, 7 */
- iStatus = sdioDrv_ExecuteCmd (SD_IO_GO_IDLE_STATE, 0, MMC_RSP_NONE, &uByte, sizeof(uByte));
- if (iStatus)
- {
- printk("%s %d command number: %d failed\n", __FUNCTION__, __LINE__, SD_IO_GO_IDLE_STATE);
- return iStatus;
- }
- iStatus = sdioDrv_ExecuteCmd (SDIO_CMD5, VDD_VOLTAGE_WINDOW, MMC_RSP_R4, &uByte, sizeof(uByte));
- if (iStatus) {
- printk("%s %d command number: %d failed\n", __FUNCTION__, __LINE__, SDIO_CMD5);
- return iStatus;
- }
-
- iStatus = sdioDrv_ExecuteCmd (SD_IO_SEND_RELATIVE_ADDR, 0, MMC_RSP_R6, &uLong, sizeof(uLong));
- if (iStatus) {
- printk("%s %d command number: %d failed\n", __FUNCTION__, __LINE__, SD_IO_SEND_RELATIVE_ADDR);
- return iStatus;
- }
- iStatus = sdioDrv_ExecuteCmd (SD_IO_SELECT_CARD, uLong, MMC_RSP_R6, &uByte, sizeof(uByte));
- if (iStatus) {
- printk("%s %d command number: %d failed\n", __FUNCTION__, __LINE__, SD_IO_SELECT_CARD);
- return iStatus;
- }
-
- /* NOTE:
- * =====
- * Each of the following loops is a workaround for a HW bug that will be solved in PG1.1 !!
- * Each write of CMD-52 to function-0 should use it as follows:
- * 1) Write the desired byte using CMD-52
- * 2) Read back the byte using CMD-52
- * 3) Write two dummy bytes to address 0xC8 using CMD-53
- * 4) If the byte read in step 2 is different than the written byte repeat the sequence
- */
-
- /* set device side bus width to 4 bit (for 1 bit write 0x80 instead of 0x82) */
- do
- {
- uByte = SDIO_BITS_CODE;
- iStatus = sdioDrv_WriteSyncBytes (TXN_FUNC_ID_CTRL, CCCR_BUS_INTERFACE_CONTOROL, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_ReadSyncBytes (TXN_FUNC_ID_CTRL, CCCR_BUS_INTERFACE_CONTOROL, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_WriteSync (TXN_FUNC_ID_CTRL, 0xC8, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- uCount++;
-
- } while ((uByte != SDIO_BITS_CODE) && (uCount < MAX_RETRIES));
-
-
- uCount = 0;
-
- /* allow function 2 */
- do
- {
- uByte = 4;
- iStatus = sdioDrv_WriteSyncBytes (TXN_FUNC_ID_CTRL, CCCR_IO_ENABLE, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_ReadSyncBytes (TXN_FUNC_ID_CTRL, CCCR_IO_ENABLE, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_WriteSync (TXN_FUNC_ID_CTRL, 0xC8, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- uCount++;
-
- } while ((uByte != 4) && (uCount < MAX_RETRIES));
-
-
-#ifdef SDIO_IN_BAND_INTERRUPT
-
- uCount = 0;
-
- do
- {
- uByte = 3;
- iStatus = sdioDrv_WriteSyncBytes (TXN_FUNC_ID_CTRL, CCCR_INT_ENABLE, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_ReadSyncBytes (TXN_FUNC_ID_CTRL, CCCR_INT_ENABLE, &uByte, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_WriteSync (TXN_FUNC_ID_CTRL, 0xC8, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- uCount++;
-
- } while ((uByte != 3) && (uCount < MAX_RETRIES));
-
-
-#endif
-
- uCount = 0;
-
- /* set block size for SDIO block mode */
- do
- {
- uLong = uBlkSize;
- iStatus = sdioDrv_WriteSync (TXN_FUNC_ID_CTRL, FN0_FBR2_REG_108, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_ReadSync (TXN_FUNC_ID_CTRL, FN0_FBR2_REG_108, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- iStatus = sdioDrv_WriteSync (TXN_FUNC_ID_CTRL, 0xC8, &uLong, 2, 1, 1);
- if (iStatus) { return iStatus; }
-
- uCount++;
-
- } while (((uLong & FN0_FBR2_REG_108_BIT_MASK) != uBlkSize) && (uCount < MAX_RETRIES));
-
-
- if (uCount >= MAX_RETRIES)
- {
- /* Failed to write CMD52_WRITE to function 0 */
- return (int)uCount;
- }
-
- return iStatus;
-}
-
-
-int sdioAdapt_DisconnectBus (void)
-{
- return sdioDrv_DisconnectBus ();
-}
-
-ETxnStatus sdioAdapt_Transact (unsigned int uFuncId,
- unsigned int uHwAddr,
- void * pHostAddr,
- unsigned int uLength,
- unsigned int bDirection,
- unsigned int bBlkMode,
- unsigned int bFixedAddr,
- unsigned int bMore)
-{
- int iStatus;
-
- /* If transction length is below threshold, use Sync methods */
- if (uLength < SYNC_ASYNC_LENGTH_THRESH)
- {
- /* Call read or write Sync method */
- if (bDirection)
- {
- CL_TRACE_START_L2();
- iStatus = sdioDrv_ReadSync (uFuncId, uHwAddr, pHostAddr, uLength, bFixedAddr, bMore);
- CL_TRACE_END_L2("tiwlan_drv.ko", "INHERIT", "SDIO", ".ReadSync");
- }
- else
- {
- CL_TRACE_START_L2();
- iStatus = sdioDrv_WriteSync (uFuncId, uHwAddr, pHostAddr, uLength, bFixedAddr, bMore);
- CL_TRACE_END_L2("tiwlan_drv.ko", "INHERIT", "SDIO", ".WriteSync");
- }
-
- /* If failed return ERROR, if succeeded return COMPLETE */
- if (iStatus)
- {
- return TXN_STATUS_ERROR;
- }
- return TXN_STATUS_COMPLETE;
- }
-
- /* If transction length is above threshold, use Async methods */
- else
- {
- /* Call read or write Async method */
- if (bDirection)
- {
- CL_TRACE_START_L2();
- iStatus = sdioDrv_ReadAsync (uFuncId, uHwAddr, pHostAddr, uLength, bBlkMode, bFixedAddr, bMore);
- CL_TRACE_END_L2("tiwlan_drv.ko", "INHERIT", "SDIO", ".ReadAsync");
- }
- else
- {
- CL_TRACE_START_L2();
- iStatus = sdioDrv_WriteAsync (uFuncId, uHwAddr, pHostAddr, uLength, bBlkMode, bFixedAddr, bMore);
- CL_TRACE_END_L2("tiwlan_drv.ko", "INHERIT", "SDIO", ".WriteAsync");
- }
-
- /* If failed return ERROR, if succeeded return PENDING */
- if (iStatus)
- {
- return TXN_STATUS_ERROR;
- }
- return TXN_STATUS_PENDING;
- }
-}
-
-ETxnStatus sdioAdapt_TransactBytes (unsigned int uFuncId,
- unsigned int uHwAddr,
- void * pHostAddr,
- unsigned int uLength,
- unsigned int bDirection,
- unsigned int bMore)
-{
- int iStatus;
-
- if(bMore == 1)
- {
- sdioDrv_clk_enable();
- }
-
- /* Call read or write bytes Sync method */
- if (bDirection)
- {
- iStatus = sdioDrv_ReadSyncBytes (uFuncId, uHwAddr, pHostAddr, uLength, bMore);
- }
- else
- {
- iStatus = sdioDrv_WriteSyncBytes (uFuncId, uHwAddr, pHostAddr, uLength, bMore);
- }
-
- if(bMore == 0)
- {
- sdioDrv_clk_disable();
- }
-
- /* If failed return ERROR, if succeeded return COMPLETE */
- if (iStatus)
- {
- return TXN_STATUS_ERROR;
- }
- return TXN_STATUS_COMPLETE;
-}
diff --git a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.h b/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.h
deleted file mode 100644
index f824b53..0000000
--- a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/SdioAdapter.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * SdioAdapter.h
- *
- * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name Texas Instruments nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** \file SdioAdapter.h
- * \brief SDIO adapter module API definition
- *
- * \see SdioAdapter.c
- */
-
-#ifndef __SDIO_ADAPT_API_H__
-#define __SDIO_ADAPT_API_H__
-
-
-#include "TxnDefs.h"
-
-
-/************************************************************************
- * Defines
- ************************************************************************/
-
-/************************************************************************
- * Types
- ************************************************************************/
-
-/************************************************************************
- * Functions
- ************************************************************************/
-/** \brief sdioAdapt_ConnectBus: Init SDIO driver and HW
- *
- * \param fCbFunc - The bus driver's callback upon async transaction completion
- * \param hCbArg - The CB function handle
- * \param uBlkSizeShift - In block-mode: BlkSize = (1 << uBlkSizeShift)
- * \param uSdioThreadPriority - The SDIO interrupt handler thread priority
- * \return 0 = OK, otherwise = error
- *
- * \par Description
- * Called by BusDrv to initialize the SDIO driver and HW.
- *
- * \sa
- */
-int sdioAdapt_ConnectBus (void * fCbFunc,
- void * hCbArg,
- unsigned int uBlkSizeShift,
- unsigned int uSdioThreadPriority,
- unsigned char **pTxDmaSrcAddr);
-
-/** \brief sdioAdapt_DisconnectBus: Disconnect SDIO driver
- *
- * \param void
- * \return 0 = OK, otherwise = error
- *
- * \par Description
- * Called by BusDrv. Disconnect the SDIO driver.
- *
- * \sa
- */
-int sdioAdapt_DisconnectBus (void);
-/** \brief sdioAdapt_Transact: Process transaction
- *
- * \param uFuncId - SDIO function ID (1- BT, 2 - WLAN)
- * \param uHwAddr - HW address where to write the data
- * \param pHostAddr - The data buffer to write from or read into
- * \param uLength - The data length in bytes
- * \param bDirection - TRUE = Read, FALSE = Write
- * \param bBlkMode - If TRUE - use block mode
- * \param bMore - If TRUE, more transactions are expected so don't turn off any HW
- * \return COMPLETE if Txn completed in this context, PENDING if not, ERROR if failed
- *
- * \par Description
- * Called by the BusDrv module to issue an SDIO transaction.
- * Call write or read SDIO-driver function according to the direction.
- * Use Sync or Async method according to the transaction length
- *
- * \note It's assumed that this function is called only when idle (i.e. previous Txn is done).
- *
- * \sa
- */
-ETxnStatus sdioAdapt_Transact (unsigned int uFuncId,
- unsigned int uHwAddr,
- void * pHostAddr,
- unsigned int uLength,
- unsigned int bDirection,
- unsigned int bBlkMode,
- unsigned int bFixedAddr,
- unsigned int bMore);
-/** \brief sdioAdapt_TransactBytes: Process bytes transaction
- *
- * \param uFuncId - SDIO function ID (1- BT, 2 - WLAN)
- * \param uHwAddr - HW address where to write the data
- * \param pHostAddr - The data buffer to write from or read into
- * \param uLength - The data length in bytes
- * \param bDirection - TRUE = Read, FALSE = Write
- * \param bMore - If TRUE, more transactions are expected so don't turn off any HW
- * \return COMPLETE if Txn succeeded, ERROR if failed
- *
- * \par Description
- * Called by the BusDrv module to issue a bytes stream SDIO transaction.
- * Call write or read SDIO-driver Sync function according to the direction.
- *
- * \note It's assumed that this function is called only when idle (i.e. previous Txn is done).
- *
- * \sa
- */
-ETxnStatus sdioAdapt_TransactBytes (unsigned int uFuncId,
- unsigned int uHwAddr,
- void * pHostAddr,
- unsigned int uLength,
- unsigned int bDirection,
- unsigned int bMore);
-
-
-
-#endif /*__SDIO_ADAPT_API_H__*/
diff --git a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.c b/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.c
deleted file mode 100644
index 35a9177..0000000
--- a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * host_platform.c
- *
- * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name Texas Instruments nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "tidef.h"
-#include <linux/kernel.h>
-#include <asm/io.h>
-#include <mach/tc.h>
-#include <linux/delay.h>
-
-#include "host_platform.h"
-#include "ioctl_init.h"
-#include "WlanDrvIf.h"
-#include "Device1273.h"
-
-
-#define OS_API_MEM_ADRR 0x0000000
-#define OS_API_REG_ADRR 0x300000
-#if 0 /* needed for first time new host ramp*/
-static void dump_omap_registers(void);
-#endif
-static void pad_config(unsigned long pad_addr, u32 andmask, u32 ormask)
-{
- int val;
- u32 *addr;
-
- addr = (u32 *) ioremap(pad_addr, 4);
- if (!addr) {
- printk(KERN_ERR "OMAP3430_pad_config: ioremap failed with addr %lx\n", pad_addr);
- return;
- }
-
- val = __raw_readl(addr);
- val &= andmask;
- val |= ormask;
- __raw_writel(val, addr);
-
- iounmap(addr);
-}
-
-static int OMAP3430_TNETW_Power(int power_on)
-{
- if (power_on) {
- gpio_set_value(PMENA_GPIO, 1);
- } else {
- gpio_set_value(PMENA_GPIO, 0);
- }
-
- return 0;
-}
-
-/*-----------------------------------------------------------------------------
-
-Routine Name:
-
- hPlatform_hardResetTnetw
-
-Routine Description:
-
- set the GPIO to low after awaking the TNET from ELP.
-
-Arguments:
-
- OsContext - our adapter context.
-
-
-Return Value:
-
- None
-
------------------------------------------------------------------------------*/
-
-int hPlatform_hardResetTnetw(void)
-{
- int err;
-
- /* Turn power OFF*/
- if ((err = OMAP3430_TNETW_Power(0)) == 0)
- {
- mdelay(500);
- /* Turn power ON*/
- err = OMAP3430_TNETW_Power(1);
- mdelay(50);
- }
- return err;
-
-} /* hPlatform_hardResetTnetw() */
-
-/* Turn device power off */
-int hPlatform_DevicePowerOff (void)
-{
- int err;
-
- err = OMAP3430_TNETW_Power(0);
-
- mdelay(10);
-
- return err;
-}
-
-
-/* Turn device power off according to a given delay */
-int hPlatform_DevicePowerOffSetLongerDelay(void)
-{
- int err;
-
- err = OMAP3430_TNETW_Power(0);
-
- mdelay(SDIO_ATTEMPT_LONGER_DELAY_LINUX);
-
- return err;
-}
-
-
-/* Turn device power on */
-int hPlatform_DevicePowerOn (void)
-{
- int err;
-
- err = OMAP3430_TNETW_Power(1);
-
- /* New Power Up Sequence */
- mdelay(15);
- err = OMAP3430_TNETW_Power(0);
- mdelay(1);
-
- err = OMAP3430_TNETW_Power(1);
-
- /* Should not be changed, 50 msec cause failures */
- mdelay(70);
-
- return err;
-}
-
-/*--------------------------------------------------------------------------------------*/
-
-int hPlatform_Wlan_Hardware_Init(void *tnet_drv)
-{
- TWlanDrvIfObj *drv = tnet_drv;
-
- drv->irq = TNETW_IRQ;
-
- /* choose gpio 101, pull up */
- /* Setting MUX Mode 4 , Pull bits 0 */
- /* Should set (x is don't change): xxxx xxxx xxxx xxxx xxxx xxxx xxx1 1000 */
- pad_config(CONTROL_PADCONF_CAM_D1, 0xFFE0FFFF, 0x001C0000);
-
- /* choose gpio 162, pull up, activated */
- /* Setting MUX Mode 4 , Pull bits 3 */
- /* Should set (x is don't change): xxxx xxxx xxxx xxxx xxxx xxxx xxx1 1100 */
- pad_config(CONTROL_PADCONF_MCBSP1_CLKX, 0xFFFFFFF0, 0x0000011C);
-
- /*
- * set pull up on all SDIO lines
- * Setting MUX Mode of 0, and pull bits to 3
- */
-
- /* set for mmc2_cmd - second half of the padconf register
- * Should set (x is don't change): xxxx xxxx xxx1 1000 xxxx xxxx xxxx xxxx */
- pad_config(CONTROL_PADCONF_MMC3_CMD, 0xFFFFFFF0, 0x0000011B);
-
- pad_config(CONTROL_PADCONF_MMC3_CLK, 0xFFF0FFE0,0x001C011A);
-
-
- /* set for mmc3_dat0 and dat1 - both parts of the padconf register
- * Should set (x is don't change): xxxx xxxx xxx1 1000 xxxx xxxx xxx1 1000 */
- pad_config(CONTROL_PADCONF_MMC3_DAT0, 0xFFF0FFF0, 0x011A011A);
-
- pad_config(CONTROL_PADCONF_MMC3_DAT2, 0xFFFFFFF0, 0x0000011A);
-
- pad_config(CONTROL_PADCONF_MMC3_DAT3, 0xFFF0FFFF, 0x011A0000);
-
-#define CONTROL_PADCONF_MMC2_DAT4 0x48002164 /* set AE4 to mmc2_dat4 set AH3 to mmc2_dat5 */
- pad_config(CONTROL_PADCONF_MMC2_DAT4, 0xFFF0FFF0, 0x00180018);
-
-#define CONTROL_PADCONF_MMC2_DAT6 0x48002168 /* set AF3 to mmc2_dat6 set AE3 to mmc2_dat7 */
- pad_config(CONTROL_PADCONF_MMC2_DAT6, 0xFFF0FFF0, 0x00180018);
-#if 0 /* needed for first time new host ramp*/
- dump_omap_registers();
-#endif
- return 0;
-}
-
-/*-----------------------------------------------------------------------------
-
-Routine Name:
-
- InitInterrupt
-
-Routine Description:
-
- this function init the interrupt to the Wlan ISR routine.
-
-Arguments:
-
- tnet_drv - Golbal Tnet driver pointer.
-
-
-Return Value:
-
- status
-
------------------------------------------------------------------------------*/
-
-int hPlatform_initInterrupt(void *tnet_drv, void* handle_add)
-{
- TWlanDrvIfObj *drv = tnet_drv;
- int rc;
-
- if (drv->irq == 0 || handle_add == NULL)
- {
- print_err("hPlatform_initInterrupt() bad param drv->irq=%d handle_add=0x%x !!!\n",drv->irq,(int)handle_add);
- return -EINVAL;
- }
- if ((rc = request_irq(drv->irq, handle_add, IRQF_TRIGGER_FALLING, drv->netdev->name, drv)))
- {
- print_err("TIWLAN: Failed to register interrupt handler\n");
- return rc;
- }
- return rc;
-
-} /* hPlatform_initInterrupt() */
-
-/*--------------------------------------------------------------------------------------*/
-
-void hPlatform_freeInterrupt(void *tnet_drv)
-{
- TWlanDrvIfObj *drv = tnet_drv;
-
- free_irq(drv->irq, drv);
-}
-
-/****************************************************************************************
- * hPlatform_hwGetRegistersAddr()
- ****************************************************************************************
-DESCRIPTION:
-
-ARGUMENTS:
-
-RETURN:
-
-NOTES:
-*****************************************************************************************/
-void *hPlatform_hwGetRegistersAddr(TI_HANDLE OsContext)
-{
- return (void*)OS_API_REG_ADRR;
-}
-
-/****************************************************************************************
- * hPlatform_hwGetMemoryAddr()
- ****************************************************************************************
-DESCRIPTION:
-
-ARGUMENTS:
-
-RETURN:
-
-NOTES:
-*****************************************************************************************/
-void *hPlatform_hwGetMemoryAddr(TI_HANDLE OsContext)
-{
- return (void*)OS_API_MEM_ADRR;
-}
-
-
-void hPlatform_Wlan_Hardware_DeInit(void)
-{
-}
-
-#if 0/* needed for first time new host ramp*/
-static void dump_omap_registers(void)
-{
- printk(KERN_ERR "AE10 which is 0x%x= 0x%x\n", CONTROL_PADCONF_MMC3_CMD, omap_readl( CONTROL_PADCONF_MMC3_CMD ));
- printk(KERN_ERR "AC3 which is addr 0x480021D0=%x\n", omap_readl( 0x480021D0 ));
-
- printk(KERN_ERR "DAT0 addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC3_DAT0, omap_readl( CONTROL_PADCONF_MMC3_DAT0 ));
- printk(KERN_ERR "DAT2 addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC3_DAT2, omap_readl( CONTROL_PADCONF_MMC3_DAT2 ));
- printk(KERN_ERR "DAT3 addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC3_DAT3, omap_readl( CONTROL_PADCONF_MMC3_DAT3 ));
- printk(KERN_ERR "DAT4 addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC2_DAT4, omap_readl( CONTROL_PADCONF_MMC2_DAT4 ));
- printk(KERN_ERR "DAT6 addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC2_DAT6, omap_readl( CONTROL_PADCONF_MMC2_DAT6 ));
- printk(KERN_ERR "CAM_D1 addr 0x%x value is =%x\n", CONTROL_PADCONF_CAM_D1, omap_readl( CONTROL_PADCONF_CAM_D1 ));
- printk(KERN_ERR "MCBSP1_CLKX addr 0x%x value is =%x\n", CONTROL_PADCONF_MCBSP1_CLKX, omap_readl( CONTROL_PADCONF_MCBSP1_CLKX ));
- printk(KERN_ERR "CMD addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC3_CMD, omap_readl( CONTROL_PADCONF_MMC3_CMD ));
- printk(KERN_ERR "MCBSP1_CLKX addr 0x%x value is =%x\n", CONTROL_PADCONF_MCBSP1_CLKX, omap_readl( CONTROL_PADCONF_MCBSP1_CLKX ));
- printk(KERN_ERR "CLK MCBSP1_CLKX addr 0x%x value is =%x\n", CONTROL_PADCONF_MMC3_CLK, omap_readl( CONTROL_PADCONF_MMC3_CLK ));
- printk(KERN_ERR "0x480021E0 value is =%x\n", omap_readl( 0x480021E0 ));
- return;
-}
-#endif
diff --git a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.h b/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.h
deleted file mode 100644
index 8cbd8f1..0000000
--- a/wilink_6_1/platforms/hw/host_platform_zoom2/linux/host_platform.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * host_platform.h
- *
- * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name Texas Instruments nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*--------------------------------------------------------------------------
- Module: host_platform_sdio.h
-
- Purpose: This module defines unified interface to the host platform specific
- sources and services.
-
---------------------------------------------------------------------------*/
-
-#ifndef __HOST_PLATFORM_SDIO__H__
-#define __HOST_PLATFORM_SDIO__H__
-
-#include <mach/hardware.h>
-
-//OMAP343X_CTRL_BASE = 0x48002000
-
-
-#define OMAP_HSMMC3_BASE 0x480AD000 //0x480b4000
-
-#define CONTROL_PADCONF_CAM_D1 0x48002118 /* WLAN_EN */
-#define CONTROL_PADCONF_MCBSP1_CLKX 0x48002198 /* WLAN_IRQ */
-
-#define CONTROL_PADCONF_MMC3_CLK 0x480025D8 /* mmc3_cmd */
-#define CONTROL_PADCONF_MMC3_CMD 0x480021D0 /* mmc3_cmd */
-
-#define CONTROL_PADCONF_MMC3_DAT0 0x480025E4 /* mmc3_dat0, mmc3_dat1 */
-#define CONTROL_PADCONF_MMC3_DAT2 0x480025E8 /* mmc3_dat2 */
-#define CONTROL_PADCONF_MMC3_DAT3 0x480025E0 /* mmc3_dat3 */
-
-#define INT_MMC3_IRQ 94
-
-#define PMENA_GPIO 101
-#define IRQ_GPIO 162
-
-//#include <asm/arch/hardware.h>
-
-#define MUXMODE_3 3
-#define TNETW_IRQ (OMAP_GPIO_IRQ(IRQ_GPIO))
-#define TIWLAN_IRQ_POLL_INTERVAL HZ/100
-#define HZ_IN_MSEC HZ/1000
-#define TIWLAN_IRQ_POLL_INTERVAL_MS TIWLAN_IRQ_POLL_INTERVAL/HZ_IN_MSEC
-
-int
-hPlatform_initInterrupt(
- void* tnet_drv,
- void* handle_add
- );
-
-void*
-hPlatform_hwGetRegistersAddr(
- TI_HANDLE OsContext
- );
-
-void*
-hPlatform_hwGetMemoryAddr(
- TI_HANDLE OsContext
- );
-
-void hPlatform_freeInterrupt(void *tnet_drv);
-
-int hPlatform_hardResetTnetw(void);
-int hPlatform_Wlan_Hardware_Init(void *tnet_drv);
-void hPlatform_Wlan_Hardware_DeInit(void);
-int hPlatform_DevicePowerOff(void);
-int hPlatform_DevicePowerOffSetLongerDelay(void);
-int hPlatform_DevicePowerOn(void);
-#endif /* __HOST_PLATFORM_SDIO__H__ */
diff --git a/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c b/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
index afdd147..4eec78a 100644
--- a/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
+++ b/wilink_6_1/platforms/os/linux/src/WlanDrvWext.c
@@ -166,82 +166,86 @@ int wlanDrvWext_Handler (struct net_device *dev,
void *iw_req,
void *extra)
{
- int rc;
- TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
- ti_private_cmd_t my_command;
- struct iw_mlme mlme;
- void *copy_to_buf=NULL, *param3=NULL;
+ int rc;
+ TWlanDrvIfObj *drv = (TWlanDrvIfObj *)NETDEV_GET_PRIVATE(dev);
+ ti_private_cmd_t my_command;
+ struct iw_mlme mlme;
+ void *copy_to_buf=NULL, *param3=NULL;
- os_memoryZero(drv, &my_command, sizeof(ti_private_cmd_t));
- os_memoryZero(drv, &mlme, sizeof(struct iw_mlme));
-
- switch (info->cmd)
- {
- case SIOCIWFIRSTPRIV:
- {
- void *copy_from_buf;
+ os_memoryZero(drv, &my_command, sizeof(ti_private_cmd_t));
+ os_memoryZero(drv, &mlme, sizeof(struct iw_mlme));
- if (os_memoryCopyFromUser(drv, &my_command, ((union iwreq_data *)iw_req)->data.pointer, sizeof(ti_private_cmd_t)))
- {
- os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser FAILED !!!\n");
- return TI_NOK;
- }
- if (IS_PARAM_FOR_MODULE(my_command.cmd, DRIVER_MODULE_PARAM))
- {
- /* If it's a driver level command, handle it here and exit */
- switch (my_command.cmd)
- {
- case DRIVER_INIT_PARAM:
- return wlanDrvIf_LoadFiles (drv, my_command.in_buffer);
-
- case DRIVER_START_PARAM:
- return wlanDrvIf_Start (dev);
+ switch (info->cmd)
+ {
+ case SIOCIWFIRSTPRIV:
+ {
+ void *copy_from_buf;
- case DRIVER_STOP_PARAM:
- return wlanDrvIf_Stop (dev);
+ if (os_memoryCopyFromUser(drv, &my_command, ((union iwreq_data *)iw_req)->data.pointer, sizeof(ti_private_cmd_t)))
+ {
+ os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser FAILED !!!\n");
+ return TI_NOK;
+ }
+ if (IS_PARAM_FOR_MODULE(my_command.cmd, DRIVER_MODULE_PARAM))
+ {
+ /* If it's a driver level command, handle it here and exit */
+ switch (my_command.cmd)
+ {
+ case DRIVER_INIT_PARAM:
+ return wlanDrvIf_LoadFiles(drv, my_command.in_buffer);
- case DRIVER_STATUS_PARAM:
- *(TI_UINT32 *)my_command.out_buffer =
- (drv->tCommon.eDriverState == DRV_STATE_RUNNING) ? TI_TRUE : TI_FALSE;
- return TI_OK;
- }
- }
- /* if we are still here handle a normal private command*/
+ case DRIVER_START_PARAM:
+ return wlanDrvIf_Start(dev);
- if ((my_command.in_buffer) && (my_command.in_buffer_len))
- {
- copy_from_buf = my_command.in_buffer;
- my_command.in_buffer = os_memoryAlloc(drv, my_command.in_buffer_len);
- if (os_memoryCopyFromUser(drv, my_command.in_buffer, copy_from_buf, my_command.in_buffer_len))
- {
- os_printf ("wlanDrvWext_Handler() os_memoryCopyFromUser 1 FAILED !!!\n");
- return TI_NOK;
- }
- }
- if ((my_command.out_buffer) && (my_command.out_buffer_len))
- {
- copy_to_buf = my_command.out_buffer;
- my_command.out_buffer = os_memoryAlloc(drv, my_command.out_buffer_len);
- }
- param3 = &my_command;
- }
- break;
+ case DRIVER_STOP_PARAM:
+ return wlanDrvIf_Stop(dev);
- case SIOCSIWMLME:
- {
- os_memoryCopyFromUser(drv, &mlme, ((union iwreq_data *)iw_req)->data.pointer, sizeof(struct iw_mlme));
- param3 = &mlme;
- }
- break;
- }
- /* If the friver is not running, return NOK */
- if (drv->tCommon.eDriverState != DRV_STATE_RUNNING)
- {
- return TI_NOK;
- }
+ case DRIVER_STATUS_PARAM:
+ *(TI_UINT32 *)my_command.out_buffer =
+ (drv->tCommon.eDriverState == DRV_STATE_RUNNING) ? TI_TRUE : TI_FALSE;
+ return TI_OK;
+ }
+ }
+ /* if we are still here handle a normal private command*/
- /* Call the Cmd module with the given user paramters */
- rc = (cmdHndlr_InsertCommand (drv->tCommon.hCmdHndlr,
+ if ((my_command.in_buffer) && (my_command.in_buffer_len))
+ {
+ copy_from_buf = my_command.in_buffer;
+ my_command.in_buffer = os_memoryAlloc(drv, my_command.in_buffer_len);
+ if (os_memoryCopyFromUser(drv, my_command.in_buffer, copy_from_buf, my_command.in_buffer_len))
+ {
+ os_printf("wlanDrvWext_Handler() os_memoryCopyFromUser 1 FAILED !!!\n");
+ return TI_NOK;
+ }
+ }
+ if ((my_command.out_buffer) && (my_command.out_buffer_len))
+ {
+ copy_to_buf = my_command.out_buffer;
+ my_command.out_buffer = os_memoryAlloc(drv, my_command.out_buffer_len);
+ }
+ param3 = &my_command;
+ }
+ break;
+
+ case SIOCSIWMLME:
+ {
+ os_memoryCopyFromUser(drv, &mlme, ((union iwreq_data *)iw_req)->data.pointer, sizeof(struct iw_mlme));
+ param3 = &mlme;
+ }
+ break;
+ }
+ /* If the friver is not running, return NOK */
+ if (drv->tCommon.eDriverState != DRV_STATE_RUNNING)
+ {
+ if (my_command.in_buffer)
+ os_memoryFree(drv, my_command.in_buffer, my_command.in_buffer_len);
+ if (my_command.out_buffer)
+ os_memoryFree(drv,my_command.out_buffer,my_command.out_buffer_len);
+ return TI_NOK;
+ }
+
+ /* Call the Cmd module with the given user paramters */
+ rc = cmdHndlr_InsertCommand(drv->tCommon.hCmdHndlr,
info->cmd,
info->flags,
iw_req,
@@ -249,21 +253,20 @@ int wlanDrvWext_Handler (struct net_device *dev,
extra,
0,
param3,
- NULL));
- /* Here we are after the command was completed */
- if (my_command.in_buffer)
- {
- os_memoryFree (drv, my_command.in_buffer, my_command.in_buffer_len);
- }
- if (my_command.out_buffer)
- {
- if (os_memoryCopyToUser(drv, copy_to_buf, my_command.out_buffer, my_command.out_buffer_len))
- {
- os_printf ("wlanDrvWext_Handler() os_memoryCopyToUser FAILED !!!\n");
- rc = TI_NOK;
- }
- os_memoryFree (drv, my_command.out_buffer, my_command.out_buffer_len);
- }
-
- return rc;
+ NULL);
+ /* Here we are after the command was completed */
+ if (my_command.in_buffer)
+ {
+ os_memoryFree(drv, my_command.in_buffer, my_command.in_buffer_len);
+ }
+ if (my_command.out_buffer)
+ {
+ if (os_memoryCopyToUser(drv, copy_to_buf, my_command.out_buffer, my_command.out_buffer_len))
+ {
+ os_printf("wlanDrvWext_Handler() os_memoryCopyToUser FAILED !!!\n");
+ rc = TI_NOK;
+ }
+ os_memoryFree(drv, my_command.out_buffer, my_command.out_buffer_len);
+ }
+ return rc;
}
diff --git a/wilink_6_1/platforms/os/linux/src/osapi.c b/wilink_6_1/platforms/os/linux/src/osapi.c
index fd99089..8a84596 100644
--- a/wilink_6_1/platforms/os/linux/src/osapi.c
+++ b/wilink_6_1/platforms/os/linux/src/osapi.c
@@ -602,8 +602,8 @@ int os_wake_lock_timeout (TI_HANDLE OsContext)
int ret = 0;
unsigned long flags;
- spin_lock_irqsave(&drv->lock, flags);
if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
ret = drv->wl_packet;
if (drv->wl_packet) {
drv->wl_packet = 0;
@@ -611,8 +611,8 @@ int os_wake_lock_timeout (TI_HANDLE OsContext)
wake_lock_timeout(&drv->wl_rxwake, (HZ >> 1));
#endif
}
+ spin_unlock_irqrestore(&drv->lock, flags);
}
- spin_unlock_irqrestore(&drv->lock, flags);
/* printk("%s: %d\n", __func__, ret); */
return ret;
}
@@ -630,11 +630,13 @@ int os_wake_lock_timeout_enable (TI_HANDLE OsContext)
{
TWlanDrvIfObj *drv = (TWlanDrvIfObj *)OsContext;
unsigned long flags;
- int ret;
+ int ret = 0;
- spin_lock_irqsave(&drv->lock, flags);
- ret = drv->wl_packet = 1;
- spin_unlock_irqrestore(&drv->lock, flags);
+ if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
+ ret = drv->wl_packet = 1;
+ spin_unlock_irqrestore(&drv->lock, flags);
+ }
return ret;
}
@@ -653,16 +655,16 @@ int os_wake_lock (TI_HANDLE OsContext)
int ret = 0;
unsigned long flags;
- spin_lock_irqsave(&drv->lock, flags);
if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
#ifdef CONFIG_HAS_WAKELOCK
if (!drv->wl_count)
wake_lock(&drv->wl_wifi);
#endif
drv->wl_count++;
ret = drv->wl_count;
+ spin_unlock_irqrestore(&drv->lock, flags);
}
- spin_unlock_irqrestore(&drv->lock, flags);
/* printk("%s: %d\n", __func__, ret); */
return ret;
}
@@ -682,16 +684,18 @@ int os_wake_unlock (TI_HANDLE OsContext)
int ret = 0;
unsigned long flags;
- spin_lock_irqsave(&drv->lock, flags);
- if (drv && drv->wl_count) {
- drv->wl_count--;
+ if (drv) {
+ spin_lock_irqsave(&drv->lock, flags);
+ if (drv->wl_count) {
+ drv->wl_count--;
#ifdef CONFIG_HAS_WAKELOCK
- if (!drv->wl_count)
- wake_unlock(&drv->wl_wifi);
+ if (!drv->wl_count)
+ wake_unlock(&drv->wl_wifi);
#endif
- ret = drv->wl_count;
+ ret = drv->wl_count;
+ }
+ spin_unlock_irqrestore(&drv->lock, flags);
}
- spin_unlock_irqrestore(&drv->lock, flags);
/* printk("%s: %d\n", __func__, ret); */
return ret;
}
@@ -756,7 +760,10 @@ int os_SignalObjectWait (TI_HANDLE OsContext, void *signalObject)
{
if (!signalObject)
return TI_NOK;
- wait_for_completion ((struct completion *)signalObject);
+ if (!wait_for_completion_timeout((struct completion *)signalObject,
+ msecs_to_jiffies(10000))) {
+ printk("tiwlan: 10 sec %s timeout\n", __func__);
+ }
return TI_OK;
}
diff --git a/wilink_6_1/platforms/os/linux/zoom2_env.bash b/wilink_6_1/platforms/os/linux/zoom2_env.bash
index bf1addc..f1a216b 100644
--- a/wilink_6_1/platforms/os/linux/zoom2_env.bash
+++ b/wilink_6_1/platforms/os/linux/zoom2_env.bash
@@ -1,4 +1,4 @@
export CROSS_COMPILE=arm-eabi-
export ARCH=arm
export HOST_PLATFORM=zoom2
-export KERNEL_DIR=/usr/local/google/android/eclair/kernel
+export KERNEL_DIR=/usr/local/google/android/master/kernel \ No newline at end of file
diff --git a/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c b/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
index 3a92561..77041ba 100644
--- a/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
+++ b/wilink_6_1/stad/src/Connection_Managment/admCtrlWpa.c
@@ -1251,7 +1251,8 @@ TI_STATUS admCtrlWpa_parseIe(admCtrl_t *pAdmCtrl, TI_UINT8 *pWpaIe, wpaIeData_t
curWpaIe +=4;
/* Include all AP key management supported suites in the wpaData structure */
- pWpaData->KeyMngSuite[index+1] = curKeyMngSuite;
+ if ((index+1) < MAX_WPA_KEY_MNG_SUITES)
+ pWpaData->KeyMngSuite[index+1] = curKeyMngSuite;
}
pWpaData->KeyMngSuite[0] = maxKeyMngSuite;
diff --git a/wilink_6_1/stad/src/Connection_Managment/connInfra.c b/wilink_6_1/stad/src/Connection_Managment/connInfra.c
index 866b0fe..b48acdf 100644
--- a/wilink_6_1/stad/src/Connection_Managment/connInfra.c
+++ b/wilink_6_1/stad/src/Connection_Managment/connInfra.c
@@ -856,7 +856,7 @@ static TI_STATUS prepare_send_disconnect(void *pData)
/* Start the disconnect complete time out timer.
Disconect Complete event, which stops the timer. */
- tmr_StartTimer (pConn->hConnTimer, conn_timeout, (TI_HANDLE)pConn, DISCONNECT_TIMEOUT_MSEC * 4, TI_FALSE);
+ tmr_StartTimer (pConn->hConnTimer, conn_timeout, (TI_HANDLE)pConn, DISCONNECT_TIMEOUT_MSEC, TI_FALSE);
/* FW will send the disconn frame according to disConnType */
TWD_CmdFwDisconnect (pConn->hTWD, pConn->disConnType, pConn->disConnReasonToAP);
diff --git a/wilink_6_1/stad/src/Data_link/rx.c b/wilink_6_1/stad/src/Data_link/rx.c
index 52436fe..beb234f 100644
--- a/wilink_6_1/stad/src/Data_link/rx.c
+++ b/wilink_6_1/stad/src/Data_link/rx.c
@@ -39,28 +39,28 @@
/***************************************************************************/
#define __FILE_ID__ FILE_ID_54
#include "tidef.h"
-#include "paramOut.h"
+#include "paramOut.h"
#include "rx.h"
#include "osApi.h"
#include "timer.h"
#include "DataCtrl_Api.h"
#include "Ctrl.h"
#include "802_11Defs.h"
-#include "Ethernet.h"
+#include "Ethernet.h"
#include "report.h"
#include "rate.h"
#include "mlmeApi.h"
#include "rsnApi.h"
#include "smeApi.h"
#include "siteMgrApi.h"
-#include "GeneralUtil.h"
+#include "GeneralUtil.h"
#include "EvHandler.h"
#ifdef XCC_MODULE_INCLUDED
#include "XCCMngr.h"
#endif
#include "TWDriver.h"
#include "RxBuf.h"
-#include "DrvMainModules.h"
+#include "DrvMainModules.h"
#include "bmtrace_api.h"
#include "PowerMgr_API.h"
@@ -184,7 +184,7 @@ void rxData_init (TStadHandlesList *pStadHandles)
pRxData->hEvHandler = pStadHandles->hEvHandler;
pRxData->hTimer = pStadHandles->hTimer;
pRxData->hPowerMgr = pStadHandles->hPowerMgr;
-
+
pRxData->rxDataExcludeUnencrypted = DEF_EXCLUDE_UNENCYPTED;
pRxData->rxDataExludeBroadcastUnencrypted = DEF_EXCLUDE_UNENCYPTED;
pRxData->rxDataEapolDestination = DEF_EAPOL_DESTINATION;
@@ -239,7 +239,7 @@ TI_STATUS rxData_SetDefaults (TI_HANDLE hRxData, rxDataInitParams_t * rxDataInit
{
rxData_t *pRxData = (rxData_t *)hRxData;
int i;
-
+
/* init rx data filters */
pRxData->filteringEnabled = rxDataInitParams->rxDataFiltersEnabled;
pRxData->filteringDefaultAction = rxDataInitParams->rxDataFiltersDefaultAction;
@@ -814,7 +814,6 @@ static TI_STATUS rxData_addRxDataFilter (TI_HANDLE hRxData, TRxDataFilterRequest
lenFieldPatterns,
fieldPatterns);
- return TI_OK;
}
/***************************************************************************
diff --git a/wilink_6_1/wpa_supplicant_lib/Android.mk b/wilink_6_1/wpa_supplicant_lib/Android.mk
index 6d737ef..cd1d4c2 100644
--- a/wilink_6_1/wpa_supplicant_lib/Android.mk
+++ b/wilink_6_1/wpa_supplicant_lib/Android.mk
@@ -24,6 +24,25 @@ ifeq ($(TARGET_SIMULATOR),true)
$(error This makefile must not be included when building the simulator)
endif
+ifndef WPA_SUPPLICANT_VERSION
+WPA_SUPPLICANT_VERSION := VER_0_5_X
+endif
+
+ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_5_X)
+WPA_SUPPL_DIR = external/wpa_supplicant
+else
+WPA_SUPPL_DIR = external/wpa_supplicant_6/wpa_supplicant
+endif
+WPA_SUPPL_DIR_INCLUDE = $(WPA_SUPPL_DIR)
+ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_6_X)
+WPA_SUPPL_DIR_INCLUDE += $(WPA_SUPPL_DIR)/src \
+ $(WPA_SUPPL_DIR)/src/common \
+ $(WPA_SUPPL_DIR)/src/drivers \
+ $(WPA_SUPPL_DIR)/src/l2_packet \
+ $(WPA_SUPPL_DIR)/src/utils \
+ $(WPA_SUPPL_DIR)/src/wps
+endif
+
DK_ROOT = $(BOARD_WLAN_TI_STA_DK_ROOT)
OS_ROOT = $(DK_ROOT)/platforms
STAD = $(DK_ROOT)/stad
@@ -34,12 +53,7 @@ TXN = $(DK_ROOT)/Txn
CUDK = $(DK_ROOT)/CUDK
LIB = ../../lib
-include external/wpa_supplicant/.config
-
-# To force sizeof(enum) = 4
-ifneq ($(TARGET_SIMULATOR),true)
-L_CFLAGS += -mabi=aapcs-linux
-endif
+include $(WPA_SUPPL_DIR)/.config
INCLUDES = $(STAD)/Export_Inc \
$(STAD)/src/Application \
@@ -54,12 +68,18 @@ INCLUDES = $(STAD)/Export_Inc \
$(CUDK)/configurationutility/inc \
$(CUDK)/os/common/inc \
external/openssl/include \
- external/wpa_supplicant \
+ $(WPA_SUPPL_DIR_INCLUDE) \
$(DK_ROOT)/../lib
-L_CFLAGS += -DCONFIG_DRIVER_CUSTOM -DHOST_COMPILE -D__BYTE_ORDER_LITTLE_ENDIAN
+L_CFLAGS = -DCONFIG_DRIVER_CUSTOM -DHOST_COMPILE -D__BYTE_ORDER_LITTLE_ENDIAN
+L_CFLAGS += -DWPA_SUPPLICANT_$(WPA_SUPPLICANT_VERSION)
OBJS = driver_ti.c $(LIB)/scanmerge.c $(LIB)/shlist.c
+# To force sizeof(enum) = 4
+ifneq ($(TARGET_SIMULATOR),true)
+L_CFLAGS += -mabi=aapcs-linux
+endif
+
ifdef CONFIG_NO_STDOUT_DEBUG
L_CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
endif
@@ -68,10 +88,18 @@ ifdef CONFIG_DEBUG_FILE
L_CFLAGS += -DCONFIG_DEBUG_FILE
endif
+ifdef CONFIG_ANDROID_LOG
+L_CFLAGS += -DCONFIG_ANDROID_LOG
+endif
+
ifdef CONFIG_IEEE8021X_EAPOL
L_CFLAGS += -DIEEE8021X_EAPOL
endif
+ifdef CONFIG_WPS
+L_CFLAGS += -DCONFIG_WPS
+endif
+
########################
include $(CLEAR_VARS)
diff --git a/wilink_6_1/wpa_supplicant_lib/driver_ti.c b/wilink_6_1/wpa_supplicant_lib/driver_ti.c
index 74a2d59..0fcd0d4 100644
--- a/wilink_6_1/wpa_supplicant_lib/driver_ti.c
+++ b/wilink_6_1/wpa_supplicant_lib/driver_ti.c
@@ -30,6 +30,9 @@
#endif
#include "driver_ti.h"
#include "scanmerge.h"
+#ifdef CONFIG_WPS
+#include "wps_defs.h"
+#endif
/*-------------------------------------------------------------------*/
#define TI2WPA_STATUS(s) (((s) != 0) ? -1 : 0)
@@ -86,6 +89,9 @@ static int wpa_driver_tista_keymgmt2wext(int keymgmt)
switch (keymgmt) {
case KEY_MGMT_802_1X:
case KEY_MGMT_802_1X_NO_WPA:
+#ifdef CONFIG_WPS
+ case KEY_MGMT_WPS:
+#endif
return IW_AUTH_KEY_MGMT_802_1X;
case KEY_MGMT_PSK:
return IW_AUTH_KEY_MGMT_PSK;
@@ -260,7 +266,7 @@ static int wpa_driver_tista_scan( void *priv, const u8 *ssid, size_t ssid_len )
struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx);
struct wpa_ssid *issid;
scan_Params_t scanParams;
- int scan_type, res, scan_probe_flag = 0;
+ int scan_type, res, timeout, scan_probe_flag = 0;
wpa_printf(MSG_DEBUG, "%s", __func__);
TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );
@@ -298,6 +304,12 @@ static int wpa_driver_tista_scan( void *priv, const u8 *ssid, size_t ssid_len )
else
wpa_printf(MSG_DEBUG, "wpa_driver_tista_scan success");
+ timeout = 30;
+ wpa_printf(MSG_DEBUG, "Scan requested (ret=%d) - scan timeout %d sec",
+ res, timeout);
+ eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv->wext, drv->ctx);
+ eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout,
+ drv->wext, drv->ctx);
return res;
#else
return wpa_driver_wext_scan(drv->wext, ssid, ssid_len);
@@ -578,7 +590,7 @@ Return Value: actual buffer length - success, -1 - failure
static int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len )
{
struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
- int ret = -1, prev_events;
+ int ret = -1, prev_events, flags;
wpa_printf(MSG_DEBUG, "%s %s", __func__, cmd);
@@ -596,6 +608,11 @@ static int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t
if( os_strcasecmp(cmd, "stop") == 0 ) {
wpa_printf(MSG_DEBUG,"Stop command");
+ if ((wpa_driver_wext_get_ifflags(drv->wext, &flags) == 0) &&
+ (flags & IFF_UP)) {
+ wpa_printf(MSG_ERROR, "TI: %s when iface is UP", cmd);
+ wpa_driver_wext_set_ifflags(drv->wext, flags & ~IFF_UP);
+ }
ret = wpa_driver_tista_driver_stop(priv);
if( ret == 0 ) {
drv->driver_is_loaded = FALSE;
@@ -649,43 +666,50 @@ static int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t
wpa_printf(MSG_DEBUG, "buf %s", buf);
}
else if( os_strcasecmp(cmd, "rssi-approx") == 0 ) {
- struct wpa_scan_result *cur_res;
+ scan_result_t *cur_res;
struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx);
+ scan_ssid_t *p_ssid;
int rssi, len;
wpa_printf(MSG_DEBUG,"rssi-approx command");
if( !wpa_s )
return( ret );
- cur_res = scan_get_by_bssid( drv, wpa_s->bssid );
+ cur_res = scan_get_by_bssid(drv, wpa_s->bssid);
if( cur_res ) {
- len = (int)(cur_res->ssid_len);
+ p_ssid = scan_get_ssid(cur_res);
+ len = (int)(p_ssid->ssid_len);
rssi = cur_res->level;
if( (len > 0) && (len <= MAX_SSID_LEN) && (len < (int)buf_len)) {
- os_memcpy( (void *)buf, (void *)(cur_res->ssid), len );
+ os_memcpy((void *)buf, (void *)(p_ssid->ssid), len);
ret = len;
ret += snprintf(&buf[ret], buf_len-len, " rssi %d\n", rssi);
- if (ret < (int)buf_len) {
- return( ret );
- }
}
}
}
else if( os_strcasecmp(cmd, "rssi") == 0 ) {
u8 ssid[MAX_SSID_LEN];
+ scan_result_t *cur_res;
+ struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)(drv->ctx);
int rssi_data, rssi_beacon, len;
wpa_printf(MSG_DEBUG,"rssi command");
ret = wpa_driver_tista_get_rssi(priv, &rssi_data, &rssi_beacon);
if( ret == 0 ) {
- len = wpa_driver_tista_get_ssid( priv, (u8 *)ssid );
+ len = wpa_driver_tista_get_ssid(priv, (u8 *)ssid);
wpa_printf(MSG_DEBUG,"rssi_data %d rssi_beacon %d", rssi_data, rssi_beacon);
if( (len > 0) && (len <= MAX_SSID_LEN) ) {
- os_memcpy( (void *)buf, (void *)ssid, len );
+ os_memcpy((void *)buf, (void *)ssid, len);
ret = len;
ret += sprintf(&buf[ret], " rssi %d\n", rssi_beacon);
wpa_printf(MSG_DEBUG, "buf %s", buf);
+ /* Update cached value */
+ if( !wpa_s )
+ return( ret );
+ cur_res = scan_get_by_bssid(drv, wpa_s->bssid);
+ if( cur_res )
+ cur_res->level = rssi_beacon;
}
else
{
@@ -802,6 +826,86 @@ static int wpa_driver_tista_driver_cmd( void *priv, char *cmd, char *buf, size_t
return ret;
}
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+/*-----------------------------------------------------------------------------
+Routine Name: wpa_driver_tista_set_probe_req_ie
+Routine Description: set probe request ie for WSC mode change
+Arguments:
+ priv - pointer to private data structure
+ ies - probe_req_ie data
+ ies_len - ie data length
+Return Value: actual buffer length - success, -1 - failure
+-----------------------------------------------------------------------------*/
+static int wpa_driver_tista_set_probe_req_ie(void *priv, const u8* ies, size_t ies_len)
+{
+ struct wpa_driver_ti_data *drv = (struct wpa_driver_ti_data *)priv;
+#ifdef CONFIG_WPS
+ TWscMode WscModeStruct;
+
+ TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );
+
+ if ((!ies || (0 == ies_len)) && (NULL == drv->probe_req_ie)) {
+ return 0;
+ }
+
+ if (ies && drv->probe_req_ie) {
+ size_t len = wpabuf_len(drv->probe_req_ie);
+ u8* data = (u8*)wpabuf_head(drv->probe_req_ie);
+ if ((ies_len == len) && (0 == os_memcmp(ies, data, ies_len))) {
+ return 0;
+ }
+ }
+
+ os_memset(&WscModeStruct, 0, sizeof(TWscMode));
+
+ if (!ies || (0 == ies_len)) {
+ WscModeStruct.WSCMode = TIWLN_SIMPLE_CONFIG_OFF;
+ } else {
+ const size_t head_len = 6; /* probeReqIe head: dd xx 00 50 f2 04 */
+ u8 *pos, *end;
+ u16 password_id = 0;
+ size_t min_len = 0;
+
+ pos = (u8*)ies + head_len; /* Find the WSC mode in probe_req_ie by password_id */
+ end = (u8*)ies + ies_len;
+ while (pos < end) {
+ if (ATTR_DEV_PASSWORD_ID == WPA_GET_BE16(pos)) {
+ password_id = WPA_GET_BE16(pos+4);
+ break;
+ }
+ pos += (4 + WPA_GET_BE16(pos+2));
+ }
+ WscModeStruct.WSCMode = (DEV_PW_PUSHBUTTON == password_id)?TIWLN_SIMPLE_CONFIG_PBC_METHOD:TIWLN_SIMPLE_CONFIG_PIN_METHOD;
+
+ pos = (u8*)ies + head_len;
+ min_len = ies_len - head_len;
+ if (min_len > sizeof(WscModeStruct.probeReqWSCIE)) {
+ min_len = sizeof(WscModeStruct.probeReqWSCIE);
+ }
+ os_memcpy(WscModeStruct.probeReqWSCIE, pos, min_len);
+ }
+
+ wpa_hexdump(MSG_DEBUG, "SetProbeReqIe:WscModeStruct", (u8*)&WscModeStruct, sizeof(TWscMode));
+ if(0 == wpa_driver_tista_private_send(priv, SITE_MGR_SIMPLE_CONFIG_MODE, (void*)&WscModeStruct, sizeof(TWscMode), NULL, 0)) {
+ /* Update the cached probe req ie */
+ wpabuf_free(drv->probe_req_ie);
+ drv->probe_req_ie = NULL;
+
+ if (ies && ies_len) {
+ drv->probe_req_ie = wpabuf_alloc(sizeof(WscModeStruct.probeReqWSCIE));
+ if (drv->probe_req_ie) {
+ wpabuf_put_data(drv->probe_req_ie, ies, ies_len);
+ }
+ }
+ } else {
+ wpa_printf(MSG_ERROR, "ERROR - Failed to set wsc mode!");
+ return -1;
+ }
+#endif
+ return 0;
+}
+#endif
+
/**
* wpa_driver_tista_init - Initialize WE driver interface
* @ctx: context to be used when calling wpa_supplicant functions,
@@ -849,6 +953,11 @@ void * wpa_driver_tista_init(void *ctx, const char *ifname)
/* BtCoex mode is read from tiwlan.ini file */
drv->btcoex_mode = 0; /* SG_DISABLE */
+#ifdef CONFIG_WPS
+ /* The latest probe_req_ie for WSC */
+ drv->probe_req_ie = NULL;
+#endif
+
/* Number of sequential errors */
drv->errors = 0;
return drv;
@@ -868,6 +977,10 @@ void wpa_driver_tista_deinit(void *priv)
wpa_driver_wext_deinit(drv->wext);
close(drv->ioctl_sock);
scan_exit(drv);
+#ifdef CONFIG_WPS
+ wpabuf_free(drv->probe_req_ie);
+ drv->probe_req_ie = NULL;
+#endif
os_free(drv);
}
@@ -1082,15 +1195,60 @@ static int wpa_driver_tista_set_key(void *priv, wpa_alg alg,
return ret;
}
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+static struct wpa_scan_results *wpa_driver_tista_get_scan_results(void *priv)
+{
+ struct wpa_driver_ti_data *drv = priv;
+ struct wpa_scan_results *res;
+ struct wpa_scan_res **tmp;
+ unsigned ap_num;
+
+ TI_CHECK_DRIVER( drv->driver_is_loaded, NULL );
+ res = wpa_driver_wext_get_scan_results(drv->wext);
+ if (res == NULL) {
+ return NULL;
+ }
+
+ wpa_printf(MSG_DEBUG, "Actual APs number %d", res->num);
+ ap_num = (unsigned)scan_count(drv) + res->num;
+ tmp = os_realloc(res->res, ap_num * sizeof(struct wpa_scan_res *));
+ if (tmp == NULL)
+ return res;
+ res->num = scan_merge(drv, tmp, drv->force_merge_flag, res->num, ap_num);
+ wpa_printf(MSG_DEBUG, "After merge, APs number %d", res->num);
+ tmp = os_realloc(tmp, res->num * sizeof(struct wpa_scan_res *));
+ res->res = tmp;
+ return res;
+}
+
+static int wpa_driver_tista_set_gen_ie(void *priv, const u8 *ie, size_t ie_len)
+{
+ struct wpa_driver_ti_data *drv = priv;
+ struct iwreq iwr;
+ int ret = 0;
+
+ os_memset(&iwr, 0, sizeof(iwr));
+ os_strncpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
+ iwr.u.data.pointer = (caddr_t)ie;
+ iwr.u.data.length = ie_len;
+
+ if (ioctl(drv->ioctl_sock, SIOCSIWGENIE, &iwr) < 0) {
+ perror("ioctl[SIOCSIWGENIE]");
+ ret = -1;
+ }
+
+ return ret;
+}
+#else
/*-----------------------------------------------------------------------------
Compare function for sorting scan results. Return >0 if @b is considered better.
-----------------------------------------------------------------------------*/
static int wpa_driver_tista_scan_result_compare(const void *a, const void *b)
{
- const struct wpa_scan_result *wa = a;
- const struct wpa_scan_result *wb = b;
+ const struct wpa_scan_result *wa = a;
+ const struct wpa_scan_result *wb = b;
- return( wb->level - wa->level );
+ return( wb->level - wa->level );
}
static int wpa_driver_tista_get_scan_results(void *priv,
@@ -1100,7 +1258,7 @@ static int wpa_driver_tista_get_scan_results(void *priv,
struct wpa_driver_ti_data *drv = priv;
int ap_num = 0;
- TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );
+ TI_CHECK_DRIVER( drv->driver_is_loaded, -1 );
ap_num = wpa_driver_wext_get_scan_results(drv->wext, results, max_size);
wpa_printf(MSG_DEBUG, "Actual APs number %d", ap_num);
@@ -1108,12 +1266,13 @@ static int wpa_driver_tista_get_scan_results(void *priv,
return -1;
/* Merge new results with previous */
- ap_num = scan_merge( drv, results, drv->force_merge_flag, ap_num, max_size );
+ ap_num = scan_merge(drv, results, drv->force_merge_flag, ap_num, max_size);
wpa_printf(MSG_DEBUG, "After merge, APs number %d", ap_num);
- qsort( results, ap_num, sizeof(struct wpa_scan_result),
- wpa_driver_tista_scan_result_compare );
+ qsort(results, ap_num, sizeof(struct wpa_scan_result),
+ wpa_driver_tista_scan_result_compare);
return ap_num;
}
+#endif
static int wpa_driver_tista_associate(void *priv,
struct wpa_driver_associate_params *params)
@@ -1131,10 +1290,21 @@ static int wpa_driver_tista_associate(void *priv,
/* Set driver network mode (Adhoc/Infrastructure) according to supplied parameters */
wpa_driver_wext_set_mode(drv->wext, params->mode);
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ wpa_driver_tista_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len);
+#endif
if (params->wpa_ie == NULL || params->wpa_ie_len == 0)
value = IW_AUTH_WPA_VERSION_DISABLED;
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ else if (params->wpa_ie[0] == WLAN_EID_RSN)
+#else
else if (params->wpa_ie[0] == RSN_INFO_ELEM)
+#endif
value = IW_AUTH_WPA_VERSION_WPA2;
+#ifdef CONFIG_WPS
+ else if (params->key_mgmt_suite == KEY_MGMT_WPS)
+ value = IW_AUTH_WPA_VERSION_DISABLED;
+#endif
else
value = IW_AUTH_WPA_VERSION_WPA;
wpa_driver_tista_set_auth_param(drv, IW_AUTH_WPA_VERSION, value);
@@ -1147,7 +1317,11 @@ static int wpa_driver_tista_associate(void *priv,
value = params->key_mgmt_suite != KEY_MGMT_NONE ||
params->pairwise_suite != CIPHER_NONE ||
params->group_suite != CIPHER_NONE ||
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ (params->wpa_ie_len && (params->key_mgmt_suite != KEY_MGMT_WPS));
+#else
params->wpa_ie_len;
+#endif
wpa_driver_tista_set_auth_param(drv, IW_AUTH_PRIVACY_INVOKED, value);
/* Allow unencrypted EAPOL messages even if pairwise keys are set when
@@ -1196,7 +1370,11 @@ const struct wpa_driver_ops wpa_driver_custom_ops = {
.set_countermeasures = wpa_driver_tista_set_countermeasures,
.set_drop_unencrypted = wpa_driver_tista_set_drop_unencrypted,
.scan = wpa_driver_tista_scan,
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ .get_scan_results2 = wpa_driver_tista_get_scan_results,
+#else
.get_scan_results = wpa_driver_tista_get_scan_results,
+#endif
.deauthenticate = wpa_driver_tista_deauthenticate,
.disassociate = wpa_driver_tista_disassociate,
.associate = wpa_driver_tista_associate,
@@ -1208,5 +1386,8 @@ const struct wpa_driver_ops wpa_driver_custom_ops = {
.remove_pmkid = wpa_driver_tista_remove_pmkid,
.flush_pmkid = wpa_driver_tista_flush_pmkid,
.set_operstate = wpa_driver_tista_set_operstate,
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+ .set_probe_req_ie = wpa_driver_tista_set_probe_req_ie,
+#endif
.driver_cmd = wpa_driver_tista_driver_cmd
};
diff --git a/wilink_6_1/wpa_supplicant_lib/driver_ti.h b/wilink_6_1/wpa_supplicant_lib/driver_ti.h
index 6f36119..c60d43e 100644
--- a/wilink_6_1/wpa_supplicant_lib/driver_ti.h
+++ b/wilink_6_1/wpa_supplicant_lib/driver_ti.h
@@ -29,14 +29,16 @@
#include "driver.h"
#include "l2_packet.h"
#include "eloop.h"
-#include "wpa_supplicant.h"
#include "priv_netlink.h"
#include "driver_wext.h"
-#include "wpa.h"
#include "wpa_ctrl.h"
#include "wpa_supplicant_i.h"
#include "config.h"
-
+#ifdef WPA_SUPPLICANT_VER_0_6_X
+#include "ieee802_11_defs.h"
+#else
+#include "wpa.h"
+#endif
#include "cu_ostypes.h"
#include "STADExternalIf.h"
#include "convert.h"
@@ -75,6 +77,9 @@ struct wpa_driver_ti_data {
u32 btcoex_mode; /* BtCoex Mode */
int last_scan; /* Last scan type */
SHLIST scan_merge_list; /* Previous scan list */
+#ifdef CONFIG_WPS
+ struct wpabuf *probe_req_ie; /* Store the latest probe_req_ie for WSC */
+#endif
int errors; /* Number of sequential errors */
};
#endif