annotate TaskManager/Cell/spe/CellDmaManager.cc @ 273:3e9c0039e15c

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 04 Jun 2009 00:12:47 +0900
parents f872cc000fe0
children 87462f8d3761
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
6bc72fde6615 *** empty log message ***
gongo
parents: 59
diff changeset
1 #include <stdio.h>
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
2 #include <stdlib.h>
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
3 #include "CellDmaManager.h"
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
4
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
5 /**
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
6 * DMA Load
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
7 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
8 * @param[in] buf Buffer of Load Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
9 * @param[in] addr Address of Load Data at Main Memory
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
10 * @param[in] size Size of Load Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
11 * @param[in] mask DMA tag
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
12 */
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
13 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
14 CellDmaManager::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
15 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
16 if (size == 0) return ;
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
17 mfc_get((volatile void *)buf, addr, size, mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
18 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
19
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
20 /**
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
21 * DMA Store
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
22 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
23 * @param[in] buf Buffer of Store Data at SPE
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
24 * @param[in] addr Address of Store Data at Main Memory
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
25 * @param[in] size Size of Store Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
26 * @param[in] mask DMA tag
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
27 */
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
28 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
29 CellDmaManager::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
30 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
31 if (size == 0) return ;
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
32 mfc_put((volatile void *)buf, addr, size, mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
33 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
34
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
35 /**
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
36 * DMA Wait
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
37 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
38 * @param[in] mask Tag for Wait DMA process
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
39 */
273
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
40 void
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
41 CellDmaManager::start_dmawait_profile()
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
42 {
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
43 wait_time = spu_readch(SPU_RdDec);
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
44 global_busy_time += busy_time - wait_time;
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
45 spu_writech(SPU_WrDec, 0xffffffff);
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
46 }
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
47
273
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
48 void
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
49 CellDmaManager::end_dmawait_profile()
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
50 {
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
51 wait_time = spu_readch(SPU_RdDec);
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
52 global_wait_time += 0xffffffff - wait_time;
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
53 busy_time = wait_time;
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
54 }
239
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
55
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
56 void
255
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
57 CellDmaManager::show_dma_wait(int cpu)
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
58 {
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
59
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
60 printf("spu%d: global_wait_time = %lld\n",cpu, global_wait_time);
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
61 printf("spu%d: global_busy_time = %lld\n",cpu, global_busy_time);
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
62 printf("spu%d: busy_ratio = %g%%\n",cpu,
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
63 ((double)global_busy_time)/((double)(global_busy_time+global_wait_time))*100.0);
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
64 }
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
65
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
66 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
67 CellDmaManager::dma_wait(uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
68 {
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
69 #ifdef SPU_PROFILE
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
70 start_dmawait_profile();
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
71 #endif
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
72 mfc_write_tag_mask(1 << mask);
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
73 mfc_write_tag_update_all();
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
74 mfc_read_tag_status();
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
75 #ifdef SPU_PROFILE
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
76 end_dmawait_profile();
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
77 #endif
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
78 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
79
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
80 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
81 CellDmaManager::mail_write(uint32 data)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
82 {
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
83 spu_write_out_mbox(data);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
84 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
85
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
86 unsigned int
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
87 CellDmaManager::mail_read(void)
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
88 {
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
89 unsigned int mail = spu_read_in_mbox();
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
90 return mail;
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
91 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
92
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
93 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
94 CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
95 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
96 mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
97 mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
98 }
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
99
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
100 void
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
101 CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
102 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
103 mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
104 mask, 0, 0);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
105 }