Root/qiboot/include/linux-mmc.h

1/*
2 * linux/include/linux/mmc/mmc.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 MMC_H
9#define MMC_H
10
11/* removed by scsuh */
12#if 0
13#include <linux/list.h>
14#include <linux/interrupt.h>
15#include <linux/device.h>
16
17struct request;
18struct mmc_data;
19struct mmc_request;
20#endif
21
22#define MMC_RSP_PRESENT (1 << 0)
23#define MMC_RSP_136 (1 << 1) /* 136 bit response */
24#define MMC_RSP_CRC (1 << 2) /* expect valid crc */
25#define MMC_RSP_BUSY (1 << 3) /* card may send busy */
26#define MMC_RSP_OPCODE (1 << 4) /* response contains opcode */
27#define MMC_CMD_MASK (3 << 5) /* command type */
28#define MMC_CMD_AC (0 << 5)
29#define MMC_CMD_ADTC (1 << 5)
30#define MMC_CMD_BC (2 << 5)
31#define MMC_CMD_BCR (3 << 5)
32
33/*
34 * These are the response types, and correspond to valid bit
35 * patterns of the above flags. One additional valid pattern
36 * is all zeros, which means we don't expect a response.
37 */
38#define MMC_RSP_NONE (0)
39#define MMC_RSP_R1 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
40#define MMC_RSP_R1B (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
41#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
42#define MMC_RSP_R3 (MMC_RSP_PRESENT)
43#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC)
44
45#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
46
47/*
48 * These are the command types.
49 */
50#define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK)
51
52#define MMC_ERR_NONE 0
53#define MMC_ERR_TIMEOUT 1
54#define MMC_ERR_BADCRC 2
55#define MMC_ERR_FIFO 3
56#define MMC_ERR_FAILED 4
57#define MMC_ERR_INVALID 5
58
59struct mmc_command {
60    u32 opcode;
61    u32 arg;
62    u32 resp[4];
63    unsigned int flags; /* expected response type */
64    struct mmc_data *data; /* data segment associated with cmd */
65    struct mmc_request *mrq; /* associated request */
66    unsigned int retries; /* max number of retries */
67    unsigned int error; /* command error */
68
69};
70
71struct mmc_data {
72    unsigned int timeout_ns; /* data timeout (in ns, max 80ms) */
73    unsigned int timeout_clks; /* data timeout (in clocks) */
74    unsigned int blksz_bits; /* data block size */
75    unsigned int blksz; /* data block size */
76    unsigned int blocks; /* number of blocks */
77    unsigned int error; /* data error */
78    unsigned int flags;
79
80#define MMC_DATA_WRITE (1 << 8)
81#define MMC_DATA_READ (1 << 9)
82#define MMC_DATA_STREAM (1 << 10)
83#define MMC_DATA_MULTI (1 << 11)
84
85    unsigned int bytes_xfered;
86
87    struct mmc_command *stop; /* stop command */
88    struct mmc_request *mrq; /* associated request */
89
90    unsigned int sg_len; /* size of scatter list */
91    struct scatterlist *sg; /* I/O scatter list */
92};
93
94struct mmc_request {
95    struct mmc_command *cmd;
96    struct mmc_data *data;
97    struct mmc_command *stop;
98
99    void *done_data; /* completion data */
100    void (*done)(struct mmc_request *);/* completion function */
101};
102
103struct mmc_host;
104struct mmc_card;
105
106extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
107extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
108extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int,
109    struct mmc_command *, int);
110
111extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
112
113static inline void mmc_claim_host(struct mmc_host *host)
114{
115    __mmc_claim_host(host, (struct mmc_card *)-1);
116}
117
118extern void mmc_release_host(struct mmc_host *host);
119
120#endif
121

Archive Download this file



interactive