Pull thermal into release branch
[linux-drm-fsl-dcu.git] / arch / powerpc / platforms / cell / spufs / spufs.h
index 0c437891dfd5cf6b25af3cc1248b033192627ea1..0a947fd7de57c3da11e2444b64d5d020637a9323 100644 (file)
@@ -41,7 +41,7 @@ struct spu_gang;
 
 /* ctx->sched_flags */
 enum {
-       SPU_SCHED_WAKE = 0,
+       SPU_SCHED_EXITING = 0,
 };
 
 struct spu_context {
@@ -50,16 +50,17 @@ struct spu_context {
        spinlock_t mmio_lock;             /* protects mmio access */
        struct address_space *local_store; /* local store mapping.  */
        struct address_space *mfc;         /* 'mfc' area mappings. */
-       struct address_space *cntl;        /* 'control' area mappings. */
-       struct address_space *signal1;     /* 'signal1' area mappings. */
-       struct address_space *signal2;     /* 'signal2' area mappings. */
-       struct address_space *mss;         /* 'mss' area mappings. */
-       struct address_space *psmap;       /* 'psmap' area mappings. */
+       struct address_space *cntl;        /* 'control' area mappings. */
+       struct address_space *signal1;     /* 'signal1' area mappings. */
+       struct address_space *signal2;     /* 'signal2' area mappings. */
+       struct address_space *mss;         /* 'mss' area mappings. */
+       struct address_space *psmap;       /* 'psmap' area mappings. */
+       spinlock_t mapping_lock;
        u64 object_id;             /* user space pointer for oprofile */
 
        enum { SPU_STATE_RUNNABLE, SPU_STATE_SAVED } state;
        struct mutex state_mutex;
-       struct semaphore run_sema;
+       struct mutex run_mutex;
 
        struct mm_struct *owner;
 
@@ -140,6 +141,7 @@ struct spu_context_ops {
                               struct spu_dma_info * info);
        void (*proxydma_info_read) (struct spu_context * ctx,
                                    struct spu_proxydma_info * info);
+       void (*restart_dma)(struct spu_context *ctx);
 };
 
 extern struct spu_context_ops spu_hw_ops;
@@ -149,6 +151,7 @@ struct spufs_inode_info {
        struct spu_context *i_ctx;
        struct spu_gang *i_gang;
        struct inode vfs_inode;
+       int i_openers;
 };
 #define SPUFS_I(inode) \
        container_of(inode, struct spufs_inode_info, vfs_inode)
@@ -170,6 +173,9 @@ int put_spu_gang(struct spu_gang *gang);
 void spu_gang_remove_ctx(struct spu_gang *gang, struct spu_context *ctx);
 void spu_gang_add_ctx(struct spu_gang *gang, struct spu_context *ctx);
 
+/* fault handling */
+int spufs_handle_class1(struct spu_context *ctx);
+
 /* context management */
 static inline void spu_acquire(struct spu_context *ctx)
 {
@@ -190,10 +196,7 @@ void spu_unmap_mappings(struct spu_context *ctx);
 void spu_forget(struct spu_context *ctx);
 int spu_acquire_runnable(struct spu_context *ctx, unsigned long flags);
 void spu_acquire_saved(struct spu_context *ctx);
-int spu_acquire_exclusive(struct spu_context *ctx);
-enum {
-       SPU_ACTIVATE_NOWAKE = 1,
-};
+
 int spu_activate(struct spu_context *ctx, unsigned long flags);
 void spu_deactivate(struct spu_context *ctx);
 void spu_yield(struct spu_context *ctx);
@@ -220,14 +223,13 @@ extern char *isolated_loader;
                prepare_to_wait(&(wq), &__wait, TASK_INTERRUPTIBLE);    \
                if (condition)                                          \
                        break;                                          \
-               if (!signal_pending(current)) {                         \
-                       spu_release(ctx);                               \
-                       schedule();                                     \
-                       spu_acquire(ctx);                               \
-                       continue;                                       \
+               if (signal_pending(current)) {                          \
+                       __ret = -ERESTARTSYS;                           \
+                       break;                                          \
                }                                                       \
-               __ret = -ERESTARTSYS;                                   \
-               break;                                                  \
+               spu_release(ctx);                                       \
+               schedule();                                             \
+               spu_acquire(ctx);                                       \
        }                                                               \
        finish_wait(&(wq), &__wait);                                    \
        __ret;                                                          \