提交 ad8c12ee 编写于 作者: K Kristina Martšenko 提交者: Greg Kroah-Hartman

staging: silicom: remove driver

The driver hasn't been cleaned up and it doesn't look like anyone is
working on it anymore (including the original author). So remove it.
If someone wants to work on cleaning the driver up and moving it out of
staging, this commit can be reverted.

In addition, since this removes the CONFIG_NET_VENDOR_SILICOM config
symbol, remove the symbol from all defconfig files that reference it.
Signed-off-by: NKristina Martšenko <kristina.martsenko@gmail.com>
Cc: Daniel Cotey <puff65537@bansheeslibrary.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 8fa6cfc7
......@@ -124,7 +124,6 @@ CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_STAGING=y
CONFIG_OCTEON_ETHERNET=y
# CONFIG_NET_VENDOR_SILICOM is not set
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
......
......@@ -241,7 +241,6 @@ CONFIG_UIO_AEC=m
CONFIG_UIO_SERCOS3=m
CONFIG_UIO_PCI_GENERIC=m
CONFIG_STAGING=y
# CONFIG_NET_VENDOR_SILICOM is not set
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_SECURITY=y
......
......@@ -192,7 +192,6 @@ CONFIG_RTC_DRV_DS3232=y
CONFIG_RTC_DRV_CMOS=y
CONFIG_UIO=y
CONFIG_STAGING=y
# CONFIG_NET_VENDOR_SILICOM is not set
CONFIG_CLK_PPC_CORENET=y
CONFIG_EXT2_FS=y
CONFIG_NTFS_FS=y
......
......@@ -96,8 +96,6 @@ source "drivers/staging/gdm72xx/Kconfig"
source "drivers/staging/gdm724x/Kconfig"
source "drivers/staging/silicom/Kconfig"
source "drivers/staging/imx-drm/Kconfig"
source "drivers/staging/fwserial/Kconfig"
......
......@@ -41,7 +41,6 @@ obj-$(CONFIG_STAGING_BOARD) += board/
obj-$(CONFIG_USB_WPAN_HCD) += ozwpan/
obj-$(CONFIG_WIMAX_GDM72XX) += gdm72xx/
obj-$(CONFIG_LTE_GDM724X) += gdm724x/
obj-$(CONFIG_NET_VENDOR_SILICOM) += silicom/
obj-$(CONFIG_DRM_IMX) += imx-drm/
obj-$(CONFIG_FIREWIRE_SERIAL) += fwserial/
obj-$(CONFIG_GOLDFISH) += goldfish/
......
#
# Silicom device configuration
#
config NET_VENDOR_SILICOM
bool "Silicom devices"
default y
depends on PCI && NETDEVICES
---help---
If you have a network card (Ethernet) belonging to this class,
say Y.
Note that the answer to this question does not directly affect
the kernel: saying N will just case the configurator to skip all
the questions regarding Silicom chipsets. If you say Y, you will be asked
for your specific chipset/driver in the following questions.
if NET_VENDOR_SILICOM
config SBYPASS
tristate "Silicom BypassCTL library support"
depends on PCI
depends on m
---help---
If you have a network (Ethernet) controller of this type, say Y
To compile this driver as a module, choose M here. The module
will be called bypass.
config BPCTL
tristate "Silicom BypassCTL net support"
depends on PCI
depends on m
select SBYPASS
select MII
---help---
If you have a network (Ethernet) controller of this type, say Y
or M and read the Ethernet-HOWTO, available from
<http://www.tldp.org/docs.html#howto>.
To compile this driver as a module, choose M here. The module
will be called bpctl_mod.
endif # NET_VENDOR_SILICOM
#
# Makefile for the Bypass network device drivers.
#
obj-$(CONFIG_BPCTL) += bpctl_mod.o
obj-$(CONFIG_SBYPASS) += bypasslib/
Theory of Operation:
The Silicom Bypass Network Interface Cards (NICs) are network cards with paired ports (2 or 4).
The pairs either act as a "wire" allowing the network packets to pass or insert the device in
between the two ports. When paired with the on-board hardware watchdog or other failsafe,
they provide high availability for the network in the face of software outages or maintenance.
The software requirements are for a kernel level driver that interfaces with the bypass and watchdog,
as well as for control software. User control can be either the provided standalone executable
(/bin/bpctl) or the API exposed by the Silicom library.
TODO:
- checkpatch.pl cleanups
- locking audit
- single module with all functionality
- userland
- fix monolithic build.
/******************************************************************************/
/* */
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 - 2004 Broadcom */
/* Corporation. */
/* 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. */
/* */
/* History: */
/* 02/25/00 Hav Khauv Initial version. */
/******************************************************************************/
#ifndef BITS_H
#define BITS_H
/******************************************************************************/
/* Bit Mask definitions */
/******************************************************************************/
#define BIT_NONE 0x00
#define BIT_0 0x01
#define BIT_1 0x02
#define BIT_2 0x04
#define BIT_3 0x08
#define BIT_4 0x10
#define BIT_5 0x20
#define BIT_6 0x40
#define BIT_7 0x80
#define BIT_8 0x0100
#define BIT_9 0x0200
#define BIT_10 0x0400
#define BIT_11 0x0800
#define BIT_12 0x1000
#define BIT_13 0x2000
#define BIT_14 0x4000
#define BIT_15 0x8000
#define BIT_16 0x010000
#define BIT_17 0x020000
#define BIT_18 0x040000
#define BIT_19 0x080000
#define BIT_20 0x100000
#define BIT_21 0x200000
#define BIT_22 0x400000
#define BIT_23 0x800000
#define BIT_24 0x01000000
#define BIT_25 0x02000000
#define BIT_26 0x04000000
#define BIT_27 0x08000000
#define BIT_28 0x10000000
#define BIT_29 0x20000000
#define BIT_30 0x40000000
#define BIT_31 0x80000000
#endif /* BITS_H */
/******************************************************************************/
/* */
/* Silicom Bypass Control Utility, Copyright (c) 2005-2007 Silicom */
/* 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. */
/* */
/* */
/******************************************************************************/
#ifndef BP_IOCTL_H
#define BP_IOCTL_H
#define BP_CAP 0x01 /* BIT_0 */
#define BP_STATUS_CAP 0x02
#define BP_STATUS_CHANGE_CAP 0x04
#define SW_CTL_CAP 0x08
#define BP_DIS_CAP 0x10
#define BP_DIS_STATUS_CAP 0x20
#define STD_NIC_CAP 0x40
#define BP_PWOFF_ON_CAP 0x80
#define BP_PWOFF_OFF_CAP 0x0100
#define BP_PWOFF_CTL_CAP 0x0200
#define BP_PWUP_ON_CAP 0x0400
#define BP_PWUP_OFF_CAP 0x0800
#define BP_PWUP_CTL_CAP 0x1000
#define WD_CTL_CAP 0x2000
#define WD_STATUS_CAP 0x4000
#define WD_TIMEOUT_CAP 0x8000
#define TX_CTL_CAP 0x10000
#define TX_STATUS_CAP 0x20000
#define TAP_CAP 0x40000
#define TAP_STATUS_CAP 0x80000
#define TAP_STATUS_CHANGE_CAP 0x100000
#define TAP_DIS_CAP 0x200000
#define TAP_DIS_STATUS_CAP 0x400000
#define TAP_PWUP_ON_CAP 0x800000
#define TAP_PWUP_OFF_CAP 0x1000000
#define TAP_PWUP_CTL_CAP 0x2000000
#define NIC_CAP_NEG 0x4000000
#define TPL_CAP 0x8000000
#define DISC_CAP 0x10000000
#define DISC_DIS_CAP 0x20000000
#define DISC_PWUP_CTL_CAP 0x40000000
#define TPL2_CAP_EX 0x01
#define DISC_PORT_CAP_EX 0x02
#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 WD_MIN_TIME_GET(desc) (desc & 0xf)
#define WD_STEP_COUNT_GET(desc) ((desc>>5) & 0xf)
typedef enum {
IF_SCAN,
GET_DEV_NUM,
IS_BYPASS,
GET_BYPASS_SLAVE,
GET_BYPASS_CAPS,
GET_WD_SET_CAPS,
SET_BYPASS,
GET_BYPASS,
GET_BYPASS_CHANGE,
SET_BYPASS_WD,
GET_BYPASS_WD,
GET_WD_EXPIRE_TIME,
RESET_BYPASS_WD_TIMER,
SET_DIS_BYPASS,
GET_DIS_BYPASS,
SET_BYPASS_PWOFF,
GET_BYPASS_PWOFF,
SET_BYPASS_PWUP,
GET_BYPASS_PWUP,
SET_STD_NIC,
GET_STD_NIC,
SET_TX,
GET_TX,
SET_TAP,
GET_TAP,
GET_TAP_CHANGE,
SET_DIS_TAP,
GET_DIS_TAP,
SET_TAP_PWUP,
GET_TAP_PWUP,
SET_WD_EXP_MODE,
GET_WD_EXP_MODE,
SET_WD_AUTORESET,
GET_WD_AUTORESET,
SET_TPL,
GET_TPL,
SET_DISC,
GET_DISC,
GET_DISC_CHANGE,
SET_DIS_DISC,
GET_DIS_DISC,
SET_DISC_PWUP,
GET_DISC_PWUP,
GET_BYPASS_INFO = 100,
GET_BP_WAIT_AT_PWUP,
SET_BP_WAIT_AT_PWUP,
GET_BP_HW_RESET,
SET_BP_HW_RESET,
SET_DISC_PORT,
GET_DISC_PORT,
SET_DISC_PORT_PWUP,
GET_DISC_PORT_PWUP,
SET_BP_FORCE_LINK,
GET_BP_FORCE_LINK,
#ifdef BP_SELF_TEST
SET_BP_SELF_TEST = 200,
GET_BP_SELF_TEST,
#endif
} CMND_TYPE_SD;
/*
* The major device number. We can't rely on dynamic
* registration any more, because ioctls need to know
* it.
*/
#define MAGIC_NUM 'J'
/* for passing single values */
struct bpctl_cmd {
int status;
int data[8];
int in_param[8];
int out_param[8];
};
#define IOCTL_TX_MSG(cmd) _IOWR(MAGIC_NUM, cmd, struct bpctl_cmd)
#define DEVICE_NAME "bpctl"
#endif
此差异已折叠。
此差异已折叠。
/******************************************************************************/
/* */
/* Bypass Control utility, Copyright (c) 2005 Silicom */
/* 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. */
/* */
/* */
/******************************************************************************/
#ifndef BYPASS_H
#define BYPASS_H
/* Bypass related */
#define SYNC_CMD_VAL 2 /* 10b */
#define SYNC_CMD_LEN 2
#define WR_CMD_VAL 2 /* 10b */
#define WR_CMD_LEN 2
#define RD_CMD_VAL 1 /* 10b */
#define RD_CMD_LEN 2
#define ADDR_CMD_LEN 4
#define WR_DATA_LEN 8
#define RD_DATA_LEN 8
#define PIC_SIGN_REG_ADDR 0x7
#define PIC_SIGN_VALUE 0xcd
#define STATUS_REG_ADDR 0
#define WDT_EN_MASK 0x01 /* BIT_0 */
#define CMND_EN_MASK 0x02 /* BIT_1 */
#define DIS_BYPASS_CAP_MASK 0x04 /* BIT_2 Bypass Cap is disable*/
#define DFLT_PWRON_MASK 0x08 /* BIT_3 */
#define BYPASS_OFF_MASK 0x10 /* BIT_4 */
#define BYPASS_FLAG_MASK 0x20 /* BIT_5 */
#define STD_NIC_MASK (DIS_BYPASS_CAP_MASK | BYPASS_OFF_MASK | DFLT_PWRON_MASK)
#define WD_EXP_FLAG_MASK 0x40 /* BIT_6 */
#define DFLT_PWROFF_MASK 0x80 /* BIT_7 */
#define STD_NIC_PWOFF_MASK (DIS_BYPASS_CAP_MASK | BYPASS_OFF_MASK | DFLT_PWRON_MASK | DFLT_PWROFF_MASK)
#define PRODUCT_CAP_REG_ADDR 0x5
#define BYPASS_SUPPORT_MASK 0x01 /* BIT_0 */
#define TAP_SUPPORT_MASK 0x02 /* BIT_1 */
#define NORMAL_UNSUPPORT_MASK 0x04 /* BIT_2 */
#define DISC_SUPPORT_MASK 0x08 /* BIT_3 */
#define TPL2_SUPPORT_MASK 0x10 /* BIT_4 */
#define DISC_PORT_SUPPORT_MASK 0x20 /* BIT_5 */
#define STATUS_TAP_REG_ADDR 0x6
#define WDTE_TAP_BPN_MASK 0x01 /* BIT_1 1 when wdt expired -> TAP, 0 - Bypass */
#define DIS_TAP_CAP_MASK 0x04 /* BIT_2 TAP Cap is disable*/
#define DFLT_PWRON_TAP_MASK 0x08 /* BIT_3 */
#define TAP_OFF_MASK 0x10 /* BIT_4 */
#define TAP_FLAG_MASK 0x20 /* BIT_5 */
#define TX_DISA_MASK 0x40
#define TX_DISB_MASK 0x80
#define STD_NIC_TAP_MASK (DIS_TAP_CAP_MASK | TAP_OFF_MASK | DFLT_PWRON_TAP_MASK)
#define STATUS_DISC_REG_ADDR 13
#define WDTE_DISC_BPN_MASK 0x01 /* BIT_0 1 when wdt expired -> TAP, 0 - Bypass */
#define STD_NIC_ON_MASK 0x02 /* BIT_1 */
#define DIS_DISC_CAP_MASK 0x04 /* BIT_2 TAP Cap is disable*/
#define DFLT_PWRON_DISC_MASK 0x08 /* BIT_3 */
#define DISC_OFF_MASK 0x10 /* BIT_4 */
#define DISC_FLAG_MASK 0x20 /* BIT_5 */
#define TPL2_FLAG_MASK 0x40 /* BIT_6 */
#define STD_NIC_DISC_MASK DIS_DISC_CAP_MASK
#define CONT_CONFIG_REG_ADDR 12
#define EN_HW_RESET_MASK 0x2 /* BIT_1 */
#define WAIT_AT_PWUP_MASK 0x1 /* BIT_0 */
#define VER_REG_ADDR 0x1
#define BP_FW_VER_A0 0xa0
#define BP_FW_VER_A1 0xa1
#define INT_VER_MASK 0xf0
#define EXT_VER_MASK 0xf
/* */
#define PXG2BPI_VER 0x0
#define PXG2TBPI_VER 0x1
#define PXE2TBPI_VER 0x2
#define PXG4BPFI_VER 0x4
#define BP_FW_EXT_VER7 0x6
#define BP_FW_EXT_VER8 0x8
#define BP_FW_EXT_VER9 0x9
#define OLD_IF_VER -1
#define CMND_REG_ADDR 10 /* 1010b */
#define WDT_REG_ADDR 4
#define TMRL_REG_ADDR 2
#define TMRH_REG_ADDR 3
/* NEW_FW */
#define WDT_INTERVAL 1 /* 5 //8 */
#define WDT_CMND_INTERVAL 200 /* 50 */
#define CMND_INTERVAL 200 /* 100 usec */
#define PULSE_TIME 100
/* OLD_FW */
#define INIT_CMND_INTERVAL 40
#define PULSE_INTERVAL 5
#define WDT_TIME_CNT 3
/* Intel Commands */
#define CMND_OFF_INT 0xf
#define PWROFF_BYPASS_ON_INT 0x5
#define BYPASS_ON_INT 0x6
#define DIS_BYPASS_CAP_INT 0x4
#define RESET_WDT_INT 0x1
/* Intel timing */
#define BYPASS_DELAY_INT 4 /* msec */
#define CMND_INTERVAL_INT 2 /* msec */
/* Silicom Commands */
#define CMND_ON 0x4
#define CMND_OFF 0x2
#define BYPASS_ON 0xa
#define BYPASS_OFF 0x8
#define PORT_LINK_EN 0xe
#define PORT_LINK_DIS 0xc
#define WDT_ON 0x10 /* 0x1f (11111) - max */
#define TIMEOUT_UNIT 100
#define TIMEOUT_MAX_STEP 15
#define WDT_TIMEOUT_MIN 100 /* msec */
#define WDT_TIMEOUT_MAX 3276800 /* msec */
#define WDT_AUTO_MIN_INT 500
#define WDT_TIMEOUT_DEF WDT_TIMEOUT_MIN
#define WDT_OFF 0x6
#define WDT_RELOAD 0x9
#define RESET_CONT 0x20
#define DIS_BYPASS_CAP 0x22
#define EN_BYPASS_CAP 0x24
#define BYPASS_STATE_PWRON 0x26
#define NORMAL_STATE_PWRON 0x28
#define BYPASS_STATE_PWROFF 0x27
#define NORMAL_STATE_PWROFF 0x29
#define TAP_ON 0xb
#define TAP_OFF 0x9
#define TAP_STATE_PWRON 0x2a
#define DIS_TAP_CAP 0x2c
#define EN_TAP_CAP 0x2e
#define STD_NIC_OFF 0x86
#define STD_NIC_ON 0x84
#define DISC_ON 0x85
#define DISC_OFF 0x8a
#define DISC_STATE_PWRON 0x87
#define DIS_DISC_CAP 0x88
#define EN_DISC_CAP 0x89
#define TPL2_ON 0x8c
#define TPL2_OFF 0x8b
#define BP_WAIT_AT_PWUP_EN 0x80
#define BP_WAIT_AT_PWUP_DIS 0x81
#define BP_HW_RESET_EN 0x82
#define BP_HW_RESET_DIS 0x83
#define TX_DISA 0x8d
#define TX_DISB 0x8e
#define TX_ENA 0xA0
#define TX_ENB 0xA1
#define TX_DISA_PWRUP 0xA2
#define TX_DISB_PWRUP 0xA3
#define TX_ENA_PWRUP 0xA4
#define TX_ENB_PWRUP 0xA5
#define BYPASS_CAP_DELAY 21 /* msec */
#define DFLT_PWRON_DELAY 10 /* msec */
#define LATCH_DELAY 13 /* msec */
#define EEPROM_WR_DELAY 8 /* msec */
#define BP_LINK_MON_DELAY 4 /* sec */
#define BP_FW_EXT_VER0 0xa0
#define BP_FW_EXT_VER1 0xa1
#define BP_FW_EXT_VER2 0xb1
#define BP_OK 0
#define BP_NOT_CAP -1
#define WDT_STATUS_EXP -2
#define WDT_STATUS_UNKNOWN -1
#define WDT_STATUS_EN 1
#define WDT_STATUS_DIS 0
#ifdef BP_SELF_TEST
#define ETH_P_BPTEST 0xabba
#define BPTEST_DATA_LEN 60
#endif
#endif /* BYPASS_H */
#
# Makefile for the Bypass network device drivers.
#
obj-$(CONFIG_SBYPASS) += bypass.o
/******************************************************************************/
/* */
/* bypass library, Copyright (c) 2004-2006 Silicom, Ltd */
/* Corporation. */
/* */
/* 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. */
/* */
/* */
/* */
/******************************************************************************/
#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 WD_MIN_TIME_MASK(val) (val & 0xf)
#define WD_STEP_COUNT_MASK(val) ((val & 0xf) << 5)
#define WDT_STEP_TIME 0x10 /* BIT_4 */
#define WD_MIN_TIME_GET(desc) (desc & 0xf)
#define WD_STEP_COUNT_GET(desc) ((desc>>5) & 0xf)
enum {
IS_BYPASS = 1,
GET_BYPASS_SLAVE,
GET_BYPASS_CAPS,
GET_WD_SET_CAPS,
SET_BYPASS,
GET_BYPASS,
GET_BYPASS_CHANGE,
SET_BYPASS_WD,
GET_BYPASS_WD,
GET_WD_EXPIRE_TIME,
RESET_BYPASS_WD_TIMER,
SET_DIS_BYPASS,
GET_DIS_BYPASS,
SET_BYPASS_PWOFF,
GET_BYPASS_PWOFF,
SET_BYPASS_PWUP,
GET_BYPASS_PWUP,
SET_STD_NIC,
GET_STD_NIC,
SET_TX,
GET_TX,
SET_TAP,
GET_TAP,
GET_TAP_CHANGE,
SET_DIS_TAP,
GET_DIS_TAP,
SET_TAP_PWUP,
GET_TAP_PWUP,
SET_WD_EXP_MODE,
GET_WD_EXP_MODE,
SET_WD_AUTORESET,
GET_WD_AUTORESET,
SET_TPL,
GET_TPL,
SET_DISC,
GET_DISC,
GET_DISC_CHANGE,
SET_DIS_DISC,
GET_DIS_DISC,
SET_DISC_PWUP,
GET_DISC_PWUP,
GET_BYPASS_INFO = 100,
GET_BP_WAIT_AT_PWUP,
SET_BP_WAIT_AT_PWUP,
GET_BP_HW_RESET,
SET_BP_HW_RESET,
};
enum {
IF_SCAN_SD,
GET_DEV_NUM_SD,
IS_BYPASS_SD,
GET_BYPASS_SLAVE_SD,
GET_BYPASS_CAPS_SD,
GET_WD_SET_CAPS_SD,
SET_BYPASS_SD,
GET_BYPASS_SD,
GET_BYPASS_CHANGE_SD,
SET_BYPASS_WD_SD,
GET_BYPASS_WD_SD,
GET_WD_EXPIRE_TIME_SD,
RESET_BYPASS_WD_TIMER_SD,
SET_DIS_BYPASS_SD,
GET_DIS_BYPASS_SD,
SET_BYPASS_PWOFF_SD,
GET_BYPASS_PWOFF_SD,
SET_BYPASS_PWUP_SD,
GET_BYPASS_PWUP_SD,
SET_STD_NIC_SD,
GET_STD_NIC_SD,
SET_TX_SD,
GET_TX_SD,
SET_TAP_SD,
GET_TAP_SD,
GET_TAP_CHANGE_SD,
SET_DIS_TAP_SD,
GET_DIS_TAP_SD,
SET_TAP_PWUP_SD,
GET_TAP_PWUP_SD,
SET_WD_EXP_MODE_SD,
GET_WD_EXP_MODE_SD,
SET_WD_AUTORESET_SD,
GET_WD_AUTORESET_SD,
SET_TPL_SD,
GET_TPL_SD,
SET_DISC_SD,
GET_DISC_SD,
GET_DISC_CHANGE_SD,
SET_DIS_DISC_SD,
GET_DIS_DISC_SD,
SET_DISC_PWUP_SD,
GET_DISC_PWUP_SD,
GET_BYPASS_INFO_SD = 100,
GET_BP_WAIT_AT_PWUP_SD,
SET_BP_WAIT_AT_PWUP_SD,
GET_BP_HW_RESET_SD,
SET_BP_HW_RESET_SD,
};
#define SIOCGIFBYPASS (SIOCDEVPRIVATE+10)
struct bp_info {
char prod_name[14];
unsigned char fw_ver;
};
/* for passing single values */
struct if_bypass {
char if_name[IFNAMSIZ];
int cmd;
int data;
};
struct if_bypass_info {
char if_name[IFNAMSIZ];
char cmd;
struct bp_info bp_info;
};
/*
* The major device number. We can't rely on dynamic
* registration any more, because ioctls need to know
* it.
*/
#define MAGIC_NUM 'J'
/* for passing single values */
struct bpctl_cmd {
int status;
int data[8];
int in_param[8];
int out_param[8];
};
#define IOCTL_TX_MSG(cmd) _IOWR(MAGIC_NUM, cmd, struct bpctl_cmd)
#define DEVICE_NAME "bpctl"
#endif
/******************************************************************************/
/* */
/* bypass library, Copyright (c) 2004 Silicom, Ltd */
/* */
/* 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. */
/* */
/* */
/* bplib.h */
/* */
/******************************************************************************/
#ifndef BYPASS_H
#define BYPASS_H
#include "bp_ioctl.h"
#include "libbp_sd.h"
#define IF_NAME "eth"
#define SILICOM_VID 0x1374
#define SILICOM_BP_PID_MIN 0x24
#define SILICOM_BP_PID_MAX 0x5f
#define INTEL_PEG4BPII_PID 0x10a0
#define INTEL_PEG4BPFII_PID 0x10a1
#define PEGII_IF_SERIES(vid, pid) \
((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 };
#endif
#endif
/******************************************************************************/
/* */
/* bypass library, Copyright (c) 2004-2007 Silicom, Ltd */
/* */
/* 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. */
/* */
/* */
/* bypass.c */
/* */
/******************************************************************************/
#if defined(CONFIG_SMP) && !defined(__SMP__)
#define __SMP__
#endif
#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/unistd.h>
#include <linux/sched.h>
#include <linux/wait.h>
#include <linux/netdevice.h> /* struct device, and other headers */
#include <linux/kernel_stat.h>
#include <linux/pci.h>
#include <linux/rtnetlink.h>
#include <linux/ethtool.h>
#include <net/net_namespace.h>
#include "bplibk.h"
#define MOD_NAME "bypass"
#define VERSION "\n"MOD_NAME" version 9.0.4\n"
MODULE_AUTHOR("www.silicom.co.il");
MODULE_LICENSE("GPL");
static int do_cmd(struct net_device *dev, struct ifreq *ifr, int cmd, int *data)
{
int ret = -1;
struct if_bypass *bypass_cb;
bypass_cb = (struct if_bypass *)ifr;
bypass_cb->cmd = cmd;
bypass_cb->data = *data;
if (dev->netdev_ops && dev->netdev_ops->ndo_do_ioctl) {
ret = dev->netdev_ops->ndo_do_ioctl(dev, ifr, SIOCGIFBYPASS);
*data = bypass_cb->data;
}
return ret;
}
static int doit(int cmd, int if_index, int *data)
{
struct ifreq ifr;
int ret = -1;
struct net_device *dev;
struct net_device *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;
}
}
return ret;
}
#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); \
})
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;
}
static int is_bypass_dev(int if_index)
{
struct pci_dev *pdev = NULL;
struct net_device *dev = NULL;
struct ifreq ifr;
int ret = 0;
int data = 0;
while ((pdev = pci_get_class(PCI_CLASS_NETWORK_ETHERNET << 8, pdev))) {
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;
}
}
#endif
return -1;
}
}
send_cmd:
ret = do_cmd(dev, &ifr, IS_BYPASS, &data);
return ret < 0 ? -1 : ret;
}
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);
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);
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);
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);
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);
static int get_bypass(int if_index)
{
DO_BPLIB_GET_ARG_FN(get_bypass, GET_BYPASS, if_index);
}
EXPORT_SYMBOL(get_bypass);
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);
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);
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);
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);
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);
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);
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);
static int set_bypass_wd(int if_index, int ms_timeout, int *ms_timeout_set)
{
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 {
ret = doit(SET_BYPASS_WD, if_index, &data);
if (ret > 0) {
*ms_timeout_set = ret;
ret = 0;
}
}
return ret;
}
EXPORT_SYMBOL(set_bypass_wd);
static int get_bypass_wd(int if_index, int *ms_timeout_set)
{
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);
else
ret = doit(GET_BYPASS_WD, if_index, data);
return ret;
}
EXPORT_SYMBOL(get_bypass_wd);
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)) {
SET_BPLIB_INT_FN2(get_wd_expire_time, int, if_index, int *,
ms_time_left, ret);
} 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);
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);
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);
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);
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);
static int get_tx(int if_index)
{
DO_BPLIB_GET_ARG_FN(get_tx, GET_TX, if_index);
}
EXPORT_SYMBOL(get_tx);
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);
static int get_tap(int if_index)
{
DO_BPLIB_GET_ARG_FN(get_tap, GET_TAP, if_index);
}
EXPORT_SYMBOL(get_tap);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
static int get_tpl(int if_index)
{
DO_BPLIB_GET_ARG_FN(get_tpl, GET_TPL, if_index);
}
EXPORT_SYMBOL(get_tpl);
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);
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);
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 {
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;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
bypass_cb = (struct if_bypass_info *)&ifr;
bypass_cb->cmd = GET_BYPASS_INFO;
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;
break;
}
}
}
return ret;
}
EXPORT_SYMBOL(get_bypass_info);
static int __init init_lib_module(void)
{
printk(VERSION);
return 0;
}
static void __exit cleanup_lib_module(void)
{
}
module_init(init_lib_module);
module_exit(cleanup_lib_module);
/******************************************************************************/
/* */
/* bypass library, Copyright (c) 2004 Silicom, Ltd */
/* Corporation. */
/* */
/* 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. */
/* */
/* Ver 1.0.0 */
/* */
/* libbypass.h */
/* */
/******************************************************************************/
/**
* is_bypass - check if device is a Bypass controlling device
* @if_index: network device index
*
* Output:
* 1 - if device is bypass controlling device,
* 0 - if device is bypass slave device
* -1 - device not support Bypass
**/
int is_bypass_sd(int if_index);
/**
* get_bypass_slave - get second port participate in the Bypass pair
* @if_index: network device index
*
* Output:
* network device index of the slave device
* -1 - on failure (device not support Bypass or it's a slave device)
**/
int get_bypass_slave_sd(int if_index);
/**
* get_bypass_caps - get second port participate in the Bypass pair
* @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.
* 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
*
* **/
int get_bypass_caps_sd(int if_index);
/**
* get_wd_set_caps - Obtain watchdog timer setting capabilities
* @if_index: network device index
*
* Output:
*
* 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
* 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
* (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)
* Output:
* 0 - on success
* -1 - on failure (device not support Bypass or it's a slave device)
**/
int set_bypass_sd(int if_index, int bypass_mode);
/**
* get_bypass - Get Bypass mode state
* @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)
**/
int get_bypass_sd(int if_index);
/**
* get_bypass_change - Get change of Bypass mode state from last status check
* @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)
**/
int get_bypass_change_sd(int if_index);
/**
* set_dis_bypass - Set Disable Bypass mode
* @if_index: network device index of the controlling device
* @dis_bypass: disable bypass(1=dis, 0=en)
* Output:
* 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_dis_bypass_sd(int if_index, int dis_bypass);
/**
* get_dis_bypass - Get Disable Bypass mode state
* @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 or device not support
* Bypass or it's a slave device)
**/
int get_dis_bypass_sd(int if_index);
/**
* set_bypass_pwoff - Set Bypass mode at power-off state
* @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 or device not support
* Bypass or it's a slave device)
**/
int set_bypass_pwoff_sd(int if_index, int bypass_mode);
/**
* get_bypass_pwoff - Get Bypass mode state at power-off state
* @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 or device not support
* Bypass or it's a slave device)
**/
int get_bypass_pwoff_sd(int if_index);
/**
* set_bypass_pwup - Set Bypass mode at power-up state
* @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 or device not support
* Bypass or it's a slave device)
**/
int set_bypass_pwup_sd(int if_index, int bypass_mode);
/**
* get_bypass_pwup - Get Bypass mode state at power-up state
* @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 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
* Output:
* 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),
* -1 for unknown wdt status
* 0 if WDT is disabled
* Output:
* 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 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,
* -1 if WDT has expired
* 0 if WDT is disabled
* Output:
* 0 - on success
* -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 or device not support
* Bypass or it's a slave device or unknown wdt status)
**/
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 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 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
* @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 )
**/
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 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
* Output:
* 0 - on success
* -1 - on failure (device not support TAP or it's a slave device)
**/
int set_tap_sd(int if_index, int tap_mode);
/**
* get_tap - Get TAP mode state
* @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)
**/
int get_tap_sd(int if_index);
/**
* get_tap_change - Get change of TAP mode state from last status check
* @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)
**/
int get_tap_change_sd(int if_index);
/**
* set_dis_tap - Set Disable TAP mode
* @if_index: network device index of the controlling device
* @dis_tap: disable tap(1=dis, 0=en)
* Output:
* 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_dis_tap_sd(int if_index, int dis_tap);
/**
* get_dis_tap - Get Disable TAP mode state
* @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 or device not support
* TAP or it's a slave device)
**/
int get_dis_tap_sd(int if_index);
/**
* set_tap_pwup - Set TAP mode at power-up state
* @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 or device not
* support TAP or it's a slave device)
**/
int set_tap_pwup_sd(int if_index, int tap_mode);
/**
* get_tap_pwup - Get TAP mode state at power-up state
* @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 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
* Output:
* 0 - on success
* -1 - on failure (device not support Disconnect or it's a slave device)
**/
int set_bp_disc_sd(int if_index, int disc_mode);
/**
* get_bp_disc - Get Disconnect mode state
* @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)
**/
int get_bp_disc_sd(int if_index);
/**
* get_bp_disc_change - Get change of Disconnect mode state from last status check
* @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)
**/
int get_bp_disc_change_sd(int if_index);
/**
* set_bp_dis_disc - Set Disable Disconnect mode
* @if_index: network device index of the controlling device
* @dis_tap: disable tap(1=dis, 0=en)
* Output:
* 0 - on success
* -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);
/**
* get_dis_tap - Get Disable Disconnect mode state
* @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 or device not
* support Disconnect or it's a slave device)
**/
int get_bp_dis_disc_sd(int if_index);
/**
* set_bp_disc_pwup - Set Disconnect mode at power-up state
* @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 or device not
* support Disconnect or it's a slave device)
**/
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 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)
* Output:
* 0 - on success
* -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);
/**
* get_wd_exp_mode - Get adapter state when WDT expired.
* @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)
**/
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)
* Output:
* 1 - on success
* -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)
* Output:
* 1 - on success
* -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
* Output:
* 0 - on success
* -1 - on failure (device not support TPL)
**/
int set_tpl_sd(int if_index, int tpl_mode);
/**
* get_tpl - Get TPL mode state
* @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)
**/
int get_tpl_sd(int if_index);
int get_bypass_info_sd(int if_index, struct bp_info *bp_info);
int bp_if_scan_sd(void);
/*int get_dev_num_sd(void);*/
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册