annotate TaskManager/Cell/spe/CellDmaManager.cc @ 249:eeb859bc39f1 draft

no move
author e065746@localhost.localdomain
date Tue, 02 Jun 2009 21:38:30 +0900 (2009-06-02)
parents 23e76c5369b7
children 443f36ba43a8
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
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
5 unsigned int CellDmaManager::wait_time, CellDmaManager::busy_time;
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
6 unsigned long long CellDmaManager::global_busy_time, CellDmaManager::global_wait_time;
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
7
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
8 /**
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
9 * DMA Load
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
10 *
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
11 * @param[in] buf Buffer of Load Data
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
12 * @param[in] addr Address of Load Data at Main Memory
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
13 * @param[in] size Size of Load Data
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
14 * @param[in] mask DMA tag
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
15 */
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
16 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
17 CellDmaManager::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
18 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
19 if (size == 0) return ;
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
20 mfc_get((volatile void *)buf, addr, size, mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
21 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
22
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
23 /**
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
24 * DMA Store
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
25 *
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
26 * @param[in] buf Buffer of Store Data at SPE
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
27 * @param[in] addr Address of Store Data at Main Memory
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
28 * @param[in] size Size of Store Data
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
29 * @param[in] mask DMA tag
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
30 */
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
31 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
32 CellDmaManager::dma_store(void *buf, uint32 addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
33 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
34 if (size == 0) return ;
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
35 mfc_put((volatile void *)buf, addr, size, mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
36 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
37
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
38 /**
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
39 * DMA Wait
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
40 *
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
41 * @param[in] mask Tag for Wait DMA process
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
42 */
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
43
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
44 static void
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
45 CellDmaManager::start_dmawait_profile()
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
46 {
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
47 wait_time = spu_readch(SPU_RdDec);
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
48 // global 変数にする
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
49 global_busy_time += busy_time - wait_time;
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
50 spu_writech(SPU_WrDec, 0xffffffff);
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
51 }
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
52
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
53 static void
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
54 CellDmaManager::end_dmawait_profile()
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
55 {
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
56 wait_time = spu_readch(SPU_RdDec);
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
57 // global 変数にする
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
58 global_wait_time += 0xffffffff - wait_time;
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
59 busy_time = wait_time;
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
60 }
239
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
61
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
62 void
249
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
63 CellDmaManager::print_wait()
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
64 {
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
65 }
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
66
eeb859bc39f1 no move
e065746@localhost.localdomain
parents: 242
diff changeset
67 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
68 CellDmaManager::dma_wait(uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
69 {
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
70 #ifdef SPU_PROFILE
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
71 start_dmawait_profile();
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
72 #endif
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
73 mfc_write_tag_mask(1 << mask);
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
74 mfc_write_tag_update_all();
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
75 mfc_read_tag_status();
242
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
76 #ifdef SPU_PROFILE
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
77 end_dmawait_profile();
23e76c5369b7 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
78 #endif
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
79 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
80
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
81 void
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
82 CellDmaManager::mail_write(uint32 data)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
83 {
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
84 spu_write_out_mbox(data);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
85 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
86
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
87 unsigned int
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
88 CellDmaManager::mail_read(void)
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
89 {
180
e3b7776b1420 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
90 unsigned int mail = spu_read_in_mbox();
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
91 return mail;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
92 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
93
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
94 void
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
95 CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
96 {
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
97 mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
98 mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
99 }
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
100
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
101 void
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
102 CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
103 {
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
104 mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
105 mask, 0, 0);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 88
diff changeset
106 }