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 + -
显示快捷键?