mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
ionic: link in the new hw timestamp code
These are changes to compile and link the new code, but no new feature support is available or advertised yet. Signed-off-by: Allen Hubbe <allenbh@pensando.io> Signed-off-by: Shannon Nelson <snelson@pensando.io> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fee6efce56
commit
61db421da3
@ -6,3 +6,4 @@ obj-$(CONFIG_IONIC) := ionic.o
|
||||
ionic-y := ionic_main.o ionic_bus_pci.o ionic_devlink.o ionic_dev.o \
|
||||
ionic_debugfs.o ionic_lif.o ionic_rx_filter.o ionic_ethtool.o \
|
||||
ionic_txrx.o ionic_stats.o ionic_fw.o
|
||||
ionic-$(CONFIG_PTP_1588_CLOCK) += ionic_phc.o
|
||||
|
@ -20,6 +20,10 @@ struct ionic_lif;
|
||||
|
||||
#define DEVCMD_TIMEOUT 10
|
||||
|
||||
#define IONIC_PHC_UPDATE_NS 10000000000 /* 10s in nanoseconds */
|
||||
#define NORMAL_PPB 1000000000 /* one billion parts per billion */
|
||||
#define SCALED_PPM (1000000ull << 16) /* 2^16 million parts per 2^16 million */
|
||||
|
||||
struct ionic_vf {
|
||||
u16 index;
|
||||
u8 macaddr[6];
|
||||
|
@ -79,6 +79,8 @@ int ionic_dev_setup(struct ionic *ionic)
|
||||
idev->intr_status = bar->vaddr + IONIC_BAR0_INTR_STATUS_OFFSET;
|
||||
idev->intr_ctrl = bar->vaddr + IONIC_BAR0_INTR_CTRL_OFFSET;
|
||||
|
||||
idev->hwstamp_regs = &idev->dev_info_regs->hwstamp;
|
||||
|
||||
sig = ioread32(&idev->dev_info_regs->signature);
|
||||
if (sig != IONIC_DEV_INFO_SIGNATURE) {
|
||||
dev_err(dev, "Incompatible firmware signature %x", sig);
|
||||
|
@ -136,6 +136,7 @@ struct ionic_devinfo {
|
||||
struct ionic_dev {
|
||||
union ionic_dev_info_regs __iomem *dev_info_regs;
|
||||
union ionic_dev_cmd_regs __iomem *dev_cmd_regs;
|
||||
struct ionic_hwstamp_regs __iomem *hwstamp_regs;
|
||||
|
||||
atomic_long_t last_check_time;
|
||||
unsigned long last_hb_time;
|
||||
|
@ -830,6 +830,31 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ionic_lif_create_hwstamp_txq(struct ionic_lif *lif)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ionic_lif_create_hwstamp_rxq(struct ionic_lif *lif)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ionic_lif_config_hwstamp_rxq_all(struct ionic_lif *lif, bool rx_all)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ionic_lif_set_hwstamp_txmode(struct ionic_lif *lif, u16 txstamp_mode)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ionic_lif_set_hwstamp_rxfilt(struct ionic_lif *lif, u64 pkt_class)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool ionic_notifyq_service(struct ionic_cq *cq,
|
||||
struct ionic_cq_info *cq_info)
|
||||
{
|
||||
|
@ -4,6 +4,9 @@
|
||||
#ifndef _IONIC_LIF_H_
|
||||
#define _IONIC_LIF_H_
|
||||
|
||||
#include <linux/ptp_clock_kernel.h>
|
||||
#include <linux/timecounter.h>
|
||||
#include <uapi/linux/net_tstamp.h>
|
||||
#include <linux/dim.h>
|
||||
#include <linux/pci.h>
|
||||
#include "ionic_rx_filter.h"
|
||||
@ -36,6 +39,8 @@ struct ionic_tx_stats {
|
||||
u64 crc32_csum;
|
||||
u64 sg_cntr[IONIC_MAX_NUM_SG_CNTR];
|
||||
u64 dma_map_err;
|
||||
u64 hwstamp_valid;
|
||||
u64 hwstamp_invalid;
|
||||
};
|
||||
|
||||
struct ionic_rx_stats {
|
||||
@ -49,6 +54,8 @@ struct ionic_rx_stats {
|
||||
u64 csum_error;
|
||||
u64 dma_map_err;
|
||||
u64 alloc_err;
|
||||
u64 hwstamp_valid;
|
||||
u64 hwstamp_invalid;
|
||||
};
|
||||
|
||||
#define IONIC_QCQ_F_INITED BIT(0)
|
||||
@ -125,6 +132,10 @@ struct ionic_lif_sw_stats {
|
||||
u64 rx_csum_none;
|
||||
u64 rx_csum_complete;
|
||||
u64 rx_csum_error;
|
||||
u64 tx_hwstamp_valid;
|
||||
u64 tx_hwstamp_invalid;
|
||||
u64 rx_hwstamp_valid;
|
||||
u64 rx_hwstamp_invalid;
|
||||
u64 hw_tx_dropped;
|
||||
u64 hw_rx_dropped;
|
||||
u64 hw_rx_over_errors;
|
||||
@ -158,6 +169,8 @@ struct ionic_qtype_info {
|
||||
u16 sg_desc_stride;
|
||||
};
|
||||
|
||||
struct ionic_phc;
|
||||
|
||||
#define IONIC_LIF_NAME_MAX_SZ 32
|
||||
struct ionic_lif {
|
||||
struct net_device *netdev;
|
||||
@ -170,8 +183,10 @@ struct ionic_lif {
|
||||
struct ionic_qcq *adminqcq;
|
||||
struct ionic_qcq *notifyqcq;
|
||||
struct ionic_qcq **txqcqs;
|
||||
struct ionic_qcq *hwstamp_txq;
|
||||
struct ionic_tx_stats *txqstats;
|
||||
struct ionic_qcq **rxqcqs;
|
||||
struct ionic_qcq *hwstamp_rxq;
|
||||
struct ionic_rx_stats *rxqstats;
|
||||
struct ionic_deferred deferred;
|
||||
struct work_struct tx_timeout_work;
|
||||
@ -214,9 +229,29 @@ struct ionic_lif {
|
||||
unsigned long *dbid_inuse;
|
||||
unsigned int dbid_count;
|
||||
|
||||
struct ionic_phc *phc;
|
||||
|
||||
struct dentry *dentry;
|
||||
};
|
||||
|
||||
struct ionic_phc {
|
||||
spinlock_t lock; /* lock for cc and tc */
|
||||
struct cyclecounter cc;
|
||||
struct timecounter tc;
|
||||
|
||||
struct mutex config_lock; /* lock for ts_config */
|
||||
struct hwtstamp_config ts_config;
|
||||
u64 ts_config_rx_filt;
|
||||
u32 ts_config_tx_mode;
|
||||
|
||||
u32 init_cc_mult;
|
||||
long aux_work_delay;
|
||||
|
||||
struct ptp_clock_info ptp_info;
|
||||
struct ptp_clock *ptp;
|
||||
struct ionic_lif *lif;
|
||||
};
|
||||
|
||||
struct ionic_queue_params {
|
||||
unsigned int nxqs;
|
||||
unsigned int ntxq_descs;
|
||||
@ -265,6 +300,43 @@ void ionic_lif_unregister(struct ionic_lif *lif);
|
||||
int ionic_lif_identify(struct ionic *ionic, u8 lif_type,
|
||||
union ionic_lif_identity *lif_ident);
|
||||
int ionic_lif_size(struct ionic *ionic);
|
||||
|
||||
#if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
|
||||
int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr);
|
||||
int ionic_lif_hwstamp_get(struct ionic_lif *lif, struct ifreq *ifr);
|
||||
ktime_t ionic_lif_phc_ktime(struct ionic_lif *lif, u64 counter);
|
||||
void ionic_lif_register_phc(struct ionic_lif *lif);
|
||||
void ionic_lif_unregister_phc(struct ionic_lif *lif);
|
||||
void ionic_lif_alloc_phc(struct ionic_lif *lif);
|
||||
void ionic_lif_free_phc(struct ionic_lif *lif);
|
||||
#else
|
||||
static inline int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int ionic_lif_hwstamp_get(struct ionic_lif *lif, struct ifreq *ifr)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline ktime_t ionic_lif_phc_ktime(struct ionic_lif *lif, u64 counter)
|
||||
{
|
||||
return ns_to_ktime(0);
|
||||
}
|
||||
|
||||
static inline void ionic_lif_register_phc(struct ionic_lif *lif) {}
|
||||
static inline void ionic_lif_unregister_phc(struct ionic_lif *lif) {}
|
||||
static inline void ionic_lif_alloc_phc(struct ionic_lif *lif) {}
|
||||
static inline void ionic_lif_free_phc(struct ionic_lif *lif) {}
|
||||
#endif
|
||||
|
||||
int ionic_lif_create_hwstamp_txq(struct ionic_lif *lif);
|
||||
int ionic_lif_create_hwstamp_rxq(struct ionic_lif *lif);
|
||||
int ionic_lif_config_hwstamp_rxq_all(struct ionic_lif *lif, bool rx_all);
|
||||
int ionic_lif_set_hwstamp_txmode(struct ionic_lif *lif, u16 txstamp_mode);
|
||||
int ionic_lif_set_hwstamp_rxfilt(struct ionic_lif *lif, u64 pkt_class);
|
||||
|
||||
int ionic_lif_rss_config(struct ionic_lif *lif, u16 types,
|
||||
const u8 *key, const u32 *indir);
|
||||
int ionic_reconfigure_queues(struct ionic_lif *lif,
|
||||
|
@ -148,6 +148,8 @@ static const char *ionic_opcode_to_str(enum ionic_cmd_opcode opcode)
|
||||
return "IONIC_CMD_LIF_SETATTR";
|
||||
case IONIC_CMD_LIF_GETATTR:
|
||||
return "IONIC_CMD_LIF_GETATTR";
|
||||
case IONIC_CMD_LIF_SETPHC:
|
||||
return "IONIC_CMD_LIF_SETPHC";
|
||||
case IONIC_CMD_RX_MODE_SET:
|
||||
return "IONIC_CMD_RX_MODE_SET";
|
||||
case IONIC_CMD_RX_FILTER_ADD:
|
||||
|
Loading…
Reference in New Issue
Block a user