Merge branch 'upstream-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

+77 -263
+4
drivers/net/phy/phy_device.c
··· 38 #include <asm/irq.h> 39 #include <asm/uaccess.h> 40 41 static struct phy_driver genphy_driver; 42 extern int mdio_bus_init(void); 43 extern void mdio_bus_exit(void);
··· 38 #include <asm/irq.h> 39 #include <asm/uaccess.h> 40 41 + MODULE_DESCRIPTION("PHY library"); 42 + MODULE_AUTHOR("Andy Fleming"); 43 + MODULE_LICENSE("GPL"); 44 + 45 static struct phy_driver genphy_driver; 46 extern int mdio_bus_init(void); 47 extern void mdio_bus_exit(void);
+5 -1
drivers/net/wireless/orinoco_nortel.c
··· 1 /* orinoco_nortel.c 2 * 3 * Driver for Prism II devices which would usually be driven by orinoco_cs, 4 * but are connected to the PCI bus by a Nortel PCI-PCMCIA-Adapter. 5 * 6 * Copyright (C) 2002 Tobias Hoffmann ··· 167 goto fail_resources; 168 } 169 170 - iomem = pci_iomap(pdev, 3, 0); 171 if (!iomem) { 172 err = -ENOMEM; 173 goto fail_map_io; ··· 267 static struct pci_device_id nortel_pci_id_table[] = { 268 /* Nortel emobility PCI */ 269 {0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,}, 270 {0,}, 271 }; 272
··· 1 /* orinoco_nortel.c 2 * 3 * Driver for Prism II devices which would usually be driven by orinoco_cs, 4 + * but are connected to the PCI bus by a PCI-to-PCMCIA adapter used in 5 + * Nortel emobility, Symbol LA-4113 and Symbol LA-4123. 6 * but are connected to the PCI bus by a Nortel PCI-PCMCIA-Adapter. 7 * 8 * Copyright (C) 2002 Tobias Hoffmann ··· 165 goto fail_resources; 166 } 167 168 + iomem = pci_iomap(pdev, 2, 0); 169 if (!iomem) { 170 err = -ENOMEM; 171 goto fail_map_io; ··· 265 static struct pci_device_id nortel_pci_id_table[] = { 266 /* Nortel emobility PCI */ 267 {0x126c, 0x8030, PCI_ANY_ID, PCI_ANY_ID,}, 268 + /* Symbol LA-4123 PCI */ 269 + {0x1562, 0x0001, PCI_ANY_ID, PCI_ANY_ID,}, 270 {0,}, 271 }; 272
+2 -1
drivers/s390/net/qeth_eddp.c
··· 62 for (i = 0; i < ctx->num_pages; ++i) 63 free_page((unsigned long)ctx->pages[i]); 64 kfree(ctx->pages); 65 - kfree(ctx->elements); 66 kfree(ctx); 67 } 68
··· 62 for (i = 0; i < ctx->num_pages; ++i) 63 free_page((unsigned long)ctx->pages[i]); 64 kfree(ctx->pages); 65 + if (ctx->elements != NULL) 66 + kfree(ctx->elements); 67 kfree(ctx); 68 } 69
+29 -32
drivers/s390/net/qeth_main.c
··· 1 /* 2 * 3 - * linux/drivers/s390/net/qeth_main.c ($Revision: 1.242 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * ··· 12 * Frank Pavlic (fpavlic@de.ibm.com) and 13 * Thomas Spatzier <tspat@de.ibm.com> 14 * 15 - * $Revision: 1.242 $ $Date: 2005/05/04 20:19:18 $ 16 * 17 * This program is free software; you can redistribute it and/or modify 18 * it under the terms of the GNU General Public License as published by ··· 72 #include "qeth_eddp.h" 73 #include "qeth_tso.h" 74 75 - #define VERSION_QETH_C "$Revision: 1.242 $" 76 static const char *version = "qeth S/390 OSA-Express driver"; 77 78 /** ··· 518 519 QETH_DBF_TEXT(setup, 3, "setoffl"); 520 QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); 521 - 522 recover_flag = card->state; 523 if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ 524 PRINT_WARN("Stopping card %s interrupted by user!\n", ··· 1021 qeth_schedule_recovery(struct qeth_card *card) 1022 { 1023 QETH_DBF_TEXT(trace,2,"startrec"); 1024 - 1025 if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) 1026 schedule_work(&card->kernel_thread_starter); 1027 } ··· 1710 "IP address reset.\n", 1711 QETH_CARD_IFNAME(card), 1712 card->info.chpid); 1713 - netif_carrier_on(card->dev); 1714 qeth_schedule_recovery(card); 1715 return NULL; 1716 case IPA_CMD_MODCCID: ··· 1958 { 1959 u16 s1, s2; 1960 1961 - QETH_DBF_TEXT(trace,4,"osndipa"); 1962 1963 qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); 1964 s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len); ··· 2202 } 2203 2204 static inline int 2205 - qeth_check_for_inbound_error(struct qeth_qdio_buffer *buf, 2206 - unsigned int qdio_error, 2207 - unsigned int siga_error) 2208 { 2209 - int rc = 0; 2210 - 2211 if (qdio_error || siga_error) { 2212 - QETH_DBF_TEXT(trace, 2, "qdinerr"); 2213 - QETH_DBF_TEXT(qerr, 2, "qdinerr"); 2214 QETH_DBF_TEXT_(qerr, 2, " F15=%02X", 2215 - buf->buffer->element[15].flags & 0xff); 2216 QETH_DBF_TEXT_(qerr, 2, " F14=%02X", 2217 - buf->buffer->element[14].flags & 0xff); 2218 QETH_DBF_TEXT_(qerr, 2, " qerr=%X", qdio_error); 2219 QETH_DBF_TEXT_(qerr, 2, " serr=%X", siga_error); 2220 - rc = 1; 2221 } 2222 - return rc; 2223 } 2224 2225 static inline struct sk_buff * ··· 2765 for (i = first_element; i < (first_element + count); ++i) { 2766 index = i % QDIO_MAX_BUFFERS_PER_Q; 2767 buffer = &card->qdio.in_q->bufs[index]; 2768 - if (!((status == QDIO_STATUS_LOOK_FOR_ERROR) && 2769 - qeth_check_for_inbound_error(buffer, qdio_err, siga_err))) 2770 qeth_process_inbound_buffer(card, buffer, index); 2771 /* clear buffer and give back to hardware */ 2772 qeth_put_buffer_pool_entry(card, buffer->pool_entry); ··· 2782 static inline int 2783 qeth_handle_send_error(struct qeth_card *card, 2784 struct qeth_qdio_out_buffer *buffer, 2785 - int qdio_err, int siga_err) 2786 { 2787 int sbalf15 = buffer->buffer->element[15].flags & 0xff; 2788 int cc = siga_err & 3; 2789 2790 QETH_DBF_TEXT(trace, 6, "hdsnderr"); 2791 switch (cc) { 2792 case 0: 2793 if (qdio_err){ ··· 3045 for(i = first_element; i < (first_element + count); ++i){ 3046 buffer = &queue->bufs[i % QDIO_MAX_BUFFERS_PER_Q]; 3047 /*we only handle the KICK_IT error by doing a recovery */ 3048 - if (qeth_handle_send_error(card, buffer, qdio_error, siga_error) 3049 == QETH_SEND_ERROR_KICK_IT){ 3050 netif_stop_queue(card->dev); 3051 qeth_schedule_recovery(card); ··· 3288 card->qdio.in_buf_pool.buf_count = card->qdio.init_pool.buf_count; 3289 INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list); 3290 INIT_LIST_HEAD(&card->qdio.init_pool.entry_list); 3291 - /* outbound */ 3292 } 3293 3294 static int ··· 3729 break; 3730 } 3731 } 3732 #endif 3733 return rc; 3734 } ··· 3808 card->data.state = CH_STATE_UP; 3809 card->state = CARD_STATE_UP; 3810 3811 - if (!card->lan_online){ 3812 - if (netif_carrier_ok(dev)) 3813 - netif_carrier_off(dev); 3814 - } 3815 return 0; 3816 } 3817 ··· 5869 struct inet6_dev *in6_dev; 5870 5871 QETH_DBF_TEXT(trace,4,"chkmcv6"); 5872 - if ((card->options.layer2 == 0) && 5873 - (!qeth_is_supported(card, IPA_IPV6)) ) 5874 return ; 5875 - 5876 in6_dev = in6_dev_get(card->dev); 5877 if (in6_dev == NULL) 5878 return; ··· 7933 QETH_DBF_TEXT_(setup, 2, "6err%d", rc); 7934 goto out_remove; 7935 } 7936 - /*maybe it was set offline without ifconfig down 7937 - * we can also use this state for recovery purposes*/ 7938 qeth_set_allowed_threads(card, 0xffffffff, 0); 7939 if (recover_flag == CARD_STATE_RECOVER) 7940 qeth_start_again(card, recovery_mode);
··· 1 /* 2 * 3 + * linux/drivers/s390/net/qeth_main.c ($Revision: 1.251 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * ··· 12 * Frank Pavlic (fpavlic@de.ibm.com) and 13 * Thomas Spatzier <tspat@de.ibm.com> 14 * 15 + * $Revision: 1.251 $ $Date: 2005/05/04 20:19:18 $ 16 * 17 * This program is free software; you can redistribute it and/or modify 18 * it under the terms of the GNU General Public License as published by ··· 72 #include "qeth_eddp.h" 73 #include "qeth_tso.h" 74 75 + #define VERSION_QETH_C "$Revision: 1.251 $" 76 static const char *version = "qeth S/390 OSA-Express driver"; 77 78 /** ··· 518 519 QETH_DBF_TEXT(setup, 3, "setoffl"); 520 QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); 521 + 522 + netif_carrier_off(card->dev); 523 recover_flag = card->state; 524 if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ 525 PRINT_WARN("Stopping card %s interrupted by user!\n", ··· 1020 qeth_schedule_recovery(struct qeth_card *card) 1021 { 1022 QETH_DBF_TEXT(trace,2,"startrec"); 1023 if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) 1024 schedule_work(&card->kernel_thread_starter); 1025 } ··· 1710 "IP address reset.\n", 1711 QETH_CARD_IFNAME(card), 1712 card->info.chpid); 1713 qeth_schedule_recovery(card); 1714 return NULL; 1715 case IPA_CMD_MODCCID: ··· 1959 { 1960 u16 s1, s2; 1961 1962 + QETH_DBF_TEXT(trace,4,"osndipa"); 1963 1964 qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); 1965 s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len); ··· 2203 } 2204 2205 static inline int 2206 + qeth_check_qdio_errors(struct qdio_buffer *buf, unsigned int qdio_error, 2207 + unsigned int siga_error, const char *dbftext) 2208 { 2209 if (qdio_error || siga_error) { 2210 + QETH_DBF_TEXT(trace, 2, dbftext); 2211 + QETH_DBF_TEXT(qerr, 2, dbftext); 2212 QETH_DBF_TEXT_(qerr, 2, " F15=%02X", 2213 + buf->element[15].flags & 0xff); 2214 QETH_DBF_TEXT_(qerr, 2, " F14=%02X", 2215 + buf->element[14].flags & 0xff); 2216 QETH_DBF_TEXT_(qerr, 2, " qerr=%X", qdio_error); 2217 QETH_DBF_TEXT_(qerr, 2, " serr=%X", siga_error); 2218 + return 1; 2219 } 2220 + return 0; 2221 } 2222 2223 static inline struct sk_buff * ··· 2769 for (i = first_element; i < (first_element + count); ++i) { 2770 index = i % QDIO_MAX_BUFFERS_PER_Q; 2771 buffer = &card->qdio.in_q->bufs[index]; 2772 + if (!((status & QDIO_STATUS_LOOK_FOR_ERROR) && 2773 + qeth_check_qdio_errors(buffer->buffer, 2774 + qdio_err, siga_err,"qinerr"))) 2775 qeth_process_inbound_buffer(card, buffer, index); 2776 /* clear buffer and give back to hardware */ 2777 qeth_put_buffer_pool_entry(card, buffer->pool_entry); ··· 2785 static inline int 2786 qeth_handle_send_error(struct qeth_card *card, 2787 struct qeth_qdio_out_buffer *buffer, 2788 + unsigned int qdio_err, unsigned int siga_err) 2789 { 2790 int sbalf15 = buffer->buffer->element[15].flags & 0xff; 2791 int cc = siga_err & 3; 2792 2793 QETH_DBF_TEXT(trace, 6, "hdsnderr"); 2794 + qeth_check_qdio_errors(buffer->buffer, qdio_err, siga_err, "qouterr"); 2795 switch (cc) { 2796 case 0: 2797 if (qdio_err){ ··· 3047 for(i = first_element; i < (first_element + count); ++i){ 3048 buffer = &queue->bufs[i % QDIO_MAX_BUFFERS_PER_Q]; 3049 /*we only handle the KICK_IT error by doing a recovery */ 3050 + if (qeth_handle_send_error(card, buffer, 3051 + qdio_error, siga_error) 3052 == QETH_SEND_ERROR_KICK_IT){ 3053 netif_stop_queue(card->dev); 3054 qeth_schedule_recovery(card); ··· 3289 card->qdio.in_buf_pool.buf_count = card->qdio.init_pool.buf_count; 3290 INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list); 3291 INIT_LIST_HEAD(&card->qdio.init_pool.entry_list); 3292 } 3293 3294 static int ··· 3731 break; 3732 } 3733 } 3734 + if (rc && !(VLAN_DEV_INFO(dev)->real_dev->priv == (void *)card)) 3735 + return 0; 3736 + 3737 #endif 3738 return rc; 3739 } ··· 3807 card->data.state = CH_STATE_UP; 3808 card->state = CARD_STATE_UP; 3809 3810 + if (!card->lan_online && netif_carrier_ok(dev)) 3811 + netif_carrier_off(dev); 3812 return 0; 3813 } 3814 ··· 5870 struct inet6_dev *in6_dev; 5871 5872 QETH_DBF_TEXT(trace,4,"chkmcv6"); 5873 + if (!qeth_is_supported(card, IPA_IPV6)) 5874 return ; 5875 in6_dev = in6_dev_get(card->dev); 5876 if (in6_dev == NULL) 5877 return; ··· 7936 QETH_DBF_TEXT_(setup, 2, "6err%d", rc); 7937 goto out_remove; 7938 } 7939 + netif_carrier_on(card->dev); 7940 + 7941 qeth_set_allowed_threads(card, 0xffffffff, 0); 7942 if (recover_flag == CARD_STATE_RECOVER) 7943 qeth_start_again(card, recovery_mode);
+1 -1
drivers/s390/net/qeth_mpc.c
··· 11 #include <asm/cio.h> 12 #include "qeth_mpc.h" 13 14 - const char *VERSION_QETH_MPC_C = "$Revision: 1.12 $"; 15 16 unsigned char IDX_ACTIVATE_READ[]={ 17 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
··· 11 #include <asm/cio.h> 12 #include "qeth_mpc.h" 13 14 + const char *VERSION_QETH_MPC_C = "$Revision: 1.13 $"; 15 16 unsigned char IDX_ACTIVATE_READ[]={ 17 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
+2 -2
drivers/s390/net/qeth_mpc.h
··· 14 15 #include <asm/qeth.h> 16 17 - #define VERSION_QETH_MPC_H "$Revision: 1.44 $" 18 19 extern const char *VERSION_QETH_MPC_C; 20 21 #define IPA_PDU_HEADER_SIZE 0x40 22 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) 23 #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) 24 - #define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x2a) 25 #define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a) 26 27 extern unsigned char IPA_PDU_HEADER[];
··· 14 15 #include <asm/qeth.h> 16 17 + #define VERSION_QETH_MPC_H "$Revision: 1.46 $" 18 19 extern const char *VERSION_QETH_MPC_C; 20 21 #define IPA_PDU_HEADER_SIZE 0x40 22 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) 23 #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) 24 + #define QETH_IPA_PDU_LEN_PDU2(buffer) (buffer+0x29) 25 #define QETH_IPA_PDU_LEN_PDU3(buffer) (buffer+0x3a) 26 27 extern unsigned char IPA_PDU_HEADER[];
+29 -221
drivers/s390/net/qeth_proc.c
··· 1 /* 2 * 3 - * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.13 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * This file contains code related to procfs. ··· 21 #include "qeth_mpc.h" 22 #include "qeth_fs.h" 23 24 - const char *VERSION_QETH_PROC_C = "$Revision: 1.13 $"; 25 26 /***** /proc/qeth *****/ 27 #define QETH_PROCFILE_NAME "qeth" ··· 30 static int 31 qeth_procfile_seq_match(struct device *dev, void *data) 32 { 33 - return 1; 34 } 35 36 static void * 37 qeth_procfile_seq_start(struct seq_file *s, loff_t *offset) 38 { 39 - struct device *dev; 40 - loff_t nr; 41 - 42 down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 43 - 44 - nr = *offset; 45 - if (nr == 0) 46 return SEQ_START_TOKEN; 47 - 48 - dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, 49 - NULL, qeth_procfile_seq_match); 50 - 51 - /* get card at pos *offset */ 52 - nr = *offset; 53 - while (nr-- > 1 && dev) 54 dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, 55 NULL, qeth_procfile_seq_match); 56 - return (void *) dev; 57 } 58 59 static void ··· 62 qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) 63 { 64 struct device *prev, *next; 65 - 66 - if (it == SEQ_START_TOKEN) { 67 - next = driver_find_device(&qeth_ccwgroup_driver.driver, 68 - NULL, NULL, qeth_procfile_seq_match); 69 - if (next) 70 - (*offset)++; 71 - return (void *) next; 72 - } 73 - prev = (struct device *) it; 74 next = driver_find_device(&qeth_ccwgroup_driver.driver, 75 prev, NULL, qeth_procfile_seq_match); 76 - if (next) 77 - (*offset)++; 78 return (void *) next; 79 } 80 ··· 78 { 79 int routing_type = 0; 80 81 - if (ipv == 4){ 82 routing_type = card->options.route4.type; 83 } else { 84 #ifdef CONFIG_QETH_IPV6 ··· 145 card->qdio.in_buf_pool.buf_count); 146 else 147 seq_printf(s, " +++ LAN OFFLINE +++\n"); 148 } 149 return 0; 150 } ··· 176 static struct proc_dir_entry *qeth_perf_procfile; 177 178 #ifdef CONFIG_QETH_PERF_STATS 179 - 180 - static void * 181 - qeth_perf_procfile_seq_start(struct seq_file *s, loff_t *offset) 182 - { 183 - struct device *dev = NULL; 184 - int nr; 185 - 186 - down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 187 - /* get card at pos *offset */ 188 - dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL, 189 - qeth_procfile_seq_match); 190 - 191 - /* get card at pos *offset */ 192 - nr = *offset; 193 - while (nr-- > 1 && dev) 194 - dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, 195 - NULL, qeth_procfile_seq_match); 196 - return (void *) dev; 197 - } 198 - 199 - static void 200 - qeth_perf_procfile_seq_stop(struct seq_file *s, void* it) 201 - { 202 - up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 203 - } 204 - 205 - static void * 206 - qeth_perf_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) 207 - { 208 - struct device *prev, *next; 209 - 210 - prev = (struct device *) it; 211 - next = driver_find_device(&qeth_ccwgroup_driver.driver, prev, 212 - NULL, qeth_procfile_seq_match); 213 - if (next) 214 - (*offset)++; 215 - return (void *) next; 216 - } 217 - 218 static int 219 qeth_perf_procfile_seq_show(struct seq_file *s, void *it) 220 { 221 struct device *device; 222 struct qeth_card *card; 223 224 device = (struct device *) it; 225 card = device->driver_data; ··· 252 card->perf_stats.outbound_do_qdio_time, 253 card->perf_stats.outbound_do_qdio_cnt 254 ); 255 return 0; 256 } 257 258 static struct seq_operations qeth_perf_procfile_seq_ops = { 259 - .start = qeth_perf_procfile_seq_start, 260 - .stop = qeth_perf_procfile_seq_stop, 261 - .next = qeth_perf_procfile_seq_next, 262 .show = qeth_perf_procfile_seq_show, 263 }; 264 ··· 282 #define qeth_perf_procfile_created 1 283 #endif /* CONFIG_QETH_PERF_STATS */ 284 285 - /***** /proc/qeth_ipa_takeover *****/ 286 - #define QETH_IPATO_PROCFILE_NAME "qeth_ipa_takeover" 287 - static struct proc_dir_entry *qeth_ipato_procfile; 288 - 289 - static void * 290 - qeth_ipato_procfile_seq_start(struct seq_file *s, loff_t *offset) 291 - { 292 - struct device *dev; 293 - loff_t nr; 294 - 295 - down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 296 - /* TODO: finish this */ 297 - /* 298 - * maybe SEQ_SATRT_TOKEN can be returned for offset 0 299 - * output driver settings then; 300 - * else output setting for respective card 301 - */ 302 - 303 - dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL, 304 - qeth_procfile_seq_match); 305 - 306 - /* get card at pos *offset */ 307 - nr = *offset; 308 - while (nr-- > 1 && dev) 309 - dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, 310 - NULL, qeth_procfile_seq_match); 311 - return (void *) dev; 312 - } 313 - 314 - static void 315 - qeth_ipato_procfile_seq_stop(struct seq_file *s, void* it) 316 - { 317 - up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 318 - } 319 - 320 - static void * 321 - qeth_ipato_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) 322 - { 323 - struct device *prev, *next; 324 - 325 - prev = (struct device *) it; 326 - next = driver_find_device(&qeth_ccwgroup_driver.driver, prev, 327 - NULL, qeth_procfile_seq_match); 328 - if (next) 329 - (*offset)++; 330 - return (void *) next; 331 - } 332 - 333 - static int 334 - qeth_ipato_procfile_seq_show(struct seq_file *s, void *it) 335 - { 336 - struct device *device; 337 - struct qeth_card *card; 338 - 339 - /* TODO: finish this */ 340 - /* 341 - * maybe SEQ_SATRT_TOKEN can be returned for offset 0 342 - * output driver settings then; 343 - * else output setting for respective card 344 - */ 345 - device = (struct device *) it; 346 - card = device->driver_data; 347 - 348 - return 0; 349 - } 350 - 351 - static struct seq_operations qeth_ipato_procfile_seq_ops = { 352 - .start = qeth_ipato_procfile_seq_start, 353 - .stop = qeth_ipato_procfile_seq_stop, 354 - .next = qeth_ipato_procfile_seq_next, 355 - .show = qeth_ipato_procfile_seq_show, 356 - }; 357 - 358 - static int 359 - qeth_ipato_procfile_open(struct inode *inode, struct file *file) 360 - { 361 - return seq_open(file, &qeth_ipato_procfile_seq_ops); 362 - } 363 - 364 - static struct file_operations qeth_ipato_procfile_fops = { 365 - .owner = THIS_MODULE, 366 - .open = qeth_ipato_procfile_open, 367 - .read = seq_read, 368 - .llseek = seq_lseek, 369 - .release = seq_release, 370 - }; 371 - 372 int __init 373 qeth_create_procfs_entries(void) 374 { ··· 297 qeth_perf_procfile->proc_fops = &qeth_perf_procfile_fops; 298 #endif /* CONFIG_QETH_PERF_STATS */ 299 300 - qeth_ipato_procfile = create_proc_entry(QETH_IPATO_PROCFILE_NAME, 301 - S_IFREG | 0444, NULL); 302 - if (qeth_ipato_procfile) 303 - qeth_ipato_procfile->proc_fops = &qeth_ipato_procfile_fops; 304 - 305 if (qeth_procfile && 306 - qeth_ipato_procfile && 307 qeth_perf_procfile_created) 308 return 0; 309 else ··· 311 remove_proc_entry(QETH_PROCFILE_NAME, NULL); 312 if (qeth_perf_procfile) 313 remove_proc_entry(QETH_PERF_PROCFILE_NAME, NULL); 314 - if (qeth_ipato_procfile) 315 - remove_proc_entry(QETH_IPATO_PROCFILE_NAME, NULL); 316 } 317 318 - 319 - /* ONLY FOR DEVELOPMENT! -> make it as module */ 320 - /* 321 - static void 322 - qeth_create_sysfs_entries(void) 323 - { 324 - struct device *dev; 325 - 326 - down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 327 - 328 - list_for_each_entry(dev, &qeth_ccwgroup_driver.driver.devices, 329 - driver_list) 330 - qeth_create_device_attributes(dev); 331 - 332 - up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 333 - } 334 - 335 - static void 336 - qeth_remove_sysfs_entries(void) 337 - { 338 - struct device *dev; 339 - 340 - down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 341 - 342 - list_for_each_entry(dev, &qeth_ccwgroup_driver.driver.devices, 343 - driver_list) 344 - qeth_remove_device_attributes(dev); 345 - 346 - up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 347 - } 348 - 349 - static int __init 350 - qeth_fs_init(void) 351 - { 352 - printk(KERN_INFO "qeth_fs_init\n"); 353 - qeth_create_procfs_entries(); 354 - qeth_create_sysfs_entries(); 355 - 356 - return 0; 357 - } 358 - 359 - static void __exit 360 - qeth_fs_exit(void) 361 - { 362 - printk(KERN_INFO "qeth_fs_exit\n"); 363 - qeth_remove_procfs_entries(); 364 - qeth_remove_sysfs_entries(); 365 - } 366 - 367 - 368 - module_init(qeth_fs_init); 369 - module_exit(qeth_fs_exit); 370 - 371 - MODULE_LICENSE("GPL"); 372 - */
··· 1 /* 2 * 3 + * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.16 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * This file contains code related to procfs. ··· 21 #include "qeth_mpc.h" 22 #include "qeth_fs.h" 23 24 + const char *VERSION_QETH_PROC_C = "$Revision: 1.16 $"; 25 26 /***** /proc/qeth *****/ 27 #define QETH_PROCFILE_NAME "qeth" ··· 30 static int 31 qeth_procfile_seq_match(struct device *dev, void *data) 32 { 33 + return(dev ? 1 : 0); 34 } 35 36 static void * 37 qeth_procfile_seq_start(struct seq_file *s, loff_t *offset) 38 { 39 + struct device *dev = NULL; 40 + loff_t nr = 0; 41 + 42 down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); 43 + if (*offset == 0) 44 return SEQ_START_TOKEN; 45 + while (1) { 46 dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, 47 NULL, qeth_procfile_seq_match); 48 + if (++nr == *offset) 49 + break; 50 + put_device(dev); 51 + } 52 + return dev; 53 } 54 55 static void ··· 66 qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) 67 { 68 struct device *prev, *next; 69 + 70 + if (it == SEQ_START_TOKEN) 71 + prev = NULL; 72 + else 73 + prev = (struct device *) it; 74 next = driver_find_device(&qeth_ccwgroup_driver.driver, 75 prev, NULL, qeth_procfile_seq_match); 76 + (*offset)++; 77 return (void *) next; 78 } 79 ··· 87 { 88 int routing_type = 0; 89 90 + if (ipv == 4) { 91 routing_type = card->options.route4.type; 92 } else { 93 #ifdef CONFIG_QETH_IPV6 ··· 154 card->qdio.in_buf_pool.buf_count); 155 else 156 seq_printf(s, " +++ LAN OFFLINE +++\n"); 157 + put_device(device); 158 } 159 return 0; 160 } ··· 184 static struct proc_dir_entry *qeth_perf_procfile; 185 186 #ifdef CONFIG_QETH_PERF_STATS 187 static int 188 qeth_perf_procfile_seq_show(struct seq_file *s, void *it) 189 { 190 struct device *device; 191 struct qeth_card *card; 192 + 193 + 194 + if (it == SEQ_START_TOKEN) 195 + return 0; 196 197 device = (struct device *) it; 198 card = device->driver_data; ··· 295 card->perf_stats.outbound_do_qdio_time, 296 card->perf_stats.outbound_do_qdio_cnt 297 ); 298 + put_device(device); 299 return 0; 300 } 301 302 static struct seq_operations qeth_perf_procfile_seq_ops = { 303 + .start = qeth_procfile_seq_start, 304 + .stop = qeth_procfile_seq_stop, 305 + .next = qeth_procfile_seq_next, 306 .show = qeth_perf_procfile_seq_show, 307 }; 308 ··· 324 #define qeth_perf_procfile_created 1 325 #endif /* CONFIG_QETH_PERF_STATS */ 326 327 int __init 328 qeth_create_procfs_entries(void) 329 { ··· 426 qeth_perf_procfile->proc_fops = &qeth_perf_procfile_fops; 427 #endif /* CONFIG_QETH_PERF_STATS */ 428 429 if (qeth_procfile && 430 qeth_perf_procfile_created) 431 return 0; 432 else ··· 446 remove_proc_entry(QETH_PROCFILE_NAME, NULL); 447 if (qeth_perf_procfile) 448 remove_proc_entry(QETH_PERF_PROCFILE_NAME, NULL); 449 } 450
+3 -3
drivers/s390/net/qeth_sys.c
··· 1 /* 2 * 3 - * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.58 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * This file contains code related to sysfs. ··· 20 #include "qeth_mpc.h" 21 #include "qeth_fs.h" 22 23 - const char *VERSION_QETH_SYS_C = "$Revision: 1.58 $"; 24 25 /*****************************************************************************/ 26 /* */ ··· 160 return -EPERM; 161 162 tmp = strsep((char **) &buf, "\n"); 163 - if ((strlen(tmp) > 8) || (strlen(tmp) < 2)) 164 return -EINVAL; 165 166 card->info.portname[0] = strlen(tmp);
··· 1 /* 2 * 3 + * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.60 $) 4 * 5 * Linux on zSeries OSA Express and HiperSockets support 6 * This file contains code related to sysfs. ··· 20 #include "qeth_mpc.h" 21 #include "qeth_fs.h" 22 23 + const char *VERSION_QETH_SYS_C = "$Revision: 1.60 $"; 24 25 /*****************************************************************************/ 26 /* */ ··· 160 return -EPERM; 161 162 tmp = strsep((char **) &buf, "\n"); 163 + if ((strlen(tmp) > 8) || (strlen(tmp) == 0)) 164 return -EINVAL; 165 166 card->info.portname[0] = strlen(tmp);
+2 -2
drivers/s390/net/qeth_tso.h
··· 1 /* 2 - * linux/drivers/s390/net/qeth_tso.h ($Revision: 1.7 $) 3 * 4 * Header file for qeth TCP Segmentation Offload support. 5 * ··· 7 * 8 * Author(s): Frank Pavlic <fpavlic@de.ibm.com> 9 * 10 - * $Revision: 1.7 $ $Date: 2005/05/04 20:19:18 $ 11 * 12 */ 13 #ifndef __QETH_TSO_H__
··· 1 /* 2 + * linux/drivers/s390/net/qeth_tso.h ($Revision: 1.8 $) 3 * 4 * Header file for qeth TCP Segmentation Offload support. 5 * ··· 7 * 8 * Author(s): Frank Pavlic <fpavlic@de.ibm.com> 9 * 10 + * $Revision: 1.8 $ $Date: 2005/05/04 20:19:18 $ 11 * 12 */ 13 #ifndef __QETH_TSO_H__