Patch #3 - Add a new ioctl to access SFP+ module diagnostic
data via the I2C routines in shared code.
This commit is contained in:
parent
35bbbdaa3b
commit
6a59dfbb86
@ -47,7 +47,7 @@ int ixgbe_display_debug_stats = 0;
|
|||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* Driver version
|
* Driver version
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
char ixgbe_driver_version[] = "2.5.0 - 2";
|
char ixgbe_driver_version[] = "2.5.0 - 3";
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* PCI Device ID Table
|
* PCI Device ID Table
|
||||||
@ -919,6 +919,7 @@ static int
|
|||||||
ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
|
ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
|
||||||
{
|
{
|
||||||
struct adapter *adapter = ifp->if_softc;
|
struct adapter *adapter = ifp->if_softc;
|
||||||
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
struct ifreq *ifr = (struct ifreq *) data;
|
struct ifreq *ifr = (struct ifreq *) data;
|
||||||
#if defined(INET) || defined(INET6)
|
#if defined(INET) || defined(INET6)
|
||||||
struct ifaddr *ifa = (struct ifaddr *)data;
|
struct ifaddr *ifa = (struct ifaddr *)data;
|
||||||
@ -1024,7 +1025,22 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
|
|||||||
VLAN_CAPABILITIES(ifp);
|
VLAN_CAPABILITIES(ifp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SIOCGI2C:
|
||||||
|
{
|
||||||
|
struct ixgbe_i2c_req i2c;
|
||||||
|
IOCTL_DEBUGOUT("ioctl: SIOCGI2C (Get I2C Data)");
|
||||||
|
error = copyin(ifr->ifr_data, &i2c, sizeof(i2c));
|
||||||
|
if (error)
|
||||||
|
break;
|
||||||
|
if ((i2c.dev_addr != 0xA0) || (i2c.dev_addr != 0xA2)){
|
||||||
|
error = EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
hw->phy.ops.read_i2c_byte(hw, i2c.offset,
|
||||||
|
i2c.dev_addr, i2c.data);
|
||||||
|
error = copyout(&i2c, ifr->ifr_data, sizeof(i2c));
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
IOCTL_DEBUGOUT1("ioctl: UNKNOWN (0x%X)\n", (int)command);
|
IOCTL_DEBUGOUT1("ioctl: UNKNOWN (0x%X)\n", (int)command);
|
||||||
error = ether_ioctl(ifp, command, data);
|
error = ether_ioctl(ifp, command, data);
|
||||||
|
@ -199,6 +199,9 @@
|
|||||||
#define IXGBE_BR_SIZE 4096
|
#define IXGBE_BR_SIZE 4096
|
||||||
#define IXGBE_QUEUE_MIN_FREE 32
|
#define IXGBE_QUEUE_MIN_FREE 32
|
||||||
|
|
||||||
|
/* IOCTL define to gather SFP+ Diagnostic data */
|
||||||
|
#define SIOCGI2C SIOCGIFGENERIC
|
||||||
|
|
||||||
/* Offload bits in mbuf flag */
|
/* Offload bits in mbuf flag */
|
||||||
#if __FreeBSD_version >= 800000
|
#if __FreeBSD_version >= 800000
|
||||||
#define CSUM_OFFLOAD (CSUM_IP|CSUM_TCP|CSUM_UDP|CSUM_SCTP)
|
#define CSUM_OFFLOAD (CSUM_IP|CSUM_TCP|CSUM_UDP|CSUM_SCTP)
|
||||||
@ -241,6 +244,13 @@ typedef struct _ixgbe_vendor_info_t {
|
|||||||
unsigned int index;
|
unsigned int index;
|
||||||
} ixgbe_vendor_info_t;
|
} ixgbe_vendor_info_t;
|
||||||
|
|
||||||
|
/* This is used to get SFP+ module data */
|
||||||
|
struct ixgbe_i2c_req {
|
||||||
|
u8 dev_addr;
|
||||||
|
u8 offset;
|
||||||
|
u8 len;
|
||||||
|
u8 data[8];
|
||||||
|
};
|
||||||
|
|
||||||
struct ixgbe_tx_buf {
|
struct ixgbe_tx_buf {
|
||||||
u32 eop_index;
|
u32 eop_index;
|
||||||
|
Loading…
Reference in New Issue
Block a user