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