Changeset 246 for soft/giet_vm/sys/drivers.c
- Timestamp:
- Jul 9, 2013, 3:54:53 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
soft/giet_vm/sys/drivers.c
r238 r246 248 248 249 249 250 //////////////////////////////////////////////// 250 251 /////////////////////////////////////////////////////////////////////// 251 252 // _timer_reset_irq_cpt() 252 //////////////////////////////////////////////// 253 //unsigned int _timer_reset_irq_cpt(unsigned int cluster_id, unsigned int local_id) { 254 // // parameters checking 255 // if (cluster_id >= NB_CLUSTERS) { 256 // return 1; 257 // } 258 // if (local_id >= NB_TIM_CHANNELS) { 259 // return 2; 260 // } 261 // 262 //#if USE_XICU 263 //#error // not implemented 264 //#else 265 // unsigned int * timer_address = (unsigned int *) ((char *) &seg_tim_base + (cluster_id * GIET_CLUSTER_INCREMENT)); 266 // unsigned int timer_period = timer_address[local_id * TIMER_SPAN + TIMER_PERIOD]; 267 // 268 // timer_address[local_id * TIMER_SPAN + TIMER_PERIOD] = timer_period; 269 //#endif 270 // 271 // return 0; 272 //} 253 /////////////////////////////////////////////////////////////////////// 254 // This function resets the period at the end of which 255 // an interrupt is sent. To do so, we re-write the period 256 // ini the proper register, what causes the count to restart. 257 // The period value is read from the same (TIMER_PERIOD) register, 258 // this is why in appearance we do nothing useful (read a value 259 // from a register and write this value in the same register) 260 // This function is called during a context switch (user or preemptive) 261 /////////////////////////////////////////////////////////////////////// 262 unsigned int _timer_reset_irq_cpt(unsigned int cluster_id, unsigned int local_id) { 263 // parameters checking 264 if (cluster_id >= NB_CLUSTERS) { 265 return 1; 266 } 267 if (local_id >= NB_TIM_CHANNELS) { 268 return 2; 269 } 270 271 #if USE_XICU 272 unsigned int * timer_address = (unsigned int *) ((char *) &seg_icu_base + (cluster_id * GIET_CLUSTER_INCREMENT)); 273 unsigned int timer_period = timer_address[XICU_REG(XICU_PTI_PER, local_id)]; 274 275 // we write 0 first because if the timer is currently running, the corresponding timer counter is not reset 276 timer_address[XICU_REG(XICU_PTI_PER, local_id)] = 0; 277 timer_address[XICU_REG(XICU_PTI_PER, local_id)] = timer_period; 278 #else 279 // We suppose that the TIMER_MODE register value is 0x3 280 unsigned int * timer_address = (unsigned int *) ((char *) &seg_tim_base + (cluster_id * GIET_CLUSTER_INCREMENT)); 281 unsigned int timer_period = timer_address[local_id * TIMER_SPAN + TIMER_PERIOD]; 282 283 timer_address[local_id * TIMER_SPAN + TIMER_PERIOD] = timer_period; 284 #endif 285 286 return 0; 287 } 273 288 274 289 … … 599 614 unsigned int buf_xaddr = 0; // user buffer virtual address in IO space (if IOMMU) 600 615 paddr_t buf_paddr = 0; // user buffer physical address (if no IOMMU), 601 616 602 617 // check buffer alignment 603 618 if ((unsigned int) user_vaddr & 0x3) … … 626 641 { 627 642 // get ppn and flags for each vpn 628 unsigned int ko = _v2p_translate( (page_table_t*)user_pt_vbase,629 vpn,630 &ppn,631 643 unsigned int ko = _v2p_translate((page_table_t *) user_pt_vbase, 644 vpn, 645 &ppn, 646 &flags); 632 647 // check access rights 633 if (ko) 648 if (ko) 634 649 { 635 650 _get_lock(&_tty_put_lock); … … 1254 1269 // - length : number of bytes to be transfered. 1255 1270 ////////////////////////////////////////////////////////////////////////////////// 1256 unsigned int _fb_sync_write( unsigned int offset, 1257 const void* buffer, 1258 unsigned int length) 1259 { 1260 unsigned char* fb_address = (unsigned char *) &seg_fbf_base + offset; 1271 1272 unsigned int _fb_sync_write(unsigned int offset, 1273 const void * buffer, 1274 unsigned int length) 1275 { 1276 unsigned char * fb_address = (unsigned char *) &seg_fbf_base + offset; 1261 1277 memcpy((void *) fb_address, (void *) buffer, length); 1262 1278 return 0;
Note: See TracChangeset
for help on using the changeset viewer.