📄 mscp.c
字号:
*/ 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 + -