qla_cfgln.c
来自「这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自」· C语言 代码 · 共 680 行 · 第 1/2 页
C
680 行
qla2x00_set_lun_data_from_config(host, port, tgt_no, dev_no); } } KMEM_FREE(port, sizeof (fc_port_t)); } LEAVE("qla2x00_cfg_build_path_tree"); DEBUG(printk("Leaving: qla2x00_cfg_build_path_tree\n");)}/* * qla2x00_cfg_display_devices * This routine will the node names of the different devices found * after port inquiry. * * Input: * * Returns: * None. */void qla2x00_cfg_display_devices(void){ mp_host_t *host; int id; mp_device_t *dp; mp_path_t *path; mp_path_list_t *path_list; int cnt, i, dev_no; int instance; lun_bit_mask_t lun_mask; int mask_set; uint8_t l; printk("qla2x00_cfg_display_devices\n"); for (host = mp_hosts_base; (host); host = host->next) { instance = (int) host->instance; /* Display the node name for adapter */ printk(KERN_INFO "scsi-qla%d-adapter-port=" "%02x%02x%02x%02x%02x%02x%02x%02x\\;\n", instance, host->portname[0], host->portname[1], host->portname[2], host->portname[3], host->portname[4], host->portname[5], host->portname[6], host->portname[7]); for (id = 0; id < MAX_MP_DEVICES; id++) { if( (dp = host->mp_devs[id] ) == NULL ) continue; path_list = dp->path_list; if( (path = path_list->last) != NULL ) { /* Print out device port names */ path = path->next; /* first path */ for (dev_no = 0, cnt = 0; cnt < path_list->path_cnt; path = path->next, cnt++) { /* skip others if not our host */ if (host != path->host) continue; printk(KERN_INFO "scsi-qla%d-tgt-%d-di-%d-node=" "%02x%02x%02x%02x" "%02x%02x%02x%02x\\;\n", instance, id, path->id, dp->nodename[0], dp->nodename[1], dp->nodename[2], dp->nodename[3], dp->nodename[4], dp->nodename[5], dp->nodename[6], dp->nodename[7]); /* port_name */ printk(KERN_INFO "scsi-qla%d-tgt-%d-di-%d-port=" "%02x%02x%02x%02x" "%02x%02x%02x%02x\\;\n", instance, id, path->id, path->portname[0], path->portname[1], path->portname[2], path->portname[3], path->portname[4], path->portname[5], path->portname[6], path->portname[7]); /* control byte */ printk(KERN_INFO "scsi-qla%d-tgt-%d-di-%d-" "control=%02x\\;\n", instance, id, path->id, path->mp_byte); /* * Build preferred bit mask for this * path */ memset(&lun_mask, 0, sizeof(lun_mask)); mask_set = 0; for (i = 0; i < MAX_LUNS; i++) { l = (uint8_t)(i & 0xFF); if (path_list->current_path[l] == path->id ) { EXT_SET_LUN_BIT((&lun_mask),l); mask_set++; } } if (mask_set) { printk(KERN_INFO "scsi-qla%d-tgt-%d-di-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n", instance, id, path->id, *((uint32_t *) &lun_mask.mask[28]), *((uint32_t *) &lun_mask.mask[24]), *((uint32_t *) &lun_mask.mask[20]), *((uint32_t *) &lun_mask.mask[16]), *((uint32_t *) &lun_mask.mask[12]), *((uint32_t *) &lun_mask.mask[8]), *((uint32_t *) &lun_mask.mask[4]), *((uint32_t *) &lun_mask.mask[0]) ); } /* * Build disable bit mask for this path */ mask_set = 0; for (i = 0; i < MAX_LUNS; i++) { l = (uint8_t)(i & 0xFF); if (!(path->lun_data.data[l] & LUN_DATA_ENABLED) ) { mask_set++; } } if (mask_set) { printk(KERN_INFO "scsi-qla%d-tgt-%d-di-%d-lun-disable=%08x%08x%08x%08x%08x%08x%08x%08x\\;\n", instance, id, path->id, *((uint32_t *) &lun_mask.mask[28]), *((uint32_t *) &lun_mask.mask[24]), *((uint32_t *) &lun_mask.mask[20]), *((uint32_t *) &lun_mask.mask[16]), *((uint32_t *) &lun_mask.mask[12]), *((uint32_t *) &lun_mask.mask[8]), *((uint32_t *) &lun_mask.mask[4]), *((uint32_t *) &lun_mask.mask[0]) ); } dev_no++; } } } }}#if 0int qla2x00_cfg_build_range( mp_path_t *path, uint8_t *buf, int siz, uint8_t mask ){ int i; int max, min; int colonflg = FALSE; int len = 0; max = -1; min = 0; for (i = 0; i < MAX_LUNS; i++) { if( (path->lun_data.data[i] & mask) ) { max = i; } else { if( colonflg && max >= min ) { len += sprintf(&buf[len],":"); if( len > siz) return len; colonflg = FALSE; } if (max > min ) { len += sprintf(&buf[len],"%02x-%02x",min,max); if( len > siz) return len; colonflg = TRUE; } else if ( max == min ) { len += sprintf(&buf[len],"%02x",max); if( len > siz) return len; colonflg = TRUE; } min = i + 1; max = i; } } DEBUG4(printk("build_range: return len =%d\n",len);) return(len);}#endif#if 0/* * qla2x00_cfg_proc_display_devices * This routine will the node names of the different devices found * after port inquiry. * * Input: * * Returns: * None. */int qla2x00_cfg_proc_display_devices(scsi_qla_host_t *ha){ mp_host_t *host; int id; mp_device_t *dp; mp_path_t *path; mp_path_list_t *path_list; int cnt, i; int instance; lun_bit_mask_t lun_mask; int mask_set; uint8_t l; fc_port_t *port; int len = 0; for (host = mp_hosts_base; (host); host = host->next) { if( host->ha != ha ) continue; instance = (int) host->instance; /* Display the node name for adapter */ len += sprintf(PROC_BUF, "scsi-qla%d-adapter-node=" "%02x%02x%02x%02x%02x%02x%02x%02x;\n", instance, host->nodename[0], host->nodename[1], host->nodename[2], host->nodename[3], host->nodename[4], host->nodename[5], host->nodename[6], host->nodename[7]); for (id = 0; id < MAX_MP_DEVICES; id++) { if( (dp = host->mp_devs[id] ) == NULL ) continue; path_list = dp->path_list; if( (path = path_list->last) != NULL ) { /* Print out device port names */ path = path->next; /* first path */ for (cnt = 0; cnt < path_list->path_cnt; path = path->next, cnt++) { /* skip others if not our host */ if (host != path->host) continue; len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-node=%02x%02x%02x%02x%02x%02x%02x%02x;\n", instance, id, path->id, dp->nodename[0], dp->nodename[1], dp->nodename[2], dp->nodename[3], dp->nodename[4], dp->nodename[5], dp->nodename[6], dp->nodename[7]); /* port_name */ len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-port=%02x%02x%02x%02x%02x%02x%02x%02x;\n", instance, id, path->id, path->portname[0], path->portname[1], path->portname[2], path->portname[3], path->portname[4], path->portname[5], path->portname[6], path->portname[7]); if( path_list->visible == path->id ) { len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-visible=%02x;\n", instance, id, path->id, path->id); } len +=sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-control=%02x;\n", instance, id, path->id, path->mp_byte); /* Build preferred bit mask for this path */ memset(&lun_mask, 0, sizeof(lun_mask)); mask_set = 0; for (i = 0; i < MAX_LUNS_PER_DEVICE; i++) { l = (uint8_t)(i & 0xFF); if( path_list->current_path[l] == path->id ) { EXT_SET_LUN_BIT((&lun_mask),l); mask_set++; } } if( mask_set && EXT_DEF_MAX_LUNS <= 256 ) { len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-preferred=%08x%08x%08x%08x%08x%08x%08x%08x;\n", instance, id, path->id, *((uint32_t *) &lun_mask.mask[0]), *((uint32_t *) &lun_mask.mask[4]), *((uint32_t *) &lun_mask.mask[8]), *((uint32_t *) &lun_mask.mask[12]), *((uint32_t *) &lun_mask.mask[16]), *((uint32_t *) &lun_mask.mask[20]), *((uint32_t *) &lun_mask.mask[24]), *((uint32_t *) &lun_mask.mask[28]) ); } len += sprintf(PROC_BUF, "scsi-qla%d-target-%d-path-%d-lun-enable=%08x%08x%08x%08x%08x%08x%08x%08x;\n", instance, id, path->id, *((uint32_t *) &path->lun_data.data[0]), *((uint32_t *) &path->lun_data.data[4]), *((uint32_t *) &path->lun_data.data[8]), *((uint32_t *) &path->lun_data.data[12]), *((uint32_t *) &path->lun_data.data[16]), *((uint32_t *) &path->lun_data.data[20]), *((uint32_t *) &path->lun_data.data[24]), *((uint32_t *) &path->lun_data.data[28]) ); } /* for */ } } } return( len );}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?