Add ring buffer to enable tracing of significant events of eMMC in both CQ and Legacy mode for debug purpose. CONFIG_MMC_RING_BUFFER should be enabled to use ring buffer logging. Change-Id: Iceb404d77fca19e133c319bc66ec15b2d77c7c54 Signed-off-by: Sayali Lokhande <sayalil@codeaurora.org>
55 lines
1.7 KiB
C
55 lines
1.7 KiB
C
/*
|
|
* Copyright (c) 2017, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#ifndef __MMC_RING_BUFFER__
|
|
#define __MMC_RING_BUFFER__
|
|
|
|
#include <linux/mmc/card.h>
|
|
#include <linux/smp.h>
|
|
|
|
#include "core.h"
|
|
|
|
#define MMC_TRACE_RBUF_SZ_ORDER 2 /* 2^2 pages */
|
|
#define MMC_TRACE_RBUF_SZ (PAGE_SIZE * (1 << MMC_TRACE_RBUF_SZ_ORDER))
|
|
#define MMC_TRACE_EVENT_SZ 256
|
|
#define MMC_TRACE_RBUF_NUM_EVENTS (MMC_TRACE_RBUF_SZ / MMC_TRACE_EVENT_SZ)
|
|
|
|
struct mmc_host;
|
|
struct mmc_trace_buffer {
|
|
int wr_idx;
|
|
bool stop_tracing;
|
|
spinlock_t trace_lock;
|
|
char *data;
|
|
};
|
|
|
|
#ifdef CONFIG_MMC_RING_BUFFER
|
|
void mmc_stop_tracing(struct mmc_host *mmc);
|
|
void mmc_trace_write(struct mmc_host *mmc, const char *fmt, ...);
|
|
void mmc_trace_init(struct mmc_host *mmc);
|
|
void mmc_trace_free(struct mmc_host *mmc);
|
|
void mmc_dump_trace_buffer(struct mmc_host *mmc, struct seq_file *s);
|
|
#else
|
|
static inline void mmc_stop_tracing(struct mmc_host *mmc) {}
|
|
static inline void mmc_trace_write(struct mmc_host *mmc,
|
|
const char *fmt, ...) {}
|
|
static inline void mmc_trace_init(struct mmc_host *mmc) {}
|
|
static inline void mmc_trace_free(struct mmc_host *mmc) {}
|
|
static inline void mmc_dump_trace_buffer(struct mmc_host *mmc,
|
|
struct seq_file *s) {}
|
|
#endif
|
|
|
|
#define MMC_TRACE(mmc, fmt, ...) \
|
|
mmc_trace_write(mmc, fmt, ##__VA_ARGS__)
|
|
|
|
#endif /* __MMC_RING_BUFFER__ */
|