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