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

📄 mscp.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 3 页
字号:
	 */	offset = (int)(&unit_st.request.flink) - (int)(&unit_st.flink);	no_req = (char *) ((char *)unitp + offset);	if ((unit_st.request.flink == unit_st.request.blink) && 	    (unit_st.request.flink == (REQB *)no_req)) {		if (printmode & MSCP_PRINTFULL)		printf("\n\tThere are no requests stalled in resource wait.\n");		return;	}		reqb_pt = unit_st.request.flink;	do {	    printmscp_reqb(reqb_pt, printmode);	    if(readmem((char *) &reqb_st, (int)reqb_pt, sizeof(REQB)) !=	        sizeof(REQB)) {		    printf("could not read request block at 0x%x\n",reqb_pt);		    return;	    }	    reqb_pt = reqb_st.flink;	} while  (reqb_pt != (REQB *)no_req);}/* * *   Name:	printmscp_connb	- Print contents of a connection block * *   Abstract:	Disect and display a connection block. * *   Inputs:    connp	 	- Pointer to a connection block *		printmode	- Controlls output level. * *   Return	NONE *   Values: */int printmscp_connb(connp, printmode)    CONNB	*connp;    int		printmode;{	CONNB conn_st;	char device_name[DEVNAME_SIZE];	int i;	char *reqb_addr;	int offset;	printf("\n\t-----------------  CONNECTION BLOCK  ------------------\n");	if (connp == 0) {		printf("\tNULL connection block pointer\n");		return;	}	if(readmem((char *) &conn_st, (int)connp, sizeof(CONNB)) !=	    sizeof(CONNB)) {		printf("could not read connection block at 0x%x.\n",connp);		return;	}    if (printmode & MSCP_PRINTFULL) {	printf("\tConnection block address is 0x%x\n",connp);	printf("\tConnection list: \(flink\) 0x%x, \(blink\) 0x%x\n",		conn_st.flink, conn_st.blink);	printf("\tClass block: \(0x%x\) ",conn_st.classb);	praddr(conn_st.classb);	printf("\n");	printf("\tUnit list: \(unit.flink\) 0x%x, \(unit.blink\) 0x%x\n",		conn_st.unit.flink, conn_st.unit.blink);	printf("\tBBR block address: 0x%x, state: 0x%x\n",conn_st.bbrb,		conn_st.state);	printf("\tflags: ");		if (conn_st.flags.restart)			printf("restart ");		if (conn_st.flags.sngl_strm)			printf("sngl_strm ");		if (conn_st.flags.path_fail)			printf("path_fail ");		if (conn_st.flags.need_upoll)			printf("need_upoll ");		if (conn_st.flags.upoll_busy)			printf("upoll_busy ");		if (conn_st.flags.need_cr)			printf("need_cr ");	printf("\n");	printf("\tRequest Queues\tflink\t\tblink\t\tstatus\n");	printf("\t    active\t0x%x\t0x%x",conn_st.active.flink,			conn_st.active.blink);	offset = (int)(&conn_st.active.flink) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	if ((conn_st.active.flink == conn_st.active.blink) &&	    ((char *)conn_st.active.flink == reqb_addr))		printf("\tempty\n");	else		printf("\tnon-empty\n");	printf("\t    restart\t0x%x\t0x%x",conn_st.restart.flink,			conn_st.restart.blink);	offset = (int)(&conn_st.restart.flink) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	if ((conn_st.restart.flink == conn_st.restart.blink) &&	    ((char *)conn_st.restart.flink == reqb_addr))		printf("\tempty\n");	else		printf("\tnon-empty\n");	printf("\t    credit_wq\t0x%x\t0x%x",conn_st.credit_wq.flink,			conn_st.credit_wq.blink);	offset = (int)(&conn_st.credit_wq.flink) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	if ((conn_st.credit_wq.flink == conn_st.credit_wq.blink) &&	    ((char *)conn_st.credit_wq.flink == reqb_addr))		printf("\tempty\n");	else		printf("\tnon-empty\n");	printf("\t    buffer_wq\t0x%x\t0x%x",conn_st.buffer_wq.flink,			conn_st.buffer_wq.blink);	offset = (int)(&conn_st.buffer_wq.flink) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	if ((conn_st.buffer_wq.flink == conn_st.buffer_wq.blink) &&	    ((char *)conn_st.buffer_wq.flink == reqb_addr))		printf("\tempty\n");	else		printf("\tnon-empty\n");	printf("\t    map_wq\t0x%x\t0x%x",conn_st.map_wq.flink,			conn_st.map_wq.blink);	offset = (int)(&conn_st.map_wq.flink) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	if ((conn_st.map_wq.flink == conn_st.map_wq.blink) &&	    ((char *)conn_st.map_wq.flink == reqb_addr))		printf("\tempty\n");	else		printf("\tnon-empty\n");	printf("\tCommand timeout interval: %d, Resource wait timeout: %d\n",		conn_st.cmdtmo_intvl, conn_st.rsrctmo_intvl);	printf("\tRetry count: %d, Current unit number: %d\n",		conn_st.retry_count, conn_st.cur_unit);	printf("\tRestart count: %d, Host timeout period: %d\n",		conn_st.restart_count, conn_st.hst_tmo);	printf("\tSystem ID: 0x%x, Remote port address: 0x%x\n",		conn_st.sysid, conn_st.rport_addr);	printf("\tLocal port name: \(0x%x\) ",conn_st.lport_name);	/*	 * The loacal port name is a long made up of 4 characters which 	 * contains the port name in ASCII.	 */	for (i = 0; i < 4 ; i++) {		device_name[0] = (unsigned char) ((conn_st.lport_name >> 8*i) 			& 0xff);		if (isalnum(device_name[0]))			printf("%c",device_name[0]);	}	printf("\n");	printf("\tMSCP version: %d, Controller flags 0x%x\n",		conn_st.version, conn_st.cnt_flgs);	printf("\tController timeout: %d, Controller software version: %d\n",		conn_st.cnt_tmo, conn_st.cnt_svr);	printf("\tController hardware version: %d\n",conn_st.cnt_hvr);	print_uniq_id(&conn_st.cnt_id);	printf("\tController maximum byte count: 0x%x\n",conn_st.max_bcnt);	printf("\tOldest rspid: 0x%x, oldest rspid status: 0x%x\n",		conn_st.old_rspid, conn_st.old_cmd_sts);	printf("\tRestart reqb: 0x%x\n",conn_st.restart_reqb); 	readmem((char *)device_name, (unsigned int)conn_st.model_name, DEVNAME_SIZE);	printf("\tController model name: %s\n",device_name); 	readmem((char *)device_name, (int)conn_st.cnt_name, DEVNAME_SIZE);	printf("\tConfig controller name: %s, config controller number: %d\n",		device_name, conn_st.cnt_number);	printf("\tBus type: %d, ubminit entry: 0x%x\n",		conn_st.bus_type, conn_st.ubctlr);	printf("\tConnection ID: 0x%x\n", conn_st.connid);	printf("\tTimeout request block: 0x%x, Polling request block: 0x%x\n",		conn_st.timeout_reqb, conn_st.polling_reqb);	printf("\tContents of the command timeout request block:\n");	offset = (int)(&conn_st.timeout_reqb) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	printmscp_reqb((REQB *) reqb_addr, printmode);	printf("\tContents of the polling / DAP request block:\n");	offset = (int)(&conn_st.polling_reqb) - (int)(&conn_st.flink);	reqb_addr = (char *) ((char *)connp + offset);	printmscp_reqb((REQB *) reqb_addr, printmode);    }    else if (printmode & MSCP_PRINTBRIEF) {	printf("\tConnection block address is 0x%x\n",connp);	printf("\tLocal port name:  ");	/*	 * The loacal port name is a long made up of 4 characters which 	 * contains the port name in ASCII.	 */	for (i = 0; i < 4 ; i++) {		device_name[0] = (unsigned char) ((conn_st.lport_name >> 8*i) 			& 0xff);		if (isalnum(device_name[0]))			printf("%c",device_name[0]);	}	printf(", "); 	readmem((char *)device_name, (unsigned int)conn_st.model_name, DEVNAME_SIZE);	printf("\tController model name: %s\n",device_name); 	readmem((char *)device_name, (int)conn_st.cnt_name, DEVNAME_SIZE);	printf("\tConfig controller name: %s, config controller number: %d\n",		device_name, conn_st.cnt_number);    }	}/* * *   Name:	printmscp_reqb		- Print contents of a request block * *   Abstract:	Disect and display a request block. * *   Inputs:    reqp	 	- Pointer to a request block *		printmode	- Controlls output level. * *   Return	NONE *   Values: */int printmscp_reqb(reqp, printmode)    REQB	*reqp;    int		printmode;{	REQB reqb_st;	printf("\n\t-----------------  REQUEST BLOCK  ---------------------\n");	if (reqp == 0) {		printf("\tNULL request block pointer\n");		return;	}	if(readmem((char *) &reqb_st, (int)reqp, sizeof(REQB)) !=	    sizeof(REQB)) {		printf("could not read requets block at 0x%x.\n",reqp);		return;	}    if (printmode & MSCP_PRINTFULL) {	printf("\tRequest block address is 0x%x\n",reqp);	printf("\tRequest block list: \(flink\) 0x%x, \(blink\) 0x%x\n",		reqb_st.flink, reqb_st.blink);	if ((reqb_st.flink == reqb_st.blink) && (reqb_st.blink == reqp)) {		printf("\n\tWarning: this is a non-active request packet!\n");		printf("\tThe following values may therefore be invalid.\n\n");	}	printf("\tClass block: \(0x%x\) ",reqb_st.classb);	praddr(reqb_st.classb);	printf("\n");	printf("\tConnection block: 0x%x, unit block: 0x%x\n",		reqb_st.connb, reqb_st.unitb);	printf("\tBuf pointer: 0x%x, Message pointer: 0x%x\n",		reqb_st.bufptr, reqb_st.msgptr);	printf("\tMessage size: %d, p1: %d, p2: %d\n",		reqb_st.msgsize, reqb_st.p1, reqb_st.p2);	printf("\tAuxiliary ptr: 0x%x, rspid: 0x%x\n",		reqb_st.aux, reqb_st.rspid);	printf("\tOperation sequence: %d, Resource wait pointer: 0x%x\n",		reqb_st.op_seq_num, reqb_st.rwaitptr);	print_lbhandle(&reqb_st.lbhandle);	printf("\tState: %d \n",reqb_st.state);	printf("\tState table: \(0x%x\) ",reqb_st.state_tbl);	praddr(reqb_st.state_tbl);	printf("\n");	printf("\tflags: ");		if (reqb_st.flags.perm_reqb)			printf("perm_reqb ");		if (reqb_st.flags.nocreditw)			printf("nocreditw ");		if (reqb_st.flags.online)			printf("online ");		if (reqb_st.flags.force)			printf("force ");	printf("\n");    }    else {	printf("\tNO printing requested.\n");    }}/* * *   Name:	printmscp_classb	- Print contents of a class block * *   Abstract:	Disect and display a class block. * *   Inputs:    classp	 	- Pointer to a class block *		printmode	- Controlls output level. * *   Return	NONE *   Values: */int printmscp_classb(classp, printmode)    CLASSB	*classp;    int		printmode;{	CLASSB class_st;	char device_name[DEVNAME_SIZE];	printf("\n\t-----------------  CLASS BLOCK  -----------------------\n");	if (classp == 0) {		printf("\tNULL class block pointer\n");		return;	}	if(readmem((char *) &class_st, (int)classp, sizeof(CLASSB)) !=	    sizeof(CLASSB)) {		printf("could not read class block at 0x%x.\n",classp);		return;	}    if (printmode & MSCP_PRINTFULL) {	printf("\tClass block address is 0x%x\n",classp);	printf("\tConnection list: \(flink\) 0x%x, \(blink\) 0x%x\n",			class_st.flink, class_st.blink);	printf("\trspid wait queue: \(flink\) 0x%x, \(blink\) 0x%x\n",			class_st.rspid_wq.flink, class_st.rspid_wq.blink);	printf("\toperation count: %d, system count: %d\n",			class_st.operation_ct, class_st.system_ct); 	readmem((char *)device_name, (int)class_st.dev_name, DEVNAME_SIZE);	printf("\tDevice name: %s \(address 0x%x\)\n",			device_name, class_st.dev_name);	printf("\tUnit table: \(0x%x\) ",class_st.unit_tbl);	praddr(class_st.unit_tbl);	printf("\n");	printf("\tRecovery state table: \(0x%x\) ",class_st.recov_states);	praddr(class_st.recov_states);	printf("\n");	printf("\tServices blocks: \(connection mgt\) 0x%x, \(maint\) 0x%x\n",			class_st.cmsb, class_st.msb);	printf("\tflags: ");		if (class_st.flags.disk)			printf("disk ");		if (class_st.flags.init_done)			printf("init_done ");		if (class_st.flags.init_ip)			printf("init_ip ");		if (class_st.flags.need_poll)			printf("need_poll ");		if (class_st.flags.listen)			printf("listen ");	printf("\n");    }    else if (printmode & MSCP_PRINTBRIEF) {	printf("\tClass block address is 0x%x\n",classp); 	readmem((char *)device_name, (int)class_st.dev_name, DEVNAME_SIZE);	printf("\tDevice name: %s \n", device_name);    }}/* * *   Name:	printmscp_unitb	- Print contents of a unit block * *   Abstract:	Disect and display a unit block. * *   Inputs:    unitp	 	- Pointer to a unit block *		printmode	- Controlls output level. * *   Return	NONE *   Values: */int printmscp_unitb(unitp, printmode)    UNITB	*unitp;    int		printmode;{	UNITB unit_st;	char device_name[DEVNAME_SIZE];

⌨️ 快捷键说明

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