Example #1
0
static void backup_log(u32 ch, int direction, char *data, u32 length)
{
	struct sk_buff_head *queue = &backup_queue[direction][ch];
	struct sk_buff *skb;
	struct backup_header *hdr;

	if (length == 0 || queue == NULL || data == NULL)
		return;

	if (ch != HSIC_DATA_START_CHANNEL)
		return;

	skb = dev_alloc_skb(sizeof(struct backup_header) + length);
	if (!skb) {
		hsictty_error(" ERR! dev_alloc_skb fail len(%u)\n", length);
		return;
	}
	hdr = (struct backup_header *)skb_put(skb,
			sizeof(struct backup_header));
	hdr->length = length;
	hdr->magic = 0x78563412;
	hdr->time = get_kernel_time();
	memcpy(skb_put(skb, length), data, length);
	while (skb_queue_len(queue) > 50) {
		struct sk_buff *skb = skb_dequeue(queue);
		dev_kfree_skb(skb);
	}
	skb_queue_tail(queue, skb);
}
void mif_ipc_log(enum mif_log_id id,
                 struct modem_shared *msd, const char *data, size_t len)
{
    struct mif_ipc_block *block;
    unsigned long int flags;

    spin_lock_irqsave(&msd->lock, flags);

    block = (struct mif_ipc_block *)
            (msd->storage.addr + (MAX_LOG_SIZE * msd->storage.cnt));
    msd->storage.cnt = ((msd->storage.cnt + 1) < MAX_LOG_CNT) ?
                       msd->storage.cnt + 1 : 0;

    spin_unlock_irqrestore(&msd->lock, flags);

    block->id = id;
    block->time = get_kernel_time();
    block->len = (len > MAX_IPC_LOG_SIZE) ? MAX_IPC_LOG_SIZE : len;
    memcpy(block->buff, data, block->len);
}
void _mif_time_log(enum mif_log_id id, struct modem_shared *msd,
                   struct timespec epoch, const char *data, size_t len)
{
    struct mif_time_block *block;
    unsigned long int flags;

    spin_lock_irqsave(&msd->lock, flags);

    block = (struct mif_time_block *)
            (msd->storage.addr + (MAX_LOG_SIZE * msd->storage.cnt));
    msd->storage.cnt = ((msd->storage.cnt + 1) < MAX_LOG_CNT) ?
                       msd->storage.cnt + 1 : 0;

    spin_unlock_irqrestore(&msd->lock, flags);

    block->id = id;
    block->time = get_kernel_time();
    memcpy(&block->epoch, &epoch, sizeof(struct timespec));

    if (data)
        memcpy(block->buff, data,
               (len > MAX_IRQ_LOG_SIZE) ? MAX_IRQ_LOG_SIZE : len);
}
void _mif_com_log(enum mif_log_id id,
	struct modem_shared *msd, const char *format, ...)
{
	struct mif_common_block *block;
	unsigned long int flags;
	va_list args;

	spin_lock_irqsave(&msd->lock, flags);

	block = (struct mif_common_block *)
		(msd->storage.addr + (MAX_LOG_SIZE * msd->storage.cnt));
	msd->storage.cnt = ((msd->storage.cnt + 1) < MAX_LOG_CNT) ?
		msd->storage.cnt + 1 : 0;

	spin_unlock_irqrestore(&msd->lock, flags);

	block->id = id;
	block->time = get_kernel_time();

	va_start(args, format);
	vsnprintf(block->buff, MAX_COM_LOG_SIZE, format, args);
	va_end(args);
}