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

📄 msiport.h

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 H
📖 第 1 页 / 共 5 页
字号:
	    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_oseqmsg( pccb, siibp, tpi, event ) {			\    if( Rpstatus_vc( tpi )) {						\	register u_long pseqno = Ns_msih( siibp->Rpkt.ph );		\	Incr_seqno( pseqno )						\	if( tpi->rseqno != pseqno ) {					\	    event = SE_OSEQMSG;						\	}								\    }									\}#define	Rcheck_penable( port_state )					\    ( port_state == PS_ENAB || port_state == PS_ENAB_MAINT )#define	Rcheck_pktlen( siibp, min, max )				\    ( siibp->cmdblk.length >= pccb->min && siibp->cmdblk.length <= pccb->max )#define	Rcheck_sntdat( pccb, siibp, tpi, msibp, event, lpc ) {		\    register MSIBD	*bdp;						\    if( Rcheck_vc( pccb, siibp, tpi )) {				\	Rincr_rseqno( pccb, tpi )					\	if( Rcheck_pktlen( siibp, Min_sntdat_size, Max_sntdat_size )) {	\	    if( Check_bname( siibp->Rpkt.sntdat.rbname, bdp )) {	\		pccb->Rdmap.ssize = siibp->cmdblk.length - SNTDAT_MINSIZE; \		Copy_long( &siibp->Rpkt.sntdat.rboff[ 0 ], &pccb->Rdmap.Sboff)\		if( Check_bsize( bdp, pccb->Rdmap )) {			\		    Setup_dmap( bdp, pccb->Rdmap )			\		    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 {						\		    lpc = 1;						\		    event = SE_INVBSIZE;				\		}							\	    } else {							\		lpc = 1;						\		event = SE_INVBNAME;					\	    }								\	} else {							\	    event = SE_INVRPKTSIZE;					\	}								\    } else {								\	Rcheck_oseqmsg( pccb, siibp, tpi, event )			\    }									\}#define	Rcheck_vc( pccb, siibp, tpi )					\    ( Rpstatus_vc( tpi ) && tpi->rseqno == Ns_msih( siibp->Rpkt.ph ))#define	Rget_free_msg( pccb, port, msibp ) {				\    register siibq	*siibp;						\    register SCSH	*scsbp;						\    Lock_xfp( pccb )							\    Remove_mfreeq( pccb, msibp )					\    if( Msibp == NULL && ( siibp = pccb->Xbusy ) && Siibp->save_msib ) {\	do	{							\	    if( Siibp->cmdblk.dst == port ) {				\		Msibp = Siibp->save_msib;				\		if( Vc_msib( Msibp ) && Free_msib( Msibp )) {		\		    if(( scsbp = msi_alloc_msg( pccb ))) {		\			Set_discard( Msibp )				\			Msibp = Scs_to_pd( pccb, scsbp );		\		    } else {						\			Msibp = NULL;					\		    }							\		    break;						\		} else {						\		    Msibp = NULL;					\		}							\	    }								\	}	while(( siibp = siibp->flink ) != pccb->Xfree );	\    }									\    Unlock_xfp( pccb )							\}#define	Rinvalid_srcaddr( pccb, siibp )					\    ( siibp->cmdblk.src >= MSI_MAXNUM_PORT )#define	Rreceive_abort( pccb, siibp )					\    ( ( siibp->cmdblk.opcode & CMDOPC_GROUPC ) != CMDOPC_GROUPC	  ||	\      ( siibp->cmdblk.opcode & CMDOPC_REQACK ) != CMDOPC_REQACK	  ||	\      siibp->cmdblk.dst != Scaaddr_lob( pccb->lpinfo.addr ) ||		\      siibp->cmdblk.length < 2				    ||		\      Rinvalid_srcaddr( pccb, siibp ))#define	Rreceive_good( pccb, siibp )					\    ( siibp->cmdblk.status == ST_SUCCESS &&				\      !Rreceive_abort( pccb, siibp ))/* Transmit Fork Process Macros. */					/* Fork Process Control Macros					 */#define	Xstart_xfp( pccb ) {						\    register u_long	unlock;						\    if( !Test_pccb_lock( pccb )) {					\	Lock_pccb( pccb )						\	unlock = 1;							\    } else {								\	unlock = 0;							\    }									\    if( Lpstatus_xfork( pccb ) == 0 ) {					\	Set_xfork( pccb )						\	Kfork( &pccb->Xforkb, msi_xfp, pccb )				\    }									\    if( unlock ) {							\	Unlock_pccb( pccb )						\    }									\}#define	Xstart_xfp_timer( pccb ) {					\    if( !pccb->Lpstatus.timer ) {					\	pccb->Lpstatus.timer = 1;					\	( void )timeout( msi_xfp_timer, ( u_char * )pccb, 1 );		\    }									\}#define	Xfp_started( pccb, save_ipl ) {					\    save_ipl = Splscs();						\    Lock_pccb( pccb )							\    Lock_xfp( pccb )							\    if( Lpstatus_xfork( pccb )) {					\	Clear_xfork( pccb )						\	Unlock_pccb( pccb )						\	if( Lpstatus_active( pccb ) == 0 || pccb->Xbusy == NULL ) {	\	    Unlock_xfp( pccb )						\	    ( void )splx( save_ipl );					\	    return;							\	}								\    } else {								\	( void )panic( PANIC_XFPFB );					\    }									\}#define	Xfp_timer_started( pccb, save_ipl ) {				\    save_ipl = Splscs();						\    Lock_xfp( pccb )							\    if( pccb->Lpstatus.timer ) {					\	pccb->Lpstatus.timer = 0;					\	if( Lpstatus_active( pccb ) == 0 ) {				\	    Unlock_xfp( pccb )						\	    ( void )splx( save_ipl );					\	    return;							\	}								\    } else {								\	( void )panic( PANIC_XFP_TIMER );				\    }									\}					/* MSIB/SIIBUF Transmit Status Macros					 */#define Xsii_busy( pccb )						\    ( *pccb->Msidscr & MSIDSCR_OUT || 					\    ( *pccb->Msiisr3 & MSIISR3_WR0 ) == MSIISR3_WR0 ) #define	Xabort_xmt( tpi, msibp )					\    (( Vc_msib( msibp ) && !Rpstatus_vc( tpi ))		||		\     ( Rpstatus_path( tpi ) == 0 &&					\       msibp->Ph.opcode != IDREQ &&					\       msibp->Ph.opcode != ID ))#define	Xfalse_nack( pccb, siibp )					\    ( siibp->cmdblk.status == ST_NACK_IS_ACK &&				\      *pccb->Msiilp != siibp->cmdblkaddr )#define	Xignore_xmtfail( pccb, siibp, tpi )				\    ( siibp->cmdblk.status == 0 &&					\      !Rpstatus_vc( tpi )	&&					\      siibp->Xpkt.ph.opcode == IDREQ )#define	Xcheck_lretdat( pccb, msibp, event ) {				\    register MSIBD	*bdp;						\    if( Check_bname( msibp->Lretdat.sbname, bdp )) {			\	if( U_long( msibp->Lretdat.length[ 0 ]) > msibp->Retdat_size ) {\	    pccb->Xdmap.ssize = msibp->Retdat_size;			\	} else {							\	    pccb->Xdmap.ssize = U_long( msibp->Lretdat.length[ 0 ]);	\	    Set_lp( msibp->Ph )						\	}								\	pccb->Xdmap.Sboff = U_long( msibp->Lretdat.sboff[ 0 ]);		\	if( Check_bsize( bdp, pccb->Xdmap )) {				\	    Setup_dmap( bdp, pccb->Xdmap )				\	} else {							\	    event = SE_INVBSIZE;					\	}								\    } else {								\	event = SE_INVBNAME;						\    }									\}					/* SIIBUF Header Formating Macros					 */#define	Xformat_cmdblk( pccb, siibp, msibp ) {				\    siibp->cmdblk.status = 0;						\    siibp->cmdblk.command = ( u_short )msibp->Rport_addr;		\    siibp->cmdblk.opcode = CMDOPC_OPCODE;				\    siibp->cmdblk.dst = msibp->Rport_addr;				\    siibp->cmdblk.src = Scaaddr_lob( pccb->lpinfo.addr );		\    siibp->cmdblk.length = msibp->Framelength;				\}#define	Xformat_siib( siibp, msibp ) {					\    ( void )bcopy(( u_char * )&msibp->Ph,				\		   ( u_char * )&siibp->Xpkt.ph,				\		   msibp->Framelength );				\}#define	Xformat_xlink( siibp, msibp ) {					\    siibp->Xlink.addr = siibp->xpktaddr;				\    siibp->Xlink.len = msibp->Framelength;				\}#define	Xreset_cmdblk( siibp ) {					\    siibp->cmdblk.status = 0;						\    Interrupt_disable( siibp )						\}#define	Xset_xseqno( dpi, siibp ) {					\    U_long( siibp->Xpkt.ph ) |= dpi->xseqno;				\    Incr_seqno( dpi->xseqno )						\}					/* SIIBUF Queue/List Manipulation					 * Macros					 */#define	Xflush_xbusy( pccb ) {						\    register siibq	*siibp;						\    register MSIB	*msibp;						\    for( siibp = pccb->Xbusy;						\	 ( msibp = Siibp->save_msib );					\	 siibp = siibp->flink ) {					\	( void )msi_dealloc_pkt( msibp );				\	Siibp->save_msib = NULL;					\    }									\    pccb->Xbusy = siibp;						\}#define	Xfree_siib( pccb, siibp ) {					\    siibp->save_msib = NULL;						\    pccb->Xbusy = siibp->flink;						\}#define	Xinsert_xbusy( pccb, siibp ) {					\    Insert_siib( siibp, *pccb->Xbusy )					\}#define	Xinsert_xfree( pccb, siibp ) {					\    Insert_siib( siibp, *pccb->Xfree )					\}#define	Xinsert_xretryq( tpi, msibp ) {					\    Insert_msib( msibp, tpi->xretryq )					\}#define	Xreset_xbusy( pccb, siibp ) {					\    do	{								\	Xreset_cmdblk( Siibp )						\    }	while(( siibp = siibp->flink ) != pccb->Xfree );		\}					/* Transmit Completion Macros					 */#define	Xdiscard_msib( pccb, msibp ) {					\    if( Free_msib( msibp )) {						\	Xfree_msib( pccb, msibp )					\    } else {								\	( void )msi_dealloc_pkt( msibp );				\    }									\}#define	Xfree_msib( pccb, msibp ) {					\    if( Vc_msib( msibp )) {						\	Reset_msib( msibp )						\	Insert_mfreeq( pccb, msibp )					\    } else {								\	Reset_msib( msibp )						\	Insert_dfreeq( pccb, msibp )					\    }									\}#define	Xnext_lretdat( pccb, msibp ) {					\    register u_long	ssize;						\    ssize = msibp->Framelength - pccb->Retdat_ovhd;			\    if(( long )( U_long( msibp->Lretdat.length[ 0 ]) -= ssize ) > 0 ) {	\	msibp->Framelength = pccb->Retdat_ovhd;				\	U_long( msibp->Lretdat.sboff[ 0 ]) += ssize;			\	U_long( msibp->Lretdat.rcvboff[ 0 ]) += ssize;			\	Copy_long( &msibp->Lretdat.rcvboff[ 0 ], &msibp->Lretdat.rboff[ 0 ])\	Insert_comql( pccb, msibp )					\    } else {								\	( void )panic( PANIC_RETDAT );					\    }									\}#define	Xproc_pathfail( pccb, siibp, msibp, tpi, port, xq ) {		\    register PB		*pb;						\    u_long		cport = port;					\    Clear_rpdip( tpi )							\    tpi->xretrys = 0;							\    pccb->Xbusy = NULL;							\    Unlock_xfp( pccb )							\    Lock_pccb( pccb )							\    if(( pb = cippd_get_pb( pccb, ( SCSH * )&cport, NO_BUF ))) {	\	Lock_pb( pb )							\	( void )msi_log_packet( pccb,					\				pb,					\				&Siibp->cmdblk,				\				&Siibp->Xpkt.ph,			\				Siibp->cmdblk.length,			\				E_NOPATH,				\				PATH_EVENT );				\	if( pb->pinfo.state != PS_PATH_FAILURE ) {			\	    ( void )cippd_crash_pb( pccb, pb, E_PD, 0, NULL );		\	}								\	Unlock_pb( pb )							\    }									\    Lock_xfp( pccb )							\    Unlock_pccb( pccb )							\    do	{								\	if( Siibp->cmdblk.dst == port ) {				\	    Msibp = Siibp->save_msib;					\	    Xdiscard_msib( pccb, Msibp )				\	    Siibp->save_msib = NULL;					\	    if( pccb->Xbusy ) {						\		register siibq *prev_siibp = siibp->blink;		\		Unthread_cmdblk( Siibp )				\		Remove_siib( Siibp )					\		Xinsert_xbusy( pccb, siibp )				\		Thread_cmdblk( Siibp, Siibp )				\		Thread_cmdblk( pccb->Xbusy, pccb->Xbusy )		\		siibp = prev_siibp;					\	    }								\	} else if( pccb->Xbusy == NULL ) {				\	    pccb->Xbusy = siibp;					\	}								\    }	while(( siibp = siibp->flink ) != pccb->Xfree );		\    if( pccb->Xbusy == NULL ) {						\	pccb->Xbusy = pccb->Xfree;					\    }									\    for( msibp = xq.flink; msibp != &xq; msibp = msibp->flink ) {	\	if( Msibp->Rport_addr == port ) {				\	    register msibq	*prev_msibp = msibp->blink;		\	    Remove_msib( Msibp )					\	    ( void )msi_dealloc_pkt( Msibp );				\	    msibp = prev_msibp;						\	}								\    }									\}#define	Xretdat_error( pccb, msibp, event, xq ) {			\    siibq		*cache_xbusy = pccb->Xbusy;			\    pccb->Xbusy = NULL;							\    Unlock_xfp( p

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -