vserver 1.9.5.x5
[linux-2.6.git] / include / linux / mtd / flashchip.h
index 7e042bf..c66ba81 100644 (file)
@@ -6,7 +6,7 @@
  *
  * (C) 2000 Red Hat. GPLd.
  *
- * $Id: flashchip.h,v 1.9 2003/04/30 11:15:22 dwmw2 Exp $
+ * $Id: flashchip.h,v 1.15 2004/11/05 22:41:06 nico Exp $
  *
  */
 
@@ -37,13 +37,16 @@ typedef enum {
        FL_LOCKING,
        FL_UNLOCKING,
        FL_POINT,
+       FL_XIP_WHILE_ERASING,
+       FL_XIP_WHILE_WRITING,
        FL_UNKNOWN
 } flstate_t;
 
 
 
 /* NOTE: confusingly, this can be used to refer to more than one chip at a time, 
-   if they're interleaved. */
+   if they're interleaved.  This can even refer to individual partitions on
+   the same physical chip when present. */
 
 struct flchip {
        unsigned long start; /* Offset within the map */
@@ -61,6 +64,7 @@ struct flchip {
 
        int write_suspended:1;
        int erase_suspended:1;
+       unsigned long in_progress_block_addr;
 
        spinlock_t *mutex;
        spinlock_t _spinlock; /* We do it like this because sometimes they'll be shared. */
@@ -69,8 +73,17 @@ struct flchip {
        int word_write_time;
        int buffer_write_time;
        int erase_time;
+
+       void *priv;
 };
 
+/* This is used to handle contention on write/erase operations
+   between partitions of the same physical chip. */
+struct flchip_shared {
+       spinlock_t lock;
+       struct flchip *writing;
+       struct flchip *erasing;
+};
 
 
 #endif /* __MTD_FLASHCHIP_H__ */