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; }
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; }