📄 msiport.h
字号:
#define Rbusy pd.msi.rbusy#define Rdmap pd.msi.rdmap#define Rforkb pd.msi.rforkb#define Retdat_ovhd pd.msi.retdat_ovhd#define Rfp_lk pd.msi.rfp_lk#define Rpinfo pd.msi.rpinfo#define Rpslogmap pd.msi.rpslogmap#define Save_dssr pd.msi.save_dssr#define Save_dstat pd.msi.save_dstat#define Siibuffer pd.msi.siibuffer#define Siiregptrs pd.msi.siiregptrs#define Siiregs pd.msi.siiregs#define Xbusy pd.msi.xbusy#define Xdmap pd.msi.xdmap#define Xforkb pd.msi.xforkb#define Xfp_lk pd.msi.xfp_lk#define Xfree pd.msi.xfree#define Init_comqh_lock( pccb ) { \ lockinit( &(( pccb )->Comqh_lk ), &lock_msicomqh_d ); \}#define Init_comql_lock( pccb ) { \ lockinit( &(( pccb )->Comql_lk ), &lock_msicomql_d ); \}#define Init_dfree_lock( pccb ) { \ lockinit( &(( pccb )->Dfreeq_lk ), &lock_msidfreeq_d ); \}#define Init_mfree_lock( pccb ) { \ lockinit( &(( pccb )->Mfreeq_lk ), &lock_msimfreeq_d ); \}#define Init_rfp_lock( pccb ) { \ lockinit( &(( pccb )->Rfp_lk ), &lock_msirfp_d ); \}#define Init_xfp_lock( pccb ) { \ lockinit( &(( pccb )->Xfp_lk ), &lock_msixfp_d ); \}#define Lock_comqh( pccb ) { \ smp_lock( &(( pccb )->Comqh_lk ), LK_RETRY ); \}#define Lock_comql( pccb ) { \ smp_lock( &(( pccb )->Comql_lk ), LK_RETRY ); \}#define Lock_dfreeq( pccb ) { \ smp_lock( &(( pccb )->Dfreeq_lk ), LK_RETRY ); \}#define Lock_mfreeq( pccb ) { \ smp_lock( &(( pccb )->Mfreeq_lk ), LK_RETRY ); \}#define Lock_rfp( pccb ) { \ smp_lock( &(( pccb )->Rfp_lk ), LK_RETRY ); \}#define Lock_xfp( pccb ) { \ smp_lock( &(( pccb )->Xfp_lk ), LK_RETRY ); \}#define Test_rfp_lock( pccb ) (( pccb )->Rfp_lk.l_lock )#define Test_xfp_lock( pccb ) (( pccb )->Xfp_lk.l_lock )#define Unlock_comqh( pccb ) { \ smp_unlock( &(( pccb )->Comqh_lk )); \}#define Unlock_comql( pccb ) { \ smp_unlock( &(( pccb )->Comql_lk )); \}#define Unlock_dfreeq( pccb ) { \ smp_unlock( &(( pccb )->Dfreeq_lk )); \}#define Unlock_mfreeq( pccb ) { \ smp_unlock( &(( pccb )->Mfreeq_lk )); \}#define Unlock_rfp( pccb ) { \ smp_unlock( &(( pccb )->Rfp_lk )); \}#define Unlock_xfp( pccb ) { \ smp_unlock( &(( pccb )->Xfp_lk )); \}/* MSI Port Specific Macros. */ /* SIIBUF Header Formating Macros */#define Interrupt_disable( siibp ) { \ siibp->cmdblk.command &= ( u_short )CMD_DSTID; \}#define Interrupt_enable( siibp ) { \ (( SIIBUF * )siibp )->cmdblk.command |= ( u_short )CMD_IE; \} /* SIIBUF Queue Manipulation Macros */#define Insert_siib( siibp, q ) { \ Insert_entry((( siibq * )siibp )->flink, q ) \}#define Remove_siib( siibp ) { \ Remove_entry((( siibq * )siibp )->flink ) \} /* SIIBUF Thread Macros */#define Siiaddr( pccb, addr ) \ ( u_short )((( u_char * )addr - pccb->Siibuffer ) >> ADDR_SHIFT )#define Thread_cmdblk( headp, siibp ) { \ (( SIIBUF * )( headp )->blink )->cmdblk.thread \ = (( SIIBUF * )( siibp ))->cmdblkaddr; \}#define Term_thread( headp ) { \ (( SIIBUF * )( headp )->blink )->cmdblk.thread = 0; \}#define Unthread_cmdblk( siibp ) { \ (( SIIBUF * )siibp->blink )->cmdblk.thread = siibp->cmdblk.thread; \}/* Receive Fork Process Macros. */ /* Fork Process Control Macros */#define Rstart_rfp( pccb ) { \ register u_long unlock; \ if( !Test_pccb_lock( pccb )) { \ Lock_pccb( pccb ) \ unlock = 1; \ } else { \ unlock = 0; \ } \ if( Lpstatus_rfork( pccb ) == 0 ) { \ Set_rfork( pccb ) \ Kfork( &pccb->Rforkb, msi_rfp, pccb ) \ } \ if( unlock ) { \ Unlock_pccb( pccb ) \ } \}#define Rfp_started( pccb, save_ipl ) { \ save_ipl = Splscs(); \ Lock_pccb( pccb ) \ Lock_rfp( pccb ) \ if( Lpstatus_rfork( pccb )) { \ Clear_rfork( pccb ) \ Unlock_pccb( pccb ) \ if( Lpstatus_active( pccb ) == 0 || pccb->Rbusy == NULL ) { \ Unlock_rfp( pccb ) \ ( void )splx( save_ipl ); \ return; \ } \ } else { \ ( void )panic( PANIC_RFPFB ); \ } \} /* MSIB Field Macros */#define Rappl_length( msibp ) ( msibp->Framelength - sizeof( CIPPDH )) /* MSIB Formating Macros */#define Rformat_msib( siibp, msibp ) { \ ( void )bcopy(( u_char * )&siibp->cmdblk.src, \ ( u_char * )&msibp->Rport_addr, \ ( siibp->cmdblk.length + MSIB_RCVOVHD )); \}#define Rset_cippd_len( msibp ) { \ (( CIPPDH * )&msibp->Ph )->length \ = ( msibp->Framelength - sizeof( struct _msih )); \} /* MSIB Packet Transmission Macros */#define Rqueue_cnf( pccb, msibp, siibp ) { \ Format_msibh( msibp, siibp->cmdblk.src, sizeof( MSI_CNF ), MSI_VC ) \ Format_msih( msibp, CNF ) \ Format_cnf( msibp, siibp->Rpkt.sntdat.xctid ) \ Insert_comqh( pccb, msibp ) \}#define Rqueue_id( pccb, msibp, siibp ) { \ Format_msibh( msibp, siibp->cmdblk.src, sizeof( MSI_ID ), 0 ) \ Format_msih( msibp, ID ) \ Format_id( msibp, siibp->Rpkt.idreq.xctid ) \ Insert_comqh( pccb, msibp ) \}#define Rqueue_lretdat( pccb, msibp, siibp ) { \ Format_msibh( msibp, siibp->cmdblk.src, pccb->Retdat_ovhd, MSI_VC ) \ msibp->Retdat_size = (( M_msih( siibp->Rpkt.ph ) + 1 ) * 512 ); \ Format_msih( msibp, RETDAT ) \ Move_xctid( siibp->Rpkt.datreq.xctid, msibp->Lretdat.xctid ) \ Copy_long( &siibp->Rpkt.datreq.rbname[ 0 ], &msibp->Lretdat.rbname[ 0 ])\ Copy_long( &siibp->Rpkt.datreq.rboff[ 0 ], &msibp->Lretdat.rboff[ 0 ])\ ( void )bcopy(( u_char * )&siibp->Rpkt.datreq.length[ 0 ], \ ( u_char * )&msibp->Lretdat.length[ 0 ], \ pccb->Lretdat_cssize ); \ Insert_comql( pccb, msibp ) \} /* Reception Completion Macros */#define Rfinish_receive( pccb, msibp ) { \ if( msibp->Ph.opcode == MSG ) { \ Rset_cippd_len( msibp ) \ ( void )scs_msg_rec( pccb, \ ( SCSH * )msibp->Msg.text, \ Rappl_length( msibp )); \ } else if( msibp->Ph.opcode == DG ) { \ Rset_cippd_len( msibp ) \ if( msibp->Dg.mtype == SCSDG ) { \ ( void )scs_dg_rec( pccb, \ ( SCSH * )msibp->Dg.text, \ Rappl_length( msibp )); \ } else { \ ( void )cippd_receive( pccb, \ ( CIPPDH * )&msibp->Ph, \ ( u_long )msibp->Dg.mtype ); \ } \ } else { \ ( void )cippd_receive( pccb, \ ( CIPPDH * )&msibp->Ph, \ CNFE_ID_REC ); \ } \}#define Rincr_rseqno( pccb, tpi ) { \ Incr_seqno( tpi->rseqno ) \}#define Rlog_invsrcaddr( pccb, siibp ) { \ register siibq *rbusy_cache = pccb->Rbusy; \ pccb->Rbusy = NULL; \ Unlock_rfp( pccb ) \ Lock_pccb( pccb ) \ Lock_rfp( pccb ) \ pccb->Rbusy = rbusy_cache; \ pccb->Errlogopt.portnum = Siibp->cmdblk.src; \ ( void )msi_log_packet( pccb, \ NULL, \ &siibp->cmdblk, \ &siibp->Rpkt.ph, \ siibp->cmdblk.length, \ E_INVSRCADDR, \ LPORT_EVENT ); \ Unlock_pccb( pccb ) \}#define Rproc_error( pccb, siibp, msibp, event, lpc, rq ) { \ register PB *pb; \ u_long cport = siibp->cmdblk.src; \ siibq *rbusy_cache = pccb->Rbusy; \ pccb->Rbusy = NULL; \ Unlock_rfp( pccb ) \ while(( msibp = rq.flink ) != &rq ) { \ Remove_msib( Msibp ) \ Rfinish_receive( pccb, Msibp ) \ } \ Lock_pccb( pccb ) \ if( lpc == 0 ) { \ if(( pb = cippd_get_pb( pccb, ( SCSH * )&cport, NO_BUF ))) { \ Lock_pb( pb ) \ } else { \ pccb->Errlogopt.portnum = cport; \ } \ if( pb || event != E_RPORTSTATE ) { \ ( void )msi_log_packet( pccb, \ pb, \ NULL, \ &siibp->Rpkt.ph, \ siibp->cmdblk.length, \ event, \ PATH_EVENT ); \ } \ if( pb ) { \ if( pb->pinfo.state != PS_PATH_FAILURE ) { \ ( void )cippd_crash_pb( pccb, pb, E_PD, 0, NULL ); \ } \ Unlock_pb( pb ) \ } \ } \ Lock_rfp( pccb ) \ pccb->Rbusy = rbusy_cache; \ if( lpc ) { \ pccb->Lpstatus.optlpcinfo = 1; \ pccb->Lpcinfo.pkth = &Siibp->Rpkt.ph; \ pccb->Lpcinfo.pktsize = Siibp->cmdblk.length; \ pccb->Lpcinfo.pport_addr = cport; \ ( void )msi_crash_lport( pccb, event, NULL ); \ pccb->Lpstatus.optlpcinfo = 0; \ } \ Unlock_pccb( pccb ) \} /* SIIBUF Header Formating Macros */#define Rreset_cmdblk( siibp ) { \ U_short( siibp->cmdblk.status ) = 0; \ U_long( siibp->cmdblk.command ) = 0; \ Interrupt_enable( siibp ) \} /* SIIBUF Queue/List Manipulation * Macros */#define Rinsert_rbusy( pccb, siibp ) { \ Insert_siib( siibp, *pccb->Rbusy ) \} /* SIIBUF Reception Status Macros */#define Rcheck_datreq( pccb, siibp, tpi, msibp, event, lpc ) { \ if( Rcheck_vc( pccb, siibp, tpi )) { \ Rincr_rseqno( pccb, tpi ) \ if( Rcheck_pktlen( siibp, Min_datreq_size, Max_datreq_size )) { \ Remove_mfreeq( pccb, msibp ) \ if( Msibp == NULL ) { \ u_long tport = siibp->cmdblk.src; \ Rget_free_msg( pccb, tport, msibp ) \ if( Msibp == NULL ) { \ lpc = 1; \ event = SE_MFQE; \ } \ } \ } else { \ event = SE_INVRPKTSIZE; \ } \ } else { \ Rcheck_oseqmsg( pccb, siibp, tpi, event ) \ } \}#define Rcheck_dg( pccb, siibp, msibp, event ) { \ if( Rcheck_pktlen( siibp, Min_dg_size, Max_dg_size )) { \ Remove_dfreeq( pccb, msibp ) \ } else { \ event = SE_INVRPKTSIZE; \ } \}#define Rcheck_id( pccb, siibp, msibp, event ) { \ if( Rcheck_pktlen( siibp, Min_id_size, Max_id_size )) { \ if( Rcheck_penable( siibp->Rpkt.id.Port_state )) { \ if( siibp->Rpkt.id.Port_type[ 0 ] != HPT_SII ) { \ Remove_dfreeq( pccb, msibp ) \ } \ } else { \ event = E_RPORTSTATE; \ } \ } else { \ event = SE_INVRPKTSIZE; \ } \}#define Rcheck_idreq( pccb, siibp, msibp, event ) { \ if( Rcheck_pktlen( siibp, Min_idreq_size, Max_idreq_size )) { \ Remove_dfreeq( pccb, msibp ) \ } else { \ event = SE_INVRPKTSIZE; \ } \}#define Rcheck_msg( pccb, siibp, tpi, msibp, event, lpc ) { \ if( Rcheck_vc( pccb, siibp, tpi )) { \ Rincr_rseqno( pccb, tpi ) \ if( Rcheck_pktlen( siibp, Min_msg_size, Max_msg_size )) { \ Remove_mfreeq( pccb, msibp ) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -