diff options
Diffstat (limited to 'drivers/net/ethernet/pensando/ionic/ionic_dev.h')
| -rw-r--r-- | drivers/net/ethernet/pensando/ionic/ionic_dev.h | 33 | 
1 files changed, 25 insertions, 8 deletions
| diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.h b/drivers/net/ethernet/pensando/ionic/ionic_dev.h index 690768ff0143..c25cf9b744c5 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_dev.h +++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.h @@ -4,6 +4,7 @@  #ifndef _IONIC_DEV_H_  #define _IONIC_DEV_H_ +#include <linux/atomic.h>  #include <linux/mutex.h>  #include <linux/workqueue.h> @@ -58,6 +59,7 @@ static_assert(sizeof(struct ionic_dev_getattr_cmd) == 64);  static_assert(sizeof(struct ionic_dev_getattr_comp) == 16);  static_assert(sizeof(struct ionic_dev_setattr_cmd) == 64);  static_assert(sizeof(struct ionic_dev_setattr_comp) == 16); +static_assert(sizeof(struct ionic_lif_setphc_cmd) == 64);  /* Port commands */  static_assert(sizeof(struct ionic_port_identify_cmd) == 64); @@ -134,10 +136,13 @@ 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; -	u32 last_hb; -	u8 last_fw_status; +	u32 last_fw_hb; +	bool fw_hb_ready; +	bool fw_status_ready;  	u64 __iomem *db_pages;  	dma_addr_t phy_db_pages; @@ -170,11 +175,20 @@ typedef void (*ionic_desc_cb)(struct ionic_queue *q,  			      struct ionic_desc_info *desc_info,  			      struct ionic_cq_info *cq_info, void *cb_arg); -struct ionic_page_info { +#define IONIC_PAGE_SIZE				PAGE_SIZE +#define IONIC_PAGE_SPLIT_SZ			(PAGE_SIZE / 2) +#define IONIC_PAGE_GFP_MASK			(GFP_ATOMIC | __GFP_NOWARN |\ +						 __GFP_COMP | __GFP_MEMALLOC) + +struct ionic_buf_info {  	struct page *page;  	dma_addr_t dma_addr; +	u32 page_offset; +	u32 len;  }; +#define IONIC_MAX_FRAGS			(1 + IONIC_TX_MAX_SG_ELEMS_V1) +  struct ionic_desc_info {  	union {  		void *desc; @@ -187,8 +201,9 @@ struct ionic_desc_info {  		struct ionic_txq_sg_desc *txq_sg_desc;  		struct ionic_rxq_sg_desc *rxq_sgl_desc;  	}; -	unsigned int npages; -	struct ionic_page_info pages[IONIC_RX_MAX_SG_ELEMS + 1]; +	unsigned int bytes; +	unsigned int nbufs; +	struct ionic_buf_info bufs[IONIC_MAX_FRAGS];  	ionic_desc_cb cb;  	void *cb_arg;  }; @@ -199,10 +214,13 @@ struct ionic_queue {  	struct device *dev;  	struct ionic_lif *lif;  	struct ionic_desc_info *info; +	u64 dbval;  	u16 head_idx;  	u16 tail_idx;  	unsigned int index;  	unsigned int num_descs; +	unsigned int max_sg_elems; +	u64 features;  	u64 dbell_count;  	u64 stop;  	u64 wake; @@ -211,7 +229,6 @@ struct ionic_queue {  	unsigned int type;  	unsigned int hw_index;  	unsigned int hw_type; -	u64 dbval;  	union {  		void *base;  		struct ionic_txq_desc *txq; @@ -229,7 +246,7 @@ struct ionic_queue {  	unsigned int sg_desc_size;  	unsigned int pid;  	char name[IONIC_QUEUE_NAME_MAX_SZ]; -}; +} ____cacheline_aligned_in_smp;  #define IONIC_INTR_INDEX_NOT_ASSIGNED	-1  #define IONIC_INTR_NAME_MAX_SZ		32 @@ -256,7 +273,7 @@ struct ionic_cq {  	u64 compl_count;  	void *base;  	dma_addr_t base_pa; -}; +} ____cacheline_aligned_in_smp;  struct ionic; | 
