diff options
Diffstat (limited to 'drivers/staging/silicom')
| -rw-r--r-- | drivers/staging/silicom/Kconfig | 7 | ||||
| -rw-r--r-- | drivers/staging/silicom/Makefile | 3 | ||||
| -rw-r--r-- | drivers/staging/silicom/bp_mod.h | 29 | ||||
| -rw-r--r-- | drivers/staging/silicom/bp_proc.c | 1327 | ||||
| -rw-r--r-- | drivers/staging/silicom/bpctl_mod.c (renamed from drivers/staging/silicom/bp_mod.c) | 3316 | ||||
| -rw-r--r-- | drivers/staging/silicom/bypasslib/bp_ioctl.h | 76 | ||||
| -rw-r--r-- | drivers/staging/silicom/bypasslib/bplibk.h | 12 | ||||
| -rw-r--r-- | drivers/staging/silicom/bypasslib/bypass.c | 396 | ||||
| -rw-r--r-- | drivers/staging/silicom/bypasslib/libbp_sd.h | 313 |
9 files changed, 1496 insertions, 3983 deletions
diff --git a/drivers/staging/silicom/Kconfig b/drivers/staging/silicom/Kconfig index eda2e7d7364..6651bd819bc 100644 --- a/drivers/staging/silicom/Kconfig +++ b/drivers/staging/silicom/Kconfig @@ -5,7 +5,7 @@ config NET_VENDOR_SILICOM bool "Silicom devices" default y - depends on PCI + depends on PCI && NETDEVICES ---help--- If you have a network card (Ethernet) belonging to this class, say Y. @@ -19,7 +19,7 @@ if NET_VENDOR_SILICOM config SBYPASS tristate "Silicom BypassCTL library support" - depends on PCI && NET + depends on PCI depends on m ---help--- If you have a network (Ethernet) controller of this type, say Y @@ -29,10 +29,9 @@ config SBYPASS config BPCTL tristate "Silicom BypassCTL net support" - depends on PCI && NET + depends on PCI depends on m select SBYPASS - select NET_CORE select MII ---help--- If you have a network (Ethernet) controller of this type, say Y diff --git a/drivers/staging/silicom/Makefile b/drivers/staging/silicom/Makefile index 80e6d12d156..ca8359481c4 100644 --- a/drivers/staging/silicom/Makefile +++ b/drivers/staging/silicom/Makefile @@ -4,6 +4,3 @@ obj-$(CONFIG_BPCTL) += bpctl_mod.o obj-$(CONFIG_SBYPASS) += bypasslib/ - - -bpctl_mod-objs := bp_mod.o bp_proc.o diff --git a/drivers/staging/silicom/bp_mod.h b/drivers/staging/silicom/bp_mod.h index b8275f5611f..82b4963e97b 100644 --- a/drivers/staging/silicom/bp_mod.h +++ b/drivers/staging/silicom/bp_mod.h @@ -15,8 +15,6 @@ #define BP_MOD_H #include "bits.h" -#define EXPORT_SYMBOL_NOVERS EXPORT_SYMBOL - #define usec_delay(x) udelay(x) #ifndef msec_delay_bp #define msec_delay_bp(x) \ @@ -24,7 +22,7 @@ do { \ int i; \ if (1) { \ for (i = 0; i < 1000; i++) { \ - udelay(x) ; \ + udelay(x); \ } \ } else { \ msleep(x); \ @@ -499,11 +497,19 @@ static inline unsigned int jiffies_to_msecs(const unsigned long j) #define BPCTLI_STATUS 0x00008 /* Device Status - RO */ /* HW related */ -#define BPCTLI_CTRL_EXT_SDP6_DATA 0x00000040 /* Value of SW Defineable Pin 6 */ -#define BPCTLI_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Defineable Pin 7 */ +#define BPCTLI_CTRL_EXT_SDP6_DATA 0x00000040 /* Value of SW + * Defineable Pin 6 + */ +#define BPCTLI_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW + * Defineable Pin 7 + */ #define BPCTLI_CTRL_SDP0_DATA 0x00040000 /* SWDPIN 0 value */ -#define BPCTLI_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 0=in 1=out */ -#define BPCTLI_CTRL_EXT_SDP7_DIR 0x00000800 /* Direction of SDP7 0=in 1=out */ +#define BPCTLI_CTRL_EXT_SDP6_DIR 0x00000400 /* Direction of SDP6 + * 0=in 1=out + */ +#define BPCTLI_CTRL_EXT_SDP7_DIR 0x00000800 /* Direction of SDP7 + * 0=in 1=out + */ #define BPCTLI_CTRL_SDP0_DIR 0x00400000 /* SDP0 Input or output */ #define BPCTLI_CTRL_SWDPIN1 0x00080000 #define BPCTLI_CTRL_SDP1_DIR 0x00800000 @@ -567,7 +573,9 @@ static inline unsigned int jiffies_to_msecs(const unsigned long j) #define BPCTLI_SWFW_PHY0_SM 0x02 #define BPCTLI_SWFW_PHY1_SM 0x04 -#define BPCTLI_SW_FW_SYNC 0x05B5C /* Software-Firmware Synchronization - RW */ +#define BPCTLI_SW_FW_SYNC 0x05B5C /* Software-Firmware + * Synchronization - RW + */ #define BPCTLI_SWSM 0x05B50 /* SW Semaphore */ #define BPCTLI_FWSM 0x05B54 /* FW Semaphore */ @@ -625,7 +633,8 @@ static inline unsigned int jiffies_to_msecs(const unsigned long j) /*#define BP10G_MCLK_DATA_OUT9 BP10G_I2C_CLK_OUT #define BP10G_MDIO_DATA_OUT9 BP10G_I2C_DATA_OUT*/ - /*#define BP10G_MCLK_DATA_OUT9*//*BP10G_I2C_DATA_OUT */ + /*#define BP10G_MCLK_DATA_OUT9*/ + /*BP10G_I2C_DATA_OUT */ #define BP10G_MDIO_DATA_OUT9 BP10G_I2C_DATA_OUT /*BP10G_I2C_CLK_OUT */ /* VIA EOSDP ! */ @@ -700,5 +709,3 @@ static inline unsigned int jiffies_to_msecs(const unsigned long j) readl((void *)((a)->mem_map) + BP10GB_##reg)) #endif - -int bp_proc_create(void); diff --git a/drivers/staging/silicom/bp_proc.c b/drivers/staging/silicom/bp_proc.c deleted file mode 100644 index a01ca97b766..00000000000 --- a/drivers/staging/silicom/bp_proc.c +++ /dev/null @@ -1,1327 +0,0 @@ -/******************************************************************************/ -/* */ -/* Copyright (c) 2004-2006 Silicom, Ltd */ -/* All rights reserved. */ -/* */ -/* This program is free software; you can redistribute it and/or modify */ -/* it under the terms of the GNU General Public License as published by */ -/* the Free Software Foundation, located in the file LICENSE. */ -/* */ -/* */ -/******************************************************************************/ - -#if defined(CONFIG_SMP) && !defined(__SMP__) -#define __SMP__ -#endif - -#include <linux/proc_fs.h> -#include <linux/netdevice.h> -#include <asm/uaccess.h> -/* #include <linux/smp_lock.h> */ -#include "bp_mod.h" - -#define BP_PROC_DIR "bypass" -/* #define BYPASS_SUPPORT "bypass" */ - -#ifdef BYPASS_SUPPORT - -#define GPIO6_SET_ENTRY_SD "gpio6_set" -#define GPIO6_CLEAR_ENTRY_SD "gpio6_clear" - -#define GPIO7_SET_ENTRY_SD "gpio7_set" -#define GPIO7_CLEAR_ENTRY_SD "gpio7_clear" - -#define PULSE_SET_ENTRY_SD "pulse_set" -#define ZERO_SET_ENTRY_SD "zero_set" -#define PULSE_GET1_ENTRY_SD "pulse_get1" -#define PULSE_GET2_ENTRY_SD "pulse_get2" - -#define CMND_ON_ENTRY_SD "cmnd_on" -#define CMND_OFF_ENTRY_SD "cmnd_off" -#define RESET_CONT_ENTRY_SD "reset_cont" - - /*COMMANDS*/ -#define BYPASS_INFO_ENTRY_SD "bypass_info" -#define BYPASS_SLAVE_ENTRY_SD "bypass_slave" -#define BYPASS_CAPS_ENTRY_SD "bypass_caps" -#define WD_SET_CAPS_ENTRY_SD "wd_set_caps" -#define BYPASS_ENTRY_SD "bypass" -#define BYPASS_CHANGE_ENTRY_SD "bypass_change" -#define BYPASS_WD_ENTRY_SD "bypass_wd" -#define WD_EXPIRE_TIME_ENTRY_SD "wd_expire_time" -#define RESET_BYPASS_WD_ENTRY_SD "reset_bypass_wd" -#define DIS_BYPASS_ENTRY_SD "dis_bypass" -#define BYPASS_PWUP_ENTRY_SD "bypass_pwup" -#define BYPASS_PWOFF_ENTRY_SD "bypass_pwoff" -#define STD_NIC_ENTRY_SD "std_nic" -#define STD_NIC_ENTRY_SD "std_nic" -#define TAP_ENTRY_SD "tap" -#define TAP_CHANGE_ENTRY_SD "tap_change" -#define DIS_TAP_ENTRY_SD "dis_tap" -#define TAP_PWUP_ENTRY_SD "tap_pwup" -#define TWO_PORT_LINK_ENTRY_SD "two_port_link" -#define WD_EXP_MODE_ENTRY_SD "wd_exp_mode" -#define WD_AUTORESET_ENTRY_SD "wd_autoreset" -#define TPL_ENTRY_SD "tpl" -#define WAIT_AT_PWUP_ENTRY_SD "wait_at_pwup" -#define HW_RESET_ENTRY_SD "hw_reset" -#define DISC_ENTRY_SD "disc" -#define DISC_CHANGE_ENTRY_SD "disc_change" -#define DIS_DISC_ENTRY_SD "dis_disc" -#define DISC_PWUP_ENTRY_SD "disc_pwup" - -static struct proc_dir_entry *bp_procfs_dir; - -static struct proc_dir_entry *proc_getdir(char *name, - struct proc_dir_entry *proc_dir) -{ - struct proc_dir_entry *pde = proc_dir; - for (pde = pde->subdir; pde; pde = pde->next) { - if (pde->namelen && (strcmp(name, pde->name) == 0)) { - /* directory exists */ - break; - } - } - if (pde == (struct proc_dir_entry *)0) { - /* create the directory */ - pde = create_proc_entry(name, S_IFDIR, proc_dir); - if (pde == (struct proc_dir_entry *)0) - return pde; - } - return pde; -} - -int -bypass_proc_create_entry_sd(struct pfs_unit *pfs_unit_curr, - char *proc_name, - write_proc_t *write_proc, - read_proc_t *read_proc, - struct proc_dir_entry *parent_pfs, void *data) -{ - strcpy(pfs_unit_curr->proc_name, proc_name); - pfs_unit_curr->proc_entry = create_proc_entry(pfs_unit_curr->proc_name, - S_IFREG | S_IRUSR | - S_IWUSR | S_IRGRP | - S_IROTH, parent_pfs); - if (pfs_unit_curr->proc_entry == 0) - return -1; - - pfs_unit_curr->proc_entry->read_proc = read_proc; - pfs_unit_curr->proc_entry->write_proc = write_proc; - pfs_unit_curr->proc_entry->data = data; - - return 0; - -} - -int -get_bypass_info_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - int len = 0; - - len += sprintf(page, "Name\t\t\t%s\n", pbp_device_block->bp_name); - len += - sprintf(page + len, "Firmware version\t0x%x\n", - pbp_device_block->bp_fw_ver); - - *eof = 1; - return len; -} - -int -get_bypass_slave_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - struct pci_dev *pci_slave_dev = pbp_device_block->bp_slave; - struct net_device *net_slave_dev; - int len = 0; - - if (is_bypass_fn(pbp_device_block)) { - net_slave_dev = pci_get_drvdata(pci_slave_dev); - if (net_slave_dev) - len = sprintf(page, "%s\n", net_slave_dev->name); - else - len = sprintf(page, "fail\n"); - } else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -get_bypass_caps_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bypass_caps_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "-1\n"); - else - len = sprintf(page, "0x%x\n", ret); - *eof = 1; - return len; - -} - -int -get_wd_set_caps_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_wd_set_caps_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "-1\n"); - else - len = sprintf(page, "0x%x\n", ret); - *eof = 1; - return len; -} - -int -set_bypass_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_fn(pbp_device_block, bypass_param); - - return count; -} - -int -set_tap_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_tap_fn(pbp_device_block, tap_param); - - return count; -} - -int -set_disc_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_disc_fn(pbp_device_block, tap_param); - - return count; -} - -int -get_bypass_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bypass_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -int -get_tap_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_tap_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -int -get_disc_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_disc_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -int -get_bypass_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bypass_change_fn(pbp_device_block); - if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -get_tap_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_tap_change_fn(pbp_device_block); - if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -get_disc_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_disc_change_fn(pbp_device_block); - if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -set_bypass_wd_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - unsigned int timeout = 0; - char *timeout_ptr = kbuf; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - timeout_ptr = kbuf; - timeout = atoi(&timeout_ptr); - - set_bypass_wd_fn(pbp_device_block, timeout); - - return count; -} - -int -get_bypass_wd_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0, timeout = 0; - - ret = get_bypass_wd_fn(pbp_device_block, &timeout); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (timeout == -1) - len = sprintf(page, "unknown\n"); - else if (timeout == 0) - len = sprintf(page, "disable\n"); - else - len = sprintf(page, "%d\n", timeout); - - *eof = 1; - return len; -} - -int -get_wd_expire_time_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0, timeout = 0; - - ret = get_wd_expire_time_fn(pbp_device_block, &timeout); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (timeout == -1) - len = sprintf(page, "expire\n"); - else if (timeout == 0) - len = sprintf(page, "disable\n"); - - else - len = sprintf(page, "%d\n", timeout); - *eof = 1; - return len; -} - -int -get_tpl_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_tpl_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -#ifdef PMC_FIX_FLAG -int -get_wait_at_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bp_wait_at_pwup_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -int -get_hw_reset_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bp_hw_reset_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; -} - -#endif /*PMC_WAIT_FLAG */ - -int -reset_bypass_wd_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = reset_bypass_wd_timer_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "disable\n"); - else if (ret == 1) - len = sprintf(page, "success\n"); - - *eof = 1; - return len; -} - -int -set_dis_bypass_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_dis_bypass_fn(pbp_device_block, bypass_param); - - return count; -} - -int -set_dis_tap_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_dis_tap_fn(pbp_device_block, tap_param); - - return count; -} - -int -set_dis_disc_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_dis_disc_fn(pbp_device_block, tap_param); - - return count; -} - -int -get_dis_bypass_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_dis_bypass_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_dis_tap_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_dis_tap_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_dis_disc_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_dis_disc_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -set_bypass_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_pwup_fn(pbp_device_block, bypass_param); - - return count; -} - -int -set_bypass_pwoff_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_pwoff_fn(pbp_device_block, bypass_param); - - return count; -} - -int -set_tap_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_tap_pwup_fn(pbp_device_block, tap_param); - - return count; -} - -int -set_disc_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_disc_pwup_fn(pbp_device_block, tap_param); - - return count; -} - -int -get_bypass_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bypass_pwup_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_bypass_pwoff_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_bypass_pwoff_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_tap_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_tap_pwup_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_disc_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_disc_pwup_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -set_std_nic_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_std_nic_fn(pbp_device_block, bypass_param); - - return count; -} - -int -get_std_nic_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_std_nic_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_wd_exp_mode_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_wd_exp_mode_fn(pbp_device_block); - if (ret == 1) - len = sprintf(page, "tap\n"); - else if (ret == 0) - len = sprintf(page, "bypass\n"); - else if (ret == 2) - len = sprintf(page, "disc\n"); - - else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -set_wd_exp_mode_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "tap") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "bypass") == 0) - bypass_param = 0; - else if (strcmp(kbuf, "disc") == 0) - bypass_param = 2; - - set_wd_exp_mode_fn(pbp_device_block, bypass_param); - - return count; -} - -int -get_wd_autoreset_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_wd_autoreset_fn(pbp_device_block); - if (ret >= 0) - len = sprintf(page, "%d\n", ret); - else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -int -set_wd_autoreset_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - u32 timeout = 0; - char *timeout_ptr = kbuf; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - timeout_ptr = kbuf; - timeout = atoi(&timeout_ptr); - - set_wd_autoreset_fn(pbp_device_block, timeout); - - return count; -} - -int -set_tpl_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_tpl_fn(pbp_device_block, tpl_param); - - return count; -} - -#ifdef PMC_FIX_FLAG -int -set_wait_at_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_bp_wait_at_pwup_fn(pbp_device_block, tpl_param); - - return count; -} - -int -set_hw_reset_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) - return -1; - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_bp_hw_reset_fn(pbp_device_block, tpl_param); - - return count; -} - -#endif /*PMC_FIX_FLAG */ - -int bypass_proc_create_dev_sd(bpctl_dev_t *pbp_device_block) -{ - struct bypass_pfs_sd *current_pfs = &(pbp_device_block->bypass_pfs_set); - static struct proc_dir_entry *procfs_dir; - int ret = 0; - - sprintf(current_pfs->dir_name, "bypass_%s", dev->name); - - if (!bp_procfs_dir) - return -1; - - /* create device proc dir */ - procfs_dir = proc_getdir(current_pfs->dir_name, bp_procfs_dir); - if (procfs_dir == 0) { - printk(KERN_DEBUG "Could not create procfs directory %s\n", - current_pfs->dir_name); - return -1; - } - current_pfs->bypass_entry = procfs_dir; - - if (bypass_proc_create_entry(&(current_pfs->bypass_info), BYPASS_INFO_ENTRY_SD, NULL, /* write */ - get_bypass_info_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (pbp_device_block->bp_caps & SW_CTL_CAP) { - - /* Create set param proc's */ - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_slave), BYPASS_SLAVE_ENTRY_SD, NULL, /* write */ - get_bypass_slave_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_caps), BYPASS_CAPS_ENTRY_SD, NULL, /* write */ - get_bypass_caps_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_set_caps), WD_SET_CAPS_ENTRY_SD, NULL, /* write */ - get_wd_set_caps_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_wd), BYPASS_WD_ENTRY_SD, set_bypass_wd_pfs, /* write */ - get_bypass_wd_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_expire_time), WD_EXPIRE_TIME_ENTRY_SD, NULL, /* write */ - get_wd_expire_time_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->reset_bypass_wd), RESET_BYPASS_WD_ENTRY_SD, NULL, /* write */ - reset_bypass_wd_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->std_nic), STD_NIC_ENTRY_SD, set_std_nic_pfs, /* write */ - get_std_nic_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (pbp_device_block->bp_caps & BP_CAP) { - if (bypass_proc_create_entry_sd(&(current_pfs->bypass), BYPASS_ENTRY_SD, set_bypass_pfs, /* write */ - get_bypass_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_bypass), DIS_BYPASS_ENTRY_SD, set_dis_bypass_pfs, /* write */ - get_dis_bypass_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_pwup), BYPASS_PWUP_ENTRY_SD, set_bypass_pwup_pfs, /* write */ - get_bypass_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_pwoff), BYPASS_PWOFF_ENTRY_SD, set_bypass_pwoff_pfs, /* write */ - get_bypass_pwoff_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_change), BYPASS_CHANGE_ENTRY_SD, NULL, /* write */ - get_bypass_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - } - - if (pbp_device_block->bp_caps & TAP_CAP) { - - if (bypass_proc_create_entry_sd(&(current_pfs->tap), TAP_ENTRY_SD, set_tap_pfs, /* write */ - get_tap_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_tap), DIS_TAP_ENTRY_SD, set_dis_tap_pfs, /* write */ - get_dis_tap_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_pwup), TAP_PWUP_ENTRY_SD, set_tap_pwup_pfs, /* write */ - get_tap_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_change), TAP_CHANGE_ENTRY_SD, NULL, /* write */ - get_tap_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - } - if (pbp_device_block->bp_caps & DISC_CAP) { - - if (bypass_proc_create_entry_sd(&(current_pfs->tap), DISC_ENTRY_SD, set_disc_pfs, /* write */ - get_disc_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; -#if 1 - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_tap), DIS_DISC_ENTRY_SD, set_dis_disc_pfs, /* write */ - get_dis_disc_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; -#endif - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_pwup), DISC_PWUP_ENTRY_SD, set_disc_pwup_pfs, /* write */ - get_disc_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_change), DISC_CHANGE_ENTRY_SD, NULL, /* write */ - get_disc_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - } - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_exp_mode), WD_EXP_MODE_ENTRY_SD, set_wd_exp_mode_pfs, /* write */ - get_wd_exp_mode_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_autoreset), WD_AUTORESET_ENTRY_SD, set_wd_autoreset_pfs, /* write */ - get_wd_autoreset_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), TPL_ENTRY_SD, set_tpl_pfs, /* write */ - get_tpl_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; -#ifdef PMC_FIX_FLAG - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), WAIT_AT_PWUP_ENTRY_SD, set_wait_at_pwup_pfs, /* write */ - get_wait_at_pwup_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), HW_RESET_ENTRY_SD, set_hw_reset_pfs, /* write */ - get_hw_reset_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - -#endif - - } - if (ret < 0) - printk(KERN_DEBUG "Create proc entry failed\n"); - - return ret; -} - -int bypass_proc_remove_dev_sd(bpctl_dev_t *pbp_device_block) -{ - - struct bypass_pfs_sd *current_pfs = &pbp_device_block->bypass_pfs_set; - struct proc_dir_entry *pde = current_pfs->bypass_entry, *pde_curr = - NULL; - char name[256]; - - for (pde = pde->subdir; pde;) { - strcpy(name, pde->name); - pde_curr = pde; - pde = pde->next; - remove_proc_entry(name, current_pfs->bypass_entry); - } - if (!pde) - remove_proc_entry(current_pfs->dir_name, bp_procfs_dir); - - return 0; -} - -#endif /* BYPASS_SUPPORT */ diff --git a/drivers/staging/silicom/bp_mod.c b/drivers/staging/silicom/bpctl_mod.c index 58c5f5cf4ce..765fce84d9d 100644 --- a/drivers/staging/silicom/bp_mod.c +++ b/drivers/staging/silicom/bpctl_mod.c @@ -1,11 +1,11 @@ /******************************************************************************/ /* */ -/* Bypass Control utility, Copyright (c) 2005-20011 Silicom */ +/* Bypass Control utility, Copyright (c) 2005-2011 Silicom */ /* */ /* This program is free software; you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, located in the file LICENSE. */ -/* Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved. */ +/* Copyright(c) 2007 - 2009, 2013 Intel Corporation. All rights reserved. */ /* */ /* */ /******************************************************************************/ @@ -35,63 +35,31 @@ #define BP_MOD_DESCR "Silicom Bypass-SD Control driver" #define BP_SYNC_FLAG 1 -static int Device_Open = 0; -static int major_num = 0; +static int major_num; MODULE_AUTHOR("Anna Lukin, annal@silicom.co.il"); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(BP_MOD_DESCR); MODULE_VERSION(BP_MOD_VER); -spinlock_t bpvm_lock; +static spinlock_t bpvm_lock; -#define lock_bpctl() \ -if (down_interruptible(&bpctl_sema)) { \ - return -ERESTARTSYS; \ -} \ - -#define unlock_bpctl() \ +#define unlock_bpctl() \ up(&bpctl_sema); /* Media Types */ -typedef enum { - bp_copper = 0, - bp_fiber, - bp_cx4, - bp_none, -} bp_media_type; - -struct pfs_unit_sd { - struct proc_dir_entry *proc_entry; - char proc_name[32]; +enum bp_media_type { + BP_COPPER = 0, + BP_FIBER, + BP_CX4, + BP_NONE, }; struct bypass_pfs_sd { char dir_name[32]; struct proc_dir_entry *bypass_entry; - struct pfs_unit_sd bypass_info; - struct pfs_unit_sd bypass_slave; - struct pfs_unit_sd bypass_caps; - struct pfs_unit_sd wd_set_caps; - struct pfs_unit_sd bypass; - struct pfs_unit_sd bypass_change; - struct pfs_unit_sd bypass_wd; - struct pfs_unit_sd wd_expire_time; - struct pfs_unit_sd reset_bypass_wd; - struct pfs_unit_sd dis_bypass; - struct pfs_unit_sd bypass_pwup; - struct pfs_unit_sd bypass_pwoff; - struct pfs_unit_sd std_nic; - struct pfs_unit_sd tap; - struct pfs_unit_sd dis_tap; - struct pfs_unit_sd tap_pwup; - struct pfs_unit_sd tap_change; - struct pfs_unit_sd wd_exp_mode; - struct pfs_unit_sd wd_autoreset; - struct pfs_unit_sd tpl; - }; -typedef struct _bpctl_dev { +struct bpctl_dev { char *name; char *desc; struct pci_dev *pdev; /* PCI device */ @@ -116,7 +84,7 @@ typedef struct _bpctl_dev { uint32_t reset_time; uint8_t bp_status_un; atomic_t wdt_busy; - bp_media_type media_type; + enum bp_media_type media_type; int bp_tpl_flag; struct timer_list bp_tpl_timer; spinlock_t bypass_wr_lock; @@ -134,101 +102,79 @@ typedef struct _bpctl_dev { char *bp_tx_data; struct bypass_pfs_sd bypass_pfs_set; -} bpctl_dev_t; +}; -static bpctl_dev_t *bpctl_dev_arr; +static struct bpctl_dev *bpctl_dev_arr; static struct semaphore bpctl_sema; -static int device_num = 0; +static int device_num; static int get_dev_idx(int ifindex); -static bpctl_dev_t *get_master_port_fn(bpctl_dev_t *pbpctl_dev); -static int disc_status(bpctl_dev_t *pbpctl_dev); -static int bypass_status(bpctl_dev_t *pbpctl_dev); -static int wdt_timer(bpctl_dev_t *pbpctl_dev, int *time_left); -static bpctl_dev_t *get_status_port_fn(bpctl_dev_t *pbpctl_dev); +static struct bpctl_dev *get_master_port_fn(struct bpctl_dev *pbpctl_dev); +static int disc_status(struct bpctl_dev *pbpctl_dev); +static int bypass_status(struct bpctl_dev *pbpctl_dev); +static int wdt_timer(struct bpctl_dev *pbpctl_dev, int *time_left); +static struct bpctl_dev *get_status_port_fn(struct bpctl_dev *pbpctl_dev); static void if_scan_init(void); -int bypass_proc_create_dev_sd(bpctl_dev_t *pbp_device_block); -int bypass_proc_remove_dev_sd(bpctl_dev_t *pbp_device_block); -int bp_proc_create(void); +static int bypass_proc_create_dev_sd(struct bpctl_dev *pbp_device_block); +static int bypass_proc_remove_dev_sd(struct bpctl_dev *pbp_device_block); + +static int is_bypass_fn(struct bpctl_dev *pbpctl_dev); +static int get_dev_idx_bsf(int bus, int slot, int func); + +static int bp_get_dev_idx_bsf(struct net_device *dev, int *index) +{ + struct ethtool_drvinfo drvinfo = {0}; + char *buf; + int bus, slot, func; + + if (dev->ethtool_ops && dev->ethtool_ops->get_drvinfo) + dev->ethtool_ops->get_drvinfo(dev, &drvinfo); + else + return -EOPNOTSUPP; + + if (!strcmp(drvinfo.bus_info, "N/A")) + return -ENODATA; + + buf = strchr(drvinfo.bus_info, ':'); + if (!buf) + return -EINVAL; + buf++; + if (sscanf(buf, "%x:%x.%x", &bus, &slot, &func) != 3) + return -EINVAL; -int is_bypass_fn(bpctl_dev_t *pbpctl_dev); -int get_dev_idx_bsf(int bus, int slot, int func); + *index = get_dev_idx_bsf(bus, slot, func); + return 0; +} -static unsigned long str_to_hex(char *p); static int bp_device_event(struct notifier_block *unused, unsigned long event, void *ptr) { - struct net_device *dev = ptr; - static bpctl_dev_t *pbpctl_dev = NULL, *pbpctl_dev_m = NULL; + struct net_device *dev = netdev_notifier_info_to_dev(ptr); + static struct bpctl_dev *pbpctl_dev, *pbpctl_dev_m; int dev_num = 0, ret = 0, ret_d = 0, time_left = 0; + /* printk("BP_PROC_SUPPORT event =%d %s %d\n", event,dev->name, dev->ifindex ); */ /* return NOTIFY_DONE; */ if (!dev) return NOTIFY_DONE; - if (event == NETDEV_REGISTER) { - { - struct ethtool_drvinfo drvinfo; - char cbuf[32]; - char *buf = NULL; - char res[10]; - int i = 0, ifindex, idx_dev = 0; - int bus = 0, slot = 0, func = 0; - ifindex = dev->ifindex; - - memset(res, 0, 10); - memset(&drvinfo, 0, sizeof(struct ethtool_drvinfo)); - - if (dev->ethtool_ops && dev->ethtool_ops->get_drvinfo) { - memset(&drvinfo, 0, sizeof(drvinfo)); - dev->ethtool_ops->get_drvinfo(dev, &drvinfo); - } else - return NOTIFY_DONE; - if (!drvinfo.bus_info) - return NOTIFY_DONE; - if (!strcmp(drvinfo.bus_info, "N/A")) - return NOTIFY_DONE; - memcpy(&cbuf, drvinfo.bus_info, 32); - buf = &cbuf[0]; - - while (*buf++ != ':') ; - for (i = 0; i < 10; i++, buf++) { - if (*buf == ':') - break; - res[i] = *buf; - - } - buf++; - bus = str_to_hex(res); - memset(res, 0, 10); - - for (i = 0; i < 10; i++, buf++) { - if (*buf == '.') - break; - res[i] = *buf; - - } - buf++; - slot = str_to_hex(res); - func = str_to_hex(buf); - idx_dev = get_dev_idx_bsf(bus, slot, func); - if (idx_dev != -1) { + if (event == NETDEV_REGISTER) { + int idx_dev; - bpctl_dev_arr[idx_dev].ifindex = ifindex; - bpctl_dev_arr[idx_dev].ndev = dev; + if (bp_get_dev_idx_bsf(dev, &idx_dev)) + return NOTIFY_DONE; - bypass_proc_remove_dev_sd(&bpctl_dev_arr - [idx_dev]); - bypass_proc_create_dev_sd(&bpctl_dev_arr - [idx_dev]); + if (idx_dev == -1) + return NOTIFY_DONE; - } + bpctl_dev_arr[idx_dev].ifindex = dev->ifindex; + bpctl_dev_arr[idx_dev].ndev = dev; - } + bypass_proc_remove_dev_sd(&bpctl_dev_arr[idx_dev]); + bypass_proc_create_dev_sd(&bpctl_dev_arr[idx_dev]); return NOTIFY_DONE; - } if (event == NETDEV_UNREGISTER) { int idx_dev = 0; @@ -273,8 +219,12 @@ static int bp_device_event(struct notifier_block *unused, if (netif_carrier_ok(dev)) return NOTIFY_DONE; - if (((dev_num = get_dev_idx(dev->ifindex)) == -1) || - (!(pbpctl_dev = &bpctl_dev_arr[dev_num]))) + dev_num = get_dev_idx(dev->ifindex); + if (dev_num == -1) + return NOTIFY_DONE; + + pbpctl_dev = &bpctl_dev_arr[dev_num]; + if (!pbpctl_dev) return NOTIFY_DONE; if ((is_bypass_fn(pbpctl_dev)) == 1) @@ -315,38 +265,17 @@ static struct notifier_block bp_notifier_block = { .notifier_call = bp_device_event, }; -static int device_open(struct inode *inode, struct file *file) -{ -#ifdef DEBUG - printk("device_open(%p)\n", file); -#endif - Device_Open++; -/* -* Initialize the message -*/ - return SUCCESS; -} +static int is_bypass_fn(struct bpctl_dev *pbpctl_dev); +int wdt_time_left(struct bpctl_dev *pbpctl_dev); -static int device_release(struct inode *inode, struct file *file) -{ -#ifdef DEBUG - printk("device_release(%p,%p)\n", inode, file); -#endif - Device_Open--; - return SUCCESS; -} - -int is_bypass_fn(bpctl_dev_t *pbpctl_dev); -int wdt_time_left(bpctl_dev_t *pbpctl_dev); - -static void write_pulse(bpctl_dev_t *pbpctl_dev, +static void write_pulse(struct bpctl_dev *pbpctl_dev, unsigned int ctrl_ext, unsigned char value, unsigned char len) { unsigned char ctrl_val = 0; unsigned int i = len; unsigned int ctrl = 0; - bpctl_dev_t *pbpctl_dev_c = NULL; + struct bpctl_dev *pbpctl_dev_c = NULL; if (pbpctl_dev->bp_i80) ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); @@ -354,7 +283,8 @@ static void write_pulse(bpctl_dev_t *pbpctl_dev, ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); if (pbpctl_dev->bp_10g9) { - if (!(pbpctl_dev_c = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_c = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_c) return; ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); } @@ -641,20 +571,21 @@ static void write_pulse(bpctl_dev_t *pbpctl_dev, } } -static int read_pulse(bpctl_dev_t *pbpctl_dev, unsigned int ctrl_ext, +static int read_pulse(struct bpctl_dev *pbpctl_dev, unsigned int ctrl_ext, unsigned char len) { unsigned char ctrl_val = 0; unsigned int i = len; unsigned int ctrl = 0; - bpctl_dev_t *pbpctl_dev_c = NULL; + struct bpctl_dev *pbpctl_dev_c = NULL; if (pbpctl_dev->bp_i80) ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); if (pbpctl_dev->bp_540) ctrl = BP10G_READ_REG(pbpctl_dev, ESDP); if (pbpctl_dev->bp_10g9) { - if (!(pbpctl_dev_c = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_c = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_c) return -1; ctrl = BP10G_READ_REG(pbpctl_dev_c, ESDP); } @@ -768,16 +699,15 @@ static int read_pulse(bpctl_dev_t *pbpctl_dev, unsigned int ctrl_ext, BP10G_MDIO_DATA_OUT)); } - if (pbpctl_dev->bp_10g9) { - ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); - } else if ((pbpctl_dev->bp_fiber5) || (pbpctl_dev->bp_i80)) { + if (pbpctl_dev->bp_10g9) + ctrl_ext = BP10G_READ_REG(pbpctl_dev, I2CCTL); + else if ((pbpctl_dev->bp_fiber5) || (pbpctl_dev->bp_i80)) ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL); - } else if (pbpctl_dev->bp_540) { + else if (pbpctl_dev->bp_540) ctrl_ext = BP10G_READ_REG(pbpctl_dev, ESDP); - } else if (pbpctl_dev->bp_10gb) + else if (pbpctl_dev->bp_10gb) ctrl_ext = BP10GB_READ_REG(pbpctl_dev, MISC_REG_SPIO); - else if (!pbpctl_dev->bp_10g) ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); else @@ -816,14 +746,16 @@ static int read_pulse(bpctl_dev_t *pbpctl_dev, unsigned int ctrl_ext, return ctrl_val; } -static void write_reg(bpctl_dev_t *pbpctl_dev, unsigned char value, +static void write_reg(struct bpctl_dev *pbpctl_dev, unsigned char value, unsigned char addr) { uint32_t ctrl_ext = 0, ctrl = 0; - bpctl_dev_t *pbpctl_dev_c = NULL; + struct bpctl_dev *pbpctl_dev_c = NULL; unsigned long flags; + if (pbpctl_dev->bp_10g9) { - if (!(pbpctl_dev_c = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_c = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_c) return; } if ((pbpctl_dev->wdt_status == WDT_STATUS_EN) && @@ -984,24 +916,26 @@ static void write_reg(bpctl_dev_t *pbpctl_dev, unsigned char value, } -static void write_data(bpctl_dev_t *pbpctl_dev, unsigned char value) +static void write_data(struct bpctl_dev *pbpctl_dev, unsigned char value) { write_reg(pbpctl_dev, value, CMND_REG_ADDR); } -static int read_reg(bpctl_dev_t *pbpctl_dev, unsigned char addr) +static int read_reg(struct bpctl_dev *pbpctl_dev, unsigned char addr) { uint32_t ctrl_ext = 0, ctrl = 0, ctrl_value = 0; - bpctl_dev_t *pbpctl_dev_c = NULL; + struct bpctl_dev *pbpctl_dev_c = NULL; #ifdef BP_SYNC_FLAG unsigned long flags; + spin_lock_irqsave(&pbpctl_dev->bypass_wr_lock, flags); #else atomic_set(&pbpctl_dev->wdt_busy, 1); #endif if (pbpctl_dev->bp_10g9) { - if (!(pbpctl_dev_c = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_c = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_c) return -1; } @@ -1257,10 +1191,10 @@ static int read_reg(bpctl_dev_t *pbpctl_dev, unsigned char addr) return ctrl_value; } -static int wdt_pulse(bpctl_dev_t *pbpctl_dev) +static int wdt_pulse(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0, ctrl = 0; - bpctl_dev_t *pbpctl_dev_c = NULL; + struct bpctl_dev *pbpctl_dev_c = NULL; #ifdef BP_SYNC_FLAG unsigned long flags; @@ -1272,7 +1206,8 @@ static int wdt_pulse(bpctl_dev_t *pbpctl_dev) return -1; #endif if (pbpctl_dev->bp_10g9) { - if (!(pbpctl_dev_c = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_c = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_c) return -1; } @@ -1462,8 +1397,8 @@ static int wdt_pulse(bpctl_dev_t *pbpctl_dev) (ctrl_ext & ~(BP10G_MCLK_DATA_OUT | BP10G_MDIO_DATA_OUT))); } - if ((pbpctl_dev->wdt_status == WDT_STATUS_EN) /*&& - (pbpctl_dev->bp_ext_ver<PXG4BPFI_VER) */ ) + if ((pbpctl_dev->wdt_status == WDT_STATUS_EN)) + /*&& (pbpctl_dev->bp_ext_ver<PXG4BPFI_VER) */ pbpctl_dev->bypass_wdt_on_time = jiffies; #ifdef BP_SYNC_FLAG spin_unlock_irqrestore(&pbpctl_dev->bypass_wr_lock, flags); @@ -1472,7 +1407,7 @@ static int wdt_pulse(bpctl_dev_t *pbpctl_dev) return 0; } -static void data_pulse(bpctl_dev_t *pbpctl_dev, unsigned char value) +static void data_pulse(struct bpctl_dev *pbpctl_dev, unsigned char value) { uint32_t ctrl_ext = 0; @@ -1538,7 +1473,7 @@ static void data_pulse(bpctl_dev_t *pbpctl_dev, unsigned char value) } -static int send_wdt_pulse(bpctl_dev_t *pbpctl_dev) +static int send_wdt_pulse(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; @@ -1572,7 +1507,8 @@ static int send_wdt_pulse(bpctl_dev_t *pbpctl_dev) return 0; } -void send_bypass_clear_pulse(bpctl_dev_t *pbpctl_dev, unsigned int value) +static void send_bypass_clear_pulse(struct bpctl_dev *pbpctl_dev, + unsigned int value) { uint32_t ctrl_ext = 0; @@ -1598,7 +1534,7 @@ void send_bypass_clear_pulse(bpctl_dev_t *pbpctl_dev, unsigned int value) /* #endif OLD_FW */ #ifdef BYPASS_DEBUG -int pulse_set_fn(bpctl_dev_t *pbpctl_dev, unsigned int counter) +int pulse_set_fn(struct bpctl_dev *pbpctl_dev, unsigned int counter) { uint32_t ctrl_ext = 0; @@ -1626,9 +1562,10 @@ int pulse_set_fn(bpctl_dev_t *pbpctl_dev, unsigned int counter) return 0; } -int zero_set_fn(bpctl_dev_t *pbpctl_dev) +int zero_set_fn(struct bpctl_dev *pbpctl_dev) { - uint32_t ctrl_ext = 0, ctrl_value = 0; + uint32_t ctrl_ext = 0; + if (!pbpctl_dev) return -1; @@ -1648,12 +1585,13 @@ int zero_set_fn(bpctl_dev_t *pbpctl_dev) BPCTLI_CTRL_EXT_MDIO_DATA))); } - return ctrl_value; + return 0; } -int pulse_get2_fn(bpctl_dev_t *pbpctl_dev) +int pulse_get2_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0, ctrl_value = 0; + if (!pbpctl_dev) return -1; @@ -1666,9 +1604,10 @@ int pulse_get2_fn(bpctl_dev_t *pbpctl_dev) return ctrl_value; } -int pulse_get1_fn(bpctl_dev_t *pbpctl_dev) +int pulse_get1_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0, ctrl_value = 0; + if (!pbpctl_dev) return -1; @@ -1683,7 +1622,7 @@ int pulse_get1_fn(bpctl_dev_t *pbpctl_dev) return ctrl_value; } -int gpio6_set_fn(bpctl_dev_t *pbpctl_dev) +int gpio6_set_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; @@ -1694,7 +1633,7 @@ int gpio6_set_fn(bpctl_dev_t *pbpctl_dev) return 0; } -int gpio7_set_fn(bpctl_dev_t *pbpctl_dev) +int gpio7_set_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; @@ -1705,7 +1644,7 @@ int gpio7_set_fn(bpctl_dev_t *pbpctl_dev) return 0; } -int gpio7_clear_fn(bpctl_dev_t *pbpctl_dev) +int gpio7_clear_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; @@ -1716,7 +1655,7 @@ int gpio7_clear_fn(bpctl_dev_t *pbpctl_dev) return 0; } -int gpio6_clear_fn(bpctl_dev_t *pbpctl_dev) +int gpio6_clear_fn(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; @@ -1728,62 +1667,34 @@ int gpio6_clear_fn(bpctl_dev_t *pbpctl_dev) } #endif /*BYPASS_DEBUG */ -static bpctl_dev_t *get_status_port_fn(bpctl_dev_t *pbpctl_dev) +static struct bpctl_dev *lookup_port(struct bpctl_dev *dev) { - int idx_dev = 0; - - if (pbpctl_dev == NULL) - return NULL; - - if ((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) { - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) - && (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) - && ((bpctl_dev_arr[idx_dev].func == 1) - && (pbpctl_dev->func == 0))) { - - return &(bpctl_dev_arr[idx_dev]); - } - if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) && - (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) && - ((bpctl_dev_arr[idx_dev].func == 3) - && (pbpctl_dev->func == 2))) { + struct bpctl_dev *p; + int n; - return &(bpctl_dev_arr[idx_dev]); - } - } + for (n = 0, p = bpctl_dev_arr; n < device_num && p->pdev; n++) { + if (p->bus == dev->bus + && p->slot == dev->slot + && p->func == (dev->func ^ 1)) + return p; } return NULL; } -static bpctl_dev_t *get_master_port_fn(bpctl_dev_t *pbpctl_dev) +static struct bpctl_dev *get_status_port_fn(struct bpctl_dev *pbpctl_dev) { - int idx_dev = 0; - - if (pbpctl_dev == NULL) - return NULL; - - if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) { - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) - && (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) - && ((bpctl_dev_arr[idx_dev].func == 0) - && (pbpctl_dev->func == 1))) { - - return &(bpctl_dev_arr[idx_dev]); - } - if ((bpctl_dev_arr[idx_dev].bus == pbpctl_dev->bus) && - (bpctl_dev_arr[idx_dev].slot == pbpctl_dev->slot) && - ((bpctl_dev_arr[idx_dev].func == 2) - && (pbpctl_dev->func == 3))) { + if (pbpctl_dev) { + if (pbpctl_dev->func == 0 || pbpctl_dev->func == 2) + return lookup_port(pbpctl_dev); + } + return NULL; +} - return &(bpctl_dev_arr[idx_dev]); - } - } +static struct bpctl_dev *get_master_port_fn(struct bpctl_dev *pbpctl_dev) +{ + if (pbpctl_dev) { + if (pbpctl_dev->func == 1 || pbpctl_dev->func == 3) + return lookup_port(pbpctl_dev); } return NULL; } @@ -1792,7 +1703,7 @@ static bpctl_dev_t *get_master_port_fn(bpctl_dev_t *pbpctl_dev) /**************INTEL API***************/ /**************************************/ -static void write_data_port_int(bpctl_dev_t *pbpctl_dev, +static void write_data_port_int(struct bpctl_dev *pbpctl_dev, unsigned char ctrl_value) { uint32_t value; @@ -1817,11 +1728,12 @@ static void write_data_port_int(bpctl_dev_t *pbpctl_dev, } -static int write_data_int(bpctl_dev_t *pbpctl_dev, unsigned char value) +static int write_data_int(struct bpctl_dev *pbpctl_dev, unsigned char value) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return -1; atomic_set(&pbpctl_dev->wdt_busy, 1); write_data_port_int(pbpctl_dev, value & 0x3); @@ -1831,7 +1743,7 @@ static int write_data_int(bpctl_dev_t *pbpctl_dev, unsigned char value) return 0; } -static int wdt_pulse_int(bpctl_dev_t *pbpctl_dev) +static int wdt_pulse_int(struct bpctl_dev *pbpctl_dev) { if ((atomic_read(&pbpctl_dev->wdt_busy)) == 1) @@ -1855,7 +1767,7 @@ static int wdt_pulse_int(bpctl_dev_t *pbpctl_dev) /*************************************/ /* CMND_ON 0x4 (100)*/ -int cmnd_on(bpctl_dev_t *pbpctl_dev) +static int cmnd_on(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -1872,7 +1784,7 @@ int cmnd_on(bpctl_dev_t *pbpctl_dev) } /* CMND_OFF 0x2 (10)*/ -int cmnd_off(bpctl_dev_t *pbpctl_dev) +static int cmnd_off(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -1885,12 +1797,12 @@ int cmnd_off(bpctl_dev_t *pbpctl_dev) else data_pulse(pbpctl_dev, CMND_OFF); ret = 0; - }; + } return ret; } /* BYPASS_ON (0xa)*/ -int bypass_on(bpctl_dev_t *pbpctl_dev) +static int bypass_on(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -1906,12 +1818,12 @@ int bypass_on(bpctl_dev_t *pbpctl_dev) } else data_pulse(pbpctl_dev, BYPASS_ON); ret = 0; - }; + } return ret; } /* BYPASS_OFF (0x8 111)*/ -int bypass_off(bpctl_dev_t *pbpctl_dev) +static int bypass_off(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -1934,35 +1846,38 @@ int bypass_off(bpctl_dev_t *pbpctl_dev) } /* TAP_OFF (0x9)*/ -int tap_off(bpctl_dev_t *pbpctl_dev) +static int tap_off(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; + if ((pbpctl_dev->bp_caps & TAP_CAP) && (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) { write_data(pbpctl_dev, TAP_OFF); msec_delay_bp(LATCH_DELAY); ret = 0; - }; + } return ret; } /* TAP_ON (0xb)*/ -int tap_on(bpctl_dev_t *pbpctl_dev) +static int tap_on(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; + if ((pbpctl_dev->bp_caps & TAP_CAP) && (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) { write_data(pbpctl_dev, TAP_ON); msec_delay_bp(LATCH_DELAY); ret = 0; - }; + } return ret; } /* DISC_OFF (0x9)*/ -int disc_off(bpctl_dev_t *pbpctl_dev) +static int disc_off(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if ((pbpctl_dev->bp_caps & DISC_CAP) && (pbpctl_dev->bp_ext_ver >= 0x8)) { write_data(pbpctl_dev, DISC_OFF); msec_delay_bp(LATCH_DELAY); @@ -1972,9 +1887,10 @@ int disc_off(bpctl_dev_t *pbpctl_dev) } /* DISC_ON (0xb)*/ -int disc_on(bpctl_dev_t *pbpctl_dev) +static int disc_on(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if ((pbpctl_dev->bp_caps & DISC_CAP) && (pbpctl_dev->bp_ext_ver >= 0x8)) { write_data(pbpctl_dev, /*DISC_ON */ 0x85); msec_delay_bp(LATCH_DELAY); @@ -1983,66 +1899,14 @@ int disc_on(bpctl_dev_t *pbpctl_dev) return ret; } -/* DISC_PORT_ON */ -int disc_port_on(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - bpctl_dev_t *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) { - - write_data(pbpctl_dev_m, TX_DISA); - } else { - - write_data(pbpctl_dev_m, TX_DISB); - } - - msec_delay_bp(LATCH_DELAY); - - } - return ret; -} - -/* DISC_PORT_OFF */ -int disc_port_off(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - bpctl_dev_t *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) - write_data(pbpctl_dev_m, TX_ENA); - else - write_data(pbpctl_dev_m, TX_ENB); - - msec_delay_bp(LATCH_DELAY); - - } - return ret; -} - /*TWO_PORT_LINK_HW_EN (0xe)*/ -int tpl_hw_on(bpctl_dev_t *pbpctl_dev) +static int tpl_hw_on(struct bpctl_dev *pbpctl_dev) { int ret = 0, ctrl = 0; - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return BP_NOT_CAP; if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { @@ -2064,12 +1928,13 @@ int tpl_hw_on(bpctl_dev_t *pbpctl_dev) } /*TWO_PORT_LINK_HW_DIS (0xc)*/ -int tpl_hw_off(bpctl_dev_t *pbpctl_dev) +static int tpl_hw_off(struct bpctl_dev *pbpctl_dev) { int ret = 0, ctrl = 0; - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return BP_NOT_CAP; if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { cmnd_on(pbpctl_dev); @@ -2089,20 +1954,20 @@ int tpl_hw_off(bpctl_dev_t *pbpctl_dev) } /* WDT_OFF (0x6 110)*/ -int wdt_off(bpctl_dev_t *pbpctl_dev) +static int wdt_off(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { + if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) bypass_off(pbpctl_dev); - } else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) + else if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) write_data(pbpctl_dev, WDT_OFF); else data_pulse(pbpctl_dev, WDT_OFF); pbpctl_dev->wdt_status = WDT_STATUS_DIS; ret = 0; - }; + } return ret; } @@ -2112,7 +1977,7 @@ int wdt_off(bpctl_dev_t *pbpctl_dev) static unsigned int wdt_val_array[] = { 1000, 1500, 2000, 3000, 4000, 8000, 16000, 32000, 0 }; -int wdt_on(bpctl_dev_t *pbpctl_dev, unsigned int timeout) +static int wdt_on(struct bpctl_dev *pbpctl_dev, unsigned int timeout) { if (pbpctl_dev->bp_caps & WD_CTL_CAP) { @@ -2164,7 +2029,7 @@ int wdt_on(bpctl_dev_t *pbpctl_dev, unsigned int timeout) return BP_NOT_CAP; } -void bp75_put_hw_semaphore_generic(bpctl_dev_t *pbpctl_dev) +static void bp75_put_hw_semaphore_generic(struct bpctl_dev *pbpctl_dev) { u32 swsm; @@ -2175,7 +2040,7 @@ void bp75_put_hw_semaphore_generic(bpctl_dev_t *pbpctl_dev) BPCTL_WRITE_REG(pbpctl_dev, SWSM, swsm); } -s32 bp75_get_hw_semaphore_generic(bpctl_dev_t *pbpctl_dev) +static s32 bp75_get_hw_semaphore_generic(struct bpctl_dev *pbpctl_dev) { u32 swsm; s32 ret_val = 0; @@ -2223,16 +2088,18 @@ s32 bp75_get_hw_semaphore_generic(bpctl_dev_t *pbpctl_dev) return ret_val; } -static void bp75_release_phy(bpctl_dev_t *pbpctl_dev) +static void bp75_release_phy(struct bpctl_dev *pbpctl_dev) { u16 mask = BPCTLI_SWFW_PHY0_SM; u32 swfw_sync; + s32 ret_val; if ((pbpctl_dev->func == 1) || (pbpctl_dev->func == 3)) mask = BPCTLI_SWFW_PHY1_SM; - while (bp75_get_hw_semaphore_generic(pbpctl_dev) != 0) ; - /* Empty */ + do + ret_val = bp75_get_hw_semaphore_generic(pbpctl_dev); + while (ret_val != 0); swfw_sync = BPCTL_READ_REG(pbpctl_dev, SW_FW_SYNC); swfw_sync &= ~mask; @@ -2241,7 +2108,7 @@ static void bp75_release_phy(bpctl_dev_t *pbpctl_dev) bp75_put_hw_semaphore_generic(pbpctl_dev); } -static s32 bp75_acquire_phy(bpctl_dev_t *pbpctl_dev) +static s32 bp75_acquire_phy(struct bpctl_dev *pbpctl_dev) { u16 mask = BPCTLI_SWFW_PHY0_SM; u32 swfw_sync; @@ -2287,7 +2154,8 @@ static s32 bp75_acquire_phy(bpctl_dev_t *pbpctl_dev) return ret_val; } -s32 bp75_read_phy_reg_mdic(bpctl_dev_t *pbpctl_dev, u32 offset, u16 *data) +static s32 bp75_read_phy_reg_mdic(struct bpctl_dev *pbpctl_dev, u32 offset, + u16 *data) { u32 i, mdic = 0; s32 ret_val = 0; @@ -2320,7 +2188,8 @@ s32 bp75_read_phy_reg_mdic(bpctl_dev_t *pbpctl_dev, u32 offset, u16 *data) return ret_val; } -s32 bp75_write_phy_reg_mdic(bpctl_dev_t *pbpctl_dev, u32 offset, u16 data) +static s32 bp75_write_phy_reg_mdic(struct bpctl_dev *pbpctl_dev, u32 offset, + u16 data) { u32 i, mdic = 0; s32 ret_val = 0; @@ -2353,7 +2222,7 @@ s32 bp75_write_phy_reg_mdic(bpctl_dev_t *pbpctl_dev, u32 offset, u16 data) return ret_val; } -static s32 bp75_read_phy_reg(bpctl_dev_t *pbpctl_dev, u32 offset, u16 *data) +static s32 bp75_read_phy_reg(struct bpctl_dev *pbpctl_dev, u32 offset, u16 *data) { s32 ret_val = 0; @@ -2379,7 +2248,7 @@ static s32 bp75_read_phy_reg(bpctl_dev_t *pbpctl_dev, u32 offset, u16 *data) return ret_val; } -static s32 bp75_write_phy_reg(bpctl_dev_t *pbpctl_dev, u32 offset, u16 data) +static s32 bp75_write_phy_reg(struct bpctl_dev *pbpctl_dev, u32 offset, u16 data) { s32 ret_val = 0; @@ -2407,10 +2276,11 @@ static s32 bp75_write_phy_reg(bpctl_dev_t *pbpctl_dev, u32 offset, u16 data) } /* SET_TX (non-Bypass command :)) */ -static int set_tx(bpctl_dev_t *pbpctl_dev, int tx_state) +static int set_tx(struct bpctl_dev *pbpctl_dev, int tx_state) { int ret = 0, ctrl = 0; - bpctl_dev_t *pbpctl_dev_m; + struct bpctl_dev *pbpctl_dev_m; + if ((is_bypass_fn(pbpctl_dev)) == 1) pbpctl_dev_m = pbpctl_dev; else @@ -2450,11 +2320,10 @@ static int set_tx(bpctl_dev_t *pbpctl_dev, int tx_state) if (PEG5_IF_SERIES(pbpctl_dev->subdevice)) { if (tx_state) { uint16_t mii_reg; - if (! - (ret = - bp75_read_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - &mii_reg))) { + ret = bp75_read_phy_reg(pbpctl_dev, + BPCTLI_PHY_CONTROL, + &mii_reg); + if (!ret) { if (mii_reg & BPCTLI_MII_CR_POWER_DOWN) { ret = bp75_write_phy_reg @@ -2466,27 +2335,23 @@ static int set_tx(bpctl_dev_t *pbpctl_dev, int tx_state) } } else { uint16_t mii_reg; - if (! - (ret = - bp75_read_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - &mii_reg))) { + ret = bp75_read_phy_reg(pbpctl_dev, + BPCTLI_PHY_CONTROL, + &mii_reg); + if (!ret) { mii_reg |= BPCTLI_MII_CR_POWER_DOWN; - ret = - bp75_write_phy_reg(pbpctl_dev, - BPCTLI_PHY_CONTROL, - mii_reg); + ret = bp75_write_phy_reg(pbpctl_dev, + BPCTLI_PHY_CONTROL, + mii_reg); } } } - if (pbpctl_dev->bp_fiber5) { + if (pbpctl_dev->bp_fiber5) ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); - - } else if (pbpctl_dev->bp_10gb) + else if (pbpctl_dev->bp_10gb) ctrl = BP10GB_READ_REG(pbpctl_dev, MISC_REG_GPIO); - else if (!pbpctl_dev->bp_10g) ctrl = BPCTL_READ_REG(pbpctl_dev, CTRL); else @@ -2609,7 +2474,7 @@ static int set_tx(bpctl_dev_t *pbpctl_dev, int tx_state) } /* SET_FORCE_LINK (non-Bypass command :)) */ -static int set_bp_force_link(bpctl_dev_t *pbpctl_dev, int tx_state) +static int set_bp_force_link(struct bpctl_dev *pbpctl_dev, int tx_state) { int ret = 0, ctrl = 0; @@ -2633,7 +2498,7 @@ static int set_bp_force_link(bpctl_dev_t *pbpctl_dev, int tx_state) } /*RESET_CONT 0x20 */ -int reset_cont(bpctl_dev_t *pbpctl_dev) +static int reset_cont(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -2645,12 +2510,12 @@ int reset_cont(bpctl_dev_t *pbpctl_dev) else data_pulse(pbpctl_dev, RESET_CONT); ret = 0; - }; + } return ret; } /*DIS_BYPASS_CAP 0x22 */ -int dis_bypass_cap(bpctl_dev_t *pbpctl_dev) +static int dis_bypass_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_DIS_CAP) { @@ -2669,7 +2534,7 @@ int dis_bypass_cap(bpctl_dev_t *pbpctl_dev) } /*EN_BYPASS_CAP 0x24 */ -int en_bypass_cap(bpctl_dev_t *pbpctl_dev) +static int en_bypass_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_DIS_CAP) { if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { @@ -2685,7 +2550,7 @@ int en_bypass_cap(bpctl_dev_t *pbpctl_dev) } /* BYPASS_STATE_PWRON 0x26*/ -int bypass_state_pwron(bpctl_dev_t *pbpctl_dev) +static int bypass_state_pwron(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) { write_data(pbpctl_dev, BYPASS_STATE_PWRON); @@ -2699,7 +2564,7 @@ int bypass_state_pwron(bpctl_dev_t *pbpctl_dev) } /* NORMAL_STATE_PWRON 0x28*/ -int normal_state_pwron(bpctl_dev_t *pbpctl_dev) +static int normal_state_pwron(struct bpctl_dev *pbpctl_dev) { if ((pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP) || (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP)) { @@ -2714,7 +2579,7 @@ int normal_state_pwron(bpctl_dev_t *pbpctl_dev) } /* BYPASS_STATE_PWROFF 0x27*/ -int bypass_state_pwroff(bpctl_dev_t *pbpctl_dev) +static int bypass_state_pwroff(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP) { write_data(pbpctl_dev, BYPASS_STATE_PWROFF); @@ -2725,7 +2590,7 @@ int bypass_state_pwroff(bpctl_dev_t *pbpctl_dev) } /* NORMAL_STATE_PWROFF 0x29*/ -int normal_state_pwroff(bpctl_dev_t *pbpctl_dev) +static int normal_state_pwroff(struct bpctl_dev *pbpctl_dev) { if ((pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP)) { write_data(pbpctl_dev, NORMAL_STATE_PWROFF); @@ -2736,7 +2601,7 @@ int normal_state_pwroff(bpctl_dev_t *pbpctl_dev) } /*TAP_STATE_PWRON 0x2a*/ -int tap_state_pwron(bpctl_dev_t *pbpctl_dev) +static int tap_state_pwron(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { write_data(pbpctl_dev, TAP_STATE_PWRON); @@ -2747,7 +2612,7 @@ int tap_state_pwron(bpctl_dev_t *pbpctl_dev) } /*DIS_TAP_CAP 0x2c*/ -int dis_tap_cap(bpctl_dev_t *pbpctl_dev) +static int dis_tap_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { write_data(pbpctl_dev, DIS_TAP_CAP); @@ -2758,7 +2623,7 @@ int dis_tap_cap(bpctl_dev_t *pbpctl_dev) } /*EN_TAP_CAP 0x2e*/ -int en_tap_cap(bpctl_dev_t *pbpctl_dev) +static int en_tap_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_DIS_CAP) { write_data(pbpctl_dev, EN_TAP_CAP); @@ -2769,7 +2634,7 @@ int en_tap_cap(bpctl_dev_t *pbpctl_dev) } /*DISC_STATE_PWRON 0x2a*/ -int disc_state_pwron(bpctl_dev_t *pbpctl_dev) +static int disc_state_pwron(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DISC_PWUP_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) { @@ -2782,7 +2647,7 @@ int disc_state_pwron(bpctl_dev_t *pbpctl_dev) } /*DIS_DISC_CAP 0x2c*/ -int dis_disc_cap(bpctl_dev_t *pbpctl_dev) +static int dis_disc_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DISC_DIS_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) { @@ -2794,60 +2659,8 @@ int dis_disc_cap(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -/*DISC_STATE_PWRON 0x2a*/ -int disc_port_state_pwron(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - bpctl_dev_t *pbpctl_dev_m; - - return BP_NOT_CAP; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) - write_data(pbpctl_dev_m, TX_DISA_PWRUP); - else - write_data(pbpctl_dev_m, TX_DISB_PWRUP); - - msec_delay_bp(LATCH_DELAY); - - } - return ret; -} - -int normal_port_state_pwron(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - bpctl_dev_t *pbpctl_dev_m; - return BP_NOT_CAP; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) - write_data(pbpctl_dev_m, TX_ENA_PWRUP); - else - write_data(pbpctl_dev_m, TX_ENB_PWRUP); - - msec_delay_bp(LATCH_DELAY); - - } - return ret; -} - /*EN_TAP_CAP 0x2e*/ -int en_disc_cap(bpctl_dev_t *pbpctl_dev) +static int en_disc_cap(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DISC_DIS_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) { @@ -2859,7 +2672,7 @@ int en_disc_cap(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int std_nic_on(bpctl_dev_t *pbpctl_dev) +static int std_nic_on(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & STD_NIC_CAP) { @@ -2913,7 +2726,7 @@ int std_nic_on(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int std_nic_off(bpctl_dev_t *pbpctl_dev) +static int std_nic_off(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & STD_NIC_CAP) { @@ -2965,7 +2778,7 @@ int std_nic_off(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int wdt_time_left(bpctl_dev_t *pbpctl_dev) +int wdt_time_left(struct bpctl_dev *pbpctl_dev) { /* unsigned long curr_time=((long long)(jiffies*1000))/HZ, delta_time=0,wdt_on_time=((long long)(pbpctl_dev->bypass_wdt_on_time*1000))/HZ; */ @@ -2997,9 +2810,10 @@ int wdt_time_left(bpctl_dev_t *pbpctl_dev) return time_left; } -static int wdt_timer(bpctl_dev_t *pbpctl_dev, int *time_left) +static int wdt_timer(struct bpctl_dev *pbpctl_dev, int *time_left) { int ret = 0; + if (pbpctl_dev->bp_caps & WD_CTL_CAP) { { if (pbpctl_dev->wdt_status == WDT_STATUS_UNKNOWN) @@ -3013,7 +2827,7 @@ static int wdt_timer(bpctl_dev_t *pbpctl_dev, int *time_left) return ret; } -static int wdt_timer_reload(bpctl_dev_t *pbpctl_dev) +static int wdt_timer_reload(struct bpctl_dev *pbpctl_dev) { int ret = 0; @@ -3037,7 +2851,7 @@ static int wdt_timer_reload(bpctl_dev_t *pbpctl_dev) static void wd_reset_timer(unsigned long param) { - bpctl_dev_t *pbpctl_dev = (bpctl_dev_t *) param; + struct bpctl_dev *pbpctl_dev = (struct bpctl_dev *) param; #ifdef BP_SELF_TEST struct sk_buff *skb_tmp; #endif @@ -3076,7 +2890,7 @@ static void wd_reset_timer(unsigned long param) } /*WAIT_AT_PWRUP 0x80 */ -int bp_wait_at_pwup_en(bpctl_dev_t *pbpctl_dev) +static int bp_wait_at_pwup_en(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -3091,7 +2905,7 @@ int bp_wait_at_pwup_en(bpctl_dev_t *pbpctl_dev) } /*DIS_WAIT_AT_PWRUP 0x81 */ -int bp_wait_at_pwup_dis(bpctl_dev_t *pbpctl_dev) +static int bp_wait_at_pwup_dis(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -3108,7 +2922,7 @@ int bp_wait_at_pwup_dis(bpctl_dev_t *pbpctl_dev) /*EN_HW_RESET 0x82 */ -int bp_hw_reset_en(bpctl_dev_t *pbpctl_dev) +static int bp_hw_reset_en(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -3124,7 +2938,7 @@ int bp_hw_reset_en(bpctl_dev_t *pbpctl_dev) /*DIS_HW_RESET 0x83 */ -int bp_hw_reset_dis(bpctl_dev_t *pbpctl_dev) +static int bp_hw_reset_dis(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -3139,7 +2953,7 @@ int bp_hw_reset_dis(bpctl_dev_t *pbpctl_dev) } -int wdt_exp_mode(bpctl_dev_t *pbpctl_dev, int mode) +static int wdt_exp_mode(struct bpctl_dev *pbpctl_dev, int mode) { uint32_t status_reg = 0, status_reg1 = 0; @@ -3190,7 +3004,7 @@ int wdt_exp_mode(bpctl_dev_t *pbpctl_dev, int mode) return BP_NOT_CAP; } -int bypass_fw_ver(bpctl_dev_t *pbpctl_dev) +static int bypass_fw_ver(struct bpctl_dev *pbpctl_dev) { if (is_bypass_fn(pbpctl_dev)) return read_reg(pbpctl_dev, VER_REG_ADDR); @@ -3198,7 +3012,7 @@ int bypass_fw_ver(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bypass_sign_check(bpctl_dev_t *pbpctl_dev) +static int bypass_sign_check(struct bpctl_dev *pbpctl_dev) { if (is_bypass_fn(pbpctl_dev)) @@ -3208,10 +3022,11 @@ int bypass_sign_check(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -static int tx_status(bpctl_dev_t *pbpctl_dev) +static int tx_status(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl = 0; - bpctl_dev_t *pbpctl_dev_m; + struct bpctl_dev *pbpctl_dev_m; + if ((is_bypass_fn(pbpctl_dev)) == 1) pbpctl_dev_m = pbpctl_dev; else @@ -3295,7 +3110,7 @@ static int tx_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -static int bp_force_link_status(bpctl_dev_t *pbpctl_dev) +static int bp_force_link_status(struct bpctl_dev *pbpctl_dev) { if (DBI_IF_SERIES(pbpctl_dev->subdevice)) { @@ -3309,13 +3124,15 @@ static int bp_force_link_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bypass_from_last_read(bpctl_dev_t *pbpctl_dev) +static int bypass_from_last_read(struct bpctl_dev *pbpctl_dev) { uint32_t ctrl_ext = 0; - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if ((pbpctl_dev->bp_caps & SW_CTL_CAP) - && (pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) { + if (pbpctl_dev->bp_caps & SW_CTL_CAP) { + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) + return BP_NOT_CAP; ctrl_ext = BPCTL_READ_REG(pbpctl_dev_b, CTRL_EXT); BPCTL_BP_WRITE_REG(pbpctl_dev_b, CTRL_EXT, (ctrl_ext & ~BPCTLI_CTRL_EXT_SDP7_DIR)); @@ -3327,20 +3144,21 @@ int bypass_from_last_read(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bypass_status_clear(bpctl_dev_t *pbpctl_dev) +static int bypass_status_clear(struct bpctl_dev *pbpctl_dev) { - bpctl_dev_t *pbpctl_dev_b = NULL; - - if ((pbpctl_dev->bp_caps & SW_CTL_CAP) - && (pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) { + struct bpctl_dev *pbpctl_dev_b = NULL; + if (pbpctl_dev->bp_caps & SW_CTL_CAP) { + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) + return BP_NOT_CAP; send_bypass_clear_pulse(pbpctl_dev_b, 1); return 0; } else return BP_NOT_CAP; } -int bypass_flag_status(bpctl_dev_t *pbpctl_dev) +static int bypass_flag_status(struct bpctl_dev *pbpctl_dev) { if ((pbpctl_dev->bp_caps & BP_CAP)) { @@ -3353,7 +3171,7 @@ int bypass_flag_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bypass_flag_status_clear(bpctl_dev_t *pbpctl_dev) +static int bypass_flag_status_clear(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_CAP) { @@ -3368,7 +3186,7 @@ int bypass_flag_status_clear(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bypass_change_status(bpctl_dev_t *pbpctl_dev) +static int bypass_change_status(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -3387,26 +3205,16 @@ int bypass_change_status(bpctl_dev_t *pbpctl_dev) return ret; } -int bypass_off_status(bpctl_dev_t *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & BP_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - BYPASS_OFF_MASK) == BYPASS_OFF_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -static int bypass_status(bpctl_dev_t *pbpctl_dev) +static int bypass_status(struct bpctl_dev *pbpctl_dev) { u32 ctrl_ext = 0; + if (pbpctl_dev->bp_caps & BP_CAP) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return BP_NOT_CAP; if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { @@ -3468,7 +3276,7 @@ static int bypass_status(bpctl_dev_t *pbpctl_dev) BP10G_SDP7_DATA_IN) != 0 ? 0 : 1); } - } else if (pbpctl_dev->media_type == bp_copper) { + } else if (pbpctl_dev->media_type == BP_COPPER) { return (((BPCTL_READ_REG(pbpctl_dev_b, CTRL)) & BPCTLI_CTRL_SWDPIN1) != 0 ? 1 : 0); @@ -3481,7 +3289,7 @@ static int bypass_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int default_pwron_status(bpctl_dev_t *pbpctl_dev) +static int default_pwron_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -3499,7 +3307,7 @@ int default_pwron_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -static int default_pwroff_status(bpctl_dev_t *pbpctl_dev) +static int default_pwroff_status(struct bpctl_dev *pbpctl_dev) { /*if ((!pbpctl_dev->bp_caps&BP_DIS_CAP)&& @@ -3513,7 +3321,7 @@ static int default_pwroff_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int dis_bypass_cap_status(bpctl_dev_t *pbpctl_dev) +static int dis_bypass_cap_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & BP_DIS_CAP) { @@ -3526,33 +3334,10 @@ int dis_bypass_cap_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int cmd_en_status(bpctl_dev_t *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - CMND_EN_MASK) == CMND_EN_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -int wdt_en_status(bpctl_dev_t *pbpctl_dev) -{ - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { - return ((((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & - WDT_EN_MASK) == WDT_EN_MASK) ? 1 : 0); - } - } - return BP_NOT_CAP; -} - -int wdt_programmed(bpctl_dev_t *pbpctl_dev, int *timeout) +static int wdt_programmed(struct bpctl_dev *pbpctl_dev, int *timeout) { int ret = 0; + if (pbpctl_dev->bp_caps & WD_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= PXG2BPI_VER) { if ((read_reg(pbpctl_dev, STATUS_REG_ADDR)) & @@ -3570,46 +3355,13 @@ int wdt_programmed(bpctl_dev_t *pbpctl_dev, int *timeout) *timeout = curr_wdt_status == 0 ? 0 : pbpctl_dev->bypass_timer_interval; - }; - } else - ret = BP_NOT_CAP; - return ret; -} - -int bypass_support(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - ret = - ((((read_reg(pbpctl_dev, PRODUCT_CAP_REG_ADDR)) & - BYPASS_SUPPORT_MASK) == - BYPASS_SUPPORT_MASK) ? 1 : 0); - } else if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - ret = 1; - } else - ret = BP_NOT_CAP; - return ret; -} - -int tap_support(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - - if (pbpctl_dev->bp_caps & SW_CTL_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { - ret = - ((((read_reg(pbpctl_dev, PRODUCT_CAP_REG_ADDR)) & - TAP_SUPPORT_MASK) == TAP_SUPPORT_MASK) ? 1 : 0); - } else if (pbpctl_dev->bp_ext_ver == PXG2BPI_VER) - ret = 0; + } } else ret = BP_NOT_CAP; return ret; } -int normal_support(bpctl_dev_t *pbpctl_dev) +static int normal_support(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; @@ -3621,11 +3373,11 @@ int normal_support(bpctl_dev_t *pbpctl_dev) NORMAL_UNSUPPORT_MASK) ? 0 : 1); } else ret = 1; - }; + } return ret; } -int get_bp_prod_caps(bpctl_dev_t *pbpctl_dev) +static int get_bp_prod_caps(struct bpctl_dev *pbpctl_dev) { if ((pbpctl_dev->bp_caps & SW_CTL_CAP) && (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER)) @@ -3634,7 +3386,7 @@ int get_bp_prod_caps(bpctl_dev_t *pbpctl_dev) } -int tap_flag_status(bpctl_dev_t *pbpctl_dev) +static int tap_flag_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_STATUS_CAP) { @@ -3646,9 +3398,10 @@ int tap_flag_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int tap_flag_status_clear(bpctl_dev_t *pbpctl_dev) +static int tap_flag_status_clear(struct bpctl_dev *pbpctl_dev) { uint32_t status_reg = 0; + if (pbpctl_dev->bp_caps & TAP_STATUS_CAP) { if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { status_reg = read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR); @@ -3660,9 +3413,10 @@ int tap_flag_status_clear(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int tap_change_status(bpctl_dev_t *pbpctl_dev) +static int tap_change_status(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; + if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) { if (pbpctl_dev->bp_caps & TAP_CAP) { if (pbpctl_dev->bp_caps & BP_CAP) { @@ -3677,24 +3431,15 @@ int tap_change_status(bpctl_dev_t *pbpctl_dev) return ret; } -int tap_off_status(bpctl_dev_t *pbpctl_dev) -{ - if (pbpctl_dev->bp_caps & TAP_CAP) { - if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - TAP_OFF_MASK) == TAP_OFF_MASK) ? 1 : 0); - } - return BP_NOT_CAP; -} - -int tap_status(bpctl_dev_t *pbpctl_dev) +static int tap_status(struct bpctl_dev *pbpctl_dev) { u32 ctrl_ext = 0; if (pbpctl_dev->bp_caps & TAP_CAP) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return BP_NOT_CAP; if (pbpctl_dev->bp_ext_ver >= 0x8) { @@ -3713,7 +3458,7 @@ int tap_status(bpctl_dev_t *pbpctl_dev) BP10G_SDP6_DATA_IN) != 0 ? 0 : 1); } - } else if (pbpctl_dev->media_type == bp_copper) + } else if (pbpctl_dev->media_type == BP_COPPER) return (((BPCTL_READ_REG(pbpctl_dev, CTRL)) & BPCTLI_CTRL_SWDPIN0) != 0 ? 1 : 0); else { @@ -3725,7 +3470,7 @@ int tap_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int default_pwron_tap_status(bpctl_dev_t *pbpctl_dev) +static int default_pwron_tap_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) @@ -3736,7 +3481,7 @@ int default_pwron_tap_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int dis_tap_cap_status(bpctl_dev_t *pbpctl_dev) +static int dis_tap_cap_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & TAP_PWUP_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= PXG2TBPI_VER) @@ -3747,7 +3492,7 @@ int dis_tap_cap_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int disc_flag_status(bpctl_dev_t *pbpctl_dev) +static int disc_flag_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DISC_CAP) { @@ -3759,9 +3504,10 @@ int disc_flag_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int disc_flag_status_clear(bpctl_dev_t *pbpctl_dev) +static int disc_flag_status_clear(struct bpctl_dev *pbpctl_dev) { uint32_t status_reg = 0; + if (pbpctl_dev->bp_caps & DISC_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) { status_reg = read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR); @@ -3773,9 +3519,10 @@ int disc_flag_status_clear(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int disc_change_status(bpctl_dev_t *pbpctl_dev) +static int disc_change_status(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; + if (pbpctl_dev->bp_caps & DISC_CAP) { ret = disc_flag_status(pbpctl_dev); disc_flag_status_clear(pbpctl_dev); @@ -3784,13 +3531,14 @@ int disc_change_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int disc_off_status(bpctl_dev_t *pbpctl_dev) +static int disc_off_status(struct bpctl_dev *pbpctl_dev) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; u32 ctrl_ext = 0; if (pbpctl_dev->bp_caps & DISC_CAP) { - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return BP_NOT_CAP; if (DISCF_IF_SERIES(pbpctl_dev->subdevice)) return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & @@ -3807,7 +3555,7 @@ int disc_off_status(bpctl_dev_t *pbpctl_dev) BP10G_SDP2_DATA) != 0 ? 1 : 0); } - if (pbpctl_dev->media_type == bp_copper) { + if (pbpctl_dev->media_type == BP_COPPER) { #if 0 return ((((read_reg(pbpctl_dev, STATUS_DISC_REG_ADDR)) & @@ -3867,20 +3615,20 @@ int disc_off_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -static int disc_status(bpctl_dev_t *pbpctl_dev) +static int disc_status(struct bpctl_dev *pbpctl_dev) { int ctrl = 0; - if (pbpctl_dev->bp_caps & DISC_CAP) { - if ((ctrl = disc_off_status(pbpctl_dev)) < 0) + if (pbpctl_dev->bp_caps & DISC_CAP) { + ctrl = disc_off_status(pbpctl_dev); + if (ctrl < 0) return ctrl; return ((ctrl == 0) ? 1 : 0); - } return BP_NOT_CAP; } -int default_pwron_disc_status(bpctl_dev_t *pbpctl_dev) +static int default_pwron_disc_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DISC_PWUP_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) @@ -3891,7 +3639,7 @@ int default_pwron_disc_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int dis_disc_cap_status(bpctl_dev_t *pbpctl_dev) +static int dis_disc_cap_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & DIS_DISC_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) @@ -3902,55 +3650,7 @@ int dis_disc_cap_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int disc_port_status(bpctl_dev_t *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - bpctl_dev_t *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) { - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - TX_DISA_MASK) == TX_DISA_MASK) ? 1 : 0); - } else - return ((((read_reg(pbpctl_dev, STATUS_TAP_REG_ADDR)) & - TX_DISB_MASK) == TX_DISB_MASK) ? 1 : 0); - - } - return ret; -} - -int default_pwron_disc_port_status(bpctl_dev_t *pbpctl_dev) -{ - int ret = BP_NOT_CAP; - bpctl_dev_t *pbpctl_dev_m; - - if ((is_bypass_fn(pbpctl_dev)) == 1) - pbpctl_dev_m = pbpctl_dev; - else - pbpctl_dev_m = get_master_port_fn(pbpctl_dev); - if (pbpctl_dev_m == NULL) - return BP_NOT_CAP; - - if (pbpctl_dev_m->bp_caps_ex & DISC_PORT_CAP_EX) { - if (is_bypass_fn(pbpctl_dev) == 1) - return ret; - /* return((((read_reg(pbpctl_dev,STATUS_TAP_REG_ADDR)) & TX_DISA_MASK)==TX_DISA_MASK)?1:0); */ - else - return ret; - /* return((((read_reg(pbpctl_dev,STATUS_TAP_REG_ADDR)) & TX_DISA_MASK)==TX_DISA_MASK)?1:0); */ - - } - return ret; -} - -int wdt_exp_mode_status(bpctl_dev_t *pbpctl_dev) +static int wdt_exp_mode_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & WD_CTL_CAP) { if (pbpctl_dev->bp_ext_ver <= PXG2BPI_VER) @@ -3973,7 +3673,7 @@ int wdt_exp_mode_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int tpl2_flag_status(bpctl_dev_t *pbpctl_dev) +static int tpl2_flag_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps_ex & TPL2_CAP_EX) { @@ -3984,21 +3684,7 @@ int tpl2_flag_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int tpl_hw_status(bpctl_dev_t *pbpctl_dev) -{ - bpctl_dev_t *pbpctl_dev_b = NULL; - - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) - return BP_NOT_CAP; - - if (TPL_IF_SERIES(pbpctl_dev->subdevice)) - return (((BPCTL_READ_REG(pbpctl_dev, CTRL)) & - BPCTLI_CTRL_SWDPIN0) != 0 ? 1 : 0); - return BP_NOT_CAP; -} - - -int bp_wait_at_pwup_status(bpctl_dev_t *pbpctl_dev) +static int bp_wait_at_pwup_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { if (pbpctl_dev->bp_ext_ver >= 0x8) @@ -4009,7 +3695,7 @@ int bp_wait_at_pwup_status(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int bp_hw_reset_status(bpctl_dev_t *pbpctl_dev) +static int bp_hw_reset_status(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & SW_CTL_CAP) { @@ -4023,7 +3709,7 @@ int bp_hw_reset_status(bpctl_dev_t *pbpctl_dev) } -int std_nic_status(bpctl_dev_t *pbpctl_dev) +static int std_nic_status(struct bpctl_dev *pbpctl_dev) { int status_val = 0; @@ -4071,13 +3757,14 @@ int std_nic_status(bpctl_dev_t *pbpctl_dev) /******************************************************/ /**************SW_INIT*********************************/ /******************************************************/ -void bypass_caps_init(bpctl_dev_t *pbpctl_dev) +static void bypass_caps_init(struct bpctl_dev *pbpctl_dev) { u_int32_t ctrl_ext = 0; - bpctl_dev_t *pbpctl_dev_m = NULL; + struct bpctl_dev *pbpctl_dev_m = NULL; #ifdef BYPASS_DEBUG int ret = 0; + if (!(INTEL_IF_SERIES(adapter->bp_device_block.subdevice))) { ret = read_reg(pbpctl_dev, VER_REG_ADDR); printk("VER_REG reg1=%x\n", ret); @@ -4098,42 +3785,41 @@ void bypass_caps_init(bpctl_dev_t *pbpctl_dev) } #endif if ((pbpctl_dev->bp_fiber5) || (pbpctl_dev->bp_10g9)) { - pbpctl_dev->media_type = bp_fiber; + pbpctl_dev->media_type = BP_FIBER; } else if (pbpctl_dev->bp_10gb) { if (BP10GB_CX4_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->media_type = bp_cx4; + pbpctl_dev->media_type = BP_CX4; else - pbpctl_dev->media_type = bp_fiber; + pbpctl_dev->media_type = BP_FIBER; } else if (pbpctl_dev->bp_540) - pbpctl_dev->media_type = bp_none; + pbpctl_dev->media_type = BP_NONE; else if (!pbpctl_dev->bp_10g) { ctrl_ext = BPCTL_READ_REG(pbpctl_dev, CTRL_EXT); if ((ctrl_ext & BPCTLI_CTRL_EXT_LINK_MODE_MASK) == 0x0) - pbpctl_dev->media_type = bp_copper; + pbpctl_dev->media_type = BP_COPPER; else - pbpctl_dev->media_type = bp_fiber; + pbpctl_dev->media_type = BP_FIBER; } else { if (BP10G_CX4_SERIES(pbpctl_dev->subdevice)) - pbpctl_dev->media_type = bp_cx4; + pbpctl_dev->media_type = BP_CX4; else - pbpctl_dev->media_type = bp_fiber; + pbpctl_dev->media_type = BP_FIBER; } if (is_bypass_fn(pbpctl_dev)) { pbpctl_dev->bp_caps |= BP_PWOFF_ON_CAP; - if (pbpctl_dev->media_type == bp_fiber) + if (pbpctl_dev->media_type == BP_FIBER) pbpctl_dev->bp_caps |= (TX_CTL_CAP | TX_STATUS_CAP | TPL_CAP); - if (TPL_IF_SERIES(pbpctl_dev->subdevice)) { + if (TPL_IF_SERIES(pbpctl_dev->subdevice)) pbpctl_dev->bp_caps |= TPL_CAP; - } if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) { pbpctl_dev->bp_caps |= @@ -4273,9 +3959,9 @@ void bypass_caps_init(bpctl_dev_t *pbpctl_dev) if (PEG5_IF_SERIES(pbpctl_dev->subdevice)) pbpctl_dev->bp_caps |= (TX_CTL_CAP | TX_STATUS_CAP); - if (BP10GB_IF_SERIES(pbpctl_dev->subdevice)) { + if (BP10GB_IF_SERIES(pbpctl_dev->subdevice)) pbpctl_dev->bp_caps &= ~(TX_CTL_CAP | TX_STATUS_CAP); - } + pbpctl_dev_m = get_master_port_fn(pbpctl_dev); if (pbpctl_dev_m != NULL) { int cap_reg = 0; @@ -4290,27 +3976,10 @@ void bypass_caps_init(bpctl_dev_t *pbpctl_dev) } } -int bypass_off_init(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - - if ((ret = cmnd_on(pbpctl_dev)) < 0) - return ret; - if (INTEL_IF_SERIES(pbpctl_dev->subdevice)) - return dis_bypass_cap(pbpctl_dev); - wdt_off(pbpctl_dev); - if (pbpctl_dev->bp_caps & BP_CAP) - bypass_off(pbpctl_dev); - if (pbpctl_dev->bp_caps & TAP_CAP) - tap_off(pbpctl_dev); - cmnd_off(pbpctl_dev); - return 0; -} - -void remove_bypass_wd_auto(bpctl_dev_t *pbpctl_dev) +static void remove_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) { #ifdef BP_SELF_TEST - bpctl_dev_t *pbpctl_dev_sl = NULL; + struct bpctl_dev *pbpctl_dev_sl = NULL; #endif if (pbpctl_dev->bp_caps & WD_CTL_CAP) { @@ -4336,7 +4005,7 @@ void remove_bypass_wd_auto(bpctl_dev_t *pbpctl_dev) } -int init_bypass_wd_auto(bpctl_dev_t *pbpctl_dev) +static int init_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & WD_CTL_CAP) { init_timer(&pbpctl_dev->bp_timer); @@ -4350,7 +4019,7 @@ int init_bypass_wd_auto(bpctl_dev_t *pbpctl_dev) #ifdef BP_SELF_TEST int bp_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { - bpctl_dev_t *pbpctl_dev = NULL, *pbpctl_dev_m = NULL; + struct bpctl_dev *pbpctl_dev = NULL, *pbpctl_dev_m = NULL; int idx_dev = 0; struct ethhdr *eth = (struct ethhdr *)skb->data; @@ -4383,7 +4052,7 @@ int bp_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) } #endif -int set_bypass_wd_auto(bpctl_dev_t *pbpctl_dev, unsigned int param) +static int set_bypass_wd_auto(struct bpctl_dev *pbpctl_dev, unsigned int param) { if (pbpctl_dev->bp_caps & WD_CTL_CAP) { if (pbpctl_dev->reset_time != param) { @@ -4402,20 +4071,19 @@ int set_bypass_wd_auto(bpctl_dev_t *pbpctl_dev, unsigned int param) return BP_NOT_CAP; } -int get_bypass_wd_auto(bpctl_dev_t *pbpctl_dev) +static int get_bypass_wd_auto(struct bpctl_dev *pbpctl_dev) { - - if (pbpctl_dev->bp_caps & WD_CTL_CAP) { + if (pbpctl_dev->bp_caps & WD_CTL_CAP) return pbpctl_dev->reset_time; - } + return BP_NOT_CAP; } -#ifdef BP_SELF_TEST +#ifdef BP_SELF_TEST -int set_bp_self_test(bpctl_dev_t *pbpctl_dev, unsigned int param) +int set_bp_self_test(struct bpctl_dev *pbpctl_dev, unsigned int param) { - bpctl_dev_t *pbpctl_dev_sl = NULL; + struct bpctl_dev *pbpctl_dev_sl = NULL; if (pbpctl_dev->bp_caps & WD_CTL_CAP) { pbpctl_dev->bp_self_test_flag = param == 0 ? 0 : 1; @@ -4448,7 +4116,7 @@ int set_bp_self_test(bpctl_dev_t *pbpctl_dev, unsigned int param) return BP_NOT_CAP; } -int get_bp_self_test(bpctl_dev_t *pbpctl_dev) +int get_bp_self_test(struct bpctl_dev *pbpctl_dev) { if (pbpctl_dev->bp_caps & WD_CTL_CAP) { @@ -4466,7 +4134,7 @@ int get_bp_self_test(bpctl_dev_t *pbpctl_dev) /************************* API ********************************/ /**************************************************************/ -int is_bypass_fn(bpctl_dev_t *pbpctl_dev) +int is_bypass_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4474,13 +4142,14 @@ int is_bypass_fn(bpctl_dev_t *pbpctl_dev) return (((pbpctl_dev->func == 0) || (pbpctl_dev->func == 2)) ? 1 : 0); } -int set_bypass_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) +static int set_bypass_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) { int ret = 0; if (!(pbpctl_dev->bp_caps & BP_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (!bypass_mode) ret = bypass_off(pbpctl_dev); @@ -4491,12 +4160,12 @@ int set_bypass_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) return ret; } -int get_bypass_fn(bpctl_dev_t *pbpctl_dev) +static int get_bypass_fn(struct bpctl_dev *pbpctl_dev) { return bypass_status(pbpctl_dev); } -int get_bypass_change_fn(bpctl_dev_t *pbpctl_dev) +static int get_bypass_change_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4504,15 +4173,17 @@ int get_bypass_change_fn(bpctl_dev_t *pbpctl_dev) return bypass_change_status(pbpctl_dev); } -int set_dis_bypass_fn(bpctl_dev_t *pbpctl_dev, int dis_param) +static int set_dis_bypass_fn(struct bpctl_dev *pbpctl_dev, int dis_param) { int ret = 0; + if (!pbpctl_dev) return -1; if (!(pbpctl_dev->bp_caps & BP_DIS_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (dis_param) ret = dis_bypass_cap(pbpctl_dev); @@ -4522,7 +4193,7 @@ int set_dis_bypass_fn(bpctl_dev_t *pbpctl_dev, int dis_param) return ret; } -int get_dis_bypass_fn(bpctl_dev_t *pbpctl_dev) +static int get_dis_bypass_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4530,15 +4201,17 @@ int get_dis_bypass_fn(bpctl_dev_t *pbpctl_dev) return dis_bypass_cap_status(pbpctl_dev); } -int set_bypass_pwoff_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) +static int set_bypass_pwoff_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) { int ret = 0; + if (!pbpctl_dev) return -1; if (!(pbpctl_dev->bp_caps & BP_PWOFF_CTL_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (bypass_mode) ret = bypass_state_pwroff(pbpctl_dev); @@ -4548,7 +4221,7 @@ int set_bypass_pwoff_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) return ret; } -int get_bypass_pwoff_fn(bpctl_dev_t *pbpctl_dev) +static int get_bypass_pwoff_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4556,15 +4229,17 @@ int get_bypass_pwoff_fn(bpctl_dev_t *pbpctl_dev) return default_pwroff_status(pbpctl_dev); } -int set_bypass_pwup_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) +static int set_bypass_pwup_fn(struct bpctl_dev *pbpctl_dev, int bypass_mode) { int ret = 0; + if (!pbpctl_dev) return -1; if (!(pbpctl_dev->bp_caps & BP_PWUP_CTL_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (bypass_mode) ret = bypass_state_pwron(pbpctl_dev); @@ -4574,7 +4249,7 @@ int set_bypass_pwup_fn(bpctl_dev_t *pbpctl_dev, int bypass_mode) return ret; } -int get_bypass_pwup_fn(bpctl_dev_t *pbpctl_dev) +static int get_bypass_pwup_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4582,16 +4257,18 @@ int get_bypass_pwup_fn(bpctl_dev_t *pbpctl_dev) return default_pwron_status(pbpctl_dev); } -int set_bypass_wd_fn(bpctl_dev_t *pbpctl_dev, int timeout) +static int set_bypass_wd_fn(struct bpctl_dev *pbpctl_dev, int timeout) { int ret = 0; + if (!pbpctl_dev) return -1; if (!(pbpctl_dev->bp_caps & WD_CTL_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (!timeout) ret = wdt_off(pbpctl_dev); @@ -4603,7 +4280,7 @@ int set_bypass_wd_fn(bpctl_dev_t *pbpctl_dev, int timeout) return ret; } -int get_bypass_wd_fn(bpctl_dev_t *pbpctl_dev, int *timeout) +static int get_bypass_wd_fn(struct bpctl_dev *pbpctl_dev, int *timeout) { if (!pbpctl_dev) return -1; @@ -4611,7 +4288,7 @@ int get_bypass_wd_fn(bpctl_dev_t *pbpctl_dev, int *timeout) return wdt_programmed(pbpctl_dev, timeout); } -int get_wd_expire_time_fn(bpctl_dev_t *pbpctl_dev, int *time_left) +static int get_wd_expire_time_fn(struct bpctl_dev *pbpctl_dev, int *time_left) { if (!pbpctl_dev) return -1; @@ -4619,7 +4296,7 @@ int get_wd_expire_time_fn(bpctl_dev_t *pbpctl_dev, int *time_left) return wdt_timer(pbpctl_dev, time_left); } -int reset_bypass_wd_timer_fn(bpctl_dev_t *pbpctl_dev) +static int reset_bypass_wd_timer_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4627,11 +4304,11 @@ int reset_bypass_wd_timer_fn(bpctl_dev_t *pbpctl_dev) return wdt_timer_reload(pbpctl_dev); } -int get_wd_set_caps_fn(bpctl_dev_t *pbpctl_dev) +static int get_wd_set_caps_fn(struct bpctl_dev *pbpctl_dev) { int bp_status = 0; - unsigned int step_value = TIMEOUT_MAX_STEP + 1, bit_cnt = 0; + if (!pbpctl_dev) return -1; @@ -4651,16 +4328,18 @@ int get_wd_set_caps_fn(bpctl_dev_t *pbpctl_dev) return bp_status; } -int set_std_nic_fn(bpctl_dev_t *pbpctl_dev, int nic_mode) +static int set_std_nic_fn(struct bpctl_dev *pbpctl_dev, int nic_mode) { int ret = 0; + if (!pbpctl_dev) return -1; if (!(pbpctl_dev->bp_caps & STD_NIC_CAP)) return BP_NOT_CAP; - if ((ret = cmnd_on(pbpctl_dev)) < 0) + ret = cmnd_on(pbpctl_dev); + if (ret < 0) return ret; if (nic_mode) ret = std_nic_on(pbpctl_dev); @@ -4670,7 +4349,7 @@ int set_std_nic_fn(bpctl_dev_t *pbpctl_dev, int nic_mode) return ret; } -int get_std_nic_fn(bpctl_dev_t *pbpctl_dev) +static int get_std_nic_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4678,7 +4357,7 @@ int get_std_nic_fn(bpctl_dev_t *pbpctl_dev) return std_nic_status(pbpctl_dev); } -int set_tap_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) +static int set_tap_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) { if (!pbpctl_dev) return -1; @@ -4694,7 +4373,7 @@ int set_tap_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) return BP_NOT_CAP; } -int get_tap_fn(bpctl_dev_t *pbpctl_dev) +static int get_tap_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4702,9 +4381,10 @@ int get_tap_fn(bpctl_dev_t *pbpctl_dev) return tap_status(pbpctl_dev); } -int set_tap_pwup_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) +static int set_tap_pwup_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4720,18 +4400,20 @@ int set_tap_pwup_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) return ret; } -int get_tap_pwup_fn(bpctl_dev_t *pbpctl_dev) +static int get_tap_pwup_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; - if ((ret = default_pwron_tap_status(pbpctl_dev)) < 0) + ret = default_pwron_tap_status(pbpctl_dev); + if (ret < 0) return ret; return ((ret == 0) ? 1 : 0); } -int get_tap_change_fn(bpctl_dev_t *pbpctl_dev) +static int get_tap_change_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4739,9 +4421,10 @@ int get_tap_change_fn(bpctl_dev_t *pbpctl_dev) return tap_change_status(pbpctl_dev); } -int set_dis_tap_fn(bpctl_dev_t *pbpctl_dev, int dis_param) +static int set_dis_tap_fn(struct bpctl_dev *pbpctl_dev, int dis_param) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4756,7 +4439,7 @@ int set_dis_tap_fn(bpctl_dev_t *pbpctl_dev, int dis_param) return BP_NOT_CAP; } -int get_dis_tap_fn(bpctl_dev_t *pbpctl_dev) +static int get_dis_tap_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4764,7 +4447,7 @@ int get_dis_tap_fn(bpctl_dev_t *pbpctl_dev) return dis_tap_cap_status(pbpctl_dev); } -int set_disc_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) +static int set_disc_fn(struct bpctl_dev *pbpctl_dev, int disc_mode) { if (!pbpctl_dev) return -1; @@ -4781,9 +4464,10 @@ int set_disc_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) return BP_NOT_CAP; } -int get_disc_fn(bpctl_dev_t *pbpctl_dev) +static int get_disc_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4792,9 +4476,10 @@ int get_disc_fn(bpctl_dev_t *pbpctl_dev) return ret; } -int set_disc_pwup_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) +static int set_disc_pwup_fn(struct bpctl_dev *pbpctl_dev, int disc_mode) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4810,9 +4495,10 @@ int set_disc_pwup_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) return ret; } -int get_disc_pwup_fn(bpctl_dev_t *pbpctl_dev) +static int get_disc_pwup_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4820,9 +4506,10 @@ int get_disc_pwup_fn(bpctl_dev_t *pbpctl_dev) return (ret == 0 ? 1 : (ret < 0 ? BP_NOT_CAP : 0)); } -int get_disc_change_fn(bpctl_dev_t *pbpctl_dev) +static int get_disc_change_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4830,9 +4517,10 @@ int get_disc_change_fn(bpctl_dev_t *pbpctl_dev) return ret; } -int set_dis_disc_fn(bpctl_dev_t *pbpctl_dev, int dis_param) +static int set_dis_disc_fn(struct bpctl_dev *pbpctl_dev, int dis_param) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -4848,65 +4536,19 @@ int set_dis_disc_fn(bpctl_dev_t *pbpctl_dev, int dis_param) return BP_NOT_CAP; } -int get_dis_disc_fn(bpctl_dev_t *pbpctl_dev) +static int get_dis_disc_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; - if (!pbpctl_dev) - return -1; - ret = dis_disc_cap_status(pbpctl_dev); - - return ret; -} - -int set_disc_port_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) -{ - int ret = BP_NOT_CAP; - if (!pbpctl_dev) - return -1; - - if (!disc_mode) - ret = disc_port_off(pbpctl_dev); - else - ret = disc_port_on(pbpctl_dev); - - return ret; -} - -int get_disc_port_fn(bpctl_dev_t *pbpctl_dev) -{ - if (!pbpctl_dev) - return -1; - - return disc_port_status(pbpctl_dev); -} - -int set_disc_port_pwup_fn(bpctl_dev_t *pbpctl_dev, int disc_mode) -{ - int ret = BP_NOT_CAP; if (!pbpctl_dev) return -1; - if (!disc_mode) - ret = normal_port_state_pwron(pbpctl_dev); - else - ret = disc_port_state_pwron(pbpctl_dev); + ret = dis_disc_cap_status(pbpctl_dev); return ret; } -int get_disc_port_pwup_fn(bpctl_dev_t *pbpctl_dev) -{ - int ret = 0; - if (!pbpctl_dev) - return -1; - - if ((ret = default_pwron_disc_port_status(pbpctl_dev)) < 0) - return ret; - return ((ret == 0) ? 1 : 0); -} - -int get_wd_exp_mode_fn(bpctl_dev_t *pbpctl_dev) +static int get_wd_exp_mode_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4914,7 +4556,7 @@ int get_wd_exp_mode_fn(bpctl_dev_t *pbpctl_dev) return wdt_exp_mode_status(pbpctl_dev); } -int set_wd_exp_mode_fn(bpctl_dev_t *pbpctl_dev, int param) +static int set_wd_exp_mode_fn(struct bpctl_dev *pbpctl_dev, int param) { if (!pbpctl_dev) return -1; @@ -4922,21 +4564,10 @@ int set_wd_exp_mode_fn(bpctl_dev_t *pbpctl_dev, int param) return wdt_exp_mode(pbpctl_dev, param); } -int reset_cont_fn(bpctl_dev_t *pbpctl_dev) +static int set_tx_fn(struct bpctl_dev *pbpctl_dev, int tx_state) { - int ret = 0; - if (!pbpctl_dev) - return -1; - - if ((ret = cmnd_on(pbpctl_dev)) < 0) - return ret; - return reset_cont(pbpctl_dev); -} + struct bpctl_dev *pbpctl_dev_b = NULL; -int set_tx_fn(bpctl_dev_t *pbpctl_dev, int tx_state) -{ - - bpctl_dev_t *pbpctl_dev_b = NULL; if (!pbpctl_dev) return -1; @@ -4944,17 +4575,19 @@ int set_tx_fn(bpctl_dev_t *pbpctl_dev, int tx_state) (pbpctl_dev->bp_caps & SW_CTL_CAP)) { if ((pbpctl_dev->bp_tpl_flag)) return BP_NOT_CAP; - } else if ((pbpctl_dev_b = get_master_port_fn(pbpctl_dev))) { - if ((pbpctl_dev_b->bp_caps & TPL_CAP) && + } else { + pbpctl_dev_b = get_master_port_fn(pbpctl_dev); + if (pbpctl_dev_b && + (pbpctl_dev_b->bp_caps & TPL_CAP) && (pbpctl_dev_b->bp_tpl_flag)) return BP_NOT_CAP; } return set_tx(pbpctl_dev, tx_state); } -int set_bp_force_link_fn(int dev_num, int tx_state) +static int set_bp_force_link_fn(int dev_num, int tx_state) { - static bpctl_dev_t *bpctl_dev_curr; + static struct bpctl_dev *bpctl_dev_curr; if ((dev_num < 0) || (dev_num > device_num) || (bpctl_dev_arr[dev_num].pdev == NULL)) @@ -4964,7 +4597,7 @@ int set_bp_force_link_fn(int dev_num, int tx_state) return set_bp_force_link(bpctl_dev_curr, tx_state); } -int set_wd_autoreset_fn(bpctl_dev_t *pbpctl_dev, int param) +static int set_wd_autoreset_fn(struct bpctl_dev *pbpctl_dev, int param) { if (!pbpctl_dev) return -1; @@ -4972,7 +4605,7 @@ int set_wd_autoreset_fn(bpctl_dev_t *pbpctl_dev, int param) return set_bypass_wd_auto(pbpctl_dev, param); } -int get_wd_autoreset_fn(bpctl_dev_t *pbpctl_dev) +static int get_wd_autoreset_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4981,7 +4614,7 @@ int get_wd_autoreset_fn(bpctl_dev_t *pbpctl_dev) } #ifdef BP_SELF_TEST -int set_bp_self_test_fn(bpctl_dev_t *pbpctl_dev, int param) +int set_bp_self_test_fn(struct bpctl_dev *pbpctl_dev, int param) { if (!pbpctl_dev) return -1; @@ -4989,7 +4622,7 @@ int set_bp_self_test_fn(bpctl_dev_t *pbpctl_dev, int param) return set_bp_self_test(pbpctl_dev, param); } -int get_bp_self_test_fn(bpctl_dev_t *pbpctl_dev) +int get_bp_self_test_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -4999,7 +4632,7 @@ int get_bp_self_test_fn(bpctl_dev_t *pbpctl_dev) #endif -int get_bypass_caps_fn(bpctl_dev_t *pbpctl_dev) +static int get_bypass_caps_fn(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -5008,9 +4641,11 @@ int get_bypass_caps_fn(bpctl_dev_t *pbpctl_dev) } -int get_bypass_slave_fn(bpctl_dev_t *pbpctl_dev, bpctl_dev_t **pbpctl_dev_out) +static int get_bypass_slave_fn(struct bpctl_dev *pbpctl_dev, + struct bpctl_dev **pbpctl_dev_out) { int idx_dev = 0; + if (!pbpctl_dev) return -1; @@ -5040,7 +4675,7 @@ int get_bypass_slave_fn(bpctl_dev_t *pbpctl_dev, bpctl_dev_t **pbpctl_dev_out) return 0; } -int is_bypass(bpctl_dev_t *pbpctl_dev) +static int is_bypass(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -5051,9 +4686,10 @@ int is_bypass(bpctl_dev_t *pbpctl_dev) return 0; } -int get_tx_fn(bpctl_dev_t *pbpctl_dev) +static int get_tx_fn(struct bpctl_dev *pbpctl_dev) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; + if (!pbpctl_dev) return -1; @@ -5061,17 +4697,19 @@ int get_tx_fn(bpctl_dev_t *pbpctl_dev) (pbpctl_dev->bp_caps & SW_CTL_CAP)) { if ((pbpctl_dev->bp_tpl_flag)) return BP_NOT_CAP; - } else if ((pbpctl_dev_b = get_master_port_fn(pbpctl_dev))) { - if ((pbpctl_dev_b->bp_caps & TPL_CAP) && + } else { + pbpctl_dev_b = get_master_port_fn(pbpctl_dev); + if (pbpctl_dev_b && + (pbpctl_dev_b->bp_caps & TPL_CAP) && (pbpctl_dev_b->bp_tpl_flag)) return BP_NOT_CAP; } return tx_status(pbpctl_dev); } -int get_bp_force_link_fn(int dev_num) +static int get_bp_force_link_fn(int dev_num) { - static bpctl_dev_t *bpctl_dev_curr; + static struct bpctl_dev *bpctl_dev_curr; if ((dev_num < 0) || (dev_num > device_num) || (bpctl_dev_arr[dev_num].pdev == NULL)) @@ -5081,12 +4719,12 @@ int get_bp_force_link_fn(int dev_num) return bp_force_link_status(bpctl_dev_curr); } -static int get_bypass_link_status(bpctl_dev_t *pbpctl_dev) +static int get_bypass_link_status(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; - if (pbpctl_dev->media_type == bp_fiber) + if (pbpctl_dev->media_type == BP_FIBER) return ((BPCTL_READ_REG(pbpctl_dev, CTRL) & BPCTLI_CTRL_SWDPIN1)); else @@ -5097,11 +4735,12 @@ static int get_bypass_link_status(bpctl_dev_t *pbpctl_dev) static void bp_tpl_timer_fn(unsigned long param) { - bpctl_dev_t *pbpctl_dev = (bpctl_dev_t *) param; + struct bpctl_dev *pbpctl_dev = (struct bpctl_dev *) param; uint32_t link1, link2; - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b = NULL; - if (!(pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (!pbpctl_dev_b) return; if (!pbpctl_dev->bp_tpl_flag) { @@ -5113,34 +4752,29 @@ static void bp_tpl_timer_fn(unsigned long param) link2 = get_bypass_link_status(pbpctl_dev_b); if ((link1) && (tx_status(pbpctl_dev))) { - if ((!link2) && (tx_status(pbpctl_dev_b))) { + if ((!link2) && (tx_status(pbpctl_dev_b))) set_tx(pbpctl_dev, 0); - } else if (!tx_status(pbpctl_dev_b)) { + else if (!tx_status(pbpctl_dev_b)) set_tx(pbpctl_dev_b, 1); - } } else if ((!link1) && (tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) { + if ((link2) && (tx_status(pbpctl_dev_b))) set_tx(pbpctl_dev_b, 0); - } } else if ((link1) && (!tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) { + if ((link2) && (tx_status(pbpctl_dev_b))) set_tx(pbpctl_dev, 1); - } } else if ((!link1) && (!tx_status(pbpctl_dev))) { - if ((link2) && (tx_status(pbpctl_dev_b))) { + if ((link2) && (tx_status(pbpctl_dev_b))) set_tx(pbpctl_dev, 1); - } } mod_timer(&pbpctl_dev->bp_tpl_timer, jiffies + BP_LINK_MON_DELAY * HZ); } -void remove_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev) +static void remove_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev) { - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b; if (!pbpctl_dev) return; - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); if (pbpctl_dev->bp_caps & TPL_CAP) { del_timer_sync(&pbpctl_dev->bp_tpl_timer); @@ -5153,7 +4787,7 @@ void remove_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev) return; } -int init_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev) +static int init_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev) { if (!pbpctl_dev) return -1; @@ -5166,7 +4800,7 @@ int init_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev) return BP_NOT_CAP; } -int set_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev, unsigned int param) +static int set_bypass_tpl_auto(struct bpctl_dev *pbpctl_dev, unsigned int param) { if (!pbpctl_dev) return -1; @@ -5175,7 +4809,7 @@ int set_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev, unsigned int param) pbpctl_dev->bp_tpl_flag = param; mod_timer(&pbpctl_dev->bp_tpl_timer, jiffies + 1); return BP_OK; - }; + } if ((!param) && (pbpctl_dev->bp_tpl_flag)) remove_bypass_tpl_auto(pbpctl_dev); @@ -5184,28 +4818,17 @@ int set_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev, unsigned int param) return BP_NOT_CAP; } -int get_bypass_tpl_auto(bpctl_dev_t *pbpctl_dev) +static int set_tpl_fn(struct bpctl_dev *pbpctl_dev, int tpl_mode) { - if (!pbpctl_dev) - return -1; - if (pbpctl_dev->bp_caps & TPL_CAP) { - return pbpctl_dev->bp_tpl_flag; - } - return BP_NOT_CAP; -} -int set_tpl_fn(bpctl_dev_t *pbpctl_dev, int tpl_mode) -{ - - bpctl_dev_t *pbpctl_dev_b = NULL; + struct bpctl_dev *pbpctl_dev_b; if (!pbpctl_dev) return -1; - pbpctl_dev_b = get_status_port_fn(pbpctl_dev); - if (pbpctl_dev->bp_caps & TPL_CAP) { if (tpl_mode) { - if ((pbpctl_dev_b = get_status_port_fn(pbpctl_dev))) + pbpctl_dev_b = get_status_port_fn(pbpctl_dev); + if (pbpctl_dev_b) set_tx(pbpctl_dev_b, 1); set_tx(pbpctl_dev, 1); } @@ -5223,9 +4846,10 @@ int set_tpl_fn(bpctl_dev_t *pbpctl_dev, int tpl_mode) return BP_NOT_CAP; } -int get_tpl_fn(bpctl_dev_t *pbpctl_dev) +static int get_tpl_fn(struct bpctl_dev *pbpctl_dev) { int ret = BP_NOT_CAP; + if (!pbpctl_dev) return -1; @@ -5237,7 +4861,7 @@ int get_tpl_fn(bpctl_dev_t *pbpctl_dev) return ret; } -int set_bp_wait_at_pwup_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) +static int set_bp_wait_at_pwup_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) { if (!pbpctl_dev) return -1; @@ -5257,9 +4881,10 @@ int set_bp_wait_at_pwup_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) return BP_NOT_CAP; } -int get_bp_wait_at_pwup_fn(bpctl_dev_t *pbpctl_dev) +static int get_bp_wait_at_pwup_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -5270,7 +4895,7 @@ int get_bp_wait_at_pwup_fn(bpctl_dev_t *pbpctl_dev) return ret; } -int set_bp_hw_reset_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) +static int set_bp_hw_reset_fn(struct bpctl_dev *pbpctl_dev, int tap_mode) { if (!pbpctl_dev) return -1; @@ -5290,9 +4915,10 @@ int set_bp_hw_reset_fn(bpctl_dev_t *pbpctl_dev, int tap_mode) return BP_NOT_CAP; } -int get_bp_hw_reset_fn(bpctl_dev_t *pbpctl_dev) +static int get_bp_hw_reset_fn(struct bpctl_dev *pbpctl_dev) { int ret = 0; + if (!pbpctl_dev) return -1; @@ -5305,7 +4931,7 @@ int get_bp_hw_reset_fn(bpctl_dev_t *pbpctl_dev) } -int get_bypass_info_fn(bpctl_dev_t *pbpctl_dev, char *dev_name, +static int get_bypass_info_fn(struct bpctl_dev *pbpctl_dev, char *dev_name, char *add_param) { if (!pbpctl_dev) @@ -5317,9 +4943,10 @@ int get_bypass_info_fn(bpctl_dev_t *pbpctl_dev, char *dev_name, return 0; } -int get_dev_idx_bsf(int bus, int slot, int func) +static int get_dev_idx_bsf(int bus, int slot, int func) { int idx_dev = 0; + for (idx_dev = 0; ((bpctl_dev_arr[idx_dev].pdev != NULL) && (idx_dev < device_num)); idx_dev++) { @@ -5332,36 +4959,6 @@ int get_dev_idx_bsf(int bus, int slot, int func) return -1; } -static void str_low(char *str) -{ - int i; - - for (i = 0; i < strlen(str); i++) - if ((str[i] >= 65) && (str[i] <= 90)) - str[i] += 32; -} - -static unsigned long str_to_hex(char *p) -{ - unsigned long hex = 0; - unsigned long length = strlen(p), shift = 0; - unsigned char dig = 0; - - str_low(p); - length = strlen(p); - - if (length == 0) - return 0; - - do { - dig = p[--length]; - dig = dig < 'a' ? (dig - '0') : (dig - 'a' + 0xa); - hex |= (dig << shift); - shift += 4; - } while (length); - return hex; -} - static int get_dev_idx(int ifindex) { int idx_dev = 0; @@ -5376,7 +4973,7 @@ static int get_dev_idx(int ifindex) return -1; } -static bpctl_dev_t *get_dev_idx_p(int ifindex) +static struct bpctl_dev *get_dev_idx_p(int ifindex) { int idx_dev = 0; @@ -5392,69 +4989,26 @@ static bpctl_dev_t *get_dev_idx_p(int ifindex) static void if_scan_init(void) { - int idx_dev = 0; struct net_device *dev; - int ifindex; + /* rcu_read_lock(); */ /* rtnl_lock(); */ /* rcu_read_lock(); */ for_each_netdev(&init_net, dev) { + int idx_dev; - struct ethtool_drvinfo drvinfo; - char cbuf[32]; - char *buf = NULL; - char res[10]; - int i = 0; - int bus = 0, slot = 0, func = 0; - ifindex = dev->ifindex; - - memset(res, 0, 10); - memset(&drvinfo, 0, sizeof(struct ethtool_drvinfo)); - - if (dev->ethtool_ops && dev->ethtool_ops->get_drvinfo) { - memset(&drvinfo, 0, sizeof(drvinfo)); - dev->ethtool_ops->get_drvinfo(dev, &drvinfo); - } else + if (bp_get_dev_idx_bsf(dev, &idx_dev)) continue; - if (!strcmp(drvinfo.bus_info, "N/A")) - continue; - memcpy(&cbuf, drvinfo.bus_info, 32); - buf = &cbuf[0]; - - while (*buf++ != ':') ; - for (i = 0; i < 10; i++, buf++) { - if (*buf == ':') - break; - res[i] = *buf; - - } - buf++; - bus = str_to_hex(res); - memset(res, 0, 10); - for (i = 0; i < 10; i++, buf++) { - if (*buf == '.') - break; - res[i] = *buf; - - } - buf++; - slot = str_to_hex(res); - func = str_to_hex(buf); - idx_dev = get_dev_idx_bsf(bus, slot, func); - - if (idx_dev != -1) { - - bpctl_dev_arr[idx_dev].ifindex = ifindex; - bpctl_dev_arr[idx_dev].ndev = dev; - - } + if (idx_dev == -1) + continue; + bpctl_dev_arr[idx_dev].ifindex = dev->ifindex; + bpctl_dev_arr[idx_dev].ndev = dev; } /* rtnl_unlock(); */ /* rcu_read_unlock(); */ - } static long device_ioctl(struct file *file, /* see include/linux/fs.h */ @@ -5463,15 +5017,16 @@ static long device_ioctl(struct file *file, /* see include/linux/fs.h */ { struct bpctl_cmd bpctl_cmd; int dev_idx = 0; - bpctl_dev_t *pbpctl_dev_out; + struct bpctl_dev *pbpctl_dev_out; void __user *argp = (void __user *)ioctl_param; int ret = 0; unsigned long flags; - static bpctl_dev_t *pbpctl_dev; + static struct bpctl_dev *pbpctl_dev; /* lock_kernel(); */ - lock_bpctl(); + if (down_interruptible(&bpctl_sema)) + return -ERESTARTSYS; /* local_irq_save(flags); */ /* if(!spin_trylock_irqsave(&bpvm_lock)){ local_irq_restore(flags); @@ -5515,9 +5070,9 @@ static long device_ioctl(struct file *file, /* see include/linux/fs.h */ return -1; } -/* preempt_disable(); +/* preempt_disable(); rcu_read_lock(); - spin_lock_irqsave(&bpvm_lock, flags); + spin_lock_irqsave(&bpvm_lock, flags); */ if ((bpctl_cmd.in_param[5]) || (bpctl_cmd.in_param[6]) || (bpctl_cmd.in_param[7])) @@ -5858,15 +5413,13 @@ static long device_ioctl(struct file *file, /* see include/linux/fs.h */ return ret; } -struct file_operations Fops = { +static const struct file_operations Fops = { .owner = THIS_MODULE, .unlocked_ioctl = device_ioctl, - .open = device_open, - .release = device_release, /* a.k.a. close */ }; #ifndef PCI_DEVICE -#define PCI_DEVICE(vend,dev) \ +#define PCI_DEVICE(vend, dev) \ .vendor = (vend), .device = (dev), \ .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID #endif @@ -5874,7 +5427,7 @@ struct file_operations Fops = { #define SILICOM_E1000BP_ETHERNET_DEVICE(device_id) {\ PCI_DEVICE(SILICOM_VID, device_id)} -typedef enum { +enum board_type { PXG2BPFI, PXG2BPFIL, PXG2BPFILX, @@ -6032,9 +5585,9 @@ typedef enum { PE310G4BPi9SR, PE310G4BPi9LR, PE210G2BPi40, -} board_t; +}; -typedef struct _bpmod_info_t { +struct bpmod_info { unsigned int vendor; unsigned int device; unsigned int subvendor; @@ -6042,13 +5595,11 @@ typedef struct _bpmod_info_t { unsigned int index; char *bp_name; -} bpmod_info_t; +}; -typedef struct _dev_desc { +struct { char *name; -} dev_desc_t; - -dev_desc_t dev_desc[] = { +} dev_desc[] = { {"Silicom Bypass PXG2BPFI-SD series adapter"}, {"Silicom Bypass PXG2BPFIL-SD series adapter"}, {"Silicom Bypass PXG2BPFILX-SD series adapter"}, @@ -6218,7 +5769,7 @@ dev_desc_t dev_desc[] = { {0}, }; -static bpmod_info_t tx_ctl_pci_tbl[] = { +static struct bpmod_info tx_ctl_pci_tbl[] = { {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFI_SSID, PXG2BPFI, "PXG2BPFI-SD"}, {0x8086, 0x107a, SILICOM_SVID, SILICOM_PXG2BPFIL_SSID, PXG2BPFIL, @@ -6686,6 +6237,119 @@ static bpmod_info_t tx_ctl_pci_tbl[] = { {0,} }; +static void find_fw(struct bpctl_dev *dev) +{ + unsigned long mmio_start, mmio_len; + struct pci_dev *pdev1 = dev->pdev; + + if ((OLD_IF_SERIES(dev->subdevice)) || + (INTEL_IF_SERIES(dev->subdevice))) + dev->bp_fw_ver = 0xff; + else + dev->bp_fw_ver = bypass_fw_ver(dev); + + if (dev->bp_10gb == 1 && dev->bp_fw_ver == 0xff) { + int cnt = 100; + while (cnt--) { + iounmap((void *)dev->mem_map); + mmio_start = pci_resource_start(pdev1, 0); + mmio_len = pci_resource_len(pdev1, 0); + + dev->mem_map = (unsigned long) + ioremap(mmio_start, mmio_len); + + dev->bp_fw_ver = bypass_fw_ver(dev); + if (dev->bp_fw_ver == 0xa8) + break; + } + } + /* dev->bp_fw_ver=0xa8; */ + printk("firmware version: 0x%x\n", dev->bp_fw_ver); +} + +static int init_one(struct bpctl_dev *dev, struct bpmod_info *info, struct pci_dev *pdev1) +{ + unsigned long mmio_start, mmio_len; + + dev->pdev = pdev1; + mmio_start = pci_resource_start(pdev1, 0); + mmio_len = pci_resource_len(pdev1, 0); + + dev->desc = dev_desc[info->index].name; + dev->name = info->bp_name; + dev->device = info->device; + dev->vendor = info->vendor; + dev->subdevice = info->subdevice; + dev->subvendor = info->subvendor; + dev->func = PCI_FUNC(pdev1->devfn); + dev->slot = PCI_SLOT(pdev1->devfn); + dev->bus = pdev1->bus->number; + dev->mem_map = (unsigned long)ioremap(mmio_start, mmio_len); +#ifdef BP_SYNC_FLAG + spin_lock_init(&dev->bypass_wr_lock); +#endif + if (BP10G9_IF_SERIES(dev->subdevice)) + dev->bp_10g9 = 1; + if (BP10G_IF_SERIES(dev->subdevice)) + dev->bp_10g = 1; + if (PEG540_IF_SERIES(dev->subdevice)) + dev->bp_540 = 1; + if (PEGF5_IF_SERIES(dev->subdevice)) + dev->bp_fiber5 = 1; + if (PEG80_IF_SERIES(dev->subdevice)) + dev->bp_i80 = 1; + if (PEGF80_IF_SERIES(dev->subdevice)) + dev->bp_i80 = 1; + if ((dev->subdevice & 0xa00) == 0xa00) + dev->bp_i80 = 1; + if (BP10GB_IF_SERIES(dev->subdevice)) { + if (dev->ifindex == 0) { + unregister_chrdev(major_num, DEVICE_NAME); + printk("Please load network driver for %s adapter!\n", + dev->name); + return -1; + } + + if (dev->ndev && !(dev->ndev->flags & IFF_UP)) { + unregister_chrdev(major_num, DEVICE_NAME); + printk("Please bring up network interfaces for %s adapter!\n", + dev->name); + return -1; + } + dev->bp_10gb = 1; + } + + if (!dev->bp_10g9) { + if (is_bypass_fn(dev)) { + printk(KERN_INFO "%s found, ", + dev->name); + find_fw(dev); + } + dev->wdt_status = WDT_STATUS_UNKNOWN; + dev->reset_time = 0; + atomic_set(&dev->wdt_busy, 0); + dev->bp_status_un = 1; + + bypass_caps_init(dev); + + init_bypass_wd_auto(dev); + init_bypass_tpl_auto(dev); + if (NOKIA_SERIES(dev->subdevice)) + reset_cont(dev); + } +#ifdef BP_SELF_TEST + dev->bp_tx_data = kzalloc(BPTEST_DATA_LEN, GFP_KERNEL); + if (dev->bp_tx_data) { + memset(dev->bp_tx_data, 0xff, 6); + memset(dev->bp_tx_data + 6, 0x0, 1); + memset(dev->bp_tx_data + 7, 0xaa, 5); + *(__be16 *)(dev->bp_tx_data + 12) = htons(ETH_P_BPTEST); + } else + printk("bp_ctl: Memory allocation error!\n"); +#endif + return 0; +} + /* * Initialize the module - Register the character device */ @@ -6694,7 +6358,7 @@ static int __init bypass_init_module(void) { int ret_val, idx, idx_dev = 0; struct pci_dev *pdev1 = NULL; - unsigned long mmio_start, mmio_len; + struct bpctl_dev *dev; printk(BP_MOD_DESCR " v" BP_MOD_VER "\n"); ret_val = register_chrdev(major_num, DEVICE_NAME, &Fops); @@ -6719,253 +6383,56 @@ static int __init bypass_init_module(void) return -1; } - bpctl_dev_arr = kmalloc((device_num) * sizeof(bpctl_dev_t), GFP_KERNEL); + bpctl_dev_arr = kmalloc((device_num) * sizeof(struct bpctl_dev), GFP_KERNEL); if (!bpctl_dev_arr) { printk("Allocation error\n"); unregister_chrdev(major_num, DEVICE_NAME); return -1; } - memset(bpctl_dev_arr, 0, ((device_num) * sizeof(bpctl_dev_t))); + memset(bpctl_dev_arr, 0, ((device_num) * sizeof(struct bpctl_dev))); pdev1 = NULL; + dev = bpctl_dev_arr; for (idx = 0; tx_ctl_pci_tbl[idx].vendor; idx++) { while ((pdev1 = pci_get_subsys(tx_ctl_pci_tbl[idx].vendor, tx_ctl_pci_tbl[idx].device, tx_ctl_pci_tbl[idx].subvendor, tx_ctl_pci_tbl[idx].subdevice, pdev1))) { - bpctl_dev_arr[idx_dev].pdev = pdev1; - - mmio_start = pci_resource_start(pdev1, 0); - mmio_len = pci_resource_len(pdev1, 0); - - bpctl_dev_arr[idx_dev].desc = - dev_desc[tx_ctl_pci_tbl[idx].index].name; - bpctl_dev_arr[idx_dev].name = - tx_ctl_pci_tbl[idx].bp_name; - bpctl_dev_arr[idx_dev].device = - tx_ctl_pci_tbl[idx].device; - bpctl_dev_arr[idx_dev].vendor = - tx_ctl_pci_tbl[idx].vendor; - bpctl_dev_arr[idx_dev].subdevice = - tx_ctl_pci_tbl[idx].subdevice; - bpctl_dev_arr[idx_dev].subvendor = - tx_ctl_pci_tbl[idx].subvendor; - /* bpctl_dev_arr[idx_dev].pdev=pdev1; */ - bpctl_dev_arr[idx_dev].func = PCI_FUNC(pdev1->devfn); - bpctl_dev_arr[idx_dev].slot = PCI_SLOT(pdev1->devfn); - bpctl_dev_arr[idx_dev].bus = pdev1->bus->number; - bpctl_dev_arr[idx_dev].mem_map = - (unsigned long)ioremap(mmio_start, mmio_len); -#ifdef BP_SYNC_FLAG - spin_lock_init(&bpctl_dev_arr[idx_dev].bypass_wr_lock); -#endif - if (BP10G9_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) - bpctl_dev_arr[idx_dev].bp_10g9 = 1; - if (BP10G_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) - bpctl_dev_arr[idx_dev].bp_10g = 1; - if (PEG540_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) { - - bpctl_dev_arr[idx_dev].bp_540 = 1; - } - if (PEGF5_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) - bpctl_dev_arr[idx_dev].bp_fiber5 = 1; - if (PEG80_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) - bpctl_dev_arr[idx_dev].bp_i80 = 1; - if (PEGF80_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) - bpctl_dev_arr[idx_dev].bp_i80 = 1; - if ((bpctl_dev_arr[idx_dev].subdevice & 0xa00) == 0xa00) - bpctl_dev_arr[idx_dev].bp_i80 = 1; - if (BP10GB_IF_SERIES(bpctl_dev_arr[idx_dev].subdevice)) { - if (bpctl_dev_arr[idx_dev].ifindex == 0) { - unregister_chrdev(major_num, - DEVICE_NAME); - printk - ("Please load network driver for %s adapter!\n", - bpctl_dev_arr[idx_dev].name); - return -1; - } - - if (bpctl_dev_arr[idx_dev].ndev) { - if (! - (bpctl_dev_arr[idx_dev].ndev-> - flags & IFF_UP)) { - if (! - (bpctl_dev_arr[idx_dev]. - ndev->flags & IFF_UP)) { - unregister_chrdev - (major_num, - DEVICE_NAME); - printk - ("Please bring up network interfaces for %s adapter!\n", - bpctl_dev_arr - [idx_dev].name); - return -1; - } - - } - } - bpctl_dev_arr[idx_dev].bp_10gb = 1; - } - - if (!bpctl_dev_arr[idx_dev].bp_10g9) { - - if (is_bypass_fn(&bpctl_dev_arr[idx_dev])) { - printk(KERN_INFO "%s found, ", - bpctl_dev_arr[idx_dev].name); - if ((OLD_IF_SERIES - (bpctl_dev_arr[idx_dev].subdevice)) - || - (INTEL_IF_SERIES - (bpctl_dev_arr[idx_dev]. - subdevice))) - bpctl_dev_arr[idx_dev]. - bp_fw_ver = 0xff; - else - bpctl_dev_arr[idx_dev]. - bp_fw_ver = - bypass_fw_ver(&bpctl_dev_arr - [idx_dev]); - if ((bpctl_dev_arr[idx_dev].bp_10gb == - 1) - && (bpctl_dev_arr[idx_dev]. - bp_fw_ver == 0xff)) { - int cnt = 100; - while (cnt--) { - iounmap((void - *) - (bpctl_dev_arr - [idx_dev]. - mem_map)); - mmio_start = - pci_resource_start - (pdev1, 0); - mmio_len = - pci_resource_len - (pdev1, 0); - - bpctl_dev_arr[idx_dev]. - mem_map = - (unsigned long) - ioremap(mmio_start, - mmio_len); - - bpctl_dev_arr[idx_dev]. - bp_fw_ver = - bypass_fw_ver - (&bpctl_dev_arr - [idx_dev]); - if (bpctl_dev_arr - [idx_dev]. - bp_fw_ver == 0xa8) - break; - - } - } - /* bpctl_dev_arr[idx_dev].bp_fw_ver=0xa8; */ - printk("firmware version: 0x%x\n", - bpctl_dev_arr[idx_dev]. - bp_fw_ver); - } - bpctl_dev_arr[idx_dev].wdt_status = - WDT_STATUS_UNKNOWN; - bpctl_dev_arr[idx_dev].reset_time = 0; - atomic_set(&bpctl_dev_arr[idx_dev].wdt_busy, 0); - bpctl_dev_arr[idx_dev].bp_status_un = 1; - - bypass_caps_init(&bpctl_dev_arr[idx_dev]); - - init_bypass_wd_auto(&bpctl_dev_arr[idx_dev]); - init_bypass_tpl_auto(&bpctl_dev_arr[idx_dev]); - if (NOKIA_SERIES - (bpctl_dev_arr[idx_dev].subdevice)) - reset_cont(&bpctl_dev_arr[idx_dev]); - } -#ifdef BP_SELF_TEST - if ((bpctl_dev_arr[idx_dev].bp_tx_data = - kmalloc(BPTEST_DATA_LEN, GFP_KERNEL))) { - - memset(bpctl_dev_arr[idx_dev].bp_tx_data, 0x0, - BPTEST_DATA_LEN); - - memset(bpctl_dev_arr[idx_dev].bp_tx_data, 0xff, - 6); - memset(bpctl_dev_arr[idx_dev].bp_tx_data + 6, - 0x0, 1); - memset(bpctl_dev_arr[idx_dev].bp_tx_data + 7, - 0xaa, 5); - - *(__be16 *) (bpctl_dev_arr[idx_dev].bp_tx_data + - 12) = htons(ETH_P_BPTEST); - - } else - printk("bp_ctl: Memory allocation error!\n"); -#endif - idx_dev++; - + if (init_one(dev, &tx_ctl_pci_tbl[idx], pdev1) < 0) + return -1; + dev++; } } if_scan_init(); sema_init(&bpctl_sema, 1); spin_lock_init(&bpvm_lock); - { - - bpctl_dev_t *pbpctl_dev_c = NULL; - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if (bpctl_dev_arr[idx_dev].bp_10g9) { - pbpctl_dev_c = - get_status_port_fn(&bpctl_dev_arr[idx_dev]); - if (is_bypass_fn(&bpctl_dev_arr[idx_dev])) { - printk(KERN_INFO "%s found, ", - bpctl_dev_arr[idx_dev].name); - bpctl_dev_arr[idx_dev].bp_fw_ver = - bypass_fw_ver(&bpctl_dev_arr - [idx_dev]); - printk("firmware version: 0x%x\n", - bpctl_dev_arr[idx_dev]. - bp_fw_ver); - - } - bpctl_dev_arr[idx_dev].wdt_status = - WDT_STATUS_UNKNOWN; - bpctl_dev_arr[idx_dev].reset_time = 0; - atomic_set(&bpctl_dev_arr[idx_dev].wdt_busy, 0); - bpctl_dev_arr[idx_dev].bp_status_un = 1; - - bypass_caps_init(&bpctl_dev_arr[idx_dev]); - - init_bypass_wd_auto(&bpctl_dev_arr[idx_dev]); - init_bypass_tpl_auto(&bpctl_dev_arr[idx_dev]); + for (idx_dev = 0, dev = bpctl_dev_arr; + idx_dev < device_num && dev->pdev; + idx_dev++, dev++) { + if (dev->bp_10g9) { + if (is_bypass_fn(dev)) { + printk(KERN_INFO "%s found, ", dev->name); + dev->bp_fw_ver = bypass_fw_ver(dev); + printk("firmware version: 0x%x\n", + dev->bp_fw_ver); } + dev->wdt_status = WDT_STATUS_UNKNOWN; + dev->reset_time = 0; + atomic_set(&dev->wdt_busy, 0); + dev->bp_status_un = 1; - } - } - - register_netdevice_notifier(&bp_notifier_block); -#ifdef BP_PROC_SUPPORT - { - int i = 0; - /* unsigned long flags; */ - /* rcu_read_lock(); */ - bp_proc_create(); - for (i = 0; i < device_num; i++) { - if (bpctl_dev_arr[i].ifindex) { - /* spin_lock_irqsave(&bpvm_lock, flags); */ - bypass_proc_remove_dev_sd(&bpctl_dev_arr[i]); - bypass_proc_create_dev_sd(&bpctl_dev_arr[i]); - /* spin_unlock_irqrestore(&bpvm_lock, flags); */ - } + bypass_caps_init(dev); + init_bypass_wd_auto(dev); + init_bypass_tpl_auto(dev); } - /* rcu_read_unlock(); */ } -#endif + register_netdevice_notifier(&bp_notifier_block); return 0; } @@ -6975,17 +6442,11 @@ static int __init bypass_init_module(void) static void __exit bypass_cleanup_module(void) { int i; + unregister_netdevice_notifier(&bp_notifier_block); for (i = 0; i < device_num; i++) { /* unsigned long flags; */ -#ifdef BP_PROC_SUPPORT -/* spin_lock_irqsave(&bpvm_lock, flags); - rcu_read_lock(); */ - bypass_proc_remove_dev_sd(&bpctl_dev_arr[i]); -/* spin_unlock_irqrestore(&bpvm_lock, flags); - rcu_read_unlock(); */ -#endif remove_bypass_wd_auto(&bpctl_dev_arr[i]); bpctl_dev_arr[i].reset_time = 0; @@ -6995,18 +6456,16 @@ static void __exit bypass_cleanup_module(void) /* unmap all devices */ for (i = 0; i < device_num; i++) { #ifdef BP_SELF_TEST - if (bpctl_dev_arr[i].bp_tx_data) - kfree(bpctl_dev_arr[i].bp_tx_data); + kfree(bpctl_dev_arr[i].bp_tx_data); #endif iounmap((void *)(bpctl_dev_arr[i].mem_map)); } /* free all devices space */ - if (bpctl_dev_arr) - kfree(bpctl_dev_arr); + kfree(bpctl_dev_arr); /* -* Unregister the device +* Unregister the device */ unregister_chrdev(major_num, DEVICE_NAME); } @@ -7018,59 +6477,69 @@ int is_bypass_sd(int ifindex) { return is_bypass(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(is_bypass_sd); int set_bypass_sd(int ifindex, int bypass_mode) { return set_bypass_fn(get_dev_idx_p(ifindex), bypass_mode); } +EXPORT_SYMBOL(set_bypass_sd); int get_bypass_sd(int ifindex) { return get_bypass_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bypass_sd); int get_bypass_change_sd(int ifindex) { return get_bypass_change_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bypass_change_sd); int set_dis_bypass_sd(int ifindex, int dis_param) { return set_dis_bypass_fn(get_dev_idx_p(ifindex), dis_param); } +EXPORT_SYMBOL(set_dis_bypass_sd); int get_dis_bypass_sd(int ifindex) { return get_dis_bypass_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_dis_bypass_sd); int set_bypass_pwoff_sd(int ifindex, int bypass_mode) { return set_bypass_pwoff_fn(get_dev_idx_p(ifindex), bypass_mode); } +EXPORT_SYMBOL(set_bypass_pwoff_sd); int get_bypass_pwoff_sd(int ifindex) { return get_bypass_pwoff_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bypass_pwoff_sd); int set_bypass_pwup_sd(int ifindex, int bypass_mode) { return set_bypass_pwup_fn(get_dev_idx_p(ifindex), bypass_mode); } +EXPORT_SYMBOL(set_bypass_pwup_sd); int get_bypass_pwup_sd(int ifindex) { return get_bypass_pwup_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bypass_pwup_sd); int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set) { @@ -7079,484 +6548,348 @@ int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set) *ms_timeout_set = set_bypass_wd_fn(get_dev_idx_p(if_index), ms_timeout); return 0; } +EXPORT_SYMBOL(set_bypass_wd_sd); int get_bypass_wd_sd(int ifindex, int *timeout) { return get_bypass_wd_fn(get_dev_idx_p(ifindex), timeout); } +EXPORT_SYMBOL(get_bypass_wd_sd); int get_wd_expire_time_sd(int ifindex, int *time_left) { return get_wd_expire_time_fn(get_dev_idx_p(ifindex), time_left); } +EXPORT_SYMBOL(get_wd_expire_time_sd); int reset_bypass_wd_timer_sd(int ifindex) { return reset_bypass_wd_timer_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(reset_bypass_wd_timer_sd); int get_wd_set_caps_sd(int ifindex) { return get_wd_set_caps_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_wd_set_caps_sd); int set_std_nic_sd(int ifindex, int nic_mode) { return set_std_nic_fn(get_dev_idx_p(ifindex), nic_mode); } +EXPORT_SYMBOL(set_std_nic_sd); int get_std_nic_sd(int ifindex) { return get_std_nic_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_std_nic_sd); int set_tap_sd(int ifindex, int tap_mode) { return set_tap_fn(get_dev_idx_p(ifindex), tap_mode); } +EXPORT_SYMBOL(set_tap_sd); int get_tap_sd(int ifindex) { return get_tap_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_tap_sd); int set_tap_pwup_sd(int ifindex, int tap_mode) { return set_tap_pwup_fn(get_dev_idx_p(ifindex), tap_mode); } +EXPORT_SYMBOL(set_tap_pwup_sd); int get_tap_pwup_sd(int ifindex) { return get_tap_pwup_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_tap_pwup_sd); int get_tap_change_sd(int ifindex) { return get_tap_change_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_tap_change_sd); int set_dis_tap_sd(int ifindex, int dis_param) { return set_dis_tap_fn(get_dev_idx_p(ifindex), dis_param); } +EXPORT_SYMBOL(set_dis_tap_sd); int get_dis_tap_sd(int ifindex) { return get_dis_tap_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_dis_tap_sd); int set_bp_disc_sd(int ifindex, int disc_mode) { return set_disc_fn(get_dev_idx_p(ifindex), disc_mode); } +EXPORT_SYMBOL(set_bp_disc_sd); int get_bp_disc_sd(int ifindex) { return get_disc_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bp_disc_sd); int set_bp_disc_pwup_sd(int ifindex, int disc_mode) { return set_disc_pwup_fn(get_dev_idx_p(ifindex), disc_mode); } +EXPORT_SYMBOL(set_bp_disc_pwup_sd); int get_bp_disc_pwup_sd(int ifindex) { return get_disc_pwup_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bp_disc_pwup_sd); int get_bp_disc_change_sd(int ifindex) { return get_disc_change_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bp_disc_change_sd); int set_bp_dis_disc_sd(int ifindex, int dis_param) { return set_dis_disc_fn(get_dev_idx_p(ifindex), dis_param); } +EXPORT_SYMBOL(set_bp_dis_disc_sd); int get_bp_dis_disc_sd(int ifindex) { return get_dis_disc_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bp_dis_disc_sd); int get_wd_exp_mode_sd(int ifindex) { return get_wd_exp_mode_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_wd_exp_mode_sd); int set_wd_exp_mode_sd(int ifindex, int param) { return set_wd_exp_mode_fn(get_dev_idx_p(ifindex), param); } - -int reset_cont_sd(int ifindex) -{ - return reset_cont_fn(get_dev_idx_p(ifindex)); - -} +EXPORT_SYMBOL(set_wd_exp_mode_sd); int set_tx_sd(int ifindex, int tx_state) { return set_tx_fn(get_dev_idx_p(ifindex), tx_state); } +EXPORT_SYMBOL(set_tx_sd); int set_tpl_sd(int ifindex, int tpl_state) { return set_tpl_fn(get_dev_idx_p(ifindex), tpl_state); } +EXPORT_SYMBOL(set_tpl_sd); int set_bp_hw_reset_sd(int ifindex, int status) { return set_bp_hw_reset_fn(get_dev_idx_p(ifindex), status); } +EXPORT_SYMBOL(set_bp_hw_reset_sd); int set_wd_autoreset_sd(int ifindex, int param) { return set_wd_autoreset_fn(get_dev_idx_p(ifindex), param); } +EXPORT_SYMBOL(set_wd_autoreset_sd); int get_wd_autoreset_sd(int ifindex) { return get_wd_autoreset_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_wd_autoreset_sd); int get_bypass_caps_sd(int ifindex) { return get_bypass_caps_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bypass_caps_sd); int get_bypass_slave_sd(int ifindex) { - bpctl_dev_t *pbpctl_dev_out; + struct bpctl_dev *pbpctl_dev_out; int ret = get_bypass_slave_fn(get_dev_idx_p(ifindex), &pbpctl_dev_out); + if (ret == 1) return pbpctl_dev_out->ifindex; return -1; } +EXPORT_SYMBOL(get_bypass_slave_sd); int get_tx_sd(int ifindex) { return get_tx_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_tx_sd); int get_tpl_sd(int ifindex) { return get_tpl_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_tpl_sd); int get_bp_hw_reset_sd(int ifindex) { return get_bp_hw_reset_fn(get_dev_idx_p(ifindex)); } +EXPORT_SYMBOL(get_bp_hw_reset_sd); int get_bypass_info_sd(int ifindex, struct bp_info *bp_info) { return get_bypass_info_fn(get_dev_idx_p(ifindex), bp_info->prod_name, &bp_info->fw_ver); } +EXPORT_SYMBOL(get_bypass_info_sd); int bp_if_scan_sd(void) { if_scan_init(); return 0; } - -EXPORT_SYMBOL_NOVERS(is_bypass_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_slave_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_caps_sd); -EXPORT_SYMBOL_NOVERS(get_wd_set_caps_sd); -EXPORT_SYMBOL_NOVERS(set_bypass_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_change_sd); -EXPORT_SYMBOL_NOVERS(set_dis_bypass_sd); -EXPORT_SYMBOL_NOVERS(get_dis_bypass_sd); -EXPORT_SYMBOL_NOVERS(set_bypass_pwoff_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_pwoff_sd); -EXPORT_SYMBOL_NOVERS(set_bypass_pwup_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_pwup_sd); -EXPORT_SYMBOL_NOVERS(set_bypass_wd_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_wd_sd); -EXPORT_SYMBOL_NOVERS(get_wd_expire_time_sd); -EXPORT_SYMBOL_NOVERS(reset_bypass_wd_timer_sd); -EXPORT_SYMBOL_NOVERS(set_std_nic_sd); -EXPORT_SYMBOL_NOVERS(get_std_nic_sd); -EXPORT_SYMBOL_NOVERS(set_tx_sd); -EXPORT_SYMBOL_NOVERS(get_tx_sd); -EXPORT_SYMBOL_NOVERS(set_tpl_sd); -EXPORT_SYMBOL_NOVERS(get_tpl_sd); -EXPORT_SYMBOL_NOVERS(set_bp_hw_reset_sd); -EXPORT_SYMBOL_NOVERS(get_bp_hw_reset_sd); -EXPORT_SYMBOL_NOVERS(set_tap_sd); -EXPORT_SYMBOL_NOVERS(get_tap_sd); -EXPORT_SYMBOL_NOVERS(get_tap_change_sd); -EXPORT_SYMBOL_NOVERS(set_dis_tap_sd); -EXPORT_SYMBOL_NOVERS(get_dis_tap_sd); -EXPORT_SYMBOL_NOVERS(set_tap_pwup_sd); -EXPORT_SYMBOL_NOVERS(get_tap_pwup_sd); -EXPORT_SYMBOL_NOVERS(set_wd_exp_mode_sd); -EXPORT_SYMBOL_NOVERS(get_wd_exp_mode_sd); -EXPORT_SYMBOL_NOVERS(set_wd_autoreset_sd); -EXPORT_SYMBOL_NOVERS(get_wd_autoreset_sd); -EXPORT_SYMBOL_NOVERS(set_bp_disc_sd); -EXPORT_SYMBOL_NOVERS(get_bp_disc_sd); -EXPORT_SYMBOL_NOVERS(get_bp_disc_change_sd); -EXPORT_SYMBOL_NOVERS(set_bp_dis_disc_sd); -EXPORT_SYMBOL_NOVERS(get_bp_dis_disc_sd); -EXPORT_SYMBOL_NOVERS(set_bp_disc_pwup_sd); -EXPORT_SYMBOL_NOVERS(get_bp_disc_pwup_sd); -EXPORT_SYMBOL_NOVERS(get_bypass_info_sd); -EXPORT_SYMBOL_NOVERS(bp_if_scan_sd); +EXPORT_SYMBOL(bp_if_scan_sd); #define BP_PROC_DIR "bypass" -#define GPIO6_SET_ENTRY_SD "gpio6_set" -#define GPIO6_CLEAR_ENTRY_SD "gpio6_clear" - -#define GPIO7_SET_ENTRY_SD "gpio7_set" -#define GPIO7_CLEAR_ENTRY_SD "gpio7_clear" - -#define PULSE_SET_ENTRY_SD "pulse_set" -#define ZERO_SET_ENTRY_SD "zero_set" -#define PULSE_GET1_ENTRY_SD "pulse_get1" -#define PULSE_GET2_ENTRY_SD "pulse_get2" - -#define CMND_ON_ENTRY_SD "cmnd_on" -#define CMND_OFF_ENTRY_SD "cmnd_off" -#define RESET_CONT_ENTRY_SD "reset_cont" - - /*COMMANDS*/ -#define BYPASS_INFO_ENTRY_SD "bypass_info" -#define BYPASS_SLAVE_ENTRY_SD "bypass_slave" -#define BYPASS_CAPS_ENTRY_SD "bypass_caps" -#define WD_SET_CAPS_ENTRY_SD "wd_set_caps" -#define BYPASS_ENTRY_SD "bypass" -#define BYPASS_CHANGE_ENTRY_SD "bypass_change" -#define BYPASS_WD_ENTRY_SD "bypass_wd" -#define WD_EXPIRE_TIME_ENTRY_SD "wd_expire_time" -#define RESET_BYPASS_WD_ENTRY_SD "reset_bypass_wd" -#define DIS_BYPASS_ENTRY_SD "dis_bypass" -#define BYPASS_PWUP_ENTRY_SD "bypass_pwup" -#define BYPASS_PWOFF_ENTRY_SD "bypass_pwoff" -#define STD_NIC_ENTRY_SD "std_nic" -#define STD_NIC_ENTRY_SD "std_nic" -#define TAP_ENTRY_SD "tap" -#define TAP_CHANGE_ENTRY_SD "tap_change" -#define DIS_TAP_ENTRY_SD "dis_tap" -#define TAP_PWUP_ENTRY_SD "tap_pwup" -#define TWO_PORT_LINK_ENTRY_SD "two_port_link" -#define WD_EXP_MODE_ENTRY_SD "wd_exp_mode" -#define WD_AUTORESET_ENTRY_SD "wd_autoreset" -#define TPL_ENTRY_SD "tpl" -#define WAIT_AT_PWUP_ENTRY_SD "wait_at_pwup" -#define HW_RESET_ENTRY_SD "hw_reset" -#define DISC_ENTRY_SD "disc" -#define DISC_CHANGE_ENTRY_SD "disc_change" -#define DIS_DISC_ENTRY_SD "dis_disc" -#define DISC_PWUP_ENTRY_SD "disc_pwup" static struct proc_dir_entry *bp_procfs_dir; -static struct proc_dir_entry *proc_getdir(char *name, - struct proc_dir_entry *proc_dir) +static int procfs_add(char *proc_name, const struct file_operations *fops, + struct bpctl_dev *dev) { - struct proc_dir_entry *pde = proc_dir; - - for (pde = pde->subdir; pde; pde = pde->next) { - if (pde->namelen && (strcmp(name, pde->name) == 0)) { - /* directory exists */ - break; - } - } - if (pde == (struct proc_dir_entry *)0) { - /* create the directory */ - pde = proc_mkdir(name, proc_dir); - if (pde == (struct proc_dir_entry *)0) { - - return pde; - } - } - - return pde; -} + struct bypass_pfs_sd *pfs = &dev->bypass_pfs_set; -int bp_proc_create(void) -{ - bp_procfs_dir = proc_getdir(BP_PROC_DIR, init_net.proc_net); - if (bp_procfs_dir == (struct proc_dir_entry *)0) { - printk(KERN_DEBUG - "Could not create procfs nicinfo directory %s\n", - BP_PROC_DIR); + if (!proc_create_data(proc_name, 0644, pfs->bypass_entry, fops, dev)) return -1; - } return 0; } -int -bypass_proc_create_entry_sd(struct pfs_unit_sd *pfs_unit_curr, - char *proc_name, - write_proc_t *write_proc, - read_proc_t *read_proc, - struct proc_dir_entry *parent_pfs, void *data) -{ - strcpy(pfs_unit_curr->proc_name, proc_name); - pfs_unit_curr->proc_entry = create_proc_entry(pfs_unit_curr->proc_name, - S_IFREG | S_IRUSR | - S_IWUSR | S_IRGRP | - S_IROTH, parent_pfs); - if (pfs_unit_curr->proc_entry == NULL) - return -1; - - pfs_unit_curr->proc_entry->read_proc = read_proc; - pfs_unit_curr->proc_entry->write_proc = write_proc; - pfs_unit_curr->proc_entry->data = data; - - return 0; +#define RO_FOPS(name) \ +static int name##_open(struct inode *inode, struct file *file) \ +{ \ + return single_open(file, show_##name, PDE_DATA(inode));\ +} \ +static const struct file_operations name##_ops = { \ + .open = name##_open, \ + .read = seq_read, \ + .llseek = seq_lseek, \ + .release = single_release, \ +}; -} +#define RW_FOPS(name) \ +static int name##_open(struct inode *inode, struct file *file) \ +{ \ + return single_open(file, show_##name, PDE_DATA(inode));\ +} \ +static const struct file_operations name##_ops = { \ + .open = name##_open, \ + .read = seq_read, \ + .write = name##_write, \ + .llseek = seq_lseek, \ + .release = single_release, \ +}; -int -get_bypass_info_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_info(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - int len = 0; + struct bpctl_dev *dev = m->private; - len += sprintf(page, "Name\t\t\t%s\n", pbp_device_block->name); - len += - sprintf(page + len, "Firmware version\t0x%x\n", - pbp_device_block->bp_fw_ver); - - *eof = 1; - return len; + seq_printf(m, "Name\t\t\t%s\n", dev->name); + seq_printf(m, "Firmware version\t0x%x\n", dev->bp_fw_ver); + return 0; } +RO_FOPS(bypass_info) -int -get_bypass_slave_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_slave(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + struct bpctl_dev *slave = get_status_port_fn(dev); - int len = 0; - bpctl_dev_t *pbp_device_block_slave = NULL; - int idx_dev = 0; - struct net_device *net_slave_dev = NULL; - - if ((pbp_device_block->func == 0) || (pbp_device_block->func == 2)) { - for (idx_dev = 0; - ((bpctl_dev_arr[idx_dev].pdev != NULL) - && (idx_dev < device_num)); idx_dev++) { - if ((bpctl_dev_arr[idx_dev].bus == - pbp_device_block->bus) - && (bpctl_dev_arr[idx_dev].slot == - pbp_device_block->slot)) { - if ((pbp_device_block->func == 0) - && (bpctl_dev_arr[idx_dev].func == 1)) { - pbp_device_block_slave = - &bpctl_dev_arr[idx_dev]; - break; - } - if ((pbp_device_block->func == 2) && - (bpctl_dev_arr[idx_dev].func == 3)) { - pbp_device_block_slave = - &bpctl_dev_arr[idx_dev]; - break; - } - } - } - } else - pbp_device_block_slave = pbp_device_block; - if (!pbp_device_block_slave) { - len = sprintf(page, "fail\n"); - *eof = 1; - return len; - } - net_slave_dev = pbp_device_block_slave->ndev; - if (net_slave_dev) - len = sprintf(page, "%s\n", net_slave_dev->name); - - *eof = 1; - return len; + if (!slave) + slave = dev; + if (!slave) + seq_puts(m, "fail\n"); + else if (slave->ndev) + seq_printf(m, "%s\n", slave->ndev->name); + return 0; } +RO_FOPS(bypass_slave) -int -get_bypass_caps_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_caps(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = get_bypass_caps_fn(dev); - int len = 0, ret = 0; - - ret = get_bypass_caps_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "-1\n"); + seq_puts(m, "-1\n"); else - len = sprintf(page, "0x%x\n", ret); - *eof = 1; - return len; - + seq_printf(m, "0x%x\n", ret); + return 0; } +RO_FOPS(bypass_caps) -int -get_wd_set_caps_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_wd_set_caps(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_wd_set_caps_fn(dev); - ret = get_wd_set_caps_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "-1\n"); + seq_puts(m, "-1\n"); else - len = sprintf(page, "0x%x\n", ret); - *eof = 1; - return len; + seq_printf(m, "0x%x\n", ret); + return 0; } +RO_FOPS(wd_set_caps) -int -set_bypass_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static int user_on_off(const void __user *buffer, size_t count) { char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; + int length = 0; if (count > (sizeof(kbuf) - 1)) return -1; - if (copy_from_user(&kbuf, buffer, count)) { + if (copy_from_user(&kbuf, buffer, count)) return -1; - } kbuf[count] = '\0'; length = strlen(kbuf); @@ -7564,806 +6897,501 @@ set_bypass_pfs(struct file *file, const char *buffer, kbuf[--length] = '\0'; if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_fn(pbp_device_block, bypass_param); - - return count; + return 1; + if (strcmp(kbuf, "off") == 0) + return 0; + return 0; } -int -set_tap_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t bypass_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int bypass_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) + if (bypass_param < 0) return -1; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_tap_fn(pbp_device_block, tap_param); - + set_bypass_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -set_disc_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static int show_bypass(struct seq_file *m, void *v) { + struct bpctl_dev *dev = m->private; + int ret = get_bypass_fn(dev); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; + if (ret == BP_NOT_CAP) + seq_puts(m, "fail\n"); + else if (ret == 1) + seq_puts(m, "on\n"); + else if (ret == 0) + seq_puts(m, "off\n"); + return 0; +} +RW_FOPS(bypass) - if (count > (sizeof(kbuf) - 1)) - return -1; +static ssize_t tap_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) +{ + int tap_param = user_on_off(buffer, count); - if (copy_from_user(&kbuf, buffer, count)) { + if (tap_param < 0) return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_disc_fn(pbp_device_block, tap_param); + set_tap_fn(PDE_DATA(file_inode(file)), tap_param); return count; } - -int -get_bypass_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_tap(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_tap_fn(dev); - ret = get_bypass_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; + seq_puts(m, "off\n"); + return 0; } +RW_FOPS(tap) -int -get_tap_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t disc_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + int tap_param = user_on_off(buffer, count); - int len = 0, ret = 0; - - ret = get_tap_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 1) - len = sprintf(page, "on\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); + if (tap_param < 0) + return -1; - *eof = 1; - return len; + set_disc_fn(PDE_DATA(file_inode(file)), tap_param); + return count; } - -int -get_disc_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_disc(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_disc_fn(dev); - ret = get_disc_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; + seq_puts(m, "off\n"); + return 0; } +RW_FOPS(disc) -int -get_bypass_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_change(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = get_bypass_change_fn(dev); - int len = 0, ret = 0; - - ret = get_bypass_change_fn(pbp_device_block); if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; + seq_puts(m, "fail\n"); + return 0; } +RO_FOPS(bypass_change) -int -get_tap_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_tap_change(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_tap_change_fn(dev); - ret = get_tap_change_fn(pbp_device_block); if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; + seq_puts(m, "fail\n"); + return 0; } +RO_FOPS(tap_change) -int -get_disc_change_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_disc_change(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = get_disc_change_fn(dev); - int len = 0, ret = 0; - - ret = get_disc_change_fn(pbp_device_block); if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; -} - -#define isdigit(c) (c >= '0' && c <= '9') -__inline static int atoi(char **s) -{ - int i = 0; - while (isdigit(**s)) - i = i * 10 + *((*s)++) - '0'; - return i; + seq_puts(m, "fail\n"); + return 0; } +RO_FOPS(disc_change) -int -set_bypass_wd_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t bypass_wd_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = PDE_DATA(file_inode(file)); int timeout; - int ret; + int ret = kstrtoint_from_user(buffer, count, 10, &timeout); - ret = kstrtoint_from_user(buffer, count, 10, &timeout); if (ret) return ret; - set_bypass_wd_fn(pbp_device_block, timeout); - + set_bypass_wd_fn(dev, timeout); return count; } - -int -get_bypass_wd_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_wd(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = 0, timeout = 0; - int len = 0, ret = 0, timeout = 0; - - ret = get_bypass_wd_fn(pbp_device_block, &timeout); + ret = get_bypass_wd_fn(dev, &timeout); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (timeout == -1) - len = sprintf(page, "unknown\n"); + seq_puts(m, "unknown\n"); else if (timeout == 0) - len = sprintf(page, "disable\n"); + seq_puts(m, "disable\n"); else - len = sprintf(page, "%d\n", timeout); - - *eof = 1; - return len; + seq_printf(m, "%d\n", timeout); + return 0; } +RW_FOPS(bypass_wd) -int -get_wd_expire_time_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_wd_expire_time(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0, timeout = 0; + struct bpctl_dev *dev = m->private; + int ret = 0, timeout = 0; - ret = get_wd_expire_time_fn(pbp_device_block, &timeout); + ret = get_wd_expire_time_fn(dev, &timeout); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (timeout == -1) - len = sprintf(page, "expire\n"); + seq_puts(m, "expire\n"); else if (timeout == 0) - len = sprintf(page, "disable\n"); - + seq_puts(m, "disable\n"); else - len = sprintf(page, "%d\n", timeout); - *eof = 1; - return len; + seq_printf(m, "%d\n", timeout); + return 0; } +RO_FOPS(wd_expire_time) -int -get_tpl_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t tpl_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = PDE_DATA(file_inode(file)); + int tpl_param = user_on_off(buffer, count); - int len = 0, ret = 0; + if (tpl_param < 0) + return -1; + + set_tpl_fn(dev, tpl_param); + return count; +} +static int show_tpl(struct seq_file *m, void *v) +{ + struct bpctl_dev *dev = m->private; + int ret = get_tpl_fn(dev); - ret = get_tpl_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; + seq_puts(m, "off\n"); + return 0; } +RW_FOPS(tpl) #ifdef PMC_FIX_FLAG -int -get_wait_at_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t wait_at_pwup_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = PDE_DATA(file_inode(file)); + int tpl_param = user_on_off(buffer, count); + + if (tpl_param < 0) + return -1; - int len = 0, ret = 0; + set_bp_wait_at_pwup_fn(dev, tpl_param); + return count; +} +static int show_wait_at_pwup(struct seq_file *m, void *v) +{ + struct bpctl_dev *dev = m->private; + int ret = get_bp_wait_at_pwup_fn(dev); - ret = get_bp_wait_at_pwup_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; + seq_puts(m, "off\n"); + return 0; } +RW_FOPS(wait_at_pwup) -int -get_hw_reset_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t hw_reset_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = PDE_DATA(file_inode(file)); + int tpl_param = user_on_off(buffer, count); - int len = 0, ret = 0; + if (tpl_param < 0) + return -1; + + set_bp_hw_reset_fn(dev, tpl_param); + return count; +} +static int show_hw_reset(struct seq_file *m, void *v) +{ + struct bpctl_dev *dev = m->private; + int ret = get_bp_hw_reset_fn(dev); - ret = get_bp_hw_reset_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 1) - len = sprintf(page, "on\n"); + seq_puts(m, "on\n"); else if (ret == 0) - len = sprintf(page, "off\n"); - - *eof = 1; - return len; + seq_puts(m, "off\n"); + return 0; } +RW_FOPS(hw_reset) #endif /*PMC_WAIT_FLAG */ -int -reset_bypass_wd_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_reset_bypass_wd(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = reset_bypass_wd_timer_fn(dev); - int len = 0, ret = 0; - - ret = reset_bypass_wd_timer_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "disable\n"); + seq_puts(m, "disable\n"); else if (ret == 1) - len = sprintf(page, "success\n"); - - *eof = 1; - return len; + seq_puts(m, "success\n"); + return 0; } +RO_FOPS(reset_bypass_wd) -int -set_dis_bypass_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t dis_bypass_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int bypass_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count >= sizeof(kbuf)) + if (bypass_param < 0) return -EINVAL; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_dis_bypass_fn(pbp_device_block, bypass_param); - + set_dis_bypass_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -set_dis_tap_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static int show_dis_bypass(struct seq_file *m, void *v) { + struct bpctl_dev *dev = m->private; + int ret = get_dis_bypass_fn(dev); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count >= sizeof(kbuf)) - return -EINVAL; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_dis_tap_fn(pbp_device_block, tap_param); - - return count; + if (ret == BP_NOT_CAP) + seq_puts(m, "fail\n"); + else if (ret == 0) + seq_puts(m, "off\n"); + else + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(dis_bypass) -int -set_dis_disc_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t dis_tap_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int tap_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count >= sizeof(kbuf)) + if (tap_param < 0) return -EINVAL; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_dis_disc_fn(pbp_device_block, tap_param); - + set_dis_tap_fn(PDE_DATA(file_inode(file)), tap_param); return count; } - -int -get_dis_bypass_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_dis_tap(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_dis_tap_fn(dev); - ret = get_dis_bypass_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(dis_tap) -int -get_dis_tap_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t dis_disc_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + int tap_param = user_on_off(buffer, count); - int len = 0, ret = 0; - - ret = get_dis_tap_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); + if (tap_param < 0) + return -EINVAL; - *eof = 1; - return len; + set_dis_disc_fn(PDE_DATA(file_inode(file)), tap_param); + return count; } - -int -get_dis_disc_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_dis_disc(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_dis_disc_fn(dev); - ret = get_dis_disc_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(dis_disc) -int -set_bypass_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t bypass_pwup_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int bypass_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count >= sizeof(kbuf)) + if (bypass_param < 0) return -EINVAL; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_pwup_fn(pbp_device_block, bypass_param); - + set_bypass_pwup_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -set_bypass_pwoff_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static int show_bypass_pwup(struct seq_file *m, void *v) { + struct bpctl_dev *dev = m->private; + int ret = get_bypass_pwup_fn(dev); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count >= sizeof(kbuf)) - return -EINVAL; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_bypass_pwoff_fn(pbp_device_block, bypass_param); - - return count; -} - -int -set_tap_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count >= sizeof(kbuf)) - return -EINVAL; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_tap_pwup_fn(pbp_device_block, tap_param); - - return count; + if (ret == BP_NOT_CAP) + seq_puts(m, "fail\n"); + else if (ret == 0) + seq_puts(m, "off\n"); + else + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(bypass_pwup) -int -set_disc_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t bypass_pwoff_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int bypass_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tap_param = 0, length = 0; - - if (count >= sizeof(kbuf)) + if (bypass_param < 0) return -EINVAL; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tap_param = 1; - else if (strcmp(kbuf, "off") == 0) - tap_param = 0; - - set_disc_pwup_fn(pbp_device_block, tap_param); - + set_bypass_pwoff_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -get_bypass_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_bypass_pwoff(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = get_bypass_pwoff_fn(dev); - int len = 0, ret = 0; - - ret = get_bypass_pwup_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(bypass_pwoff) -int -get_bypass_pwoff_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t tap_pwup_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + int tap_param = user_on_off(buffer, count); - ret = get_bypass_pwoff_fn(pbp_device_block); - if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); + if (tap_param < 0) + return -EINVAL; - *eof = 1; - return len; + set_tap_pwup_fn(PDE_DATA(file_inode(file)), tap_param); + return count; } - -int -get_tap_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_tap_pwup(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + struct bpctl_dev *dev = m->private; + int ret = get_tap_pwup_fn(dev); - int len = 0, ret = 0; - - ret = get_tap_pwup_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(tap_pwup) -int -get_disc_pwup_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static ssize_t disc_pwup_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; + int tap_param = user_on_off(buffer, count); - int len = 0, ret = 0; + if (tap_param < 0) + return -EINVAL; + + set_disc_pwup_fn(PDE_DATA(file_inode(file)), tap_param); + return count; +} +static int show_disc_pwup(struct seq_file *m, void *v) +{ + struct bpctl_dev *dev = m->private; + int ret = get_disc_pwup_fn(dev); - ret = get_disc_pwup_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "off\n"); + seq_puts(m, "off\n"); else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(disc_pwup) -int -set_std_nic_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t std_nic_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { + int bypass_param = user_on_off(buffer, count); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int bypass_param = 0, length = 0; - - if (count >= sizeof(kbuf)) + if (bypass_param < 0) return -EINVAL; - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - bypass_param = 1; - else if (strcmp(kbuf, "off") == 0) - bypass_param = 0; - - set_std_nic_fn(pbp_device_block, bypass_param); - + set_std_nic_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -get_std_nic_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_std_nic(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_std_nic_fn(dev); - ret = get_std_nic_fn(pbp_device_block); if (ret == BP_NOT_CAP) - len = sprintf(page, "fail\n"); - else if (ret == 0) - len = sprintf(page, "off\n"); - else - len = sprintf(page, "on\n"); - - *eof = 1; - return len; -} - -int -get_wd_exp_mode_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) -{ - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; - - ret = get_wd_exp_mode_fn(pbp_device_block); - if (ret == 1) - len = sprintf(page, "tap\n"); + seq_puts(m, "fail\n"); else if (ret == 0) - len = sprintf(page, "bypass\n"); - else if (ret == 2) - len = sprintf(page, "disc\n"); - + seq_puts(m, "off\n"); else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; + seq_puts(m, "on\n"); + return 0; } +RW_FOPS(std_nic) -int -set_wd_exp_mode_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t wd_exp_mode_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - int bypass_param = 0, length = 0; if (count > (sizeof(kbuf) - 1)) return -1; - if (copy_from_user(&kbuf, buffer, count)) { + if (copy_from_user(&kbuf, buffer, count)) return -1; - } kbuf[count] = '\0'; length = strlen(kbuf); @@ -8377,148 +7405,55 @@ set_wd_exp_mode_pfs(struct file *file, const char *buffer, else if (strcmp(kbuf, "disc") == 0) bypass_param = 2; - set_wd_exp_mode_fn(pbp_device_block, bypass_param); + set_wd_exp_mode_fn(PDE_DATA(file_inode(file)), bypass_param); return count; } - -int -get_wd_autoreset_pfs(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int show_wd_exp_mode(struct seq_file *m, void *v) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int len = 0, ret = 0; + struct bpctl_dev *dev = m->private; + int ret = get_wd_exp_mode_fn(dev); - ret = get_wd_autoreset_fn(pbp_device_block); - if (ret >= 0) - len = sprintf(page, "%d\n", ret); + if (ret == 1) + seq_puts(m, "tap\n"); + else if (ret == 0) + seq_puts(m, "bypass\n"); + else if (ret == 2) + seq_puts(m, "disc\n"); else - len = sprintf(page, "fail\n"); - - *eof = 1; - return len; + seq_puts(m, "fail\n"); + return 0; } +RW_FOPS(wd_exp_mode) -int -set_wd_autoreset_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static ssize_t wd_autoreset_write(struct file *file, const char __user *buffer, + size_t count, loff_t *pos) { - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; int timeout; - int ret; + int ret = kstrtoint_from_user(buffer, count, 10, &timeout); - ret = kstrtoint_from_user(buffer, count, 10, &timeout); if (ret) return ret; - set_wd_autoreset_fn(pbp_device_block, timeout); - + set_wd_autoreset_fn(PDE_DATA(file_inode(file)), timeout); return count; } - -int -set_tpl_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) +static int show_wd_autoreset(struct seq_file *m, void *v) { + struct bpctl_dev *dev = m->private; + int ret = get_wd_autoreset_fn(dev); - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_tpl_fn(pbp_device_block, tpl_param); - - return count; -} - -#ifdef PMC_FIX_FLAG -int -set_wait_at_pwup_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_bp_wait_at_pwup_fn(pbp_device_block, tpl_param); - - return count; -} - -int -set_hw_reset_pfs(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - - char kbuf[256]; - bpctl_dev_t *pbp_device_block = (bpctl_dev_t *) data; - - int tpl_param = 0, length = 0; - - if (count > (sizeof(kbuf) - 1)) - return -1; - - if (copy_from_user(&kbuf, buffer, count)) { - return -1; - } - - kbuf[count] = '\0'; - length = strlen(kbuf); - if (kbuf[length - 1] == '\n') - kbuf[--length] = '\0'; - - if (strcmp(kbuf, "on") == 0) - tpl_param = 1; - else if (strcmp(kbuf, "off") == 0) - tpl_param = 0; - - set_bp_hw_reset_fn(pbp_device_block, tpl_param); - - return count; + if (ret >= 0) + seq_printf(m, "%d\n", ret); + else + seq_puts(m, "fail\n"); + return 0; } +RW_FOPS(wd_autoreset) -#endif /*PMC_FIX_FLAG */ - -int bypass_proc_create_dev_sd(bpctl_dev_t *pbp_device_block) +static int bypass_proc_create_dev_sd(struct bpctl_dev *pbp_device_block) { struct bypass_pfs_sd *current_pfs = &(pbp_device_block->bypass_pfs_set); - static struct proc_dir_entry *procfs_dir = NULL; + static struct proc_dir_entry *procfs_dir; int ret = 0; if (!pbp_device_block->ndev) @@ -8530,193 +7465,66 @@ int bypass_proc_create_dev_sd(bpctl_dev_t *pbp_device_block) return -1; /* create device proc dir */ - procfs_dir = proc_getdir(current_pfs->dir_name, bp_procfs_dir); - if (procfs_dir == 0) { + procfs_dir = proc_mkdir(current_pfs->dir_name, bp_procfs_dir); + if (!procfs_dir) { printk(KERN_DEBUG "Could not create procfs directory %s\n", current_pfs->dir_name); return -1; } current_pfs->bypass_entry = procfs_dir; - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_info), BYPASS_INFO_ENTRY_SD, NULL, /* write */ - get_bypass_info_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; +#define ENTRY(x) (ret |= procfs_add(#x, &x##_ops, pbp_device_block)) + ENTRY(bypass_info); if (pbp_device_block->bp_caps & SW_CTL_CAP) { - /* Create set param proc's */ - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_slave), BYPASS_SLAVE_ENTRY_SD, NULL, /* write */ - get_bypass_slave_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_caps), BYPASS_CAPS_ENTRY_SD, NULL, /* write */ - get_bypass_caps_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_set_caps), WD_SET_CAPS_ENTRY_SD, NULL, /* write */ - get_wd_set_caps_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_wd), BYPASS_WD_ENTRY_SD, set_bypass_wd_pfs, /* write */ - get_bypass_wd_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_expire_time), WD_EXPIRE_TIME_ENTRY_SD, NULL, /* write */ - get_wd_expire_time_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->reset_bypass_wd), RESET_BYPASS_WD_ENTRY_SD, NULL, /* write */ - reset_bypass_wd_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->std_nic), STD_NIC_ENTRY_SD, set_std_nic_pfs, /* write */ - get_std_nic_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - + ENTRY(bypass_slave); + ENTRY(bypass_caps); + ENTRY(wd_set_caps); + ENTRY(bypass_wd); + ENTRY(wd_expire_time); + ENTRY(reset_bypass_wd); + ENTRY(std_nic); if (pbp_device_block->bp_caps & BP_CAP) { - if (bypass_proc_create_entry_sd(&(current_pfs->bypass), BYPASS_ENTRY_SD, set_bypass_pfs, /* write */ - get_bypass_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_bypass), DIS_BYPASS_ENTRY_SD, set_dis_bypass_pfs, /* write */ - get_dis_bypass_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_pwup), BYPASS_PWUP_ENTRY_SD, set_bypass_pwup_pfs, /* write */ - get_bypass_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_pwoff), BYPASS_PWOFF_ENTRY_SD, set_bypass_pwoff_pfs, /* write */ - get_bypass_pwoff_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->bypass_change), BYPASS_CHANGE_ENTRY_SD, NULL, /* write */ - get_bypass_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; + ENTRY(bypass); + ENTRY(dis_bypass); + ENTRY(bypass_pwup); + ENTRY(bypass_pwoff); + ENTRY(bypass_change); } - if (pbp_device_block->bp_caps & TAP_CAP) { - - if (bypass_proc_create_entry_sd(&(current_pfs->tap), TAP_ENTRY_SD, set_tap_pfs, /* write */ - get_tap_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_tap), DIS_TAP_ENTRY_SD, set_dis_tap_pfs, /* write */ - get_dis_tap_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_pwup), TAP_PWUP_ENTRY_SD, set_tap_pwup_pfs, /* write */ - get_tap_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_change), TAP_CHANGE_ENTRY_SD, NULL, /* write */ - get_tap_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; + ENTRY(tap); + ENTRY(dis_tap); + ENTRY(tap_pwup); + ENTRY(tap_change); } if (pbp_device_block->bp_caps & DISC_CAP) { - - if (bypass_proc_create_entry_sd(&(current_pfs->tap), DISC_ENTRY_SD, set_disc_pfs, /* write */ - get_disc_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; -#if 1 - - if (bypass_proc_create_entry_sd(&(current_pfs->dis_tap), DIS_DISC_ENTRY_SD, set_dis_disc_pfs, /* write */ - get_dis_disc_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; -#endif - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_pwup), DISC_PWUP_ENTRY_SD, set_disc_pwup_pfs, /* write */ - get_disc_pwup_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->tap_change), DISC_CHANGE_ENTRY_SD, NULL, /* write */ - get_disc_change_pfs, /* read */ - procfs_dir, - pbp_device_block)) - ret = -1; + ENTRY(disc); + ENTRY(dis_disc); + ENTRY(disc_pwup); + ENTRY(disc_change); } - if (bypass_proc_create_entry_sd(&(current_pfs->wd_exp_mode), WD_EXP_MODE_ENTRY_SD, set_wd_exp_mode_pfs, /* write */ - get_wd_exp_mode_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - - if (bypass_proc_create_entry_sd(&(current_pfs->wd_autoreset), WD_AUTORESET_ENTRY_SD, set_wd_autoreset_pfs, /* write */ - get_wd_autoreset_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), TPL_ENTRY_SD, set_tpl_pfs, /* write */ - get_tpl_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; + ENTRY(wd_exp_mode); + ENTRY(wd_autoreset); + ENTRY(tpl); #ifdef PMC_FIX_FLAG - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), WAIT_AT_PWUP_ENTRY_SD, set_wait_at_pwup_pfs, /* write */ - get_wait_at_pwup_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - if (bypass_proc_create_entry_sd(&(current_pfs->tpl), HW_RESET_ENTRY_SD, set_hw_reset_pfs, /* write */ - get_hw_reset_pfs, /* read */ - procfs_dir, pbp_device_block)) - ret = -1; - + ENTRY(wait_at_pwup); + ENTRY(hw_reset); #endif - } +#undef ENTRY if (ret < 0) printk(KERN_DEBUG "Create proc entry failed\n"); return ret; } -int bypass_proc_remove_dev_sd(bpctl_dev_t *pbp_device_block) +static int bypass_proc_remove_dev_sd(struct bpctl_dev *pbp_device_block) { - struct bypass_pfs_sd *current_pfs = &pbp_device_block->bypass_pfs_set; - struct proc_dir_entry *pde = current_pfs->bypass_entry, *pde_curr = - NULL; - char name[256]; - if (!pde) - return 0; - for (pde = pde->subdir; pde;) { - strcpy(name, pde->name); - pde_curr = pde; - pde = pde->next; - remove_proc_entry(name, current_pfs->bypass_entry); - } - if (!pde) - remove_proc_entry(current_pfs->dir_name, bp_procfs_dir); + remove_proc_subtree(current_pfs->dir_name, bp_procfs_dir); current_pfs->bypass_entry = NULL; - return 0; } diff --git a/drivers/staging/silicom/bypasslib/bp_ioctl.h b/drivers/staging/silicom/bypasslib/bp_ioctl.h index 040c6fa8d5a..a13932af733 100644 --- a/drivers/staging/silicom/bypasslib/bp_ioctl.h +++ b/drivers/staging/silicom/bypasslib/bp_ioctl.h @@ -14,46 +14,46 @@ #ifndef BP_IOCTL_H #define BP_IOCTL_H -#define BP_CAP 0x01 //BIT_0 -#define BP_STATUS_CAP 0x02 //BIT_1 -#define BP_STATUS_CHANGE_CAP 0x04 //BIT_2 -#define SW_CTL_CAP 0x08 //BIT_3 -#define BP_DIS_CAP 0x10 //BIT_4 -#define BP_DIS_STATUS_CAP 0x20 //BIT_5 -#define STD_NIC_CAP 0x40 //BIT_6 -#define BP_PWOFF_ON_CAP 0x80 //BIT_7 -#define BP_PWOFF_OFF_CAP 0x0100 //BIT_8 -#define BP_PWOFF_CTL_CAP 0x0200 //BIT_9 -#define BP_PWUP_ON_CAP 0x0400 //BIT_10 -#define BP_PWUP_OFF_CAP 0x0800 //BIT_11 -#define BP_PWUP_CTL_CAP 0x1000 //BIT_12 -#define WD_CTL_CAP 0x2000 //BIT_13 -#define WD_STATUS_CAP 0x4000 //BIT_14 -#define WD_TIMEOUT_CAP 0x8000 //BIT_15 -#define TX_CTL_CAP 0x10000 //BIT_16 -#define TX_STATUS_CAP 0x20000 //BIT_17 -#define TAP_CAP 0x40000 //BIT_18 -#define TAP_STATUS_CAP 0x80000 //BIT_19 -#define TAP_STATUS_CHANGE_CAP 0x100000 //BIT_20 -#define TAP_DIS_CAP 0x200000 //BIT_21 -#define TAP_DIS_STATUS_CAP 0x400000 //BIT_22 -#define TAP_PWUP_ON_CAP 0x800000 //BIT_23 -#define TAP_PWUP_OFF_CAP 0x1000000 //BIT 24 -#define TAP_PWUP_CTL_CAP 0x2000000 //BIT 25 -#define NIC_CAP_NEG 0x4000000 //BIT 26 -#define TPL_CAP 0x8000000 //BIT 27 -#define DISC_CAP 0x10000000 //BIT 28 -#define DISC_DIS_CAP 0x20000000 //BIT 29 -#define DISC_PWUP_CTL_CAP 0x40000000 //BIT 30 +#define BP_CAP 0x01 /* BIT_0 */ +#define BP_STATUS_CAP 0x02 /* BIT_1 */ +#define BP_STATUS_CHANGE_CAP 0x04 /* BIT_2 */ +#define SW_CTL_CAP 0x08 /* BIT_3 */ +#define BP_DIS_CAP 0x10 /* BIT_4 */ +#define BP_DIS_STATUS_CAP 0x20 /* BIT_5 */ +#define STD_NIC_CAP 0x40 /* BIT_6 */ +#define BP_PWOFF_ON_CAP 0x80 /* BIT_7 */ +#define BP_PWOFF_OFF_CAP 0x0100 /* BIT_8 */ +#define BP_PWOFF_CTL_CAP 0x0200 /* BIT_9 */ +#define BP_PWUP_ON_CAP 0x0400 /* BIT_10 */ +#define BP_PWUP_OFF_CAP 0x0800 /* BIT_11 */ +#define BP_PWUP_CTL_CAP 0x1000 /* BIT_12 */ +#define WD_CTL_CAP 0x2000 /* BIT_13 */ +#define WD_STATUS_CAP 0x4000 /* BIT_14 */ +#define WD_TIMEOUT_CAP 0x8000 /* BIT_15 */ +#define TX_CTL_CAP 0x10000 /* BIT_16 */ +#define TX_STATUS_CAP 0x20000 /* BIT_17 */ +#define TAP_CAP 0x40000 /* BIT_18 */ +#define TAP_STATUS_CAP 0x80000 /* BIT_19 */ +#define TAP_STATUS_CHANGE_CAP 0x100000 /* BIT_20 */ +#define TAP_DIS_CAP 0x200000 /* BIT_21 */ +#define TAP_DIS_STATUS_CAP 0x400000 /* BIT_22 */ +#define TAP_PWUP_ON_CAP 0x800000 /* BIT_23 */ +#define TAP_PWUP_OFF_CAP 0x1000000 /* BIT 24 */ +#define TAP_PWUP_CTL_CAP 0x2000000 /* BIT 25 */ +#define NIC_CAP_NEG 0x4000000 /* BIT 26 */ +#define TPL_CAP 0x8000000 /* BIT 27 */ +#define DISC_CAP 0x10000000 /* BIT 28 */ +#define DISC_DIS_CAP 0x20000000 /* BIT 29 */ +#define DISC_PWUP_CTL_CAP 0x40000000 /* BIT 30 */ #define WD_MIN_TIME_MASK(val) (val & 0xf) #define WD_STEP_COUNT_MASK(val) ((val & 0xf) << 5) -#define WDT_STEP_TIME 0x10 //BIT_4 +#define WDT_STEP_TIME 0x10 /* BIT_4 */ #define WD_MIN_TIME_GET(desc) (desc & 0xf) -#define WD_STEP_COUNT_GET(desc) (desc>>5) & 0xf +#define WD_STEP_COUNT_GET(desc) ((desc>>5) & 0xf) -typedef enum { +enum { IS_BYPASS = 1, GET_BYPASS_SLAVE, GET_BYPASS_CAPS, @@ -101,9 +101,9 @@ typedef enum { SET_BP_WAIT_AT_PWUP, GET_BP_HW_RESET, SET_BP_HW_RESET, -} CMND_TYPE; +}; -typedef enum { +enum { IF_SCAN_SD, GET_DEV_NUM_SD, IS_BYPASS_SD, @@ -154,9 +154,9 @@ typedef enum { GET_BP_HW_RESET_SD, SET_BP_HW_RESET_SD, -} CMND_TYPE_SD; +}; -#define SIOCGIFBYPASS SIOCDEVPRIVATE+10 +#define SIOCGIFBYPASS (SIOCDEVPRIVATE+10) struct bp_info { char prod_name[14]; diff --git a/drivers/staging/silicom/bypasslib/bplibk.h b/drivers/staging/silicom/bypasslib/bplibk.h index d8c1d27650b..c5c75c4fe05 100644 --- a/drivers/staging/silicom/bypasslib/bplibk.h +++ b/drivers/staging/silicom/bypasslib/bplibk.h @@ -24,15 +24,13 @@ #define INTEL_PEG4BPFII_PID 0x10a1 #define PEGII_IF_SERIES(vid, pid) \ - ((vid==0x8086)&& \ - ((pid==INTEL_PEG4BPII_PID)|| \ - (pid==INTEL_PEG4BPFII_PID))) - -#define EXPORT_SYMBOL_NOVERS EXPORT_SYMBOL + ((vid == 0x8086) && \ + ((pid == INTEL_PEG4BPII_PID) || \ + (pid == INTEL_PEG4BPFII_PID))) #ifdef BP_VENDOR_SUPPORT -char *bp_desc_array[] = - { "e1000bp", "e1000bpe", "slcm5700", "bnx2xbp", "ixgbp", "ixgbpe", NULL }; +char *bp_desc_array[] = { "e1000bp", "e1000bpe", "slcm5700", + "bnx2xbp", "ixgbp", "ixgbpe", NULL }; #endif #endif diff --git a/drivers/staging/silicom/bypasslib/bypass.c b/drivers/staging/silicom/bypasslib/bypass.c index 95a1f1815d9..8e714a8ea3a 100644 --- a/drivers/staging/silicom/bypasslib/bypass.c +++ b/drivers/staging/silicom/bypasslib/bypass.c @@ -7,11 +7,11 @@ /* the Free Software Foundation, located in the file LICENSE. */ /* */ /* */ -/* bypass.c */ +/* bypass.c */ /* */ /******************************************************************************/ -#if defined(CONFIG_SMP) && ! defined(__SMP__) +#if defined(CONFIG_SMP) && !defined(__SMP__) #define __SMP__ #endif @@ -22,7 +22,7 @@ #include <linux/sched.h> #include <linux/wait.h> -#include <linux/netdevice.h> // struct device, and other headers +#include <linux/netdevice.h> /* struct device, and other headers */ #include <linux/kernel_stat.h> #include <linux/pci.h> #include <linux/rtnetlink.h> @@ -40,20 +40,17 @@ MODULE_AUTHOR("www.silicom.co.il"); MODULE_LICENSE("GPL"); -int init_lib_module(void); -void cleanup_lib_module(void); - static int do_cmd(struct net_device *dev, struct ifreq *ifr, int cmd, int *data) { int ret = -1; struct if_bypass *bypass_cb; - static int (*ioctl) (struct net_device *, struct ifreq *, int); bypass_cb = (struct if_bypass *)ifr; bypass_cb->cmd = cmd; bypass_cb->data = *data; - if ((dev->netdev_ops) && (ioctl = dev->netdev_ops->ndo_do_ioctl)) { - ret = ioctl(dev, ifr, SIOCGIFBYPASS); + + if (dev->netdev_ops && dev->netdev_ops->ndo_do_ioctl) { + ret = dev->netdev_ops->ndo_do_ioctl(dev, ifr, SIOCGIFBYPASS); *data = bypass_cb->data; } @@ -66,13 +63,12 @@ static int doit(int cmd, int if_index, int *data) int ret = -1; struct net_device *dev; struct net_device *n; - for_each_netdev_safe(&init_net, dev, n) { + for_each_netdev_safe(&init_net, dev, n) { if (dev->ifindex == if_index) { ret = do_cmd(dev, &ifr, cmd, data); if (ret < 0) ret = -1; - } } @@ -82,183 +78,208 @@ static int doit(int cmd, int if_index, int *data) #define bp_symbol_get(fn_name) symbol_get(fn_name) #define bp_symbol_put(fn_name) symbol_put(fn_name) -#define SET_BPLIB_INT_FN(fn_name, arg_type, arg, ret) \ - ({ int (* fn_ex)(arg_type)=NULL; \ - fn_ex=bp_symbol_get(fn_name##_sd); \ - if(fn_ex) { \ - ret= fn_ex(arg); \ - bp_symbol_put(fn_name##_sd); \ - } else ret=-1; \ - }) - -#define SET_BPLIB_INT_FN2(fn_name, arg_type, arg, arg_type1, arg1, ret) \ - ({ int (* fn_ex)(arg_type,arg_type1)=NULL; \ - fn_ex=bp_symbol_get(fn_name##_sd); \ - if(fn_ex) { \ - ret= fn_ex(arg,arg1); \ - bp_symbol_put(fn_name##_sd); \ - } else ret=-1; \ - }) -#define SET_BPLIB_INT_FN3(fn_name, arg_type, arg, arg_type1, arg1,arg_type2, arg2, ret) \ - ({ int (* fn_ex)(arg_type,arg_type1, arg_type2)=NULL; \ - fn_ex=bp_symbol_get(fn_name##_sd); \ - if(fn_ex) { \ - ret= fn_ex(arg,arg1,arg2); \ - bp_symbol_put(fn_name##_sd); \ - } else ret=-1; \ - }) - -#define DO_BPLIB_GET_ARG_FN(fn_name,ioctl_val, if_index) \ - ({ int data, ret=0; \ - if(is_dev_sd(if_index)){ \ - SET_BPLIB_INT_FN(fn_name, int, if_index, ret); \ - return ret; \ - } \ - return doit(ioctl_val,if_index, &data); \ - }) - -#define DO_BPLIB_SET_ARG_FN(fn_name,ioctl_val,if_index,arg) \ - ({ int data, ret=0; \ - if(is_dev_sd(if_index)){ \ - SET_BPLIB_INT_FN2(fn_name, int, if_index, int, arg, ret); \ - return ret; \ - } \ - data=arg; \ - return doit(ioctl_val,if_index, &data); \ - }) +#define SET_BPLIB_INT_FN(fn_name, arg_type, arg, ret) \ +({ int (*fn_ex)(arg_type) = NULL; \ + fn_ex = bp_symbol_get(fn_name##_sd); \ + if (fn_ex) { \ + ret = fn_ex(arg); \ + bp_symbol_put(fn_name##_sd); \ + } else { \ + ret = -1; \ + } \ +}) + +#define SET_BPLIB_INT_FN2(fn_name, arg_type, arg, arg_type1, arg1, ret)\ +({ int (*fn_ex)(arg_type, arg_type1) = NULL; \ + fn_ex = bp_symbol_get(fn_name##_sd); \ + if (fn_ex) { \ + ret = fn_ex(arg, arg1); \ + bp_symbol_put(fn_name##_sd); \ + } else { \ + ret = -1; \ + } \ +}) + +#define SET_BPLIB_INT_FN3(fn_name, arg_type, arg, arg_type1, arg1, \ + arg_type2, arg2, ret) \ +({ int (*fn_ex)(arg_type, arg_type1, arg_type2) = NULL; \ + fn_ex = bp_symbol_get(fn_name##_sd); \ + if (fn_ex) { \ + ret = fn_ex(arg, arg1, arg2); \ + bp_symbol_put(fn_name##_sd); \ + } else { \ + ret = -1; \ + } \ +}) + +#define DO_BPLIB_GET_ARG_FN(fn_name, ioctl_val, if_index) \ +({ int data, ret = 0; \ + if (is_dev_sd(if_index)) { \ + SET_BPLIB_INT_FN(fn_name, int, if_index, ret); \ + return ret; \ + } \ + return doit(ioctl_val, if_index, &data); \ +}) + +#define DO_BPLIB_SET_ARG_FN(fn_name, ioctl_val, if_index, arg) \ +({ int data, ret = 0; \ + if (is_dev_sd(if_index)) { \ + SET_BPLIB_INT_FN2(fn_name, int, if_index, int, \ + arg, ret); \ + return ret; \ + } \ + data = arg; \ + return doit(ioctl_val, if_index, &data); \ +}) static int is_dev_sd(int if_index) { int ret = 0; + SET_BPLIB_INT_FN(is_bypass, int, if_index, ret); - return (ret >= 0 ? 1 : 0); + return ret >= 0 ? 1 : 0; } -int is_bypass_dev(int if_index) +static int is_bypass_dev(int if_index) { struct pci_dev *pdev = NULL; struct net_device *dev = NULL; struct ifreq ifr; - int ret = 0, data = 0; + int ret = 0; + int data = 0; while ((pdev = pci_get_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev))) { - if ((dev = pci_get_drvdata(pdev)) != NULL) - if (((dev = pci_get_drvdata(pdev)) != NULL) && - (dev->ifindex == if_index)) { - if ((pdev->vendor == SILICOM_VID) && - (pdev->device >= SILICOM_BP_PID_MIN) && - (pdev->device <= SILICOM_BP_PID_MAX)) - goto send_cmd; + dev = pci_get_drvdata(pdev); + if ((dev != NULL) && (dev->ifindex == if_index)) { + if ((pdev->vendor == SILICOM_VID) && + (pdev->device >= SILICOM_BP_PID_MIN) && + (pdev->device <= SILICOM_BP_PID_MAX)) { + goto send_cmd; + } #if defined(BP_VENDOR_SUPPORT) && defined(ETHTOOL_GDRVINFO) - else { - struct ethtool_drvinfo info; - const struct ethtool_ops *ops = - dev->ethtool_ops; - int k = 0; - - if (ops->get_drvinfo) { - memset(&info, 0, sizeof(info)); - info.cmd = ETHTOOL_GDRVINFO; - ops->get_drvinfo(dev, &info); - for (; bp_desc_array[k]; k++) - if (! - (strcmp - (bp_desc_array[k], - info.driver))) - goto send_cmd; - - } + else { + struct ethtool_drvinfo info; + const struct ethtool_ops *ops = + dev->ethtool_ops; + int k = 0; + + if (ops->get_drvinfo) { + memset(&info, 0, sizeof(info)); + info.cmd = ETHTOOL_GDRVINFO; + ops->get_drvinfo(dev, &info); + for (; bp_desc_array[k]; k++) + if (!(strcmp(bp_desc_array[k], + info.driver))) + goto send_cmd; } -#endif - return -1; + } +#endif + return -1; + } } send_cmd: ret = do_cmd(dev, &ifr, IS_BYPASS, &data); - return (ret < 0 ? -1 : ret); + return ret < 0 ? -1 : ret; } -int is_bypass(int if_index) +static int is_bypass(int if_index) { int ret = 0; + SET_BPLIB_INT_FN(is_bypass, int, if_index, ret); if (ret < 0) return is_bypass_dev(if_index); return ret; } +EXPORT_SYMBOL(is_bypass); -int get_bypass_slave(int if_index) +static int get_bypass_slave(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass_slave, GET_BYPASS_SLAVE, if_index); } +EXPORT_SYMBOL(get_bypass_slave); -int get_bypass_caps(int if_index) +static int get_bypass_caps(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass_caps, GET_BYPASS_CAPS, if_index); } +EXPORT_SYMBOL(get_bypass_caps); -int get_wd_set_caps(int if_index) +static int get_wd_set_caps(int if_index) { DO_BPLIB_GET_ARG_FN(get_wd_set_caps, GET_WD_SET_CAPS, if_index); } +EXPORT_SYMBOL(get_wd_set_caps); -int set_bypass(int if_index, int bypass_mode) +static int set_bypass(int if_index, int bypass_mode) { DO_BPLIB_SET_ARG_FN(set_bypass, SET_BYPASS, if_index, bypass_mode); } +EXPORT_SYMBOL(set_bypass); -int get_bypass(int if_index) +static int get_bypass(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass, GET_BYPASS, if_index); } +EXPORT_SYMBOL(get_bypass); -int get_bypass_change(int if_index) +static int get_bypass_change(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass_change, GET_BYPASS_CHANGE, if_index); } +EXPORT_SYMBOL(get_bypass_change); -int set_dis_bypass(int if_index, int dis_bypass) +static int set_dis_bypass(int if_index, int dis_bypass) { DO_BPLIB_SET_ARG_FN(set_dis_bypass, SET_DIS_BYPASS, if_index, dis_bypass); } +EXPORT_SYMBOL(set_dis_bypass); -int get_dis_bypass(int if_index) +static int get_dis_bypass(int if_index) { DO_BPLIB_GET_ARG_FN(get_dis_bypass, GET_DIS_BYPASS, if_index); } +EXPORT_SYMBOL(get_dis_bypass); -int set_bypass_pwoff(int if_index, int bypass_mode) +static int set_bypass_pwoff(int if_index, int bypass_mode) { DO_BPLIB_SET_ARG_FN(set_bypass_pwoff, SET_BYPASS_PWOFF, if_index, bypass_mode); } +EXPORT_SYMBOL(set_bypass_pwoff); -int get_bypass_pwoff(int if_index) +static int get_bypass_pwoff(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass_pwoff, GET_BYPASS_PWOFF, if_index); } +EXPORT_SYMBOL(get_bypass_pwoff); -int set_bypass_pwup(int if_index, int bypass_mode) +static int set_bypass_pwup(int if_index, int bypass_mode) { DO_BPLIB_SET_ARG_FN(set_bypass_pwup, SET_BYPASS_PWUP, if_index, bypass_mode); } +EXPORT_SYMBOL(set_bypass_pwup); -int get_bypass_pwup(int if_index) +static int get_bypass_pwup(int if_index) { DO_BPLIB_GET_ARG_FN(get_bypass_pwup, GET_BYPASS_PWUP, if_index); } +EXPORT_SYMBOL(get_bypass_pwup); -int set_bypass_wd(int if_index, int ms_timeout, int *ms_timeout_set) +static int set_bypass_wd(int if_index, int ms_timeout, int *ms_timeout_set) { - int data = ms_timeout, ret = 0; - if (is_dev_sd(if_index)) + int data = ms_timeout; + int ret = 0; + + if (is_dev_sd(if_index)) { SET_BPLIB_INT_FN3(set_bypass_wd, int, if_index, int, ms_timeout, int *, ms_timeout_set, ret); - else { + } else { ret = doit(SET_BYPASS_WD, if_index, &data); if (ret > 0) { *ms_timeout_set = ret; @@ -267,10 +288,13 @@ int set_bypass_wd(int if_index, int ms_timeout, int *ms_timeout_set) } return ret; } +EXPORT_SYMBOL(set_bypass_wd); -int get_bypass_wd(int if_index, int *ms_timeout_set) +static int get_bypass_wd(int if_index, int *ms_timeout_set) { - int *data = ms_timeout_set, ret = 0; + int *data = ms_timeout_set; + int ret = 0; + if (is_dev_sd(if_index)) SET_BPLIB_INT_FN2(get_bypass_wd, int, if_index, int *, ms_timeout_set, ret); @@ -278,169 +302,199 @@ int get_bypass_wd(int if_index, int *ms_timeout_set) ret = doit(GET_BYPASS_WD, if_index, data); return ret; } +EXPORT_SYMBOL(get_bypass_wd); -int get_wd_expire_time(int if_index, int *ms_time_left) +static int get_wd_expire_time(int if_index, int *ms_time_left) { int *data = ms_time_left, ret = 0; - if (is_dev_sd(if_index)) + + if (is_dev_sd(if_index)) { SET_BPLIB_INT_FN2(get_wd_expire_time, int, if_index, int *, ms_time_left, ret); - else { + } else { ret = doit(GET_WD_EXPIRE_TIME, if_index, data); if ((ret == 0) && (*data != 0)) ret = 1; } return ret; } +EXPORT_SYMBOL(get_wd_expire_time); -int reset_bypass_wd_timer(int if_index) +static int reset_bypass_wd_timer(int if_index) { DO_BPLIB_GET_ARG_FN(reset_bypass_wd_timer, RESET_BYPASS_WD_TIMER, if_index); } +EXPORT_SYMBOL(reset_bypass_wd_timer); -int set_std_nic(int if_index, int bypass_mode) +static int set_std_nic(int if_index, int bypass_mode) { DO_BPLIB_SET_ARG_FN(set_std_nic, SET_STD_NIC, if_index, bypass_mode); } +EXPORT_SYMBOL(set_std_nic); -int get_std_nic(int if_index) +static int get_std_nic(int if_index) { DO_BPLIB_GET_ARG_FN(get_std_nic, GET_STD_NIC, if_index); } +EXPORT_SYMBOL(get_std_nic); -int set_tx(int if_index, int tx_state) +static int set_tx(int if_index, int tx_state) { DO_BPLIB_SET_ARG_FN(set_tx, SET_TX, if_index, tx_state); } +EXPORT_SYMBOL(set_tx); -int get_tx(int if_index) +static int get_tx(int if_index) { DO_BPLIB_GET_ARG_FN(get_tx, GET_TX, if_index); } +EXPORT_SYMBOL(get_tx); -int set_tap(int if_index, int tap_mode) +static int set_tap(int if_index, int tap_mode) { DO_BPLIB_SET_ARG_FN(set_tap, SET_TAP, if_index, tap_mode); } +EXPORT_SYMBOL(set_tap); -int get_tap(int if_index) +static int get_tap(int if_index) { DO_BPLIB_GET_ARG_FN(get_tap, GET_TAP, if_index); } +EXPORT_SYMBOL(get_tap); -int get_tap_change(int if_index) +static int get_tap_change(int if_index) { DO_BPLIB_GET_ARG_FN(get_tap_change, GET_TAP_CHANGE, if_index); } +EXPORT_SYMBOL(get_tap_change); -int set_dis_tap(int if_index, int dis_tap) +static int set_dis_tap(int if_index, int dis_tap) { DO_BPLIB_SET_ARG_FN(set_dis_tap, SET_DIS_TAP, if_index, dis_tap); } +EXPORT_SYMBOL(set_dis_tap); -int get_dis_tap(int if_index) +static int get_dis_tap(int if_index) { DO_BPLIB_GET_ARG_FN(get_dis_tap, GET_DIS_TAP, if_index); } +EXPORT_SYMBOL(get_dis_tap); -int set_tap_pwup(int if_index, int tap_mode) +static int set_tap_pwup(int if_index, int tap_mode) { DO_BPLIB_SET_ARG_FN(set_tap_pwup, SET_TAP_PWUP, if_index, tap_mode); } +EXPORT_SYMBOL(set_tap_pwup); -int get_tap_pwup(int if_index) +static int get_tap_pwup(int if_index) { DO_BPLIB_GET_ARG_FN(get_tap_pwup, GET_TAP_PWUP, if_index); } +EXPORT_SYMBOL(get_tap_pwup); -int set_bp_disc(int if_index, int disc_mode) +static int set_bp_disc(int if_index, int disc_mode) { DO_BPLIB_SET_ARG_FN(set_bp_disc, SET_DISC, if_index, disc_mode); } +EXPORT_SYMBOL(set_bp_disc); -int get_bp_disc(int if_index) +static int get_bp_disc(int if_index) { DO_BPLIB_GET_ARG_FN(get_bp_disc, GET_DISC, if_index); } +EXPORT_SYMBOL(get_bp_disc); -int get_bp_disc_change(int if_index) +static int get_bp_disc_change(int if_index) { DO_BPLIB_GET_ARG_FN(get_bp_disc_change, GET_DISC_CHANGE, if_index); } +EXPORT_SYMBOL(get_bp_disc_change); -int set_bp_dis_disc(int if_index, int dis_disc) +static int set_bp_dis_disc(int if_index, int dis_disc) { DO_BPLIB_SET_ARG_FN(set_bp_dis_disc, SET_DIS_DISC, if_index, dis_disc); } +EXPORT_SYMBOL(set_bp_dis_disc); -int get_bp_dis_disc(int if_index) +static int get_bp_dis_disc(int if_index) { DO_BPLIB_GET_ARG_FN(get_bp_dis_disc, GET_DIS_DISC, if_index); } +EXPORT_SYMBOL(get_bp_dis_disc); -int set_bp_disc_pwup(int if_index, int disc_mode) +static int set_bp_disc_pwup(int if_index, int disc_mode) { DO_BPLIB_SET_ARG_FN(set_bp_disc_pwup, SET_DISC_PWUP, if_index, disc_mode); } +EXPORT_SYMBOL(set_bp_disc_pwup); -int get_bp_disc_pwup(int if_index) +static int get_bp_disc_pwup(int if_index) { DO_BPLIB_GET_ARG_FN(get_bp_disc_pwup, GET_DISC_PWUP, if_index); } +EXPORT_SYMBOL(get_bp_disc_pwup); -int set_wd_exp_mode(int if_index, int mode) +static int set_wd_exp_mode(int if_index, int mode) { DO_BPLIB_SET_ARG_FN(set_wd_exp_mode, SET_WD_EXP_MODE, if_index, mode); } +EXPORT_SYMBOL(set_wd_exp_mode); -int get_wd_exp_mode(int if_index) +static int get_wd_exp_mode(int if_index) { DO_BPLIB_GET_ARG_FN(get_wd_exp_mode, GET_WD_EXP_MODE, if_index); } +EXPORT_SYMBOL(get_wd_exp_mode); -int set_wd_autoreset(int if_index, int time) +static int set_wd_autoreset(int if_index, int time) { DO_BPLIB_SET_ARG_FN(set_wd_autoreset, SET_WD_AUTORESET, if_index, time); } +EXPORT_SYMBOL(set_wd_autoreset); -int get_wd_autoreset(int if_index) +static int get_wd_autoreset(int if_index) { DO_BPLIB_GET_ARG_FN(get_wd_autoreset, GET_WD_AUTORESET, if_index); } +EXPORT_SYMBOL(get_wd_autoreset); -int set_tpl(int if_index, int tpl_mode) +static int set_tpl(int if_index, int tpl_mode) { DO_BPLIB_SET_ARG_FN(set_tpl, SET_TPL, if_index, tpl_mode); } +EXPORT_SYMBOL(set_tpl); -int get_tpl(int if_index) +static int get_tpl(int if_index) { DO_BPLIB_GET_ARG_FN(get_tpl, GET_TPL, if_index); } +EXPORT_SYMBOL(get_tpl); -int set_bp_hw_reset(int if_index, int mode) +static int set_bp_hw_reset(int if_index, int mode) { DO_BPLIB_SET_ARG_FN(set_tpl, SET_BP_HW_RESET, if_index, mode); } +EXPORT_SYMBOL(set_bp_hw_reset); -int get_bp_hw_reset(int if_index) +static int get_bp_hw_reset(int if_index) { DO_BPLIB_GET_ARG_FN(get_tpl, GET_BP_HW_RESET, if_index); } +EXPORT_SYMBOL(get_bp_hw_reset); -int get_bypass_info(int if_index, struct bp_info *bp_info) +static int get_bypass_info(int if_index, struct bp_info *bp_info) { int ret = 0; + if (is_dev_sd(if_index)) { SET_BPLIB_INT_FN2(get_bypass_info, int, if_index, struct bp_info *, bp_info, ret); } else { - static int (*ioctl) (struct net_device *, struct ifreq *, int); struct net_device *dev; - struct net_device *n; + for_each_netdev_safe(&init_net, dev, n) { if (dev->ifindex == if_index) { struct if_bypass_info *bypass_cb; @@ -450,79 +504,33 @@ int get_bypass_info(int if_index, struct bp_info *bp_info) bypass_cb = (struct if_bypass_info *)𝔦 bypass_cb->cmd = GET_BYPASS_INFO; - if ((dev->netdev_ops) && - (ioctl = dev->netdev_ops->ndo_do_ioctl)) { - ret = ioctl(dev, &ifr, SIOCGIFBYPASS); - } - + if (dev->netdev_ops && + dev->netdev_ops->ndo_do_ioctl) + ret = dev->netdev_ops->ndo_do_ioctl(dev, + &ifr, SIOCGIFBYPASS); else ret = -1; if (ret == 0) memcpy(bp_info, &bypass_cb->bp_info, sizeof(struct bp_info)); - ret = (ret < 0 ? -1 : 0); + ret = ret < 0 ? -1 : 0; break; } } } return ret; } +EXPORT_SYMBOL(get_bypass_info); -int init_lib_module() +static int __init init_lib_module(void) { - printk(VERSION); return 0; } -void cleanup_lib_module() -{ -} - -EXPORT_SYMBOL_NOVERS(is_bypass); -EXPORT_SYMBOL_NOVERS(get_bypass_slave); -EXPORT_SYMBOL_NOVERS(get_bypass_caps); -EXPORT_SYMBOL_NOVERS(get_wd_set_caps); -EXPORT_SYMBOL_NOVERS(set_bypass); -EXPORT_SYMBOL_NOVERS(get_bypass); -EXPORT_SYMBOL_NOVERS(get_bypass_change); -EXPORT_SYMBOL_NOVERS(set_dis_bypass); -EXPORT_SYMBOL_NOVERS(get_dis_bypass); -EXPORT_SYMBOL_NOVERS(set_bypass_pwoff); -EXPORT_SYMBOL_NOVERS(get_bypass_pwoff); -EXPORT_SYMBOL_NOVERS(set_bypass_pwup); -EXPORT_SYMBOL_NOVERS(get_bypass_pwup); -EXPORT_SYMBOL_NOVERS(set_bypass_wd); -EXPORT_SYMBOL_NOVERS(get_bypass_wd); -EXPORT_SYMBOL_NOVERS(get_wd_expire_time); -EXPORT_SYMBOL_NOVERS(reset_bypass_wd_timer); -EXPORT_SYMBOL_NOVERS(set_std_nic); -EXPORT_SYMBOL_NOVERS(get_std_nic); -EXPORT_SYMBOL_NOVERS(set_tx); -EXPORT_SYMBOL_NOVERS(get_tx); -EXPORT_SYMBOL_NOVERS(set_tap); -EXPORT_SYMBOL_NOVERS(get_tap); -EXPORT_SYMBOL_NOVERS(get_tap_change); -EXPORT_SYMBOL_NOVERS(set_dis_tap); -EXPORT_SYMBOL_NOVERS(get_dis_tap); -EXPORT_SYMBOL_NOVERS(set_tap_pwup); -EXPORT_SYMBOL_NOVERS(get_tap_pwup); -EXPORT_SYMBOL_NOVERS(set_bp_disc); -EXPORT_SYMBOL_NOVERS(get_bp_disc); -EXPORT_SYMBOL_NOVERS(get_bp_disc_change); -EXPORT_SYMBOL_NOVERS(set_bp_dis_disc); -EXPORT_SYMBOL_NOVERS(get_bp_dis_disc); -EXPORT_SYMBOL_NOVERS(set_bp_disc_pwup); -EXPORT_SYMBOL_NOVERS(get_bp_disc_pwup); -EXPORT_SYMBOL_NOVERS(set_wd_exp_mode); -EXPORT_SYMBOL_NOVERS(get_wd_exp_mode); -EXPORT_SYMBOL_NOVERS(set_wd_autoreset); -EXPORT_SYMBOL_NOVERS(get_wd_autoreset); -EXPORT_SYMBOL_NOVERS(set_tpl); -EXPORT_SYMBOL_NOVERS(get_tpl); -EXPORT_SYMBOL_NOVERS(set_bp_hw_reset); -EXPORT_SYMBOL_NOVERS(get_bp_hw_reset); -EXPORT_SYMBOL_NOVERS(get_bypass_info); +static void __exit cleanup_lib_module(void) +{ +} module_init(init_lib_module); module_exit(cleanup_lib_module); diff --git a/drivers/staging/silicom/bypasslib/libbp_sd.h b/drivers/staging/silicom/bypasslib/libbp_sd.h index 3b4f8364ed1..cac4b0b2ed7 100644 --- a/drivers/staging/silicom/bypasslib/libbp_sd.h +++ b/drivers/staging/silicom/bypasslib/libbp_sd.h @@ -18,7 +18,7 @@ * @if_index: network device index * * Output: - * 1 - if device is bypass controlling device, + * 1 - if device is bypass controlling device, * 0 - if device is bypass slave device * -1 - device not support Bypass **/ @@ -30,7 +30,7 @@ int is_bypass_sd(int if_index); * * Output: * network device index of the slave device - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int get_bypass_slave_sd(int if_index); @@ -39,55 +39,72 @@ int get_bypass_slave_sd(int if_index); * @if_index: network device index * * Output: - * flags word on success;flag word is a 32-bit mask word with each bit defines different - * capability as described bellow. + * flags word on success;flag word is a 32-bit mask word with each bit defines + * different capability as described bellow. * Value of 1 for supporting this feature. 0 for not supporting this feature. - * -1 - on failure (if the device is not capable of the operation or not a Bypass device) - * Bit feature description - * - * 0 BP_CAP The interface is Bypass capable in general - * - * 1 BP_STATUS_CAP The interface can report of the current Bypass mode - * - * 2 BP_STATUS_CHANGE_CAP The interface can report on a change to bypass mode from - * the last time the mode was defined - * - * 3 SW_CTL_CAP The interface is Software controlled capable for bypass/non bypass modes. - * - * 4 BP_DIS_CAP The interface is capable of disabling the Bypass mode at all times. - * This mode will retain its mode even during power loss and also after - * power recovery. This will overcome on any bypass operation due to - * watchdog timeout or set bypass command. - * - * 5 BP_DIS_STATUS_CAP The interface can report of the current DIS_BP_CAP - * - * 6 STD_NIC_CAP The interface is capable to be configured to operate as standard, non Bypass, - * NIC interface (have direct connection to interfaces at all power modes) - * - * 7 BP_PWOFF_NO_CAP The interface can be in Bypass mode at power off state - * - * 8 BP_PWOFF_OFF_CAP The interface can disconnect the Bypass mode at power off state without - * effecting all the other states of operation - * - * 9 BP_PWOFF_CTL_CAP The behavior of the Bypass mode at Power-off state can be controlled by - * software without effecting any other state - * - *10 BP_PWUP_ON_CAP The interface can be in Bypass mode when power is turned on - * (until the system take control of the bypass functionality) - * - *11 BP_PWUP_OFF_CAP The interface can disconnect from Bypass mode when power is turned on - * (until the system take control of the bypass functionality) - * - *12 BP_PWUP_CTL_CAP The behavior of the Bypass mode at Power-up can be controlled by software - * - *13 WD_CTL_CAP The interface has watchdog capabilities to turn to Bypass mode when not reset - * for defined period of time. - * - *14 WD_STATUS_CAP The interface can report on the watchdog status (Active/inactive) - * - *15 WD_TIMEOUT_CAP The interface can report the time left till watchdog triggers to Bypass mode. - * - *16-31 RESERVED + * -1 - on failure (if the device is not capable of the operation or not a + * Bypass device) + * Bit feature description + * + * 0 BP_CAP The interface is Bypass capable in general + * + * 1 BP_STATUS_CAP The interface can report of the current Bypass + * mode + * + * 2 BP_STATUS_CHANGE_CAP The interface can report on a change to bypass + * mode from the last time the mode was defined + * + * 3 SW_CTL_CAP The interface is Software controlled capable for + * bypass/non bypass modes. + * + * 4 BP_DIS_CAP The interface is capable of disabling the Bypass + * mode at all times. This mode will retain its + * mode even during power loss and also after power + * recovery. This will overcome on any bypass + * operation due to watchdog timeout or set bypass + * command. + * + * 5 BP_DIS_STATUS_CAP The interface can report of the current + * DIS_BP_CAP + * + * 6 STD_NIC_CAP The interface is capable to be configured to + * operate as standard, non Bypass, NIC interface + * (have direct connection to interfaces at all + * power modes) + * + * 7 BP_PWOFF_NO_CAP The interface can be in Bypass mode at power off + * state + * + * 8 BP_PWOFF_OFF_CAP The interface can disconnect the Bypass mode at + * power off state without effecting all the other + * states of operation + * + * 9 BP_PWOFF_CTL_CAP The behavior of the Bypass mode at Power-off + * state can be controlled by software without + * effecting any other state + * + *10 BP_PWUP_ON_CAP The interface can be in Bypass mode when power + * is turned on (until the system take control of + * the bypass functionality) + * + *11 BP_PWUP_OFF_CAP The interface can disconnect from Bypass mode + * when power is turned on (until the system take + * control of the bypass functionality) + * + *12 BP_PWUP_CTL_CAP The behavior of the Bypass mode at Power-up can + * be controlled by software + * + *13 WD_CTL_CAP The interface has watchdog capabilities to turn + * to Bypass mode when not reset for defined period + * of time. + * + *14 WD_STATUS_CAP The interface can report on the watchdog status + * (Active/inactive) + * + *15 WD_TIMEOUT_CAP The interface can report the time left till + * watchdog triggers to Bypass mode. + * + *16-31 RESERVED * * **/ int get_bypass_caps_sd(int if_index); @@ -97,34 +114,35 @@ int get_bypass_caps_sd(int if_index); * @if_index: network device index * * Output: - * - * Set of numbers defining the various parameters of the watchdog capable + * + * Set of numbers defining the various parameters of the watchdog capable * to be set to as described bellow. * -1 - on failure (device not support Bypass or it's a slave device) - * + * * Bit feature description - * + * * 0-3 WD_MIN_TIME The interface WD minimal time period in 100mS units - * - * 4 WD_STEP_TIME The steps of the WD timer in + * + * 4 WD_STEP_TIME The steps of the WD timer in * 0 - for linear steps (WD_MIN_TIME * X) - * 1 - for multiply by 2 from previous step (WD_MIN_TIME * 2^X) - * - * 5-8 WD_STEP_COUNT Number of steps the WD timer supports in 2^X + * 1 - for multiply by 2 from previous step + * (WD_MIN_TIME * 2^X) + * + * 5-8 WD_STEP_COUNT Number of steps the WD timer supports in 2^X * (X bit available for defining the value) - * - * - * + * + * + * **/ int get_wd_set_caps_sd(int if_index); /** * set_bypass - set Bypass state * @if_index: network device index of the controlling device - * @bypass_mode: bypass mode (1=on, 0=off) + * @bypass_mode: bypass mode (1=on, 0=off) * Output: * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int set_bypass_sd(int if_index, int bypass_mode); @@ -133,7 +151,7 @@ int set_bypass_sd(int if_index, int bypass_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int get_bypass_sd(int if_index); @@ -142,7 +160,7 @@ int get_bypass_sd(int if_index); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int get_bypass_change_sd(int if_index); @@ -152,8 +170,8 @@ int get_bypass_change_sd(int if_index); * @dis_bypass: disable bypass(1=dis, 0=en) * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int set_dis_bypass_sd(int if_index, int dis_bypass); @@ -162,8 +180,8 @@ int set_dis_bypass_sd(int if_index, int dis_bypass); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (normal Bypass mode/ Disable bypass) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int get_dis_bypass_sd(int if_index); @@ -172,9 +190,9 @@ int get_dis_bypass_sd(int if_index); * @if_index: network device index of the controlling device * @bypass_mode: bypass mode setting at power off state (1=BP en, 0=BP Dis) * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * 0 - on success + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int set_bypass_pwoff_sd(int if_index, int bypass_mode); @@ -183,8 +201,8 @@ int set_bypass_pwoff_sd(int if_index, int bypass_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (Disable bypass at power off state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int get_bypass_pwoff_sd(int if_index); @@ -193,9 +211,9 @@ int get_bypass_pwoff_sd(int if_index); * @if_index: network device index of the controlling device * @bypass_mode: bypass mode setting at power up state (1=BP en, 0=BP Dis) * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * 0 - on success + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int set_bypass_pwup_sd(int if_index, int bypass_mode); @@ -204,59 +222,60 @@ int set_bypass_pwup_sd(int if_index, int bypass_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (Disable bypass at power up state / normal Bypass mode) - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int get_bypass_pwup_sd(int if_index); /** * set_bypass_wd - Set watchdog state * @if_index: network device index of the controlling device - * @ms_timeout: requested timeout (in ms units), 0 for disabling the watchdog timer - * @ms_timeout_set(output): requested timeout (in ms units), - * that the adapter supports and will be used by the watchdog + * @ms_timeout: requested timeout (in ms units), 0 for disabling the watchdog + * timer + * @ms_timeout_set(output): requested timeout (in ms units), that the adapter + * supports and will be used by the watchdog * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * 0 - on success + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int set_bypass_wd_sd(int if_index, int ms_timeout, int *ms_timeout_set); /** * get_bypass_wd - Get watchdog state * @if_index: network device index of the controlling device - * @ms_timeout (output): WDT timeout (in ms units), + * @ms_timeout (output): WDT timeout (in ms units), * -1 for unknown wdt status * 0 if WDT is disabled * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int get_bypass_wd_sd(int if_index, int *ms_timeout_set); /** * get_wd_expire_time - Get watchdog expire * @if_index: network device index of the controlling device - * @ms_time_left (output): time left till watchdog time expire, + * @ms_time_left (output): time left till watchdog time expire, * -1 if WDT has expired * 0 if WDT is disabled * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device or unknown wdt status) **/ int get_wd_expire_time_sd(int if_index, int *ms_time_left); /** * reset_bypass_wd_timer - Reset watchdog timer * @if_index: network device index of the controlling device - * + * * Output: * 1 - on success * 0 - watchdog is not configured - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device or unknown wdt status) **/ int reset_bypass_wd_timer_sd(int if_index); @@ -264,53 +283,54 @@ int reset_bypass_wd_timer_sd(int if_index); * set_std_nic - Standard NIC mode of operation * @if_index: network device index of the controlling device * @nic_mode: 0/1 (Default Bypass mode / Standard NIC mode) - * + * * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int set_std_nic_sd(int if_index, int nic_mode); /** * get_std_nic - Get Standard NIC mode setting * @if_index: network device index of the controlling device - * + * * Output: * 0/1 (Default Bypass mode / Standard NIC mode) on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass or it's a slave device) **/ int get_std_nic_sd(int if_index); /** - * set_tx - set transmitter enable/disable + * set_tx - set transmitter enable/disable * @if_index: network device index of the controlling device * @tx_state: 0/1 (Transmit Disable / Transmit Enable) - * + * * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ) + * -1 - on failure (device is not capable of the operation ) **/ int set_tx_sd(int if_index, int tx_state); /** * get_std_nic - get transmitter state (disable / enable) * @if_index: network device index of the controlling device - * + * * Output: * 0/1 (ransmit Disable / Transmit Enable) on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass) + * -1 - on failure (device is not capable of the operation or device not support + * Bypass) **/ int get_tx_sd(int if_index); /** * set_tap - set TAP state * @if_index: network device index of the controlling device - * @tap_mode: 1 tap mode , 0 normal nic mode + * @tap_mode: 1 tap mode , 0 normal nic mode * Output: * 0 - on success - * -1 - on failure (device not support TAP or it's a slave device) + * -1 - on failure (device not support TAP or it's a slave device) **/ int set_tap_sd(int if_index, int tap_mode); @@ -319,7 +339,7 @@ int set_tap_sd(int if_index, int tap_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) + * -1 - on failure (device not support TAP or it's a slave device) **/ int get_tap_sd(int if_index); @@ -328,7 +348,7 @@ int get_tap_sd(int if_index); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support TAP or it's a slave device) + * -1 - on failure (device not support TAP or it's a slave device) **/ int get_tap_change_sd(int if_index); @@ -338,8 +358,8 @@ int get_tap_change_sd(int if_index); * @dis_tap: disable tap(1=dis, 0=en) * Output: * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * TAP or it's a slave device) **/ int set_dis_tap_sd(int if_index, int dis_tap); @@ -348,8 +368,8 @@ int set_dis_tap_sd(int if_index, int dis_tap); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (normal TAP mode/ Disable TAP) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not support + * TAP or it's a slave device) **/ int get_dis_tap_sd(int if_index); @@ -358,9 +378,9 @@ int get_dis_tap_sd(int if_index); * @if_index: network device index of the controlling device * @bypass_mode: tap mode setting at power up state (1=TAP en, 0=TAP Dis) * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) + * 0 - on success + * -1 - on failure (device is not capable of the operation or device not + * support TAP or it's a slave device) **/ int set_tap_pwup_sd(int if_index, int tap_mode); @@ -369,18 +389,18 @@ int set_tap_pwup_sd(int if_index, int tap_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (Disable TAP at power up state / normal TAP mode) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not + * support TAP or it's a slave device) **/ int get_tap_pwup_sd(int if_index); /** * set_bp_disc - set Disconnect state * @if_index: network device index of the controlling device - * @tap_mode: 1 disc mode , 0 non-disc mode + * @tap_mode: 1 disc mode , 0 non-disc mode * Output: * 0 - on success - * -1 - on failure (device not support Disconnect or it's a slave device) + * -1 - on failure (device not support Disconnect or it's a slave device) **/ int set_bp_disc_sd(int if_index, int disc_mode); @@ -389,7 +409,7 @@ int set_bp_disc_sd(int if_index, int disc_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support Disconnect or it's a slave device) + * -1 - on failure (device not support Disconnect or it's a slave device) **/ int get_bp_disc_sd(int if_index); @@ -398,7 +418,7 @@ int get_bp_disc_sd(int if_index); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support Disconnect or it's a slave device) + * -1 - on failure (device not support Disconnect or it's a slave device) **/ int get_bp_disc_change_sd(int if_index); @@ -408,8 +428,8 @@ int get_bp_disc_change_sd(int if_index); * @dis_tap: disable tap(1=dis, 0=en) * Output: * 0 - on success - * -1 - on failure (device is not capable ofthe operation ordevice not support Disconnect - * or it's a slave device) + * -1 - on failure (device is not capable ofthe operation or device not + * support Disconnect or it's a slave device) **/ int set_bp_dis_disc_sd(int if_index, int dis_disc); @@ -418,8 +438,8 @@ int set_bp_dis_disc_sd(int if_index, int dis_disc); * @if_index: network device index of the controlling device * Output: * 0/1 - on success (normal Disconnect mode/ Disable Disconnect) - * -1 - on failure (device is not capable of the operation ordevice not support Disconnect - * or it's a slave device) + * -1 - on failure (device is not capable of the operation or device not + * support Disconnect or it's a slave device) **/ int get_bp_dis_disc_sd(int if_index); @@ -428,9 +448,9 @@ int get_bp_dis_disc_sd(int if_index); * @if_index: network device index of the controlling device * @disc_mode: tap mode setting at power up state (1=Disc en, 0=Disc Dis) * Output: - * 0 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Disconnect - * or it's a slave device) + * 0 - on success + * -1 - on failure (device is not capable of the operation or device not + * support Disconnect or it's a slave device) **/ int set_bp_disc_pwup_sd(int if_index, int disc_mode); @@ -438,19 +458,20 @@ int set_bp_disc_pwup_sd(int if_index, int disc_mode); * get_bp_disc_pwup - Get Disconnect mode state at power-up state * @if_index: network device index of the controlling device * Output: - * 0/1 - on success (Disable Disconnect at power up state / normal Disconnect mode) - * -1 - on failure (device is not capable of the operation ordevice not support TAP - * or it's a slave device) + * 0/1 - on success (Disable Disconnect at power up state / normal Disconnect + * mode) + * -1 - on failure (device is not capable of the operation or device not + * support TAP or it's a slave device) **/ int get_bp_disc_pwup_sd(int if_index); /** * set_wd_exp_mode - Set adapter state when WDT expired. * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) + * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) * Output: * 0 - on success - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int set_wd_exp_mode_sd(int if_index, int bypass_mode); @@ -459,39 +480,41 @@ int set_wd_exp_mode_sd(int if_index, int bypass_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - (bypass/tap) on success - * -1 - on failure (device not support Bypass or it's a slave device) + * -1 - on failure (device not support Bypass or it's a slave device) **/ int get_wd_exp_mode_sd(int if_index); /** * set_wd_autoreset - reset WDT periodically. * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) + * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) * Output: * 1 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) + * -1 - on failure (device is not capable of the operation or device not + * support Bypass or it's a slave device or unknown wdt + * status) **/ int set_wd_autoreset_sd(int if_index, int time); /** * set_wd_autoreset - reset WDT periodically. * @if_index: network device index of the controlling device - * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) + * @bypass_mode: adapter mode (1=tap mode, 0=bypass mode) * Output: * 1 - on success - * -1 - on failure (device is not capable of the operation ordevice not support Bypass - * or it's a slave device or unknown wdt status) + * -1 - on failure (device is not capable of the operation or device not + * support Bypass or it's a slave device or unknown wdt + * status) **/ int get_wd_autoreset_sd(int if_index); /** * set_tpl - set TPL state * @if_index: network device index of the controlling device - * @tpl_mode: 1 tpl mode , 0 normal nic mode + * @tpl_mode: 1 tpl mode , 0 normal nic mode * Output: * 0 - on success - * -1 - on failure (device not support TPL) + * -1 - on failure (device not support TPL) **/ int set_tpl_sd(int if_index, int tpl_mode); @@ -500,7 +523,7 @@ int set_tpl_sd(int if_index, int tpl_mode); * @if_index: network device index of the controlling device * Output: * 0/1 - (off/on) on success - * -1 - on failure (device not support TPL or it's a slave device) + * -1 - on failure (device not support TPL or it's a slave device) **/ int get_tpl_sd(int if_index); |
