qeth_sys.c
来自「linux 内核源代码」· C语言 代码 · 共 1,859 行 · 第 1/4 页
C
1,859 行
return sprintf(buf, "%i\n", card->options.add_hhlen);}static ssize_tqeth_dev_add_hhlen_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; i = simple_strtoul(buf, &tmp, 10); if ((i < 0) || (i > MAX_ADD_HHLEN)) { PRINT_WARN("add_hhlen out of range\n"); return -EINVAL; } card->options.add_hhlen = i; return count;}static DEVICE_ATTR(add_hhlen, 0644, qeth_dev_add_hhlen_show, qeth_dev_add_hhlen_store);static ssize_tqeth_dev_fake_ll_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; return sprintf(buf, "%i\n", card->options.fake_ll? 1:0);}static ssize_tqeth_dev_fake_ll_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; i = simple_strtoul(buf, &tmp, 16); if ((i != 0) && (i != 1)) { PRINT_WARN("fake_ll: write 0 or 1 to this file!\n"); return -EINVAL; } card->options.fake_ll = i; return count;}static DEVICE_ATTR(fake_ll, 0644, qeth_dev_fake_ll_show, qeth_dev_fake_ll_store);static ssize_tqeth_dev_fake_broadcast_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; return sprintf(buf, "%i\n", card->options.fake_broadcast? 1:0);}static ssize_tqeth_dev_fake_broadcast_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; i = simple_strtoul(buf, &tmp, 16); if ((i == 0) || (i == 1)) card->options.fake_broadcast = i; else { PRINT_WARN("fake_broadcast: write 0 or 1 to this file!\n"); return -EINVAL; } return count;}static DEVICE_ATTR(fake_broadcast, 0644, qeth_dev_fake_broadcast_show, qeth_dev_fake_broadcast_store);static ssize_tqeth_dev_recover_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if (card->state != CARD_STATE_UP) return -EPERM; i = simple_strtoul(buf, &tmp, 16); if (i == 1) qeth_schedule_recovery(card); return count;}static DEVICE_ATTR(recover, 0200, NULL, qeth_dev_recover_store);static ssize_tqeth_dev_broadcast_mode_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; if (!((card->info.link_type == QETH_LINK_TYPE_HSTR) || (card->info.link_type == QETH_LINK_TYPE_LANE_TR))) return sprintf(buf, "n/a\n"); return sprintf(buf, "%s\n", (card->options.broadcast_mode == QETH_TR_BROADCAST_ALLRINGS)? "all rings":"local");}static ssize_tqeth_dev_broadcast_mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; if (!((card->info.link_type == QETH_LINK_TYPE_HSTR) || (card->info.link_type == QETH_LINK_TYPE_LANE_TR))){ PRINT_WARN("Device is not a tokenring device!\n"); return -EINVAL; } tmp = strsep((char **) &buf, "\n"); if (!strcmp(tmp, "local")){ card->options.broadcast_mode = QETH_TR_BROADCAST_LOCAL; return count; } else if (!strcmp(tmp, "all_rings")) { card->options.broadcast_mode = QETH_TR_BROADCAST_ALLRINGS; return count; } else { PRINT_WARN("broadcast_mode: invalid mode %s!\n", tmp); return -EINVAL; } return count;}static DEVICE_ATTR(broadcast_mode, 0644, qeth_dev_broadcast_mode_show, qeth_dev_broadcast_mode_store);static ssize_tqeth_dev_canonical_macaddr_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; if (!((card->info.link_type == QETH_LINK_TYPE_HSTR) || (card->info.link_type == QETH_LINK_TYPE_LANE_TR))) return sprintf(buf, "n/a\n"); return sprintf(buf, "%i\n", (card->options.macaddr_mode == QETH_TR_MACADDR_CANONICAL)? 1:0);}static ssize_tqeth_dev_canonical_macaddr_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; if (!((card->info.link_type == QETH_LINK_TYPE_HSTR) || (card->info.link_type == QETH_LINK_TYPE_LANE_TR))){ PRINT_WARN("Device is not a tokenring device!\n"); return -EINVAL; } i = simple_strtoul(buf, &tmp, 16); if ((i == 0) || (i == 1)) card->options.macaddr_mode = i? QETH_TR_MACADDR_CANONICAL : QETH_TR_MACADDR_NONCANONICAL; else { PRINT_WARN("canonical_macaddr: write 0 or 1 to this file!\n"); return -EINVAL; } return count;}static DEVICE_ATTR(canonical_macaddr, 0644, qeth_dev_canonical_macaddr_show, qeth_dev_canonical_macaddr_store);static ssize_tqeth_dev_layer2_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; return sprintf(buf, "%i\n", card->options.layer2 ? 1:0);}static ssize_tqeth_dev_layer2_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; if (card->info.type == QETH_CARD_TYPE_IQD) { PRINT_WARN("Layer2 on Hipersockets is not supported! \n"); return -EPERM; } if (((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER))) return -EPERM; i = simple_strtoul(buf, &tmp, 16); if ((i == 0) || (i == 1)) card->options.layer2 = i; else { PRINT_WARN("layer2: write 0 or 1 to this file!\n"); return -EINVAL; } return count;}static DEVICE_ATTR(layer2, 0644, qeth_dev_layer2_show, qeth_dev_layer2_store);static ssize_tqeth_dev_performance_stats_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; return sprintf(buf, "%i\n", card->options.performance_stats ? 1:0);}static ssize_tqeth_dev_performance_stats_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; char *tmp; int i; if (!card) return -EINVAL; i = simple_strtoul(buf, &tmp, 16); if ((i == 0) || (i == 1)) { if (i == card->options.performance_stats) return count; card->options.performance_stats = i; if (i == 0) memset(&card->perf_stats, 0, sizeof(struct qeth_perf_stats)); card->perf_stats.initial_rx_packets = card->stats.rx_packets; card->perf_stats.initial_tx_packets = card->stats.tx_packets; } else { PRINT_WARN("performance_stats: write 0 or 1 to this file!\n"); return -EINVAL; } return count;}static DEVICE_ATTR(performance_stats, 0644, qeth_dev_performance_stats_show, qeth_dev_performance_stats_store);static ssize_tqeth_dev_large_send_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; if (!card) return -EINVAL; switch (card->options.large_send) { case QETH_LARGE_SEND_NO: return sprintf(buf, "%s\n", "no"); case QETH_LARGE_SEND_EDDP: return sprintf(buf, "%s\n", "EDDP"); case QETH_LARGE_SEND_TSO: return sprintf(buf, "%s\n", "TSO"); default: return sprintf(buf, "%s\n", "N/A"); }}static ssize_tqeth_dev_large_send_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; enum qeth_large_send_types type; int rc = 0; char *tmp; if (!card) return -EINVAL; tmp = strsep((char **) &buf, "\n"); if (!strcmp(tmp, "no")){ type = QETH_LARGE_SEND_NO; } else if (!strcmp(tmp, "EDDP")) { type = QETH_LARGE_SEND_EDDP; } else if (!strcmp(tmp, "TSO")) { type = QETH_LARGE_SEND_TSO; } else { PRINT_WARN("large_send: invalid mode %s!\n", tmp); return -EINVAL; } if (card->options.large_send == type) return count; if ((rc = qeth_set_large_send(card, type))) return rc; return count;}static DEVICE_ATTR(large_send, 0644, qeth_dev_large_send_show, qeth_dev_large_send_store);static ssize_tqeth_dev_blkt_show(char *buf, struct qeth_card *card, int value ){ if (!card) return -EINVAL; return sprintf(buf, "%i\n", value);}static ssize_tqeth_dev_blkt_store(struct qeth_card *card, const char *buf, size_t count, int *value, int max_value){ char *tmp; int i; if (!card) return -EINVAL; if ((card->state != CARD_STATE_DOWN) && (card->state != CARD_STATE_RECOVER)) return -EPERM; i = simple_strtoul(buf, &tmp, 10); if (i <= max_value) { *value = i; } else { PRINT_WARN("blkt total time: write values between" " 0 and %d to this file!\n", max_value); return -EINVAL; } return count;}static ssize_tqeth_dev_blkt_total_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_show(buf, card, card->info.blkt.time_total);}static ssize_tqeth_dev_blkt_total_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_store(card, buf, count, &card->info.blkt.time_total,1000);}static DEVICE_ATTR(total, 0644, qeth_dev_blkt_total_show, qeth_dev_blkt_total_store);static ssize_tqeth_dev_blkt_inter_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_show(buf, card, card->info.blkt.inter_packet);}static ssize_tqeth_dev_blkt_inter_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_store(card, buf, count, &card->info.blkt.inter_packet,100);}static DEVICE_ATTR(inter, 0644, qeth_dev_blkt_inter_show, qeth_dev_blkt_inter_store);static ssize_tqeth_dev_blkt_inter_jumbo_show(struct device *dev, struct device_attribute *attr, char *buf){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_show(buf, card, card->info.blkt.inter_packet_jumbo);}static ssize_tqeth_dev_blkt_inter_jumbo_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ struct qeth_card *card = dev->driver_data; return qeth_dev_blkt_store(card, buf, count, &card->info.blkt.inter_packet_jumbo,100);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?