コード例 #1
0
static void MTKPP_AllocData(MTK_PROC_PRINT_DATA *data, int data_size, int max_line)
{
	MTKPP_Lock(data);
		
	data->data = (char *)kmalloc(sizeof(char)*data_size, GFP_ATOMIC);
	if (data->data == NULL)
	{
		//_MTKPP_DEBUG_LOG("%s, kmalloc data fail, size = %d", __func__, data_size);
		goto err_alloc_struct;
	}
	data->line = (char **)kmalloc(sizeof(char*)*max_line, GFP_ATOMIC);
	if (data->line == NULL)
	{
		//_MTKPP_DEBUG_LOG("%s, kmalloc line fail, size = %d", __func__, data_size);
		goto err_alloc_data;
	}

	data->data_array_size = data_size;
	data->line_array_size = max_line;
	
	MTKPP_UnLock(data);

	return;
	
err_alloc_data:
	kfree(data->data);
err_alloc_struct:	
	MTKPP_UnLock(data);
	return;
	
}
コード例 #2
0
static void MTKPP_PrintQueueBuffer(MTK_PROC_PRINT_DATA *data, const char *fmt, ...)
{
	va_list args;
	char *buf;
	int len;

	MTKPP_Lock(data);
	
	if ((data->current_line >= data->line_array_size)
		|| (data->current_data >= (data->data_array_size - 128)))
	{
		// out of buffer, ignore input
		MTKPP_UnLock(data);
		return;
	}

	/* move to next line */
	buf = data->line[data->current_line++] = data->data + data->current_data;
	
	/* print string */
	va_start(args, fmt);
	len = vsnprintf(buf, (data->data_array_size - data->current_data), fmt, args);
	va_end(args);
	
	data->current_data += len + 1;
	
	MTKPP_UnLock(data);
}
コード例 #3
0
static void MTKPP_PrintQueueBuffer2(MTK_PROC_PRINT_DATA *data, const char *fmt, ...)
{
	va_list args;
	char *buf;
	int len;

	MTKPP_Lock(data);
	
	if ((data->current_line >= data->line_array_size)
		|| (data->current_data >= (data->data_array_size - 128)))
	{
		/* buffer full, ignore the coming input */
		MTKPP_UnLock(data);
		return;
	}

	/* move to next line */
	buf = data->line[data->current_line++] = data->data + data->current_data;

	/* add the current time stamp */
	len = MTKPP_PrintTime(buf, (data->data_array_size - data->current_data));
	buf += len;
	data->current_data += len;

	/* print string */
	va_start(args, fmt);
	len = vsnprintf(buf, (data->data_array_size - data->current_data), fmt, args);
	va_end(args);
	
	data->current_data += len + 1 ;
	
	MTKPP_UnLock(data);
}
コード例 #4
0
static void MTKPP_CleanData(MTK_PROC_PRINT_DATA *data)
{
	MTKPP_Lock(data);

	memset(data->line, 0, sizeof(char*)*data->line_array_size);
	data->current_data = 0;
	data->current_line = 0;
	
	MTKPP_UnLock(data);
}
コード例 #5
0
static int MTKPP_SeqShow(struct seq_file *sfile, void *v)
{
	MTK_PROC_PRINT_DATA *data;
	int off, i;
	loff_t *spos = (loff_t *) v;

    off = *spos;	
	data = g_MTKPPdata[off];
		
	seq_printf(sfile, "\n" "===== buffer_id = %d =====\n", off);

	MTKPP_Lock(data);
	
	switch (data->type)
	{
		case MTKPP_BUFFERTYPE_QUEUEBUFFER:
			seq_printf(sfile, "data_size = %d/%d\n", data->current_data, data->data_array_size);
			seq_printf(sfile, "data_line = %d/%d\n", data->current_line, data->line_array_size);
			for (i = 0; i < data->current_line; ++i)
			{
				seq_printf(sfile, "%s\n", data->line[i]);
			}
			break;
		case MTKPP_BUFFERTYPE_RINGBUFFER:
			seq_printf(sfile, "data_size = %d\n", data->data_array_size);
			seq_printf(sfile, "data_line = %d\n", data->line_array_size);
			for (i = data->current_line; i < data->line_array_size; ++i)
			{
				if (data->line[i] != NULL)
				{
					seq_printf(sfile, "%s\n", data->line[i]);
				}
			}
			for (i = 0; i < data->current_line; ++i)
			{
				if (data->line[i] != NULL)
				{
					seq_printf(sfile, "%s\n", data->line[i]);
				}
			}
			break;
		default:
			break;
	}
	
	MTKPP_UnLock(data);
	
	return 0;
}
コード例 #6
0
static void MTKPP_FreeData(MTK_PROC_PRINT_DATA *data)
{
	MTKPP_Lock(data);
	
	kfree(data->line);
	kfree(data->data);
	
	data->line = NULL;
	data->data = NULL;
	data->data_array_size = 0;
	data->line_array_size = 0;
	data->current_data = 0;
	data->current_line = 0;
		
	MTKPP_UnLock(data);
}
コード例 #7
0
static void MTKPP_FreeData(MTK_PROC_PRINT_DATA *data)
{
	void * buf;

	MTKPP_Lock(data);

	buf = data->data;

	vfree(buf);

	data->line = NULL;
	data->data = NULL;
	data->data_array_size = 0;
	data->line_array_size = 0;
	data->current_data = 0;
	data->current_line = 0;

	MTKPP_UnLock(data);
}
コード例 #8
0
static void MTKPP_PrintRingBuffer(MTK_PROC_PRINT_DATA *data, const char *fmt, ...)
{
	va_list args;
	char *buf;
	int len, s;

	MTKPP_Lock(data);
	
	if ((data->current_line >= data->line_array_size)
		|| (data->current_data >= (data->data_array_size - 128)))
	{
		/* buffer full, move the pointer to the head */
		data->current_line = 0;
		data->current_data = 0;
	}

	/* move to next line */
	buf = data->line[data->current_line++] = data->data + data->current_data;

	/* add the current time stamp */
	len = MTKPP_PrintTime(buf, (data->data_array_size - data->current_data));
	buf += len;
	data->current_data += len;

	/* print string */
	va_start(args, fmt);
	len = vsnprintf(buf, (data->data_array_size - data->current_data), fmt, args);
	va_end(args);
	
	data->current_data += len + 1 ;

	/* clear data which are overlaid by the new log */
	buf += len; s = data->current_line;
	while (s < data->line_array_size 
		&& data->line[s] != NULL 
		&& data->line[s] <= buf)
	{
		data->line[s++] = NULL;
	}
	
	MTKPP_UnLock(data);
}
コード例 #9
0
static void MTKPP_AllocData(MTK_PROC_PRINT_DATA *data, int data_size, int line_size)
{
 	void * buf;

	buf = vmalloc( sizeof(char) * data_size + sizeof(char*) * line_size );
	if (buf == NULL)
	{
		return;
	}

	MTKPP_Lock(data);

	data->data_array_size = data_size;
	data->line_array_size = line_size;

	data->data = (char *)buf;
	data->line = buf + sizeof(char) * data_size;

	MTKPP_UnLock(data);
}