Преглед изворни кода

change: efuse的数据格式需要与AT固件对齐

Wendal Chen пре 2 година
родитељ
комит
0cadee8e44
2 измењених фајлова са 26 додато и 3 уклоњено
  1. 1 0
      include/driver/wm_efuse.h
  2. 25 3
      platform/drivers/efuse/wm_efuse.c

+ 1 - 0
include/driver/wm_efuse.h

@@ -16,6 +16,7 @@
 
 enum {
 	CMD_WIFI_MAC = 0x01,
+	CMD_WIFI_MACAP,
 	CMD_BT_MAC,		
 	CMD_TX_DC,
 	CMD_RX_DC,

+ 25 - 3
platform/drivers/efuse/wm_efuse.c

@@ -38,6 +38,7 @@ typedef struct FT_PARAM
 	unsigned int		magic_no;
 	unsigned int 		checksum;
 	unsigned char		wifi_mac_addr[MAC_ADDR_LEN];
+	unsigned char		wifi_macap_addr[MAC_ADDR_LEN];
 	unsigned short      version_no;
 	unsigned char		bt_mac_addr[MAC_ADDR_LEN];
 	unsigned short      ext_param_len;
@@ -216,6 +217,17 @@ int tls_ft_param_get(unsigned int opnum, void *data, unsigned int rdlen)
 				memcpy(data, gftParam->wifi_mac_addr, rdlen);
 			}
 		break;
+		case CMD_WIFI_MACAP:	/*MAC*/
+			if ((gftParam->wifi_macap_addr[0]&0x1)
+				||(0 == (gftParam->wifi_macap_addr[0]|gftParam->wifi_macap_addr[1]|gftParam->wifi_macap_addr[2]|gftParam->wifi_macap_addr[3]|gftParam->wifi_macap_addr[4]|gftParam->wifi_macap_addr[5])))		
+			{
+				memcpy(data, default_mac, rdlen);
+			}
+			else
+			{
+				memcpy(data, gftParam->wifi_macap_addr, rdlen);
+			}
+		break;
 		case CMD_BT_MAC:	/*MAC*/
             {
                 u8 invalid_bt_mac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
@@ -283,15 +295,17 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
 	unsigned int writelen = 0;
 	FT_PARAM_ST *pft = NULL;
 	int ret = 0;
-
+	tls_flash_unlock();
 	if (!data || !len)
 	{
+		printf("%s:%d return -1\n", __FILE__, __LINE__);
 		return -1;
 	}
 	
 	pft = tls_mem_alloc(sizeof(FT_PARAM_ST_VER1));
 	if (pft == NULL)
 	{
+		printf("%s:%d return -1\n", __FILE__, __LINE__);
 		return -1;
 	}
 	memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
@@ -310,6 +324,7 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
 			{
 				memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 				tls_mem_free(pft);
+				printf("%s:%d return -1\n", __FILE__, __LINE__);
 				return -1;
 			}
 		}
@@ -378,6 +393,7 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
 		
 		default:
 			tls_mem_free(pft);
+			printf("%s:%d return -1\n", __FILE__, __LINE__);
 			return -1;
 	}
 
@@ -395,26 +411,32 @@ int tls_ft_param_set(unsigned int opnum, void *data, unsigned int len)
 
 	tls_flash_unlock();
 	tls_fls_write(FT_PARAM_RUNTIME_ADDR, (unsigned char *)gftParam, writelen);
+	// printf("tls_fls_write %08X %p %d %d\n", FT_PARAM_RUNTIME_ADDR, gftParam, writelen, ret);
 	memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 	ret = _ft_param_init(FT_PARAM_RUNTIME_ADDR, pft);
+	// printf("_ft_param_init %d\n", ret);
 	if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
 	{
 		memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 		tls_mem_free(pft);
+		printf("%s:%d return -1\n", __FILE__, __LINE__);
 		return -1;
 	}
-	tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, writelen);
+	ret = tls_fls_write(FT_MAGICNUM_ADDR, (unsigned char *)gftParam, writelen);
+	// printf("tls_fls_write2 %08X %p %d %d\n", FT_MAGICNUM_ADDR, gftParam, writelen, ret);
 	memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 	ret = _ft_param_init(FT_MAGICNUM_ADDR, pft);
+	// printf("_ft_param_init2 %d\n", ret);
 	if(!ret || memcmp(pft, gftParam, sizeof(FT_PARAM_ST_VER1)))
 	{
 		memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 		tls_mem_free(pft);
+		printf("%s:%d return -1\n", __FILE__, __LINE__);
 		return -1;
 	}
 	memset(pft, 0xFF, sizeof(FT_PARAM_ST_VER1));
 	tls_mem_free(pft);
-	//tls_flash_lock();
+	tls_flash_lock();
 	return 0;
 }