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

📄 adm_procfs.c

📁 Ethernet switch driver for adm6996L
💻 C
📖 第 1 页 / 共 2 页
字号:
	fake_table.data = buf;	fake_table.maxlen = sizeof(buf);	ret = proc_dostring(&fake_table, write, filp, buffer, lenp);	if (ret == 0 && write)	{		int i;		for (i=0; i<sizeof (bandwidth_map)/sizeof(char*); ++i)			if (! strcmp(buf, bandwidth_map[i])) break;				if (i>8) return -EINVAL;		if (i>7) i=-1;				port_cfg[port].bandwidth = i;		if (port <= 3)		{			val = ((port_cfg[0].bandwidth & 7) << 0) |						((port_cfg[0].count_recv ? 0 : 1) << 3) |			      ((port_cfg[1].bandwidth & 7) << 4) |						((port_cfg[1].count_recv ? 0 : 1) << 7) |			      ((port_cfg[2].bandwidth & 7) << 8) |						((port_cfg[2].count_recv ? 0 : 1) << 11) |			      ((port_cfg[3].bandwidth & 7) << 12) |						((port_cfg[3].count_recv ? 0 : 1) << 15);			adm_wreg (einfo, 0x31, val);		}		else		{			val = ((port_cfg[4].bandwidth & 7) << 0) |						((port_cfg[4].count_recv ? 0 : 1) << 3) |			      ((port_cfg[5].bandwidth & 7) << 4) |						((port_cfg[5].count_recv ? 0 : 1) << 7);			adm_wreg (einfo, 0x32, val);		}		val = ((port_cfg[0].bandwidth==-1?0:1)<<0) |				  ((port_cfg[1].bandwidth==-1?0:1)<<2) |				  ((port_cfg[2].bandwidth==-1?0:1)<<4) |				  ((port_cfg[3].bandwidth==-1?0:1)<<6) |				  ((port_cfg[4].bandwidth==-1?0:1)<<7) |				  ((port_cfg[5].bandwidth==-1?0:1)<<8);		adm_wreg (einfo, 0x33, val);	}	return 0;}static ctl_table vlan_table[] = {	{ 70, "0", vlan_groups[0], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 71, "1", vlan_groups[1], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 72, "2", vlan_groups[2], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 73, "3", vlan_groups[3], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 74, "4", vlan_groups[4], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 75, "5", vlan_groups[5], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 76, "6", vlan_groups[6], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 77, "7", vlan_groups[7], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 78, "8", vlan_groups[8], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 79, "9", vlan_groups[9], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 80, "10", vlan_groups[10], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 81, "11", vlan_groups[11], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 82, "12", vlan_groups[12], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 83, "13", vlan_groups[13], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 84, "14", vlan_groups[14], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 85, "15", vlan_groups[15], 6*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 0, }};static ctl_table port0_table[] = {	{ 100, "enable", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 101, "speed", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 102, "bandwidth", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_bandwidth, NULL, },	{ 103, "count-recv", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 104, "tagging", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 105, "auto-negotiating", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 106, "duplex", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 107, "port-prio", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 108, "vlan-group-mask", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 109, "crossover", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 110, "tos-over-vlan-prio", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 111, "fx-mode", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 112, "mac-lock", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 113, "flow", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 114, "vlan-group", NULL, sizeof(int), 0444, NULL,		&proc_dointvec, NULL, },	{ 115, "port-prio-enable", NULL, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },		{ 0, }};static ctl_table port1_table[sizeof(port0_table) / sizeof(ctl_table)];static ctl_table port2_table[sizeof(port0_table) / sizeof(ctl_table)];static ctl_table port3_table[sizeof(port0_table) / sizeof(ctl_table)];static ctl_table port4_table[sizeof(port0_table) / sizeof(ctl_table)];static ctl_table port5_table[sizeof(port0_table) / sizeof(ctl_table)];		static ctl_table adm_table[] = {	{ 50, "vlan-groups", NULL, 0, 0555, vlan_table, },	{ 51, "port0", NULL, 0, 0555, port0_table, },	{ 52, "port1", NULL, 0, 0555, port1_table, },	{ 53, "port2", NULL, 0, 0555, port2_table, },	{ 54, "port3", NULL, 0, 0555, port3_table, },	{ 55, "port4", NULL, 0, 0555, port4_table, },	{ 56, "port5", NULL, 0, 0555, port5_table, },	{ 1, "drop-scheme", &drop, 4*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 2, "crc", &xcrc, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 3, "aging", &aging, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 4, "far-end-fault", &far_end_fault, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 5, "trunk", &trunk, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 6, "ipg-bits", &ipg_bits, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 7, "replace-vid01-with-pvid", &replace_vid_pvid, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 8, "drop-on-collisions", &drop_on_collisions, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 9, "storming", &storming, 2*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 10, "vlan-mode", &vlan_mode, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 11, "mac-clone-reg11h", &mac_clone_11, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 12, "mac-clone-reg30h", &mac_clone_30, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 13, "mii-speed-double", &mii_speed, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 14, "speed-led", &speed_led, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 15, "port-led", &port_led, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 16, "tag-shift", &tag_shift, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 17, "fwd-management-mac-1", &fwd_management_mac1, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 18, "fwd-management-mac-2", &fwd_management_mac2, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 19, "fwd-management-mac-3", &fwd_management_mac3, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 20, "fwd-management-mac-4", &fwd_management_mac4, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 21, "smart-squelch", &smart_squelch, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 22, "vlan-prio", &vlan_prio, 8*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 23, "tos-prio", &tos_prio, 8*sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 24, "polarity-error", &polarity_error, sizeof(int), 0444, NULL,		&adm_sysctl_handler, NULL, },	{ 25, "reg_10_bit_3", &reg_10_bit_3, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 26, "reg_2c_bit_11", &reg_2c_bit_11, sizeof(int), 0644, NULL,		&adm_sysctl_handler, NULL, },	{ 0, }};static ctl_table adm_root[] = {	{ 1, "adm6996", NULL, 0, 0555, adm_table, },	{ 0, }};static ctl_table dev_root[] = {	{ CTL_DEV, "dev", NULL, 0, 0555, adm_root, },	{ 0, }};static struct ctl_table_header *sysctl_header;int __init init_sysctl(void){	int i, k;	ctl_table* tbl[6]	= { port0_table, port1_table, port2_table,		                    port3_table, port4_table, port5_table };	static struct adm_gen_config cfg;	port_cfg = kmalloc(6 * sizeof(struct _port_cfg), GFP_KERNEL);	for (k=1; k<6; ++k)	{		for (i=0; i<sizeof(port0_table) / sizeof(ctl_table); ++i)		{			tbl[k][i] = port0_table[i];		}	}	for (k=0; k<6; ++k)	{		for (i=0; i<(sizeof port0_table/sizeof(ctl_table))-1; ++i)			tbl[k][i].ctl_name = (k+1)*100+i;		tbl[k][0].data = & port_cfg[k].enabled;		tbl[k][1].data = & port_cfg[k].speed;		tbl[k][2].data = & port_cfg[k].bandwidth;		tbl[k][3].data = & port_cfg[k].count_recv;		tbl[k][4].data = & port_cfg[k].tagging;		tbl[k][5].data = & port_cfg[k].autoneg;		tbl[k][6].data = & port_cfg[k].duplex;		tbl[k][7].data = & port_cfg[k].port_prio;		tbl[k][8].data = & port_cfg[k].pvid;		tbl[k][9].data = & port_cfg[k].crossover;		tbl[k][10].data = & port_cfg[k].use_tos;		tbl[k][11].data = & port_cfg[k].fx;		tbl[k][12].data = & port_cfg[k].mac_lock;		tbl[k][13].data = & port_cfg[k].flow;		tbl[k][14].data = & port_cfg[k].vlan;		tbl[k][15].data = & port_cfg[k].use_prio;	}		adm_get_gen_config (&cfg);	for (k=0; k<6; ++k)	{		port_cfg[k].count_recv = cfg.port[k].count_recv ? 0 : 1;		port_cfg[k].enabled = cfg.port[k].disabled ? 0 : 1;		port_cfg[k].autoneg = cfg.port[k].autoneg ? 1 : 0;		port_cfg[k].speed = cfg.port[k].speed ? 100 : 10;		port_cfg[k].bandwidth = 			(cfg.port[k].thrs_ena ? cfg.port[k].threshold : -1);		port_cfg[k].tagging = cfg.port[k].tagging ? 1 : 0;		port_cfg[k].duplex = cfg.port[k].duplex;		port_cfg[k].fx = cfg.port[k].fx;		port_cfg[k].crossover = cfg.port[k].crossover;		port_cfg[k].flow = cfg.port[k].flow;		port_cfg[k].use_tos = cfg.port[k].tos;		port_cfg[k].port_prio = cfg.port[k].port_prio;		port_cfg[k].use_prio = cfg.port[k].use_prio;		port_cfg[k].mac_lock = cfg.port[k].mac_lock;		port_cfg[k].pvid = cfg.port[k].pvid_0_3 | (cfg.port[1].pvid_4_11<<4);		port_cfg[k].vlan = (port_cfg[k].pvid>>cfg.tag_shift) & 0xf;		for (i=0; i<16; ++i)		{			int j;			for (j=0; j<6; ++j)				vlan_groups[i][j] = (cfg.vlan_groups[i] & BIT(j)) ? 1 : 0;		}	}	drop_on_collisions = cfg.drop_on_collisions;	replace_vid_pvid = cfg.replace_vid_pvid;	ipg_bits = cfg.ipg92 ? 92 : 96;	trunk = cfg.trunk;	far_end_fault = cfg.far_end_fault;	xcrc = cfg.xcrc;	aging = cfg.aging;	polarity_error = cfg.polarity_error;	reg_10_bit_3 = cfg.reg_10_bit_3;	reg_2c_bit_11 = cfg.reg_2c_bit_11;	drop[0] = cfg.drop_q0;	drop[1] = cfg.drop_q1;	drop[2] = cfg.drop_q2;	drop[3] = cfg.drop_q3;	storming[0] = cfg.storming;	storming[1] = cfg.storm_threshold;	mac_clone_11 = cfg.mac_clone_11;	vlan_mode = cfg.vlan_mode;	mac_clone_30 = cfg.mac_clone_30;	mii_speed = cfg.mii_speed;	speed_led = cfg.speed_led;	port_led = cfg.port_led;	tag_shift = cfg.tag_shift;	fwd_management_mac1 = cfg.fwd_management_mac1;	fwd_management_mac2 = cfg.fwd_management_mac2;	fwd_management_mac3 = cfg.fwd_management_mac3;	fwd_management_mac4 = cfg.fwd_management_mac4;	smart_squelch = cfg.smart_squelch;	for (i=0; i<8; ++i)	{		vlan_prio[i] = (cfg.vlan_prio>>(i*2)) & 3;		tos_prio[i] = (cfg.tos_prio>>(i*2)) & 3;	}		sysctl_header = register_sysctl_table(dev_root, 0);	return 0;}void __exit cleanup_sysctl(void){	unregister_sysctl_table(sysctl_header);	kfree (port_cfg);}#endif /* CONFIG_PROC_FS */

⌨️ 快捷键说明

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