[POWERPC] Cleanup pgtable-ppc32.h
[safe/jmp/linux-2.6] / include / asm-powerpc / spu_priv1.h
index cb87d1f..25020a3 100644 (file)
 #define _SPU_PRIV1_H
 #if defined(__KERNEL__)
 
+#include <linux/types.h>
+
 struct spu;
+struct spu_context;
 
 /* access to priv1 registers */
 
-struct spu_priv1_ops
-{
+struct spu_priv1_ops {
        void (*int_mask_and) (struct spu *spu, int class, u64 mask);
        void (*int_mask_or) (struct spu *spu, int class, u64 mask);
        void (*int_mask_set) (struct spu *spu, int class, u64 mask);
        u64 (*int_mask_get) (struct spu *spu, int class);
        void (*int_stat_clear) (struct spu *spu, int class, u64 stat);
        u64 (*int_stat_get) (struct spu *spu, int class);
-       void (*int_route_set) (struct spu *spu, u64 route);
+       void (*cpu_affinity_set) (struct spu *spu, int cpu);
        u64 (*mfc_dar_get) (struct spu *spu);
        u64 (*mfc_dsisr_get) (struct spu *spu);
        void (*mfc_dsisr_set) (struct spu *spu, u64 dsisr);
-       void (*mfc_sdr_set) (struct spu *spu, u64 sdr);
+       void (*mfc_sdr_setup) (struct spu *spu);
        void (*mfc_sr1_set) (struct spu *spu, u64 sr1);
        u64 (*mfc_sr1_get) (struct spu *spu);
        void (*mfc_tclass_id_set) (struct spu *spu, u64 tclass_id);
@@ -88,9 +90,9 @@ spu_int_stat_get (struct spu *spu, int class)
 }
 
 static inline void
-spu_int_route_set (struct spu *spu, u64 route)
+spu_cpu_affinity_set (struct spu *spu, int cpu)
 {
-       spu_priv1_ops->int_stat_get(spu, route);
+       spu_priv1_ops->cpu_affinity_set(spu, cpu);
 }
 
 static inline u64
@@ -112,9 +114,9 @@ spu_mfc_dsisr_set (struct spu *spu, u64 dsisr)
 }
 
 static inline void
-spu_mfc_sdr_set (struct spu *spu, u64 sdr)
+spu_mfc_sdr_setup (struct spu *spu)
 {
-       spu_priv1_ops->mfc_sdr_set(spu, sdr);
+       spu_priv1_ops->mfc_sdr_setup(spu);
 }
 
 static inline void
@@ -171,12 +173,64 @@ spu_resource_allocation_enable_get (struct spu *spu)
        return spu_priv1_ops->resource_allocation_enable_get(spu);
 }
 
-/* The declarations folowing are put here for convenience
- * and only intended to be used by the platform setup code
- * for initializing spu_priv1_ops.
+/* spu management abstraction */
+
+struct spu_management_ops {
+       int (*enumerate_spus)(int (*fn)(void *data));
+       int (*create_spu)(struct spu *spu, void *data);
+       int (*destroy_spu)(struct spu *spu);
+       void (*enable_spu)(struct spu_context *ctx);
+       void (*disable_spu)(struct spu_context *ctx);
+       int (*init_affinity)(void);
+};
+
+extern const struct spu_management_ops* spu_management_ops;
+
+static inline int
+spu_enumerate_spus (int (*fn)(void *data))
+{
+       return spu_management_ops->enumerate_spus(fn);
+}
+
+static inline int
+spu_create_spu (struct spu *spu, void *data)
+{
+       return spu_management_ops->create_spu(spu, data);
+}
+
+static inline int
+spu_destroy_spu (struct spu *spu)
+{
+       return spu_management_ops->destroy_spu(spu);
+}
+
+static inline int
+spu_init_affinity (void)
+{
+       return spu_management_ops->init_affinity();
+}
+
+static inline void
+spu_enable_spu (struct spu_context *ctx)
+{
+       spu_management_ops->enable_spu(ctx);
+}
+
+static inline void
+spu_disable_spu (struct spu_context *ctx)
+{
+       spu_management_ops->disable_spu(ctx);
+}
+
+/*
+ * The declarations folowing are put here for convenience
+ * and only intended to be used by the platform setup code.
  */
 
 extern const struct spu_priv1_ops spu_priv1_mmio_ops;
+extern const struct spu_priv1_ops spu_priv1_beat_ops;
+
+extern const struct spu_management_ops spu_management_of_ops;
 
 #endif /* __KERNEL__ */
 #endif