xref: /openbmc/linux/drivers/mmc/host/mmc_hsq.h (revision 6db96e58)
1511ce378SBaolin Wang /* SPDX-License-Identifier: GPL-2.0 */
2511ce378SBaolin Wang #ifndef LINUX_MMC_HSQ_H
3511ce378SBaolin Wang #define LINUX_MMC_HSQ_H
4511ce378SBaolin Wang 
5511ce378SBaolin Wang struct hsq_slot {
6511ce378SBaolin Wang 	struct mmc_request *mrq;
7511ce378SBaolin Wang };
8511ce378SBaolin Wang 
9511ce378SBaolin Wang struct mmc_hsq {
10511ce378SBaolin Wang 	struct mmc_host *mmc;
11511ce378SBaolin Wang 	struct mmc_request *mrq;
12511ce378SBaolin Wang 	wait_queue_head_t wait_queue;
13511ce378SBaolin Wang 	struct hsq_slot *slot;
14511ce378SBaolin Wang 	spinlock_t lock;
156db96e58SBaolin Wang 	struct work_struct retry_work;
16511ce378SBaolin Wang 
17511ce378SBaolin Wang 	int next_tag;
18511ce378SBaolin Wang 	int num_slots;
19511ce378SBaolin Wang 	int qcnt;
20511ce378SBaolin Wang 
21511ce378SBaolin Wang 	bool enabled;
22511ce378SBaolin Wang 	bool waiting_for_idle;
23511ce378SBaolin Wang 	bool recovery_halt;
24511ce378SBaolin Wang };
25511ce378SBaolin Wang 
26511ce378SBaolin Wang int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc);
27511ce378SBaolin Wang void mmc_hsq_suspend(struct mmc_host *mmc);
28511ce378SBaolin Wang int mmc_hsq_resume(struct mmc_host *mmc);
29511ce378SBaolin Wang bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq);
30511ce378SBaolin Wang 
31511ce378SBaolin Wang #endif
32