📄 arlan-proc.c
字号:
retv = proc_dostring(ctl, write, filp, buffer, lenp, ppos); else { *lenp = 0; return -1; } return retv;}static int arlan_sysctl_info161719(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int i; int retv, pos, devnum; struct arlan_private *priva = NULL; pos = 0; devnum = ctl->procname[5] - '0'; if (arlan_device[devnum] == NULL) { pos += sprintf(arlan_drive_info + pos, "No device found here \n"); goto final; } else priva = arlan_device[devnum]->priv; if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); SARLUCN(_16, 0xC0); SARLUCN(_17, 0x6A); SARLUCN(_18, 14); SARLUCN(_19, 0x86); SARLUCN(_21, 0x3fd);final: *lenp = pos; retv = proc_dostring(ctl, write, filp, buffer, lenp, ppos); return retv;}static int arlan_sysctl_infotxRing(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int i; int retv, pos, devnum; struct arlan_private *priva = NULL; pos = 0; devnum = ctl->procname[5] - '0'; if (arlan_device[devnum] == NULL) { pos += sprintf(arlan_drive_info + pos, "No device found here \n"); goto final; } else priva = arlan_device[devnum]->priv; if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); SARLBNpln(u_char, txBuffer, 0x800);final: *lenp = pos; retv = proc_dostring(ctl, write, filp, buffer, lenp, ppos); return retv;}static int arlan_sysctl_inforxRing(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int i; int retv, pos, devnum; struct arlan_private *priva = NULL; pos = 0; devnum = ctl->procname[5] - '0'; if (arlan_device[devnum] == NULL) { pos += sprintf(arlan_drive_info + pos, "No device found here \n"); goto final; } else priva = arlan_device[devnum]->priv; if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); SARLBNpln(u_char, rxBuffer, 0x800);final: *lenp = pos; retv = proc_dostring(ctl, write, filp, buffer, lenp, ppos); return retv;}static int arlan_sysctl_info18(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int i; int retv, pos, devnum; struct arlan_private *priva = NULL; pos = 0; devnum = ctl->procname[5] - '0'; if (arlan_device[devnum] == NULL) { pos += sprintf(arlan_drive_info + pos, "No device found here \n"); goto final; } else priva = arlan_device[devnum]->priv; if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); SARLBNpln(u_char, _18, 0x800);final: *lenp = pos; retv = proc_dostring(ctl, write, filp, buffer, lenp, ppos); return retv;}#endif /* #ifdef ARLAN_PROC_SHM_DUMP */static char conf_reset_result[200];static int arlan_configure(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int pos = 0; int devnum = ctl->procname[6] - '0'; struct arlan_private *priv; if (devnum < 0 || devnum > MAX_ARLANS - 1) { printk(KERN_WARNING "too strange devnum in procfs parse\n "); return -1; } else if (arlan_device[devnum] != NULL) { priv = arlan_device[devnum]->priv; arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_CONF); } else return -1; *lenp = pos; return proc_dostring(ctl, write, filp, buffer, lenp, ppos);}static int arlan_sysctl_reset(ctl_table * ctl, int write, struct file *filp, void __user *buffer, size_t * lenp, loff_t *ppos){ int pos = 0; int devnum = ctl->procname[5] - '0'; struct arlan_private *priv; if (devnum < 0 || devnum > MAX_ARLANS - 1) { printk(KERN_WARNING "too strange devnum in procfs parse\n "); return -1; } else if (arlan_device[devnum] != NULL) { priv = arlan_device[devnum]->priv; arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_RESET); } else return -1; *lenp = pos + 3; return proc_dostring(ctl, write, filp, buffer, lenp, ppos);}/* Place files in /proc/sys/dev/arlan */#define CTBLN(num,card,nam) \ { .ctl_name = num,\ .procname = #nam,\ .data = &(arlan_conf[card].nam),\ .maxlen = sizeof(int), .mode = 0600, .proc_handler = &proc_dointvec}#ifdef ARLAN_DEBUGGING#define ARLAN_PROC_DEBUG_ENTRIES \ { .ctl_name = 48, .procname = "entry_exit_debug",\ .data = &arlan_entry_and_exit_debug,\ .maxlen = sizeof(int), .mode = 0600, .proc_handler = &proc_dointvec},\ { .ctl_name = 49, .procname = "debug", .data = &arlan_debug,\ .maxlen = sizeof(int), .mode = 0600, .proc_handler = &proc_dointvec},#else #define ARLAN_PROC_DEBUG_ENTRIES#endif#define ARLAN_SYSCTL_TABLE_TOTAL(cardNo)\ CTBLN(1,cardNo,spreadingCode),\ CTBLN(2,cardNo, channelNumber),\ CTBLN(3,cardNo, scramblingDisable),\ CTBLN(4,cardNo, txAttenuation),\ CTBLN(5,cardNo, systemId), \ CTBLN(6,cardNo, maxDatagramSize),\ CTBLN(7,cardNo, maxFrameSize),\ CTBLN(8,cardNo, maxRetries),\ CTBLN(9,cardNo, receiveMode),\ CTBLN(10,cardNo, priority),\ CTBLN(11,cardNo, rootOrRepeater),\ CTBLN(12,cardNo, SID),\ CTBLN(13,cardNo, registrationMode),\ CTBLN(14,cardNo, registrationFill),\ CTBLN(15,cardNo, localTalkAddress),\ CTBLN(16,cardNo, codeFormat),\ CTBLN(17,cardNo, numChannels),\ CTBLN(18,cardNo, channel1),\ CTBLN(19,cardNo, channel2),\ CTBLN(20,cardNo, channel3),\ CTBLN(21,cardNo, channel4),\ CTBLN(22,cardNo, txClear),\ CTBLN(23,cardNo, txRetries),\ CTBLN(24,cardNo, txRouting),\ CTBLN(25,cardNo, txScrambled),\ CTBLN(26,cardNo, rxParameter),\ CTBLN(27,cardNo, txTimeoutMs),\ CTBLN(28,cardNo, waitCardTimeout),\ CTBLN(29,cardNo, channelSet), \ {.ctl_name = 30, .procname = "name",\ .data = arlan_conf[cardNo].siteName,\ .maxlen = 16, .mode = 0600, .proc_handler = &proc_dostring},\ CTBLN(31,cardNo,waitTime),\ CTBLN(32,cardNo,lParameter),\ CTBLN(33,cardNo,_15),\ CTBLN(34,cardNo,headerSize),\ CTBLN(36,cardNo,tx_delay_ms),\ CTBLN(37,cardNo,retries),\ CTBLN(38,cardNo,ReTransmitPacketMaxSize),\ CTBLN(39,cardNo,waitReTransmitPacketMaxSize),\ CTBLN(40,cardNo,fastReTransCount),\ CTBLN(41,cardNo,driverRetransmissions),\ CTBLN(42,cardNo,txAckTimeoutMs),\ CTBLN(43,cardNo,registrationInterrupts),\ CTBLN(44,cardNo,hardwareType),\ CTBLN(45,cardNo,radioType),\ CTBLN(46,cardNo,writeEEPROM),\ CTBLN(47,cardNo,writeRadioType),\ ARLAN_PROC_DEBUG_ENTRIES\ CTBLN(50,cardNo,in_speed),\ CTBLN(51,cardNo,out_speed),\ CTBLN(52,cardNo,in_speed10),\ CTBLN(53,cardNo,out_speed10),\ CTBLN(54,cardNo,in_speed_max),\ CTBLN(55,cardNo,out_speed_max),\ CTBLN(56,cardNo,measure_rate),\ CTBLN(57,cardNo,pre_Command_Wait),\ CTBLN(58,cardNo,rx_tweak1),\ CTBLN(59,cardNo,rx_tweak2),\ CTBLN(60,cardNo,tx_queue_len),\static ctl_table arlan_conf_table0[] ={ ARLAN_SYSCTL_TABLE_TOTAL(0)#ifdef ARLAN_PROC_SHM_DUMP { .ctl_name = 150, .procname = "arlan0-txRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_infotxRing, }, { .ctl_name = 151, .procname = "arlan0-rxRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_inforxRing, }, { .ctl_name = 152, .procname = "arlan0-18", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info18, }, { .ctl_name = 153, .procname = "arlan0-ring", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info161719, }, { .ctl_name = 154, .procname = "arlan0-shm-cpy", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info, },#endif { .ctl_name = 155, .procname = "config0", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_configure }, { .ctl_name = 156, .procname = "reset0", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_sysctl_reset, }, { .ctl_name = 0 }};static ctl_table arlan_conf_table1[] ={ ARLAN_SYSCTL_TABLE_TOTAL(1)#ifdef ARLAN_PROC_SHM_DUMP { .ctl_name = 150, .procname = "arlan1-txRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_infotxRing, }, { .ctl_name = 151, .procname = "arlan1-rxRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_inforxRing, }, { .ctl_name = 152, .procname = "arlan1-18", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info18, }, { .ctl_name = 153, .procname = "arlan1-ring", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info161719, }, { .ctl_name = 154, .procname = "arlan1-shm-cpy", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info, },#endif { .ctl_name = 155, .procname = "config1", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_configure, }, { .ctl_name = 156, .procname = "reset1", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_sysctl_reset, }, { .ctl_name = 0 }};static ctl_table arlan_conf_table2[] ={ ARLAN_SYSCTL_TABLE_TOTAL(2)#ifdef ARLAN_PROC_SHM_DUMP { .ctl_name = 150, .procname = "arlan2-txRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_infotxRing, }, { .ctl_name = 151, .procname = "arlan2-rxRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_inforxRing, }, { .ctl_name = 152, .procname = "arlan2-18", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info18, }, { .ctl_name = 153, .procname = "arlan2-ring", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info161719, }, { .ctl_name = 154, .procname = "arlan2-shm-cpy", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info, },#endif { .ctl_name = 155, .procname = "config2", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_configure, }, { .ctl_name = 156, .procname = "reset2", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_sysctl_reset, }, { .ctl_name = 0 }};static ctl_table arlan_conf_table3[] ={ ARLAN_SYSCTL_TABLE_TOTAL(3)#ifdef ARLAN_PROC_SHM_DUMP { .ctl_name = 150, .procname = "arlan3-txRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_infotxRing, }, { .ctl_name = 151, .procname = "arlan3-rxRing", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_inforxRing, }, { .ctl_name = 152, .procname = "arlan3-18", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info18, }, { .ctl_name = 153, .procname = "arlan3-ring", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info161719, }, { .ctl_name = 154, .procname = "arlan3-shm-cpy", .data = &arlan_drive_info, .maxlen = ARLAN_STR_SIZE, .mode = 0400, .proc_handler = &arlan_sysctl_info, },#endif { .ctl_name = 155, .procname = "config3", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_configure, }, { .ctl_name = 156, .procname = "reset3", .data = &conf_reset_result, .maxlen = 100, .mode = 0400, .proc_handler = &arlan_sysctl_reset, }, { .ctl_name = 0 }};static ctl_table arlan_table[] ={ { .ctl_name = 0, .procname = "arlan0", .maxlen = 0, .mode = 0600, .child = arlan_conf_table0, }, { .ctl_name = 0, .procname = "arlan1", .maxlen = 0, .mode = 0600, .child = arlan_conf_table1, }, { .ctl_name = 0, .procname = "arlan2", .maxlen = 0, .mode = 0600, .child = arlan_conf_table2, }, { .ctl_name = 0, .procname = "arlan3", .maxlen = 0, .mode = 0600, .child = arlan_conf_table3, }, { .ctl_name = 0 }};#elsestatic ctl_table arlan_table[MAX_ARLANS + 1] ={ { .ctl_name = 0 }};#endif#elsestatic ctl_table arlan_table[MAX_ARLANS + 1] ={ { .ctl_name = 0 }};#endif// static int mmtu = 1234;static ctl_table arlan_root_table[] ={ { .ctl_name = 254, .procname = "arlan", .maxlen = 0, .mode = 0555, .child = arlan_table, }, { .ctl_name = 0 }};/* Make sure that /proc/sys/dev is there *///static ctl_table arlan_device_root_table[] =//{// {CTL_DEV, "dev", NULL, 0, 0555, arlan_root_table},// {0}//};#ifdef CONFIG_PROC_FSstatic struct ctl_table_header *arlan_device_sysctl_header;int __init init_arlan_proc(void){ int i = 0; if (arlan_device_sysctl_header) return 0; for (i = 0; i < MAX_ARLANS && arlan_device[i]; i++) arlan_table[i].ctl_name = i + 1; arlan_device_sysctl_header = register_sysctl_table(arlan_root_table, 0); if (!arlan_device_sysctl_header) return -1; return 0;}void __exit cleanup_arlan_proc(void){ unregister_sysctl_table(arlan_device_sysctl_header); arlan_device_sysctl_header = NULL;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -