Update Barefoot kdrv (#4355)
This commit is contained in:
parent
2872d80231
commit
530c9fc427
@ -1,25 +1,28 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* BAREFOOT NETWORKS CONFIDENTIAL & PROPRIETARY
|
Barefoot Networks Switch ASIC Linux driver
|
||||||
*
|
Copyright(c) 2015 - 2019 Barefoot Networks, Inc.
|
||||||
* Copyright (c) 2018-2018 Barefoot Networks, Inc.
|
|
||||||
*
|
|
||||||
* NOTICE: All information contained herein is, and remains the property of
|
|
||||||
* Barefoot Networks, Inc. and its suppliers, if any. The intellectual and
|
|
||||||
* technical concepts contained herein are proprietary to Barefoot Networks,
|
|
||||||
* Inc.
|
|
||||||
* and its suppliers and may be covered by U.S. and Foreign Patents, patents in
|
|
||||||
* process, and are protected by trade secret or copyright law.
|
|
||||||
* Dissemination of this information or reproduction of this material is
|
|
||||||
* strictly forbidden unless prior written permission is obtained from
|
|
||||||
* Barefoot Networks, Inc.
|
|
||||||
*
|
|
||||||
* No warranty, explicit or implicit is provided, unless granted under a
|
|
||||||
* written agreement with Barefoot Networks, Inc.
|
|
||||||
*
|
|
||||||
* $Id: $
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information:
|
||||||
|
info@barefootnetworks.com
|
||||||
|
Barefoot Networks, 4750 Patrick Henry Drive, Santa Clara CA 95054
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
#ifndef _BF_IOCTL_H_
|
#ifndef _BF_IOCTL_H_
|
||||||
#define _BF_IOCTL_H_
|
#define _BF_IOCTL_H_
|
||||||
|
|
||||||
@ -35,15 +38,35 @@ typedef uint64_t phys_addr_t;
|
|||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#define BF_IOC_MAGIC 'b'
|
#define BF_IOC_MAGIC 'b'
|
||||||
|
#define BF_TBUS_MSIX_INDICES_MAX 3
|
||||||
|
|
||||||
typedef struct bf_dma_bus_map_s
|
typedef struct bf_dma_bus_map_s
|
||||||
{
|
{
|
||||||
phys_addr_t phy_addr;
|
phys_addr_t phy_addr;
|
||||||
void *dma_addr;
|
void *dma_addr;
|
||||||
size_t size;
|
size_t size;
|
||||||
} bf_dma_bus_map_t;
|
} bf_dma_bus_map_t;
|
||||||
|
|
||||||
|
typedef struct bf_tbus_msix_indices_s
|
||||||
|
{
|
||||||
|
int cnt;
|
||||||
|
int indices[BF_TBUS_MSIX_INDICES_MAX];
|
||||||
|
} bf_tbus_msix_indices_t;
|
||||||
|
|
||||||
|
enum bf_intr_mode {
|
||||||
|
BF_INTR_MODE_NONE = 0,
|
||||||
|
BF_INTR_MODE_LEGACY,
|
||||||
|
BF_INTR_MODE_MSI,
|
||||||
|
BF_INTR_MODE_MSIX,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct bf_intr_mode_s {
|
||||||
|
enum bf_intr_mode intr_mode;
|
||||||
|
} bf_intr_mode_t;
|
||||||
|
|
||||||
#define BF_IOCMAPDMAADDR _IOWR(BF_IOC_MAGIC, 0, bf_dma_bus_map_t)
|
#define BF_IOCMAPDMAADDR _IOWR(BF_IOC_MAGIC, 0, bf_dma_bus_map_t)
|
||||||
#define BF_IOCUNMAPDMAADDR _IOW(BF_IOC_MAGIC, 0, bf_dma_bus_map_t)
|
#define BF_IOCUNMAPDMAADDR _IOW(BF_IOC_MAGIC, 1, bf_dma_bus_map_t)
|
||||||
|
#define BF_TBUS_MSIX_INDEX _IOW(BF_IOC_MAGIC, 2, bf_tbus_msix_indices_t)
|
||||||
|
#define BF_GET_INTR_MODE _IOR(BF_IOC_MAGIC, 3, bf_intr_mode_t)
|
||||||
|
|
||||||
#endif /* _BF_IOCTL_H_ */
|
#endif /* _BF_IOCTL_H_ */
|
||||||
|
File diff suppressed because it is too large
Load Diff
146
platform/barefoot/bfn-modules/modules/bf_kdrv.h
Normal file
146
platform/barefoot/bfn-modules/modules/bf_kdrv.h
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
Barefoot Networks Switch ASIC Linux driver
|
||||||
|
Copyright(c) 2015 - 2019 Barefoot Networks, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information:
|
||||||
|
info@barefootnetworks.com
|
||||||
|
Barefoot Networks, 4750 Patrick Henry Drive, Santa Clara CA 95054
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
#ifndef _BF_KDRV_H_
|
||||||
|
#define _BF_KDRV_H_
|
||||||
|
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/msi.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
|
||||||
|
#ifndef phys_addr_t
|
||||||
|
typedef uint64_t phys_addr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PCI_VENDOR_ID_BF 0x1d1c
|
||||||
|
#define TOFINO_DEV_ID_A0 0x01
|
||||||
|
#define TOFINO_DEV_ID_B0 0x10
|
||||||
|
#define TOFINO2_DEV_ID_A0 0x0100
|
||||||
|
#define TOFINO2_DEV_ID_A00 0x0000
|
||||||
|
#define TOFINO2_DEV_ID_B0 0x0110
|
||||||
|
|
||||||
|
#ifndef PCI_MSIX_ENTRY_SIZE
|
||||||
|
#define PCI_MSIX_ENTRY_SIZE 16
|
||||||
|
#define PCI_MSIX_ENTRY_LOWER_ADDR 0
|
||||||
|
#define PCI_MSIX_ENTRY_UPPER_ADDR 4
|
||||||
|
#define PCI_MSIX_ENTRY_DATA 8
|
||||||
|
#define PCI_MSIX_ENTRY_VECTOR_CTRL 12
|
||||||
|
#define PCI_MSIX_ENTRY_CTRL_MASKBIT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BF_CLASS_NAME "bf"
|
||||||
|
#define BF_MAX_DEVICE_CNT 256
|
||||||
|
#define BF_INTR_MODE_NONE_NAME "none"
|
||||||
|
#define BF_INTR_MODE_LEGACY_NAME "legacy"
|
||||||
|
#define BF_INTR_MODE_MSI_NAME "msi"
|
||||||
|
#define BF_INTR_MODE_MSIX_NAME "msix"
|
||||||
|
#define BF_MAX_BAR_MAPS 6
|
||||||
|
#define BF_MSIX_ENTRY_CNT 32 /* 512 for tofino-1 */
|
||||||
|
#define BF_MSI_ENTRY_CNT 2
|
||||||
|
#define BF_MSI_INT_TBUS 1
|
||||||
|
|
||||||
|
#define BF_TBUS_MSIX_INDEX_INVALID (0)
|
||||||
|
#define BF_TBUS_MSIX_BASE_INDEX_TOF1 (32)
|
||||||
|
|
||||||
|
/* Tofino generation type */
|
||||||
|
typedef enum {
|
||||||
|
BF_TOFINO_NONE = 0,
|
||||||
|
BF_TOFINO_1,
|
||||||
|
BF_TOFINO_2,
|
||||||
|
} bf_tof_type;
|
||||||
|
|
||||||
|
/* device memory */
|
||||||
|
struct bf_dev_mem {
|
||||||
|
const char *name;
|
||||||
|
phys_addr_t addr;
|
||||||
|
resource_size_t size;
|
||||||
|
void __iomem *internal_addr;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bf_listener {
|
||||||
|
struct bf_pci_dev *bfdev;
|
||||||
|
s32 event_count[BF_MSIX_ENTRY_CNT];
|
||||||
|
int minor;
|
||||||
|
struct bf_listener *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* device information */
|
||||||
|
struct bf_dev_info {
|
||||||
|
struct module *owner;
|
||||||
|
struct device *dev;
|
||||||
|
int minor;
|
||||||
|
atomic_t event[BF_MSIX_ENTRY_CNT];
|
||||||
|
wait_queue_head_t wait;
|
||||||
|
const char *version;
|
||||||
|
struct bf_dev_mem mem[BF_MAX_BAR_MAPS];
|
||||||
|
struct msix_entry *msix_entries;
|
||||||
|
long irq; /* first irq vector */
|
||||||
|
int num_irq; /* number of irq vectors */
|
||||||
|
unsigned long irq_flags; /* sharable ?? */
|
||||||
|
uint16_t pci_dev_id; /* generation type of BF ASIC */
|
||||||
|
bf_tof_type tof_type; /* Tofino generation type */
|
||||||
|
/* msix index assigned to tbus MSIX for Tofino-2 only */
|
||||||
|
int tbus_msix_ind[BF_TBUS_MSIX_INDICES_MAX];
|
||||||
|
int tbus_msix_map_enable;
|
||||||
|
int pci_error_state; /* was there a pci bus error */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* cookie to be passed to IRQ handler, useful especially with MSIX */
|
||||||
|
struct bf_int_vector {
|
||||||
|
struct bf_pci_dev *bf_dev;
|
||||||
|
int int_vec_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A structure describing the private information for a BF pcie device.
|
||||||
|
*/
|
||||||
|
struct bf_pci_dev {
|
||||||
|
struct bf_dev_info info;
|
||||||
|
struct pci_dev *pdev;
|
||||||
|
enum bf_intr_mode mode;
|
||||||
|
u8 instance;
|
||||||
|
char name[16];
|
||||||
|
struct bf_int_vector bf_int_vec[BF_MSIX_ENTRY_CNT];
|
||||||
|
struct bf_listener *
|
||||||
|
listener_head; /* head of a singly linked list of listeners */
|
||||||
|
void *adapter_ptr; /* pkt processing adapter */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* TBD: Need to build with CONFIG_PCI_MSI */
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0)
|
||||||
|
#if defined(RHEL_RELEASE_CODE)
|
||||||
|
#else
|
||||||
|
extern int pci_enable_msi_block(struct pci_dev *dev, unsigned int nvec);
|
||||||
|
#endif /* defined(RHEL_RELEASE_CODE) */
|
||||||
|
extern int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec);
|
||||||
|
#else
|
||||||
|
extern int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec);
|
||||||
|
extern int pci_enable_msix_range(struct pci_dev *dev,
|
||||||
|
struct msix_entry *entries,
|
||||||
|
int minvec,
|
||||||
|
int maxvec);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _BF_KDRV_H_ */
|
Loading…
Reference in New Issue
Block a user