2016-06-16 16:45:23 +03:00
/*
* Copyright ( c ) 2016 Mellanox Technologies Ltd . All rights reserved .
* Copyright ( c ) 2015 System Fabric Works , Inc . All rights reserved .
*
* This software is available to you under a choice of one of two
* licenses . You may choose to be licensed under the terms of the GNU
* General Public License ( GPL ) Version 2 , available from the file
* COPYING in the main directory of this source tree , or the
* OpenIB . org BSD license below :
*
* Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* - Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
*
* - Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
# ifndef RXE_H
# define RXE_H
2016-09-28 23:26:26 +03:00
# ifdef pr_fmt
# undef pr_fmt
# endif
# define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2016-06-16 16:45:23 +03:00
# include <linux/module.h>
# include <linux/skbuff.h>
# include <linux/crc32.h>
# include <rdma/ib_verbs.h>
# include <rdma/ib_user_verbs.h>
# include <rdma/ib_pack.h>
# include <rdma/ib_smi.h>
# include <rdma/ib_umem.h>
# include <rdma/ib_cache.h>
# include <rdma/ib_addr.h>
2017-04-20 20:55:55 +03:00
# include <crypto/hash.h>
2016-06-16 16:45:23 +03:00
# include "rxe_net.h"
# include "rxe_opcode.h"
# include "rxe_hdr.h"
# include "rxe_param.h"
# include "rxe_verbs.h"
2018-01-01 14:07:11 +03:00
# include "rxe_loc.h"
2016-06-16 16:45:23 +03:00
2018-03-20 23:19:50 +03:00
/*
* Version 1 and Version 2 are identical on 64 bit machines , but on 32 bit
* machines Version 2 has a different struct layout .
*/
# define RXE_UVERBS_ABI_VERSION 2
2016-06-16 16:45:23 +03:00
# define IB_PHYS_STATE_LINK_UP (5)
# define IB_PHYS_STATE_LINK_DOWN (3)
# define RXE_ROCE_V2_SPORT (0xc000)
2017-04-20 20:55:55 +03:00
static inline u32 rxe_crc32 ( struct rxe_dev * rxe ,
u32 crc , void * next , size_t len )
{
2017-06-02 18:28:54 +03:00
u32 retval ;
2017-04-20 20:55:55 +03:00
int err ;
SHASH_DESC_ON_STACK ( shash , rxe - > tfm ) ;
shash - > tfm = rxe - > tfm ;
shash - > flags = 0 ;
* ( u32 * ) shash_desc_ctx ( shash ) = crc ;
err = crypto_shash_update ( shash , next , len ) ;
if ( unlikely ( err ) ) {
pr_warn_ratelimited ( " failed crc calculation, err: %d \n " , err ) ;
return crc32_le ( crc , next , len ) ;
}
2017-06-02 18:28:54 +03:00
retval = * ( u32 * ) shash_desc_ctx ( shash ) ;
barrier_data ( shash_desc_ctx ( shash ) ) ;
return retval ;
2017-04-20 20:55:55 +03:00
}
2016-06-16 16:45:23 +03:00
int rxe_set_mtu ( struct rxe_dev * rxe , unsigned int dev_mtu ) ;
int rxe_add ( struct rxe_dev * rxe , unsigned int mtu ) ;
void rxe_remove ( struct rxe_dev * rxe ) ;
void rxe_remove_all ( void ) ;
int rxe_rcv ( struct sk_buff * skb ) ;
2018-01-01 14:07:11 +03:00
static inline void rxe_dev_put ( struct rxe_dev * rxe )
{
kref_put ( & rxe - > ref_cnt , rxe_release ) ;
}
2016-06-16 16:45:23 +03:00
struct rxe_dev * net_to_rxe ( struct net_device * ndev ) ;
2017-06-15 11:29:03 +03:00
struct rxe_dev * get_rxe_by_name ( const char * name ) ;
2016-06-16 16:45:23 +03:00
void rxe_port_up ( struct rxe_dev * rxe ) ;
void rxe_port_down ( struct rxe_dev * rxe ) ;
# endif /* RXE_H */