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

📄 aironet4500_proc.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		save_flags(flags);		cli();			awc_readrid(dev,rid,rid_dir->buff + rid->offset);		restore_flags(flags);	};		if (rid->array > 1 || rid->bits > 32){		if (write){        		retv = proc_dostring(ctl, write, filp, buffer, lenp);        		if (retv) goto final;			retv = awc_proc_format_array(write, awc_proc_buff, lenp, rid_dir, rid);			if (retv) goto final;		} else {			retv = awc_proc_format_array(write, awc_proc_buff, lenp, rid_dir, rid);			if (retv) goto final;        		retv = proc_dostring(ctl, write, filp, buffer, lenp);			if (retv) goto final;        	}        } else {        	if (write){        		retv = proc_dointvec(ctl, write, filp, buffer, lenp);        			if (retv) goto final;				retv = awc_proc_format_bits(write, &awc_int_buff, lenp, rid_dir, rid);			if (retv) goto final;			} else {			retv = awc_proc_format_bits(write, &awc_int_buff, lenp,rid_dir, rid);			if (retv) goto final;	        		retv = proc_dointvec(ctl, write, filp, buffer, lenp);        			if (retv) goto final;			}        }	if (write) {		save_flags(flags);		cli();			if (rid->selector->MAC_Disable_at_write){			awc_disable_MAC(dev);		};		awc_writerid(dev,rid,rid_dir->buff + rid->offset);		if (rid->selector->MAC_Disable_at_write){			awc_enable_MAC(dev);		};		restore_flags(flags);	};       	DEBUG(0x20000,"awc proc ret  %x \n",retv);       	DEBUG(0x20000,"awc proc lenp  %x \n",*lenp); 	MOD_DEC_USE_COUNT;	return retv;  final:   	AWC_ENTRY_EXIT_DEBUG("exit");	MOD_DEC_USE_COUNT;        return -1 ;}char  conf_reset_result[200];ctl_table awc_exdev_table[] = {       {0, NULL, NULL,0, 0400, NULL},       {0}};ctl_table awc_exroot_table[] = {        {254, "aironet4500", NULL, 0, 0555, NULL},        {0}};ctl_table awc_driver_proc_table[] = {        {1, "debug"			, &awc_debug, sizeof(awc_debug), 0600,NULL, proc_dointvec},        {2, "bap_sleep"			, &bap_sleep, sizeof(bap_sleep), 0600,NULL, proc_dointvec},        {3, "bap_sleep_after_setup"	, &bap_sleep_after_setup, sizeof(bap_sleep_after_setup), 0600,NULL, proc_dointvec},        {4, "sleep_before_command"	, &sleep_before_command, sizeof(sleep_before_command), 0600,NULL, proc_dointvec},        {5, "bap_sleep_before_write"	, &bap_sleep_before_write, sizeof(bap_sleep_before_write), 0600,NULL, proc_dointvec},        {6, "sleep_in_command"		, &sleep_in_command	, sizeof(sleep_in_command), 0600,NULL, proc_dointvec},        {7, "both_bap_lock"		, &both_bap_lock	, sizeof(both_bap_lock), 0600,NULL, proc_dointvec},        {8, "bap_setup_spinlock"	, &bap_setup_spinlock	, sizeof(bap_setup_spinlock), 0600,NULL, proc_dointvec},        {0}};ctl_table awc_driver_level_ctable[] = {        {1, "force_rts_on_shorter"	, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {2, "force_tx_rate"		, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {3, "ip_tos_reliability_rts"	, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {4, "ip_tos_troughput_no_retries", NULL, sizeof(int), 0600,NULL, proc_dointvec},        {5, "debug"			, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {6, "simple_bridge"		, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {7, "p802_11_send"		, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {8, "full_stats"		, NULL, sizeof(int), 0600,NULL, proc_dointvec},        {0}};ctl_table awc_root_table[] = {        {254, "aironet4500", NULL, 0, 0555, awc_driver_proc_table},        {0}};struct ctl_table_header * awc_driver_sysctl_header = NULL;const char awc_procname[]= "awc5";int awc_proc_set_device(int device_number){  int group =0;  int rid = 0;  struct awc_private * priv;  ctl_table * tmp_table_ptr;   AWC_ENTRY_EXIT_DEBUG("awc_proc_set_device");    if (!aironet4500_devices[device_number] || (awc_nof_rids <=0 )) return -1 ;  priv = (struct awc_private * )aironet4500_devices[device_number]->priv;  awc_rids_setup(aironet4500_devices[device_number]);  memcpy(&(awc_proc_priv[device_number].proc_table_sys_root[0]), awc_exroot_table,sizeof(struct ctl_table)*2);  awc_proc_priv[device_number].proc_table_sys_root[0].ctl_name = 254 - device_number;  memcpy(awc_proc_priv[device_number].proc_table_device_root, awc_exdev_table,sizeof(awc_exdev_table) );  awc_proc_priv[device_number].proc_table_device_root[0].ctl_name = device_number+1;  awc_proc_priv[device_number].proc_table_sys_root->child = awc_proc_priv[device_number].proc_table_device_root;  memcpy(awc_proc_priv[device_number].proc_name,(struct NET_DEVICE * )aironet4500_devices[device_number]->name,5);  awc_proc_priv[device_number].proc_name[4]=0; // awc_proc_priv[device_number].proc_name[3]=48+device_number;  awc_proc_priv[device_number].proc_table_device_root[0].procname = &(awc_proc_priv[device_number].proc_name[0]);  awc_proc_priv[device_number].proc_table = kmalloc(sizeof(struct ctl_table) * (awc_nof_rids+2),GFP_KERNEL);  if (!awc_proc_priv[device_number].proc_table){   printk(KERN_CRIT "Out of memory on aironet4500_proc huge table alloc \n");   return -1;  }  awc_proc_priv[device_number].proc_table_device_root[0].child=awc_proc_priv[device_number].proc_table;   if (awc_debug) printk("device  %d of %d proc interface setup ",device_number, awc_nof_rids);  while (awc_rids[group].selector && group < awc_nof_rids){     	if (awc_debug & 0x20000)     		printk(KERN_CRIT "ridgroup %s  size %d \n", awc_rids[group].selector->name,awc_rids[group].size);  	awc_proc_priv[device_number].proc_table[group].ctl_name = group +1;  	awc_proc_priv[device_number].proc_table[group+1].ctl_name = 0;  	awc_proc_priv[device_number].proc_table[group].procname = awc_rids[group].selector->name;  	awc_proc_priv[device_number].proc_table[group].data	= awc_proc_buff;  	awc_proc_priv[device_number].proc_table[group].maxlen  = sizeof(awc_proc_buff) -1;  	awc_proc_priv[device_number].proc_table[group].mode	= 0600;  	awc_proc_priv[device_number].proc_table[group].child	= kmalloc(sizeof(struct ctl_table) * (awc_rids[group].size +2), GFP_KERNEL);  	awc_proc_priv[device_number].proc_table[group].proc_handler = NULL;  	awc_proc_priv[device_number].proc_table[group].strategy = NULL;  	awc_proc_priv[device_number].proc_table[group].de	= NULL;  	awc_proc_priv[device_number].proc_table[group].extra1	= NULL;  	awc_proc_priv[device_number].proc_table[group].extra2	= NULL;  	if (!awc_proc_priv[device_number].proc_table[group].child) {  		awc_proc_priv[device_number].proc_table[group].ctl_name = 0;   		printk(KERN_CRIT "Out of memory on aironet4500_proc huge table alloc \n");  		return 0;  	}  	rid=0;  	while (awc_rids[group].rids[rid].selector && (rid < awc_rids[group].size -1)){//  	   	DEBUG(0x20000,"rid %s  \n", awc_rids[group].rids[rid].name);	  	awc_proc_priv[device_number].proc_table[group].child[rid].ctl_name 	= rid +1;	  	awc_proc_priv[device_number].proc_table[group].child[rid+1].ctl_name 	= 0;	  	awc_proc_priv[device_number].proc_table[group].child[rid].procname 	= awc_rids[group].rids[rid].name;	  	if (awc_rids[group].rids[rid].array > 1 ||	  	    awc_rids[group].rids[rid].bits  > 32 ){	  		awc_proc_priv[device_number].proc_table[group].child[rid].data		= awc_proc_buff;	  		awc_proc_priv[device_number].proc_table[group].child[rid].maxlen  	= sizeof(awc_proc_buff) -1;			  	} else {	  	 	awc_proc_priv[device_number].proc_table[group].child[rid].data		= &awc_int_buff;	  		awc_proc_priv[device_number].proc_table[group].child[rid].maxlen  	= sizeof(awc_int_buff);	  	  	}	  		if ( awc_rids[group].rids[rid].read_only ||	  	     awc_rids[group].rids[rid].selector->read_only )	  		awc_proc_priv[device_number].proc_table[group].child[rid].mode		= 0400;	  	else	  		awc_proc_priv[device_number].proc_table[group].child[rid].mode          = 0600;	  	awc_proc_priv[device_number].proc_table[group].child[rid].child		= NULL;	  	awc_proc_priv[device_number].proc_table[group].child[rid].proc_handler 	= awc_proc_fun;	  	awc_proc_priv[device_number].proc_table[group].child[rid].strategy 	= NULL;	  	awc_proc_priv[device_number].proc_table[group].child[rid].de		= NULL;	  	awc_proc_priv[device_number].proc_table[group].child[rid].extra1	= (void *) &(((struct awc_private* )aironet4500_devices[device_number]->priv)->rid_dir[group]);	  	awc_proc_priv[device_number].proc_table[group].child[rid].extra2	= (void *) &(awc_rids[group].rids[rid]);  		rid++;	  	}  	  	group++;  };// here are driver-level params dir    	awc_proc_priv[device_number].proc_table[group].ctl_name = group +1;  	awc_proc_priv[device_number].proc_table[group+1].ctl_name = 0;  	awc_proc_priv[device_number].proc_table[group].procname = "driver-level";  	awc_proc_priv[device_number].proc_table[group].data	= awc_proc_buff;  	awc_proc_priv[device_number].proc_table[group].maxlen  = sizeof(awc_proc_buff) -1;  	awc_proc_priv[device_number].proc_table[group].mode	= 0600;  	awc_proc_priv[device_number].proc_table[group].child	= kmalloc(sizeof(awc_driver_level_ctable) , GFP_KERNEL);  	awc_proc_priv[device_number].proc_table[group].proc_handler = NULL;  	awc_proc_priv[device_number].proc_table[group].strategy = NULL;  	awc_proc_priv[device_number].proc_table[group].de	= NULL;  	awc_proc_priv[device_number].proc_table[group].extra1	= NULL;  	awc_proc_priv[device_number].proc_table[group].extra2	= NULL;  	if (!awc_proc_priv[device_number].proc_table[group].child) {  		awc_proc_priv[device_number].proc_table[group].ctl_name = 0;   		printk(KERN_CRIT "Out of memory on aironet4500_proc huge table alloc \n");  		return 0;  	}		tmp_table_ptr = awc_proc_priv[device_number].proc_table[group].child;	memcpy(tmp_table_ptr,awc_driver_level_ctable,sizeof(awc_driver_level_ctable));        tmp_table_ptr[0].data =          &(priv->force_rts_on_shorter);        tmp_table_ptr[1].data =   &priv->force_tx_rate;        tmp_table_ptr[2].data = (void *) &priv->ip_tos_reliability_rts;        tmp_table_ptr[3].data = (void *) &priv->ip_tos_troughput_no_retries;        tmp_table_ptr[4].data = (void *) &priv->debug;        tmp_table_ptr[5].data = (void *) &priv->simple_bridge;        tmp_table_ptr[6].data = (void *) &priv->p802_11_send;        tmp_table_ptr[7].data = (void *) &priv->full_stats;	awc_proc_priv[device_number].sysctl_header = 		register_sysctl_table(awc_proc_priv[device_number].proc_table_sys_root,0); 	AWC_ENTRY_EXIT_DEBUG("exit");	if (awc_proc_priv[device_number].sysctl_header)		return 0;	return 1;  };int awc_proc_unset_device(int device_number){  int k; AWC_ENTRY_EXIT_DEBUG("awc_proc_unset_device");  if (awc_proc_priv[device_number].sysctl_header){  	unregister_sysctl_table(awc_proc_priv[device_number].sysctl_header);	awc_proc_priv[device_number].sysctl_header = NULL;  }  if (awc_proc_priv[device_number].proc_table){	  for (k=0; awc_proc_priv[device_number].proc_table[k].ctl_name ; k++ ){	  	if (awc_proc_priv[device_number].proc_table[k].child)	  		kfree(awc_proc_priv[device_number].proc_table[k].child);	  }	  kfree(awc_proc_priv[device_number].proc_table);	  awc_proc_priv[device_number].proc_table = NULL;  }  if (awc_proc_priv[device_number].proc_table_device_root[0].ctl_name)          awc_proc_priv[device_number].proc_table_device_root[0].ctl_name = 0;  if (awc_proc_priv[device_number].proc_table_sys_root[0].ctl_name)          awc_proc_priv[device_number].proc_table_sys_root[0].ctl_name = 0;  	AWC_ENTRY_EXIT_DEBUG("exit");   return 0;};static int aironet_proc_init(void) {	int i=0;	AWC_ENTRY_EXIT_DEBUG("init_module");	for (i=0; i < MAX_AWCS;  i++){		awc_proc_set_device(i);	}	awc_register_proc(awc_proc_set_device, awc_proc_unset_device);	awc_driver_sysctl_header = register_sysctl_table(awc_root_table,0);	AWC_ENTRY_EXIT_DEBUG("exit");	return 0;};static void aironet_proc_exit(void){	int i=0;	AWC_ENTRY_EXIT_DEBUG("cleanup_module");	awc_unregister_proc();	for (i=0; i < MAX_AWCS;  i++){		awc_proc_unset_device(i);	}	if (awc_driver_sysctl_header)		unregister_sysctl_table(awc_driver_sysctl_header);	AWC_ENTRY_EXIT_DEBUG("exit");};module_init(aironet_proc_init);module_exit(aironet_proc_exit);#endif // whole proc system styff

⌨️ 快捷键说明

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