示例#1
0
文件: dsc.c 项目: RajalakshmiS/paflib
int
paf_dsc_get(uint64_t *dscr)
{
  if (*dscr_support_mask == 0)
    {
      errno = ENOSYS;
      return -1;
    }

  *dscr = mfspr_dscr(dscr_sprn);

  DEBUG("get 0x%" PRIx64, *dscr);
  return 0;
}
示例#2
0
int prefetch_randomise_dscr(unsigned long long random_number, unsigned int what, unsigned int thread_no) {

/*
   Structure of DSCR
   +------------+-------+-------+-------+-------+-------+-------+-----------+-------+-------+-------+-------+-------+
   |    //      |  SWTE | HWTE  |  STE  |  LTE  | SWUE  | HWUE  |  UNIT CNT |  URG  |  LSD  | SNSE  |  SSE  | DPFD  |
   +------------+-------+-------+-------+-------+-------+-------+-----------+-------+-------+-------+-------+-------+
   0          3839      40      41      42      43      44      45        5455	  5758      59      60      61      63
 */

	unsigned long long 		local_random_number;
	unsigned long long	read_dscr;
	int rc = 0;

	mfspr_dscr(&read_dscr);
	th_array[thread_no].read_dscr_val = read_dscr;
	switch ( what ) {
		case DSCR_RANDOM:
			mtspr_dscr(random_number);
			th_array[thread_no].written_dscr_val = random_number;
			rc = 0;
			break;
		case DSCR_LSDISABLE:
			local_random_number = random_number | (0x1<<5);
			mtspr_dscr(random_number);
			th_array[thread_no].written_dscr_val = random_number;
#ifdef DEBUG
			printf("[%d] Original random number = 0x%x , After setting 58th bit = 0x%x\n",__LINE__,random_number,local_random_number);
#endif
			rc = 0;
			break;
		case DSCR_DEFAULT:
			break;
		default:
			sprintf(msg,"[%d] Wrong parameter = %d\n", __LINE__, what);
			hxfmsg(&h_d, -1, HTX_HE_HARD_ERROR, msg);
			rc = -1;
			break;
	}
	/*sleep (1);*/
	return rc;
}