annotate TaskManager/kernel/ppe/MailManager.cc @ 647:7c9ded1ea750

MailManager rewrite. not yet worked.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 Nov 2009 16:18:47 +0900
parents 5e1a477fcaec
children 55f898a58748
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
1 #include <stdlib.h>
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
2 #include "MailManager.h"
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
3
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
4 void
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
5 MailManager::calc_mask(unsigned int qsize)
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
6 {
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
7 mask = 1;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
8 while((qsize>>= 1)>0) {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
9 mask <<= 1;
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
10 }
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
11 size = mask;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
12 mask--;
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
13 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
14
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
15 MailManager::MailManager(unsigned int qsize) {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
16 calc_mask(qsize);
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
17 queue = New(memaddr,size);
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
18 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
19
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
20 MailManager::~MailManager() { free(queue); }
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
21
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
22 int
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
23 MailManager::count()
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
24 {
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
25 return (write+size-read)&mask;
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
26 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
27
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
28 void
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
29 MailManager::send(memaddr data)
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
30 {
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
31 queue[write++] = data;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
32 if (write==read) {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
33
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
34 calc_mask(size*2);
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
35
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
36 memaddr *newq = New(memaddr,size);
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
37 int i;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
38 while(count()>0) {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
39 newq[i++] = recv();
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
40 }
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
41 read = 0; write = i;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
42 free(queue);
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
43 queue = newq;
194
gongo@localhost.localdomain
parents: 50
diff changeset
44 }
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
45 write &= mask;
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
46 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
47
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
48 memaddr
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
49 MailManager::recv()
640
a909c50081c2 SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
50 {
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
51 memaddr data;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
52 if (count()>0) {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
53 data = queue[read++];
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
54 read &= mask;
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
55 } else {
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
56 data = 0;
640
a909c50081c2 SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
57 }
647
7c9ded1ea750 MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 644
diff changeset
58 return data;
643
bffdede05f1e minor fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 640
diff changeset
59 }
bffdede05f1e minor fix.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 640
diff changeset
60
640
a909c50081c2 SimpeTask on Cell worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 603
diff changeset
61 /* end */