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