cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core.h (6075B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 *  linux/drivers/mmc/core/core.h
      4 *
      5 *  Copyright (C) 2003 Russell King, All Rights Reserved.
      6 *  Copyright 2007 Pierre Ossman
      7 */
      8#ifndef _MMC_CORE_CORE_H
      9#define _MMC_CORE_CORE_H
     10
     11#include <linux/delay.h>
     12#include <linux/sched.h>
     13
     14struct mmc_host;
     15struct mmc_card;
     16struct mmc_request;
     17
     18#define MMC_CMD_RETRIES        3
     19
     20struct mmc_bus_ops {
     21	void (*remove)(struct mmc_host *);
     22	void (*detect)(struct mmc_host *);
     23	int (*pre_suspend)(struct mmc_host *);
     24	int (*suspend)(struct mmc_host *);
     25	int (*resume)(struct mmc_host *);
     26	int (*runtime_suspend)(struct mmc_host *);
     27	int (*runtime_resume)(struct mmc_host *);
     28	int (*alive)(struct mmc_host *);
     29	int (*shutdown)(struct mmc_host *);
     30	int (*hw_reset)(struct mmc_host *);
     31	int (*sw_reset)(struct mmc_host *);
     32	bool (*cache_enabled)(struct mmc_host *);
     33	int (*flush_cache)(struct mmc_host *);
     34};
     35
     36void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops);
     37void mmc_detach_bus(struct mmc_host *host);
     38
     39struct device_node *mmc_of_find_child_device(struct mmc_host *host,
     40		unsigned func_num);
     41
     42void mmc_init_erase(struct mmc_card *card);
     43
     44void mmc_set_chip_select(struct mmc_host *host, int mode);
     45void mmc_set_clock(struct mmc_host *host, unsigned int hz);
     46void mmc_set_bus_mode(struct mmc_host *host, unsigned int mode);
     47void mmc_set_bus_width(struct mmc_host *host, unsigned int width);
     48u32 mmc_select_voltage(struct mmc_host *host, u32 ocr);
     49int mmc_set_uhs_voltage(struct mmc_host *host, u32 ocr);
     50int mmc_host_set_uhs_voltage(struct mmc_host *host);
     51int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage);
     52void mmc_set_initial_signal_voltage(struct mmc_host *host);
     53void mmc_set_timing(struct mmc_host *host, unsigned int timing);
     54void mmc_set_driver_type(struct mmc_host *host, unsigned int drv_type);
     55int mmc_select_drive_strength(struct mmc_card *card, unsigned int max_dtr,
     56			      int card_drv_type, int *drv_type);
     57void mmc_power_up(struct mmc_host *host, u32 ocr);
     58void mmc_power_off(struct mmc_host *host);
     59void mmc_power_cycle(struct mmc_host *host, u32 ocr);
     60void mmc_set_initial_state(struct mmc_host *host);
     61u32 mmc_vddrange_to_ocrmask(int vdd_min, int vdd_max);
     62
     63static inline void mmc_delay(unsigned int ms)
     64{
     65	if (ms <= 20)
     66		usleep_range(ms * 1000, ms * 1250);
     67	else
     68		msleep(ms);
     69}
     70
     71void mmc_rescan(struct work_struct *work);
     72void mmc_start_host(struct mmc_host *host);
     73void __mmc_stop_host(struct mmc_host *host);
     74void mmc_stop_host(struct mmc_host *host);
     75
     76void _mmc_detect_change(struct mmc_host *host, unsigned long delay,
     77			bool cd_irq);
     78int _mmc_detect_card_removed(struct mmc_host *host);
     79int mmc_detect_card_removed(struct mmc_host *host);
     80
     81int mmc_attach_mmc(struct mmc_host *host);
     82int mmc_attach_sd(struct mmc_host *host);
     83int mmc_attach_sdio(struct mmc_host *host);
     84
     85/* Module parameters */
     86extern bool use_spi_crc;
     87
     88/* Debugfs information for hosts and cards */
     89void mmc_add_host_debugfs(struct mmc_host *host);
     90void mmc_remove_host_debugfs(struct mmc_host *host);
     91
     92void mmc_add_card_debugfs(struct mmc_card *card);
     93void mmc_remove_card_debugfs(struct mmc_card *card);
     94
     95int mmc_execute_tuning(struct mmc_card *card);
     96int mmc_hs200_to_hs400(struct mmc_card *card);
     97int mmc_hs400_to_hs200(struct mmc_card *card);
     98
     99void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq);
    100bool mmc_is_req_done(struct mmc_host *host, struct mmc_request *mrq);
    101
    102int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq);
    103
    104int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr,
    105		unsigned int arg);
    106int mmc_can_erase(struct mmc_card *card);
    107int mmc_can_trim(struct mmc_card *card);
    108int mmc_can_discard(struct mmc_card *card);
    109int mmc_can_sanitize(struct mmc_card *card);
    110int mmc_can_secure_erase_trim(struct mmc_card *card);
    111int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from,
    112			unsigned int nr);
    113unsigned int mmc_calc_max_discard(struct mmc_card *card);
    114
    115int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen);
    116
    117int __mmc_claim_host(struct mmc_host *host, struct mmc_ctx *ctx,
    118		     atomic_t *abort);
    119void mmc_release_host(struct mmc_host *host);
    120void mmc_get_card(struct mmc_card *card, struct mmc_ctx *ctx);
    121void mmc_put_card(struct mmc_card *card, struct mmc_ctx *ctx);
    122
    123int mmc_card_alternative_gpt_sector(struct mmc_card *card, sector_t *sector);
    124
    125/**
    126 *	mmc_claim_host - exclusively claim a host
    127 *	@host: mmc host to claim
    128 *
    129 *	Claim a host for a set of operations.
    130 */
    131static inline void mmc_claim_host(struct mmc_host *host)
    132{
    133	__mmc_claim_host(host, NULL, NULL);
    134}
    135
    136int mmc_cqe_start_req(struct mmc_host *host, struct mmc_request *mrq);
    137void mmc_cqe_post_req(struct mmc_host *host, struct mmc_request *mrq);
    138int mmc_cqe_recovery(struct mmc_host *host);
    139
    140/**
    141 *	mmc_pre_req - Prepare for a new request
    142 *	@host: MMC host to prepare command
    143 *	@mrq: MMC request to prepare for
    144 *
    145 *	mmc_pre_req() is called in prior to mmc_start_req() to let
    146 *	host prepare for the new request. Preparation of a request may be
    147 *	performed while another request is running on the host.
    148 */
    149static inline void mmc_pre_req(struct mmc_host *host, struct mmc_request *mrq)
    150{
    151	if (host->ops->pre_req)
    152		host->ops->pre_req(host, mrq);
    153}
    154
    155/**
    156 *	mmc_post_req - Post process a completed request
    157 *	@host: MMC host to post process command
    158 *	@mrq: MMC request to post process for
    159 *	@err: Error, if non zero, clean up any resources made in pre_req
    160 *
    161 *	Let the host post process a completed request. Post processing of
    162 *	a request may be performed while another request is running.
    163 */
    164static inline void mmc_post_req(struct mmc_host *host, struct mmc_request *mrq,
    165				int err)
    166{
    167	if (host->ops->post_req)
    168		host->ops->post_req(host, mrq, err);
    169}
    170
    171static inline bool mmc_cache_enabled(struct mmc_host *host)
    172{
    173	if (host->bus_ops->cache_enabled)
    174		return host->bus_ops->cache_enabled(host);
    175
    176	return false;
    177}
    178
    179static inline int mmc_flush_cache(struct mmc_host *host)
    180{
    181	if (host->bus_ops->flush_cache)
    182		return host->bus_ops->flush_cache(host);
    183
    184	return 0;
    185}
    186
    187#endif