예제 #1
0
파일: spu.c 프로젝트: vitalyvch/MPAC
int main(unsigned long long spe_id, unsigned long long program_data_ea,unsigned long long env)
{
	char array[MAX] __attribute__((aligned(128)));
	int func,dma_count;
	unsigned int tag = 1,count,k,byte_size,chunk_size, transfered_size,dest_inc;
	unsigned int count1,add_inc;
	unsigned long int rep;
	char arr[MAX];
	unsigned long int array_size = 32768;
	unsigned long int data_size;
	spu_write_decrementer(0);
	rep = spu_read_in_mbox();
	data_size = spu_read_in_mbox();
	func = spu_read_in_mbox();
	byte_size = data_size;
	k = byte_size - MAX;
	chunk_size = byte_size;
	mfc_get(array, (unsigned int)program_data_ea, chunk_size, tag, 0, 0);
	mfc_write_tag_mask(1<<tag);                     
	mfc_read_tag_status_any();
	for(count = 0; count < rep;count++)
	for(count1 = 0 ; count1 < chunk_size ; count1++)
	{
		arr[count1%array_size] = array[count1];
	}
	return 0;
}
예제 #2
0
파일: spu_dma.c 프로젝트: ALaDyn/psc
void
wait_tagid(int tagid)
{
  assert(tagid >= 0 && tagid < MAX_TAGID);
  assert(tagmask & (1 << tagid));
  // Assign what tagid to look for 
  mfc_write_tag_mask(1 << tagid);
  // Wait until the previously indicated tagid
  // is done transfering. 
  unsigned int mask = mfc_read_tag_status_any();

  // the openggcm implementation has 
  // some other stuff here. I'm not 
  // sure it's needed for psc. 

}