home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / mmc / mmc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.4 KB  |  118 lines

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