1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef LINUX_MMC_HSQ_H 3*4882a593Smuzhiyun #define LINUX_MMC_HSQ_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun struct hsq_slot { 6*4882a593Smuzhiyun struct mmc_request *mrq; 7*4882a593Smuzhiyun }; 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun struct mmc_hsq { 10*4882a593Smuzhiyun struct mmc_host *mmc; 11*4882a593Smuzhiyun struct mmc_request *mrq; 12*4882a593Smuzhiyun wait_queue_head_t wait_queue; 13*4882a593Smuzhiyun struct hsq_slot *slot; 14*4882a593Smuzhiyun spinlock_t lock; 15*4882a593Smuzhiyun struct work_struct retry_work; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun int next_tag; 18*4882a593Smuzhiyun int num_slots; 19*4882a593Smuzhiyun int qcnt; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun bool enabled; 22*4882a593Smuzhiyun bool waiting_for_idle; 23*4882a593Smuzhiyun bool recovery_halt; 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc); 27*4882a593Smuzhiyun void mmc_hsq_suspend(struct mmc_host *mmc); 28*4882a593Smuzhiyun int mmc_hsq_resume(struct mmc_host *mmc); 29*4882a593Smuzhiyun bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq); 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #endif 32