#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/etherdevice.h>
#include "ionic.h"
#include "ionic_dev.h"
#include "ionic_lif.h"
static void ionic_watchdog_cb(struct timer_list *t)
{ … }
static void ionic_napi_schedule_do_softirq(struct napi_struct *napi)
{ … }
void ionic_doorbell_napi_work(struct work_struct *work)
{ … }
static int ionic_get_preferred_cpu(struct ionic *ionic,
struct ionic_intr_info *intr)
{ … }
static void ionic_queue_dbell_napi_work(struct ionic *ionic,
struct ionic_qcq *qcq)
{ … }
static void ionic_doorbell_check_dwork(struct work_struct *work)
{ … }
bool ionic_doorbell_wa(struct ionic *ionic)
{ … }
static int ionic_watchdog_init(struct ionic *ionic)
{ … }
void ionic_queue_doorbell_check(struct ionic *ionic, int delay)
{ … }
void ionic_init_devinfo(struct ionic *ionic)
{ … }
int ionic_dev_setup(struct ionic *ionic)
{ … }
void ionic_dev_teardown(struct ionic *ionic)
{ … }
static bool __ionic_is_fw_running(struct ionic_dev *idev, u8 *status_ptr)
{ … }
bool ionic_is_fw_running(struct ionic_dev *idev)
{ … }
int ionic_heartbeat_check(struct ionic *ionic)
{ … }
u8 ionic_dev_cmd_status(struct ionic_dev *idev)
{ … }
bool ionic_dev_cmd_done(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_comp(struct ionic_dev *idev, union ionic_dev_cmd_comp *comp)
{ … }
void ionic_dev_cmd_go(struct ionic_dev *idev, union ionic_dev_cmd *cmd)
{ … }
void ionic_dev_cmd_identify(struct ionic_dev *idev, u8 ver)
{ … }
void ionic_dev_cmd_init(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_reset(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_port_identify(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_port_init(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_port_reset(struct ionic_dev *idev)
{ … }
void ionic_dev_cmd_port_state(struct ionic_dev *idev, u8 state)
{ … }
void ionic_dev_cmd_port_speed(struct ionic_dev *idev, u32 speed)
{ … }
void ionic_dev_cmd_port_autoneg(struct ionic_dev *idev, u8 an_enable)
{ … }
void ionic_dev_cmd_port_fec(struct ionic_dev *idev, u8 fec_type)
{ … }
void ionic_dev_cmd_port_pause(struct ionic_dev *idev, u8 pause_type)
{ … }
int ionic_set_vf_config(struct ionic *ionic, int vf,
struct ionic_vf_setattr_cmd *vfc)
{ … }
void ionic_vf_start(struct ionic *ionic)
{ … }
void ionic_dev_cmd_queue_identify(struct ionic_dev *idev,
u16 lif_type, u8 qtype, u8 qver)
{ … }
void ionic_dev_cmd_lif_identify(struct ionic_dev *idev, u8 type, u8 ver)
{ … }
void ionic_dev_cmd_lif_init(struct ionic_dev *idev, u16 lif_index,
dma_addr_t info_pa)
{ … }
void ionic_dev_cmd_lif_reset(struct ionic_dev *idev, u16 lif_index)
{ … }
void ionic_dev_cmd_adminq_init(struct ionic_dev *idev, struct ionic_qcq *qcq,
u16 lif_index, u16 intr_index)
{ … }
int ionic_db_page_num(struct ionic_lif *lif, int pid)
{ … }
int ionic_get_cmb(struct ionic_lif *lif, u32 *pgid, phys_addr_t *pgaddr, int order)
{ … }
void ionic_put_cmb(struct ionic_lif *lif, u32 pgid, int order)
{ … }
int ionic_cq_init(struct ionic_lif *lif, struct ionic_cq *cq,
struct ionic_intr_info *intr,
unsigned int num_descs, size_t desc_size)
{ … }
unsigned int ionic_cq_service(struct ionic_cq *cq, unsigned int work_to_do,
ionic_cq_cb cb, ionic_cq_done_cb done_cb,
void *done_arg)
{ … }
int ionic_q_init(struct ionic_lif *lif, struct ionic_dev *idev,
struct ionic_queue *q, unsigned int index, const char *name,
unsigned int num_descs, size_t desc_size,
size_t sg_desc_size, unsigned int pid)
{ … }
void ionic_q_post(struct ionic_queue *q, bool ring_doorbell)
{ … }
bool ionic_q_is_posted(struct ionic_queue *q, unsigned int pos)
{ … }