static int wifi_data_read_proc(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{
	unsigned char *ptr;
    unsigned int count = size;
    unsigned long p = *ppos;
    int ret = 0;

    if (p >= NVS_DATA_OFFSET)
        return 0;

    if (count > NVS_DATA_OFFSET - p)
        count = NVS_DATA_OFFSET - p;

	ptr = get_wifi_nvs_ram();

    if (ptr != NULL) {
        if (copy_to_user(buf, (void*)(ptr+p), count))
        {
            ret =  - EFAULT;
            printk("wifi_data_read_proc: FAIL to copy \n");
        }
        else
        {
            *ppos += count;
            ret = count;
        }
    } else {
        ret =  - EFAULT;
        printk("wifi_data_read_proc: ptr is null \n");
    }

	return ret;
}
Exemplo n.º 2
0
static uint
get_mac_from_wifi_nvs_ram(char *buf, unsigned int buf_len)
{
	unsigned char *nvs_ptr;
	unsigned char *mac_ptr;
	uint len = 0;

	if (!buf || !buf_len)
		return 0;

	nvs_ptr = get_wifi_nvs_ram();
	if (nvs_ptr)
		nvs_ptr += NVS_DATA_OFFSET;
	mac_ptr = strstr(nvs_ptr, WIFI_MAC_PARAM_STR);
	if (mac_ptr) {
		mac_ptr += strlen(WIFI_MAC_PARAM_STR);
		while (mac_ptr[0] == ' ')
			mac_ptr++;
		len = 0;
		while (mac_ptr[len] != '\r' && mac_ptr[len] != '\n' &&
			mac_ptr[len] != '\0') {
			len++;
		}
		if (len > buf_len)
			len = buf_len;
		memcpy(buf, mac_ptr, len);
	}

	return len;
}
static unsigned holiday_wifi_update_nvs(char *str)
{
#define NVS_LEN_OFFSET		0x0C
#define NVS_DATA_OFFSET		0x40
	unsigned char *ptr;
	unsigned len;

	if (!str)
		return -EINVAL;
	ptr = get_wifi_nvs_ram();
	/* Size in format LE assumed */
	memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));

	/* the last bye in NVRAM is 0, trim it */
	if (ptr[NVS_DATA_OFFSET + len - 1] == 0)
		len -= 1;

	if (ptr[NVS_DATA_OFFSET + len -1] != '\n') {
		len += 1;
		ptr[NVS_DATA_OFFSET + len -1] = '\n';
	}

	strcpy(ptr + NVS_DATA_OFFSET + len, str);
	len += strlen(str);
	memcpy(ptr + NVS_LEN_OFFSET, &len, sizeof(len));
	return 0;
}
static unsigned mahimahi_wifi_update_nvs(char *str, int add_flag)
{
#define NVS_LEN_OFFSET		0x0C
#define NVS_DATA_OFFSET		0x40
	unsigned char *ptr;
	unsigned len;

	if (!str)
		return -EINVAL;
	ptr = get_wifi_nvs_ram();
	/* Size in format LE assumed */
	memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));
	/* if the last byte in NVRAM is 0, trim it */
	if (ptr[NVS_DATA_OFFSET + len - 1] == 0)
		len -= 1;
	if (add_flag) {
		strcpy(ptr + NVS_DATA_OFFSET + len, str);
		len += strlen(str);
	} else {
		if (strnstr(ptr + NVS_DATA_OFFSET, str, len))
			len -= strlen(str);
	}
	memcpy(ptr + NVS_LEN_OFFSET, &len, sizeof(len));
	wifi_calibration_size_set();
	return 0;
}
Exemplo n.º 5
0
static unsigned k2_u_wifi_update_nvs(char *str)
{
#define NVS_LEN_OFFSET		0x0C
#define NVS_DATA_OFFSET		0x40
	unsigned char *ptr;
	unsigned len;

	if (!str)
		return -EINVAL;
	ptr = get_wifi_nvs_ram();
	
	memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));

	
	if (ptr[NVS_DATA_OFFSET + len - 1] == 0)
		len -= 1;

	if (ptr[NVS_DATA_OFFSET + len - 1] != '\n') {
		len += 1;
		ptr[NVS_DATA_OFFSET + len - 1] = '\n';
	}

	strcpy(ptr + NVS_DATA_OFFSET + len, str);
	len += strlen(str);
	memcpy(ptr + NVS_LEN_OFFSET, &len, sizeof(len));
	return 0;
}
int htc_get_wifi_data(char *buf)
{
	unsigned char *ptr;

	ptr = get_wifi_nvs_ram();
	memcpy(buf, ptr, NVS_DATA_OFFSET);
	return NVS_DATA_OFFSET;
}
Exemplo n.º 7
0
static int wifi_data_read_proc(char *page, char **start, off_t off,
					int count, int *eof, void *data)
{
	unsigned char *ptr;

	ptr = get_wifi_nvs_ram();
	memcpy(page, ptr, NVS_DATA_OFFSET);
	return NVS_DATA_OFFSET;
}
int htc_get_wifi_calibration(char *buf, int count)
{
	unsigned char *ptr;
	unsigned len;

	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned) count);
	memcpy(buf, ptr + NVS_DATA_OFFSET, len);
	return len;
}
static unsigned wifi_get_nvs_size( void )
{
	unsigned char *ptr;
	unsigned len;

	ptr = get_wifi_nvs_ram();
	/* Size in format LE assumed */
	memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));
	len = min(len, (NVS_MAX_SIZE - NVS_DATA_OFFSET));
	return len;
}
Exemplo n.º 10
0
static int wifi_calibration_read_proc(char *page, char **start, off_t off,
					int count, int *eof, void *data)
{
	unsigned char *ptr;
	unsigned len;

	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned)count);
	memcpy(page, ptr + NVS_DATA_OFFSET, len);
	return len;
}
static unsigned strip_nvs_param(char* param)
{
        unsigned char *nvs_data;

        unsigned param_len;
        int start_idx, end_idx;

        unsigned char *ptr;
        unsigned len;

        if (!param)
                return -EINVAL;
        ptr = get_wifi_nvs_ram();
        /* Size in format LE assumed */
        memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));

        /* the last bye in NVRAM is 0, trim it */
        if (ptr[NVS_DATA_OFFSET + len -1] == 0)
                len -= 1;

        nvs_data = ptr + NVS_DATA_OFFSET;

        param_len = strlen(param);

        /* search param */
        for (start_idx = 0; start_idx < len - param_len; start_idx++) {
                if (memcmp(&nvs_data[start_idx], param, param_len) == 0) {
                        break;
                }
        }

        end_idx = 0;
        if (start_idx < len - param_len) {
                /* search end-of-line */
                for (end_idx = start_idx + param_len; end_idx < len; end_idx++) {
                        if (nvs_data[end_idx] == '\n' || nvs_data[end_idx] == 0) {
                                break;
                        }
                }
        }

        if (start_idx < end_idx) {
                /* move the remain data forward */
                for (; end_idx + 1 < len; start_idx++, end_idx++) {
                        nvs_data[start_idx] = nvs_data[end_idx+1];
                }
                len = len - (end_idx - start_idx + 1);
                memcpy(ptr + NVS_LEN_OFFSET, &len, sizeof(len));
        }
        return 0;
}
Exemplo n.º 12
0
static unsigned strip_nvs_param(char *param)
{
	unsigned char *nvs_data;

	unsigned param_len;
	int start_idx, end_idx;

	unsigned char *ptr;
	unsigned len;

	if (!param)
		return -EINVAL;
	ptr = get_wifi_nvs_ram();
	
	memcpy(&len, ptr + NVS_LEN_OFFSET, sizeof(len));

	
	if (ptr[NVS_DATA_OFFSET + len - 1] == 0)
		len -= 1;

	nvs_data = ptr + NVS_DATA_OFFSET;

	param_len = strlen(param);

	
	for (start_idx = 0; start_idx < len - param_len; start_idx++) {
		if (memcmp(&nvs_data[start_idx], param, param_len) == 0)
			break;
	}

	end_idx = 0;
	if (start_idx < len - param_len) {
		
		for (end_idx = start_idx + param_len; end_idx < len; end_idx++) {
			if (nvs_data[end_idx] == '\n' || nvs_data[end_idx] == 0)
				break;
		}
	}

	if (start_idx < end_idx) {
		
		for (; end_idx + 1 < len; start_idx++, end_idx++)
			nvs_data[start_idx] = nvs_data[end_idx+1];

		len = len - (end_idx - start_idx + 1);
		memcpy(ptr + NVS_LEN_OFFSET, &len, sizeof(len));
	}
	return 0;
}
Exemplo n.º 13
0
static int wifi_calibration_read_proc(char *page, char **start, off_t off,
					int count, int *eof, void *data)
{
	unsigned char *ptr;
	unsigned len;
#ifdef NVS_MSM_WIFI_DEBUG
	unsigned i;
#endif

	memcpy(page, nvs_mac_addr, NVS_MACADDR_SIZE);
	ptr = get_wifi_nvs_ram();
	len = min(wifi_get_nvs_size(), (unsigned)count);
	memcpy(page+NVS_MACADDR_SIZE, ptr, strlen(hardcoded_nvs));
#ifdef NVS_MSM_WIFI_DEBUG
	printk("WiFi Data len = %d \n", len);
	for(i=0;( i < len );i++) {
		printk("%c", *page++);
	}
#endif	
	return len;
}
static uint
get_mac_from_wifi_nvs_ram(char* buf, unsigned int buf_len)
{
	unsigned char *nvs_ptr;
	unsigned char *mac_ptr;
	uint len = 0;

	if (!buf || !buf_len) {
		return 0;
	}

	nvs_ptr = get_wifi_nvs_ram();
	if (nvs_ptr) {
		nvs_ptr += NVS_DATA_OFFSET;
	}

	mac_ptr = strstr(nvs_ptr, WIFI_MAC_PARAM_STR);
	if (mac_ptr) {
		mac_ptr += strlen(WIFI_MAC_PARAM_STR);

		/* skip holidaying space */
		while (mac_ptr[0] == ' ') {
			mac_ptr++;
		}

		/* locate end-of-line */
		len = 0;
		while (mac_ptr[len] != '\r' && mac_ptr[len] != '\n' &&
			mac_ptr[len] != '\0') {
			len++;
		}

		if (len > buf_len) {
			len = buf_len;
		}
		memcpy(buf, mac_ptr, len);
	}

	return len;
}
Exemplo n.º 15
0
/* calibration read func */
static int emapi_calibration_read(char *page, char **start, off_t off,
			  int count, int *eof, void *data)
{
   	unsigned char *nvs;
	unsigned long len;

	nvs = get_wifi_nvs_ram();
	if (nvs) {
	   	/* htc specific, 0x0c: body len */
	   	memcpy(&len, nvs + 0x0c, 4); 
		/* max size is 2048 */
		len = min(len+ 0x40, (unsigned long)2048);
		memcpy((void *)page, (void *) nvs, len);
		//memcpy(page, nvs, len);
		printk("%s - read %d bytes\n", __FUNCTION__, (unsigned int)len);
		return len;
	}
	else {
	   	printk("%s - no calibration data\n", __FUNCTION__);
		return -EIO;
	}
}