diff options
Diffstat (limited to 'arch/powerpc/platforms/cell/spufs/spufs.h')
-rw-r--r-- | arch/powerpc/platforms/cell/spufs/spufs.h | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/cell/spufs/spufs.h b/arch/powerpc/platforms/cell/spufs/spufs.h index db2601f0abd5..4485738e2102 100644 --- a/arch/powerpc/platforms/cell/spufs/spufs.h +++ b/arch/powerpc/platforms/cell/spufs/spufs.h | |||
@@ -43,7 +43,11 @@ struct spu_context { | |||
43 | struct spu *spu; /* pointer to a physical SPU */ | 43 | struct spu *spu; /* pointer to a physical SPU */ |
44 | struct spu_state csa; /* SPU context save area. */ | 44 | struct spu_state csa; /* SPU context save area. */ |
45 | spinlock_t mmio_lock; /* protects mmio access */ | 45 | spinlock_t mmio_lock; /* protects mmio access */ |
46 | struct address_space *local_store;/* local store backing store */ | 46 | struct address_space *local_store; /* local store mapping. */ |
47 | struct address_space *mfc; /* 'mfc' area mappings. */ | ||
48 | struct address_space *cntl; /* 'control' area mappings. */ | ||
49 | struct address_space *signal1; /* 'signal1' area mappings. */ | ||
50 | struct address_space *signal2; /* 'signal2' area mappings. */ | ||
47 | 51 | ||
48 | enum { SPU_STATE_RUNNABLE, SPU_STATE_SAVED } state; | 52 | enum { SPU_STATE_RUNNABLE, SPU_STATE_SAVED } state; |
49 | struct rw_semaphore state_sema; | 53 | struct rw_semaphore state_sema; |
@@ -55,13 +59,27 @@ struct spu_context { | |||
55 | wait_queue_head_t ibox_wq; | 59 | wait_queue_head_t ibox_wq; |
56 | wait_queue_head_t wbox_wq; | 60 | wait_queue_head_t wbox_wq; |
57 | wait_queue_head_t stop_wq; | 61 | wait_queue_head_t stop_wq; |
62 | wait_queue_head_t mfc_wq; | ||
58 | struct fasync_struct *ibox_fasync; | 63 | struct fasync_struct *ibox_fasync; |
59 | struct fasync_struct *wbox_fasync; | 64 | struct fasync_struct *wbox_fasync; |
65 | struct fasync_struct *mfc_fasync; | ||
66 | u32 tagwait; | ||
60 | struct spu_context_ops *ops; | 67 | struct spu_context_ops *ops; |
61 | struct work_struct reap_work; | 68 | struct work_struct reap_work; |
62 | u64 flags; | 69 | u64 flags; |
63 | }; | 70 | }; |
64 | 71 | ||
72 | struct mfc_dma_command { | ||
73 | int32_t pad; /* reserved */ | ||
74 | uint32_t lsa; /* local storage address */ | ||
75 | uint64_t ea; /* effective address */ | ||
76 | uint16_t size; /* transfer size */ | ||
77 | uint16_t tag; /* command tag */ | ||
78 | uint16_t class; /* class ID */ | ||
79 | uint16_t cmd; /* command opcode */ | ||
80 | }; | ||
81 | |||
82 | |||
65 | /* SPU context query/set operations. */ | 83 | /* SPU context query/set operations. */ |
66 | struct spu_context_ops { | 84 | struct spu_context_ops { |
67 | int (*mbox_read) (struct spu_context * ctx, u32 * data); | 85 | int (*mbox_read) (struct spu_context * ctx, u32 * data); |
@@ -84,6 +102,11 @@ struct spu_context_ops { | |||
84 | char*(*get_ls) (struct spu_context * ctx); | 102 | char*(*get_ls) (struct spu_context * ctx); |
85 | void (*runcntl_write) (struct spu_context * ctx, u32 data); | 103 | void (*runcntl_write) (struct spu_context * ctx, u32 data); |
86 | void (*runcntl_stop) (struct spu_context * ctx); | 104 | void (*runcntl_stop) (struct spu_context * ctx); |
105 | int (*set_mfc_query)(struct spu_context * ctx, u32 mask, u32 mode); | ||
106 | u32 (*read_mfc_tagstatus)(struct spu_context * ctx); | ||
107 | u32 (*get_mfc_free_elements)(struct spu_context *ctx); | ||
108 | int (*send_mfc_command)(struct spu_context *ctx, | ||
109 | struct mfc_dma_command *cmd); | ||
87 | }; | 110 | }; |
88 | 111 | ||
89 | extern struct spu_context_ops spu_hw_ops; | 112 | extern struct spu_context_ops spu_hw_ops; |
@@ -106,7 +129,7 @@ long spufs_create_thread(struct nameidata *nd, | |||
106 | extern struct file_operations spufs_context_fops; | 129 | extern struct file_operations spufs_context_fops; |
107 | 130 | ||
108 | /* context management */ | 131 | /* context management */ |
109 | struct spu_context * alloc_spu_context(struct address_space *local_store); | 132 | struct spu_context * alloc_spu_context(void); |
110 | void destroy_spu_context(struct kref *kref); | 133 | void destroy_spu_context(struct kref *kref); |
111 | struct spu_context * get_spu_context(struct spu_context *ctx); | 134 | struct spu_context * get_spu_context(struct spu_context *ctx); |
112 | int put_spu_context(struct spu_context *ctx); | 135 | int put_spu_context(struct spu_context *ctx); |
@@ -159,5 +182,6 @@ size_t spu_ibox_read(struct spu_context *ctx, u32 *data); | |||
159 | void spufs_ibox_callback(struct spu *spu); | 182 | void spufs_ibox_callback(struct spu *spu); |
160 | void spufs_wbox_callback(struct spu *spu); | 183 | void spufs_wbox_callback(struct spu *spu); |
161 | void spufs_stop_callback(struct spu *spu); | 184 | void spufs_stop_callback(struct spu *spu); |
185 | void spufs_mfc_callback(struct spu *spu); | ||
162 | 186 | ||
163 | #endif | 187 | #endif |