Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus
[pandora-kernel.git] / include / linux / mmc / host.h
index 1ee4424..0f83858 100644 (file)
@@ -106,6 +106,15 @@ struct mmc_host_ops {
         */
        int (*enable)(struct mmc_host *host);
        int (*disable)(struct mmc_host *host, int lazy);
+       /*
+        * It is optional for the host to implement pre_req and post_req in
+        * order to support double buffering of requests (prepare one
+        * request while another request is active).
+        */
+       void    (*post_req)(struct mmc_host *host, struct mmc_request *req,
+                           int err);
+       void    (*pre_req)(struct mmc_host *host, struct mmc_request *req,
+                          bool is_first_req);
        void    (*request)(struct mmc_host *host, struct mmc_request *req);
        /*
         * Avoid calling these three functions too often or in a "fast path",
@@ -139,11 +148,22 @@ struct mmc_host_ops {
        int     (*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios);
        int     (*execute_tuning)(struct mmc_host *host);
        void    (*enable_preset_value)(struct mmc_host *host, bool enable);
+       int     (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv);
 };
 
 struct mmc_card;
 struct device;
 
+struct mmc_async_req {
+       /* active mmc request */
+       struct mmc_request      *mrq;
+       /*
+        * Check error status of completed mmc request.
+        * Returns 0 if success otherwise non zero.
+        */
+       int (*err_check) (struct mmc_card *, struct mmc_async_req *);
+};
+
 struct mmc_host {
        struct device           *parent;
        struct device           class_dev;
@@ -231,6 +251,7 @@ struct mmc_host {
        unsigned int            max_req_size;   /* maximum number of bytes in one req */
        unsigned int            max_blk_size;   /* maximum size of one mmc block */
        unsigned int            max_blk_count;  /* maximum number of blocks in one req */
+       unsigned int            max_discard_to; /* max. discard timeout in ms */
 
        /* private data */
        spinlock_t              lock;           /* lock for claim and bus ops */
@@ -281,6 +302,8 @@ struct mmc_host {
 
        struct dentry           *debugfs_root;
 
+       struct mmc_async_req    *areq;          /* active async req */
+
        unsigned long           private[0] ____cacheline_aligned;
 };
 
@@ -373,5 +396,4 @@ static inline int mmc_host_cmd23(struct mmc_host *host)
 {
        return host->caps & MMC_CAP_CMD23;
 }
-#endif
-
+#endif /* LINUX_MMC_HOST_H */