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; }
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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }