⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msiport.h

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 H
📖 第 1 页 / 共 5 页
字号:
#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 + -