0001
0002
0003
0004
0005
0006
0007
0008 #if !defined(_SPU_PRIV1_H)
0009 #define _SPU_PRIV1_H
0010 #if defined(__KERNEL__)
0011
0012 #include <linux/types.h>
0013
0014 struct spu;
0015 struct spu_context;
0016
0017
0018
0019 struct spu_priv1_ops {
0020 void (*int_mask_and) (struct spu *spu, int class, u64 mask);
0021 void (*int_mask_or) (struct spu *spu, int class, u64 mask);
0022 void (*int_mask_set) (struct spu *spu, int class, u64 mask);
0023 u64 (*int_mask_get) (struct spu *spu, int class);
0024 void (*int_stat_clear) (struct spu *spu, int class, u64 stat);
0025 u64 (*int_stat_get) (struct spu *spu, int class);
0026 void (*cpu_affinity_set) (struct spu *spu, int cpu);
0027 u64 (*mfc_dar_get) (struct spu *spu);
0028 u64 (*mfc_dsisr_get) (struct spu *spu);
0029 void (*mfc_dsisr_set) (struct spu *spu, u64 dsisr);
0030 void (*mfc_sdr_setup) (struct spu *spu);
0031 void (*mfc_sr1_set) (struct spu *spu, u64 sr1);
0032 u64 (*mfc_sr1_get) (struct spu *spu);
0033 void (*mfc_tclass_id_set) (struct spu *spu, u64 tclass_id);
0034 u64 (*mfc_tclass_id_get) (struct spu *spu);
0035 void (*tlb_invalidate) (struct spu *spu);
0036 void (*resource_allocation_groupID_set) (struct spu *spu, u64 id);
0037 u64 (*resource_allocation_groupID_get) (struct spu *spu);
0038 void (*resource_allocation_enable_set) (struct spu *spu, u64 enable);
0039 u64 (*resource_allocation_enable_get) (struct spu *spu);
0040 };
0041
0042 extern const struct spu_priv1_ops* spu_priv1_ops;
0043
0044 static inline void
0045 spu_int_mask_and (struct spu *spu, int class, u64 mask)
0046 {
0047 spu_priv1_ops->int_mask_and(spu, class, mask);
0048 }
0049
0050 static inline void
0051 spu_int_mask_or (struct spu *spu, int class, u64 mask)
0052 {
0053 spu_priv1_ops->int_mask_or(spu, class, mask);
0054 }
0055
0056 static inline void
0057 spu_int_mask_set (struct spu *spu, int class, u64 mask)
0058 {
0059 spu_priv1_ops->int_mask_set(spu, class, mask);
0060 }
0061
0062 static inline u64
0063 spu_int_mask_get (struct spu *spu, int class)
0064 {
0065 return spu_priv1_ops->int_mask_get(spu, class);
0066 }
0067
0068 static inline void
0069 spu_int_stat_clear (struct spu *spu, int class, u64 stat)
0070 {
0071 spu_priv1_ops->int_stat_clear(spu, class, stat);
0072 }
0073
0074 static inline u64
0075 spu_int_stat_get (struct spu *spu, int class)
0076 {
0077 return spu_priv1_ops->int_stat_get (spu, class);
0078 }
0079
0080 static inline void
0081 spu_cpu_affinity_set (struct spu *spu, int cpu)
0082 {
0083 spu_priv1_ops->cpu_affinity_set(spu, cpu);
0084 }
0085
0086 static inline u64
0087 spu_mfc_dar_get (struct spu *spu)
0088 {
0089 return spu_priv1_ops->mfc_dar_get(spu);
0090 }
0091
0092 static inline u64
0093 spu_mfc_dsisr_get (struct spu *spu)
0094 {
0095 return spu_priv1_ops->mfc_dsisr_get(spu);
0096 }
0097
0098 static inline void
0099 spu_mfc_dsisr_set (struct spu *spu, u64 dsisr)
0100 {
0101 spu_priv1_ops->mfc_dsisr_set(spu, dsisr);
0102 }
0103
0104 static inline void
0105 spu_mfc_sdr_setup (struct spu *spu)
0106 {
0107 spu_priv1_ops->mfc_sdr_setup(spu);
0108 }
0109
0110 static inline void
0111 spu_mfc_sr1_set (struct spu *spu, u64 sr1)
0112 {
0113 spu_priv1_ops->mfc_sr1_set(spu, sr1);
0114 }
0115
0116 static inline u64
0117 spu_mfc_sr1_get (struct spu *spu)
0118 {
0119 return spu_priv1_ops->mfc_sr1_get(spu);
0120 }
0121
0122 static inline void
0123 spu_mfc_tclass_id_set (struct spu *spu, u64 tclass_id)
0124 {
0125 spu_priv1_ops->mfc_tclass_id_set(spu, tclass_id);
0126 }
0127
0128 static inline u64
0129 spu_mfc_tclass_id_get (struct spu *spu)
0130 {
0131 return spu_priv1_ops->mfc_tclass_id_get(spu);
0132 }
0133
0134 static inline void
0135 spu_tlb_invalidate (struct spu *spu)
0136 {
0137 spu_priv1_ops->tlb_invalidate(spu);
0138 }
0139
0140 static inline void
0141 spu_resource_allocation_groupID_set (struct spu *spu, u64 id)
0142 {
0143 spu_priv1_ops->resource_allocation_groupID_set(spu, id);
0144 }
0145
0146 static inline u64
0147 spu_resource_allocation_groupID_get (struct spu *spu)
0148 {
0149 return spu_priv1_ops->resource_allocation_groupID_get(spu);
0150 }
0151
0152 static inline void
0153 spu_resource_allocation_enable_set (struct spu *spu, u64 enable)
0154 {
0155 spu_priv1_ops->resource_allocation_enable_set(spu, enable);
0156 }
0157
0158 static inline u64
0159 spu_resource_allocation_enable_get (struct spu *spu)
0160 {
0161 return spu_priv1_ops->resource_allocation_enable_get(spu);
0162 }
0163
0164
0165
0166 struct spu_management_ops {
0167 int (*enumerate_spus)(int (*fn)(void *data));
0168 int (*create_spu)(struct spu *spu, void *data);
0169 int (*destroy_spu)(struct spu *spu);
0170 void (*enable_spu)(struct spu_context *ctx);
0171 void (*disable_spu)(struct spu_context *ctx);
0172 int (*init_affinity)(void);
0173 };
0174
0175 extern const struct spu_management_ops* spu_management_ops;
0176
0177 static inline int
0178 spu_enumerate_spus (int (*fn)(void *data))
0179 {
0180 return spu_management_ops->enumerate_spus(fn);
0181 }
0182
0183 static inline int
0184 spu_create_spu (struct spu *spu, void *data)
0185 {
0186 return spu_management_ops->create_spu(spu, data);
0187 }
0188
0189 static inline int
0190 spu_destroy_spu (struct spu *spu)
0191 {
0192 return spu_management_ops->destroy_spu(spu);
0193 }
0194
0195 static inline int
0196 spu_init_affinity (void)
0197 {
0198 return spu_management_ops->init_affinity();
0199 }
0200
0201 static inline void
0202 spu_enable_spu (struct spu_context *ctx)
0203 {
0204 spu_management_ops->enable_spu(ctx);
0205 }
0206
0207 static inline void
0208 spu_disable_spu (struct spu_context *ctx)
0209 {
0210 spu_management_ops->disable_spu(ctx);
0211 }
0212
0213
0214
0215
0216
0217
0218 extern const struct spu_priv1_ops spu_priv1_mmio_ops;
0219 extern const struct spu_priv1_ops spu_priv1_beat_ops;
0220
0221 extern const struct spu_management_ops spu_management_of_ops;
0222
0223 #endif
0224 #endif