- Timestamp:
- Aug 2, 2017, 3:24:57 PM (7 years ago)
- Location:
- trunk/hal
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/generic/hal_gpt.h
r41 r313 168 168 169 169 /**************************************************************************************** 170 * This function copies all valid entries from the source <src_gpt> to the <dst_ pgt>.170 * This function copies all valid entries from the source <src_gpt> to the <dst_gpt>. 171 171 * The <src_gpt> and the <dst_gpt> point on the same physical pages. 172 172 * If the <cow> argument is true, the GPT_WRITABLE attribute is reset for all writable -
trunk/hal/generic/hal_ppm.h
r296 r313 62 62 void hal_core_init( boot_info_t * info ); 63 63 64 /***************************************************************************************** 65 * This function returns the PPN from the page descriptor extended pointer. 66 ***************************************************************************************** 67 * @ page_xp : pointer to page descriptor 68 * @ returns physical page number 69 ****************************************************************************************/ 70 inline ppn_t hal_page2ppn( xptr_t page_xp ); 64 71 72 /***************************************************************************************** 73 * This function returns the page descriptor extended pointer from the PPN. 74 ***************************************************************************************** 75 * @ ppn : physical page number 76 * @ returns extended pointer on page descriptor 77 ****************************************************************************************/ 78 inline xptr_t hal_ppn2page( ppn_t ppn ); 65 79 66 80 #endif /* HAL_PPM_H_ */ -
trunk/hal/generic/hal_remote.h
r121 r313 184 184 xptr_t src ); 185 185 186 /***************************************************************************************** 187 * This function makes a memset to a remote buffer in kernel space. 188 ***************************************************************************************** 189 * @ buf_xp : extended pointer to destination buffer. 190 * @ byte : Rvalue to be set in all buffer slots. 191 * @ size : number of bytes to move. 192 ****************************************************************************************/ 193 void hal_remote_memset( xptr_t buf_xp, 194 uint8_t byte, 195 uint32_t size ); 196 186 197 #endif /* _HAL_REMOTE_H_ */ -
trunk/hal/tsar_mips32/core/hal_ppm.c
r296 r313 35 35 36 36 ////////////////////////////////////////////////////////////////////////////////////////// 37 // This file contains the TSAR specific code for cores registers, 38 // and for physical memory allocators initialisation in a given cluster. 39 37 // This file contains the TSAR specific code for : 38 // - cores registers initialisation, 39 // - memory allocators initialisation. 40 // 40 41 // For The TSAR architecture, the kernel pointers are identity mapped: 41 42 // - the 32 bits PTR value is identical to the 32 bits LPA value, … … 133 134 134 135 } // end hal_core_init() 136 137 /////////////////////////////////////////// 138 inline ppn_t hal_page2ppn( xptr_t page_xp ) 139 { 140 ppm_t * ppm = &LOCAL_CLUSTER->ppm; 141 142 cxy_t page_cxy = GET_CXY( page_xp ); 143 page_t * page_ptr = (page_t *)GET_PTR( page_xp ); 144 145 return (ppn_t)(page_ptr - ppm->pages_tbl) | (ppn_t)(page_cxy << 20); 146 147 } // end hal_page2ppn() 148 149 //////////////////////////////////////// 150 inline xptr_t hal_ppn2page( ppn_t ppn ) 151 { 152 ppm_t * ppm = &LOCAL_CLUSTER->ppm; 153 154 cxy_t page_cxy = (ppn & 0xFFF00000) >> 20; 155 page_t * page_ptr = &ppm->pages_tbl[ppn & 0x000FFFFF]; 156 157 return XPTR( page_xy , page_ptr ); 158 159 } // end hal_ppn2page 160 161 -
trunk/hal/tsar_mips32/core/hal_remote.c
r296 r313 447 447 448 448 } // end hal_remote_strcpy() 449 450 //////////////////////////////////////// 451 void hal_remote_memset( xptr_t buf_xp, 452 uint8_t byte, 453 uint32_t size ) 454 { 455 uint32_t save_sr; 456 uint32_t i; 457 uint32_t wsize; 458 uint32_t buf_ptr = (uint32_t)GET_PTR( buf_xp ); 459 uint32_t buf_cxy = (uint32_t)GET_CXY( buf_xp ); 460 uint32_t word = ((uint32_t)byte)<<24 | 461 ((uint32_t)byte)<<16 | 462 ((uint32_t)byte)<<8 | 463 ((uint32_t)byte) ; 464 465 hal_disable_irq( &save_sr ); 466 467 if( (buf_ptr & 0x3) ) wsize = 0; // do it all in bytes 468 else wsize = size >> 2; 469 470 for( i = 0 ; i < wsize ; i++ ) // transfer one word per iteration 471 { 472 asm volatile( 473 ".set noreorder \n" 474 "mfc2 $15, $24 \n" /* $15 <= PADDR_EXT */ 475 "mtc2 %0, $24 \n" /* PADDR_EXT <= buf_cxy */ 476 "sw %2, 0(%1) \n" /* set one word */ 477 "mtc2 $15, $24 \n" /* PADDR_EXT <= $15 */ 478 ".set reorder \n" 479 : : "r"(buf_cxy), "r" (buf_ptr+(i<<2)), "r"(byte) : "$15" ); 480 } 481 482 for( i = wsize << 2 ; i < size ; i++ ) // transfer one byte per iteration 483 { 484 asm volatile( 485 ".set noreorder \n" 486 "mfc2 $15, $24 \n" /* $15 <= PADDR_EXT */ 487 "mtc2 %0, $24 \n" /* PADDR_EXT <= buf_cxy */ 488 "sb %2, 0(%1) \n" /* set one byte */ 489 "mtc2 $15, $24 \n" /* PADDR_EXT <= $15 */ 490 ".set reorder \n" 491 : : "r"(buf_cxy), "r"(buf_ptr+i), "r"(word) : "$15" ); 492 } 493 494 hal_restore_irq( save_sr ); 495 496 } // end hal_remote_memset() 497
Note: See TracChangeset
for help on using the changeset viewer.