cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

usnic_ib.h (3572B)


      1/*
      2 * Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
      3 *
      4 * This software is available to you under a choice of one of two
      5 * licenses.  You may choose to be licensed under the terms of the GNU
      6 * General Public License (GPL) Version 2, available from the file
      7 * COPYING in the main directory of this source tree, or the
      8 * BSD license below:
      9 *
     10 *     Redistribution and use in source and binary forms, with or
     11 *     without modification, are permitted provided that the following
     12 *     conditions are met:
     13 *
     14 *      - Redistributions of source code must retain the above
     15 *        copyright notice, this list of conditions and the following
     16 *        disclaimer.
     17 *
     18 *      - Redistributions in binary form must reproduce the above
     19 *        copyright notice, this list of conditions and the following
     20 *        disclaimer in the documentation and/or other materials
     21 *        provided with the distribution.
     22 *
     23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     30 * SOFTWARE.
     31 *
     32 */
     33
     34#ifndef USNIC_IB_H_
     35#define USNIC_IB_H_
     36
     37#include <linux/iommu.h>
     38#include <linux/netdevice.h>
     39
     40#include <rdma/ib_verbs.h>
     41
     42
     43#include "usnic.h"
     44#include "usnic_abi.h"
     45#include "usnic_vnic.h"
     46
     47#define USNIC_IB_PORT_CNT		1
     48#define USNIC_IB_NUM_COMP_VECTORS	1
     49
     50extern unsigned int usnic_ib_share_vf;
     51
     52struct usnic_ib_ucontext {
     53	struct ib_ucontext		ibucontext;
     54	/* Protected by usnic_ib_dev->usdev_lock */
     55	struct list_head		qp_grp_list;
     56	struct list_head		link;
     57};
     58
     59struct usnic_ib_pd {
     60	struct ib_pd			ibpd;
     61	struct usnic_uiom_pd		*umem_pd;
     62};
     63
     64struct usnic_ib_cq {
     65	struct ib_cq			ibcq;
     66};
     67
     68struct usnic_ib_mr {
     69	struct ib_mr			ibmr;
     70	struct usnic_uiom_reg		*umem;
     71};
     72
     73struct usnic_ib_dev {
     74	struct ib_device		ib_dev;
     75	struct pci_dev			*pdev;
     76	struct net_device		*netdev;
     77	struct usnic_fwd_dev		*ufdev;
     78	struct list_head		ib_dev_link;
     79	struct list_head		vf_dev_list;
     80	struct list_head		ctx_list;
     81	struct mutex			usdev_lock;
     82
     83	/* provisioning information */
     84	struct kref			vf_cnt;
     85	unsigned int			vf_res_cnt[USNIC_VNIC_RES_TYPE_MAX];
     86
     87	/* sysfs vars for QPN reporting */
     88	struct kobject *qpn_kobj;
     89};
     90
     91struct usnic_ib_vf {
     92	struct usnic_ib_dev		*pf;
     93	struct mutex			lock;
     94	struct usnic_vnic		*vnic;
     95	unsigned int			qp_grp_ref_cnt;
     96	struct usnic_ib_pd		*pd;
     97	struct list_head		link;
     98};
     99
    100static inline
    101struct usnic_ib_dev *to_usdev(struct ib_device *ibdev)
    102{
    103	return container_of(ibdev, struct usnic_ib_dev, ib_dev);
    104}
    105
    106static inline
    107struct usnic_ib_ucontext *to_ucontext(struct ib_ucontext *ibucontext)
    108{
    109	return container_of(ibucontext, struct usnic_ib_ucontext, ibucontext);
    110}
    111
    112static inline
    113struct usnic_ib_pd *to_upd(struct ib_pd *ibpd)
    114{
    115	return container_of(ibpd, struct usnic_ib_pd, ibpd);
    116}
    117
    118static inline
    119struct usnic_ib_ucontext *to_uucontext(struct ib_ucontext *ibucontext)
    120{
    121	return container_of(ibucontext, struct usnic_ib_ucontext, ibucontext);
    122}
    123
    124static inline
    125struct usnic_ib_mr *to_umr(struct ib_mr *ibmr)
    126{
    127	return container_of(ibmr, struct usnic_ib_mr, ibmr);
    128}
    129void usnic_ib_log_vf(struct usnic_ib_vf *vf);
    130
    131#define UPDATE_PTR_LEFT(N, P, L)			\
    132do {							\
    133	L -= (N);					\
    134	P += (N);					\
    135} while (0)
    136
    137#endif /* USNIC_IB_H_ */