linux/include/linux/mmc/core.h
<<
>>
Prefs
   1/*
   2 *  linux/include/linux/mmc/core.h
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 */
   8#ifndef LINUX_MMC_CORE_H
   9#define LINUX_MMC_CORE_H
  10
  11#include <linux/completion.h>
  12#include <linux/types.h>
  13
  14struct mmc_data;
  15struct mmc_request;
  16
  17enum mmc_blk_status {
  18        MMC_BLK_SUCCESS = 0,
  19        MMC_BLK_PARTIAL,
  20        MMC_BLK_CMD_ERR,
  21        MMC_BLK_RETRY,
  22        MMC_BLK_ABORT,
  23        MMC_BLK_DATA_ERR,
  24        MMC_BLK_ECC_ERR,
  25        MMC_BLK_NOMEDIUM,
  26        MMC_BLK_NEW_REQUEST,
  27};
  28
  29struct mmc_command {
  30        u32                     opcode;
  31        u32                     arg;
  32#define MMC_CMD23_ARG_REL_WR    (1 << 31)
  33#define MMC_CMD23_ARG_PACKED    ((0 << 31) | (1 << 30))
  34#define MMC_CMD23_ARG_TAG_REQ   (1 << 29)
  35        u32                     resp[4];
  36        unsigned int            flags;          /* expected response type */
  37#define MMC_RSP_PRESENT (1 << 0)
  38#define MMC_RSP_136     (1 << 1)                /* 136 bit response */
  39#define MMC_RSP_CRC     (1 << 2)                /* expect valid crc */
  40#define MMC_RSP_BUSY    (1 << 3)                /* card may send busy */
  41#define MMC_RSP_OPCODE  (1 << 4)                /* response contains opcode */
  42
  43#define MMC_CMD_MASK    (3 << 5)                /* non-SPI command type */
  44#define MMC_CMD_AC      (0 << 5)
  45#define MMC_CMD_ADTC    (1 << 5)
  46#define MMC_CMD_BC      (2 << 5)
  47#define MMC_CMD_BCR     (3 << 5)
  48
  49#define MMC_RSP_SPI_S1  (1 << 7)                /* one status byte */
  50#define MMC_RSP_SPI_S2  (1 << 8)                /* second byte */
  51#define MMC_RSP_SPI_B4  (1 << 9)                /* four data bytes */
  52#define MMC_RSP_SPI_BUSY (1 << 10)              /* card may send busy */
  53
  54/*
  55 * These are the native response types, and correspond to valid bit
  56 * patterns of the above flags.  One additional valid pattern
  57 * is all zeros, which means we don't expect a response.
  58 */
  59#define MMC_RSP_NONE    (0)
  60#define MMC_RSP_R1      (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
  61#define MMC_RSP_R1B     (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
  62#define MMC_RSP_R2      (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
  63#define MMC_RSP_R3      (MMC_RSP_PRESENT)
  64#define MMC_RSP_R4      (MMC_RSP_PRESENT)
  65#define MMC_RSP_R5      (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
  66#define MMC_RSP_R6      (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
  67#define MMC_RSP_R7      (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
  68
  69/* Can be used by core to poll after switch to MMC HS mode */
  70#define MMC_RSP_R1_NO_CRC       (MMC_RSP_PRESENT|MMC_RSP_OPCODE)
  71
  72#define mmc_resp_type(cmd)      ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
  73
  74/*
  75 * These are the SPI response types for MMC, SD, and SDIO cards.
  76 * Commands return R1, with maybe more info.  Zero is an error type;
  77 * callers must always provide the appropriate MMC_RSP_SPI_Rx flags.
  78 */
  79#define MMC_RSP_SPI_R1  (MMC_RSP_SPI_S1)
  80#define MMC_RSP_SPI_R1B (MMC_RSP_SPI_S1|MMC_RSP_SPI_BUSY)
  81#define MMC_RSP_SPI_R2  (MMC_RSP_SPI_S1|MMC_RSP_SPI_S2)
  82#define MMC_RSP_SPI_R3  (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
  83#define MMC_RSP_SPI_R4  (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
  84#define MMC_RSP_SPI_R5  (MMC_RSP_SPI_S1|MMC_RSP_SPI_S2)
  85#define MMC_RSP_SPI_R7  (MMC_RSP_SPI_S1|MMC_RSP_SPI_B4)
  86
  87#define mmc_spi_resp_type(cmd)  ((cmd)->flags & \
  88                (MMC_RSP_SPI_S1|MMC_RSP_SPI_BUSY|MMC_RSP_SPI_S2|MMC_RSP_SPI_B4))
  89
  90/*
  91 * These are the command types.
  92 */
  93#define mmc_cmd_type(cmd)       ((cmd)->flags & MMC_CMD_MASK)
  94
  95        unsigned int            retries;        /* max number of retries */
  96        int                     error;          /* command error */
  97
  98/*
  99 * Standard errno values are used for errors, but some have specific
 100 * meaning in the MMC layer:
 101 *
 102 * ETIMEDOUT    Card took too long to respond
 103 * EILSEQ       Basic format problem with the received or sent data
 104 *              (e.g. CRC check failed, incorrect opcode in response
 105 *              or bad end bit)
 106 * EINVAL       Request cannot be performed because of restrictions
 107 *              in hardware and/or the driver
 108 * ENOMEDIUM    Host can determine that the slot is empty and is
 109 *              actively failing requests
 110 */
 111
 112        unsigned int            busy_timeout;   /* busy detect timeout in ms */
 113        /* Set this flag only for blocking sanitize request */
 114        bool                    sanitize_busy;
 115
 116        struct mmc_data         *data;          /* data segment associated with cmd */
 117        struct mmc_request      *mrq;           /* associated request */
 118};
 119
 120struct mmc_data {
 121        unsigned int            timeout_ns;     /* data timeout (in ns, max 80ms) */
 122        unsigned int            timeout_clks;   /* data timeout (in clocks) */
 123        unsigned int            blksz;          /* data block size */
 124        unsigned int            blocks;         /* number of blocks */
 125        unsigned int            blk_addr;       /* block address */
 126        int                     error;          /* data error */
 127        unsigned int            flags;
 128
 129#define MMC_DATA_WRITE          BIT(8)
 130#define MMC_DATA_READ           BIT(9)
 131/* Extra flags used by CQE */
 132#define MMC_DATA_QBR            BIT(10)         /* CQE queue barrier*/
 133#define MMC_DATA_PRIO           BIT(11)         /* CQE high priority */
 134#define MMC_DATA_REL_WR         BIT(12)         /* Reliable write */
 135#define MMC_DATA_DAT_TAG        BIT(13)         /* Tag request */
 136#define MMC_DATA_FORCED_PRG     BIT(14)         /* Forced programming */
 137
 138        unsigned int            bytes_xfered;
 139
 140        struct mmc_command      *stop;          /* stop command */
 141        struct mmc_request      *mrq;           /* associated request */
 142
 143        unsigned int            sg_len;         /* size of scatter list */
 144        int                     sg_count;       /* mapped sg entries */
 145        struct scatterlist      *sg;            /* I/O scatter list */
 146        s32                     host_cookie;    /* host private data */
 147};
 148
 149struct mmc_host;
 150struct mmc_request {
 151        struct mmc_command      *sbc;           /* SET_BLOCK_COUNT for multiblock */
 152        struct mmc_command      *cmd;
 153        struct mmc_data         *data;
 154        struct mmc_command      *stop;
 155
 156        struct completion       completion;
 157        struct completion       cmd_completion;
 158        void                    (*done)(struct mmc_request *);/* completion function */
 159        /*
 160         * Notify uppers layers (e.g. mmc block driver) that recovery is needed
 161         * due to an error associated with the mmc_request. Currently used only
 162         * by CQE.
 163         */
 164        void                    (*recovery_notifier)(struct mmc_request *);
 165        struct mmc_host         *host;
 166
 167        /* Allow other commands during this ongoing data transfer or busy wait */
 168        bool                    cap_cmd_during_tfr;
 169
 170        int                     tag;
 171};
 172
 173struct mmc_card;
 174
 175void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq);
 176int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd,
 177                int retries);
 178
 179int mmc_hw_reset(struct mmc_host *host);
 180int mmc_sw_reset(struct mmc_host *host);
 181void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card);
 182
 183#endif /* LINUX_MMC_CORE_H */
 184