Changeset 440 for trunk/hal/tsar_mips32/drivers
- Timestamp:
- May 3, 2018, 5:51:22 PM (7 years ago)
- Location:
- trunk/hal/tsar_mips32/drivers
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/tsar_mips32/drivers/soclib_bdv.c
r438 r440 66 66 // get client thread cluster and local pointer 67 67 cxy_t th_cxy = GET_CXY( th_xp ); 68 thread_t * th_ptr = (thread_t *)GET_PTR( th_xp );68 thread_t * th_ptr = GET_PTR( th_xp ); 69 69 70 70 // get command arguments and extended pointer on IOC device … … 91 91 // get IOC device cluster and local pointer 92 92 cxy_t ioc_cxy = GET_CXY( ioc_xp ); 93 chdev_t * ioc_ptr = (chdev_t *)GET_PTR( ioc_xp ); 94 95 // get extended pointer on SOCLIB-BDV peripheral 96 xptr_t bdv_xp = hal_remote_lw( XPTR( ioc_cxy , &ioc_ptr->base ) ); 97 98 // get SOCLIB_BDV device cluster and local pointer 99 cxy_t bdv_cxy = GET_CXY( bdv_xp ); 100 uint32_t * bdv_ptr = (uint32_t *)GET_PTR( bdv_xp ); 93 chdev_t * ioc_ptr = GET_PTR( ioc_xp ); 94 95 // get cluster and pointers for SOCLIB-BDV peripheral segment base 96 xptr_t seg_xp = (xptr_t)hal_remote_lwd( XPTR( ioc_cxy , &ioc_ptr->base ) ); 97 cxy_t seg_cxy = GET_CXY( seg_xp ); 98 uint32_t * seg_ptr = GET_PTR( seg_xp ); 101 99 102 100 // split buffer address in two 32 bits words … … 110 108 111 109 // set SOCLIB_BDV registers to start one I/O operation 112 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_IRQ_ENABLE_REG ) , 1 );113 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_BUFFER_REG ) , buf_lsb );114 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_BUFFER_EXT_REG ) , buf_msb );115 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_LBA_REG ) , lba );116 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_COUNT_REG ) , count );117 hal_remote_sw( XPTR( bdv_cxy , bdv_ptr + BDV_OP_REG ) , op );110 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_IRQ_ENABLE_REG ) , 1 ); 111 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_BUFFER_REG ) , buf_lsb ); 112 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_BUFFER_EXT_REG ) , buf_msb ); 113 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_LBA_REG ) , lba ); 114 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_COUNT_REG ) , count ); 115 hal_remote_sw( XPTR( seg_cxy , seg_ptr + BDV_OP_REG ) , op ); 118 116 119 117 // waiting policy depends on the command type … … 126 124 while (1) 127 125 { 128 status = hal_remote_lw( XPTR( bdv_cxy , bdv_ptr + BDV_STATUS_REG ) );126 status = hal_remote_lw( XPTR( seg_cxy , seg_ptr + BDV_STATUS_REG ) ); 129 127 130 128 if( status == BDV_READ_SUCCESS ) // successfully completed -
trunk/hal/tsar_mips32/drivers/soclib_hba.c
r437 r440 104 104 // get client thread cluster and local pointer 105 105 cxy_t th_cxy = GET_CXY( th_xp ); 106 thread_t * th_ptr = (thread_t *)GET_PTR( th_xp );106 thread_t * th_ptr = GET_PTR( th_xp ); 107 107 108 108 // get command arguments and extended pointer on IOC device … … 115 115 // get IOC device cluster and local pointer 116 116 cxy_t dev_cxy = GET_CXY( dev_xp ); 117 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp ); 118 119 // get extended pointer on SOCLIB-HBA peripheral 120 xptr_t hba_xp = hal_remote_lw( XPTR( dev_cxy , &dev_ptr->base ) ); 121 122 // get SOCLIB_HBA device cluster and local pointer 117 chdev_t * dev_ptr = GET_PTR( dev_xp ); 118 119 // get cluster and pointers for SOCLIB-HBA peripheral segment base 120 xptr_t hba_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) ); 123 121 cxy_t hba_cxy = GET_CXY( hba_xp ); 124 uint32_t * hba_ptr = (uint32_t *)GET_PTR( hba_xp );122 uint32_t * hba_ptr = GET_PTR( hba_xp ); 125 123 126 124 // try to register the I/O operation in a free slot -
trunk/hal/tsar_mips32/drivers/soclib_mmc.c
r279 r440 52 52 xptr_t dev_xp; // extended pointer on MMC device 53 53 uint32_t type; // MMC command : type 54 uint64_t buf_paddr; // MMC command : buffer physical address54 void * buf_ptr; // MMC command : buffer pointer 55 55 uint32_t buf_size; // MMC command : buffer size 56 56 uint32_t reg_index; // MMC command : register index in MMC peripheral … … 59 59 // get client thread cluster and local pointer 60 60 cxy_t th_cxy = GET_CXY( th_xp ); 61 thread_t * th_ptr = (thread_t *)GET_PTR( th_xp );61 thread_t * th_ptr = GET_PTR( th_xp ); 62 62 63 63 // get command type and extended pointer on MMC device … … 67 67 // get MMC device cluster and local pointer 68 68 cxy_t dev_cxy = GET_CXY( dev_xp ); 69 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );69 chdev_t * dev_ptr = GET_PTR( dev_xp ); 70 70 71 // get extended pointer on SOCLIB-MMC peripheral 72 xptr_t mmc_xp = hal_remote_lw( XPTR( dev_cxy , &dev_ptr->base ) ); 73 74 // get SOCLIB_MMC peripheral cluster and local pointer 75 cxy_t mmc_cxy = GET_CXY( mmc_xp ); 76 uint32_t * mmc_ptr = (uint32_t *)GET_PTR( mmc_xp ); 71 // get cluster and pointers for SOCLIB_MMC peripheral segment base 72 xptr_t seg_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) ); 73 cxy_t seg_cxy = GET_CXY( seg_xp ); 74 uint32_t * seg_ptr = GET_PTR( seg_xp ); 77 75 78 76 if( (type == MMC_CC_INVAL) || (type == MMC_CC_SYNC) ) 79 77 { 80 // get buffer paddr 81 buf_paddr = hal_remote_lwd( XPTR( th_cxy , &th_ptr->mmc_cmd.buf_paddr ) ); 78 // get buffer pointer and size 79 buf_ptr = hal_remote_lpt( XPTR( th_cxy , &th_ptr->mmc_cmd.buf_ptr ) ); 80 buf_size = hal_remote_lw ( XPTR( th_cxy , &th_ptr->mmc_cmd.buf_size ) ); 82 81 83 // split buffer paddr in two 32 bits words 84 uint32_t buf_lo = (uint32_t)( buf_paddr ); 85 uint32_t buf_hi = (uint32_t)( buf_paddr>>32 ); 86 87 // get buffer size 88 buf_size = hal_remote_lw( XPTR( th_cxy , &th_ptr->mmc_cmd.buf_size ) ); 89 90 // get command type 91 uint32_t cc_cmd; 82 // set command type 83 uint32_t cc_cmd; 92 84 if( type == MMC_CC_INVAL ) cc_cmd = SOCLIB_MMC_CC_INVAL; 93 85 else cc_cmd = SOCLIB_MMC_CC_SYNC; 94 86 95 87 // set SOCLIB_MMC registers to start INVAL/SYNC operation 96 hal_remote_sw( XPTR( mmc_cxy , mmc_ptr + SOCLIB_MMC_ADDR_LO ) , buf_lo);97 hal_remote_sw( XPTR( mmc_cxy , mmc_ptr + SOCLIB_MMC_ADDR_HI ) , buf_hi);98 hal_remote_sw( XPTR( mmc_cxy , mmc_ptr + SOCLIB_MMC_BUF_LENGTH ) , buf_size );99 hal_remote_sw( XPTR( mmc_cxy , mmc_ptr + SOCLIB_MMC_CMD_TYPE ) , cc_cmd );88 hal_remote_sw( XPTR( seg_cxy , seg_ptr + SOCLIB_MMC_ADDR_LO ) , (uint32_t)buf_ptr ); 89 hal_remote_sw( XPTR( seg_cxy , seg_ptr + SOCLIB_MMC_ADDR_HI ) , (uint32_t)dev_cxy ); 90 hal_remote_sw( XPTR( seg_cxy , seg_ptr + SOCLIB_MMC_BUF_LENGTH ) , buf_size ); 91 hal_remote_sw( XPTR( seg_cxy , seg_ptr + SOCLIB_MMC_CMD_TYPE ) , cc_cmd ); 100 92 } 101 93 else // (type == MMC_GET_ERROR) or (type == MMC_GET_ERROR) pr (type == MMC_GET_INSTRU ) … … 108 100 if( (type == MMC_GET_ERROR) || (type == MMC_GET_INSTRU) ) 109 101 { 110 *reg_ptr = hal_remote_lw( XPTR( mmc_cxy , mmc_ptr + reg_index ) );102 *reg_ptr = hal_remote_lw( XPTR( seg_cxy , seg_ptr + reg_index ) ); 111 103 } 112 104 else // type == MMC_SET_ERROR 113 105 { 114 hal_remote_sw( XPTR( mmc_cxy , mmc_ptr + reg_index ) , *reg_ptr );106 hal_remote_sw( XPTR( seg_cxy , seg_ptr + reg_index ) , *reg_ptr ); 115 107 } 116 108 } -
trunk/hal/tsar_mips32/drivers/soclib_pic.c
r438 r440 483 483 // in TSAR : XCU output [4*lid] is connected to core [lid] 484 484 hal_remote_sw( XPTR( src_chdev_cxy , 485 &seg_xcu_ptr[ (XCU_MSK_HWI_ENABLE << 5) | (lid<< 4) ] ) , (1 << irq_id) );485 &seg_xcu_ptr[ (XCU_MSK_HWI_ENABLE << 5) | (lid<<2) ] ) , (1 << irq_id) ); 486 486 } 487 487 else if( irq_type == SOCLIB_TYPE_WTI ) … … 490 490 // in TSAR : XCU output [4*lid] is connected to core [lid] 491 491 hal_remote_sw( XPTR( src_chdev_cxy , 492 &seg_xcu_ptr[ (XCU_MSK_WTI_ENABLE << 5) | (lid<< 4) ] ) , (1 << irq_id) );492 &seg_xcu_ptr[ (XCU_MSK_WTI_ENABLE << 5) | (lid<<2) ] ) , (1 << irq_id) ); 493 493 } 494 494 else … … 525 525 // in TSAR : XCU output [4*lid] is connected to core [lid] 526 526 hal_remote_sw( XPTR( src_chdev_cxy , 527 &seg_xcu_ptr[(XCU_MSK_WTI_DISABLE << 5) | (lid<< 4) ] ) , (1 << irq_id) );527 &seg_xcu_ptr[(XCU_MSK_WTI_DISABLE << 5) | (lid<<2) ] ) , (1 << irq_id) ); 528 528 } 529 529 else -
trunk/hal/tsar_mips32/drivers/soclib_tty.c
r438 r440 137 137 #endif 138 138 139 // get TXT device pointers 140 xptr_t dev_xp = (xptr_t)hal_remote_lwd( XPTR( th_cxy , &th_ptr->txt_cmd.dev_xp ) ); 141 cxy_t dev_cxy = GET_CXY( dev_xp ); 142 chdev_t * dev_ptr = GET_PTR( dev_xp ); 143 144 // get extended pointer on SOCLIB_TTY base segment 145 xptr_t tty_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) ); 146 147 // get SOCLIB_TTY base segment cluster and local pointer 139 // get TXT device cluster and pointers 140 xptr_t dev_xp = (xptr_t)hal_remote_lwd( XPTR( th_cxy , &th_ptr->txt_cmd.dev_xp ) ); 141 cxy_t dev_cxy = GET_CXY( dev_xp ); 142 chdev_t * dev_ptr = GET_PTR( dev_xp ); 143 144 // get cluster and pointers for SOCLIB_TTY peripheral base segment 145 xptr_t tty_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) ); 148 146 cxy_t tty_cxy = GET_CXY( tty_xp ); 149 147 uint32_t * tty_ptr = GET_PTR( tty_xp ); … … 346 344 owner_pid = hal_remote_lw( XPTR( owner_cxy , &owner_ptr->pid ) ); 347 345 348 // block owner process only if it is not aKSH346 // block owner process only if it is not INIT or KSH 349 347 if( process_get_ppid( owner_xp ) > 1 ) 350 348 { … … 362 360 if( byte == 0x03 ) 363 361 { 364 // get pointer son TXT owner process in owner cluster362 // get pointer on TXT owner process in owner cluster 365 363 owner_xp = process_txt_get_owner( channel ); 366 364 … … 380 378 process_txt_detach( owner_xp ); 381 379 382 // mark for delete all processesin all clusters, but the main380 // mark for delete all thread in all clusters, but the main 383 381 process_sigaction( owner_pid , DELETE_ALL_THREADS ); 384 382
Note: See TracChangeset
for help on using the changeset viewer.