/* * 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 #include #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__ */