1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This file is provided under a dual BSD/GPLv2 license. When using or 3*4882a593Smuzhiyun * redistributing this file, you may do so under either license. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * GPL LICENSE SUMMARY 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright(c) 2012 Intel Corporation. All rights reserved. 8*4882a593Smuzhiyun * Copyright (C) 2015 EMC Corporation. All Rights Reserved. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 11*4882a593Smuzhiyun * it under the terms of version 2 of the GNU General Public License as 12*4882a593Smuzhiyun * published by the Free Software Foundation. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * BSD LICENSE 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * Copyright(c) 2012 Intel Corporation. All rights reserved. 17*4882a593Smuzhiyun * Copyright (C) 2015 EMC Corporation. All Rights Reserved. 18*4882a593Smuzhiyun * 19*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 20*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 21*4882a593Smuzhiyun * are met: 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * * Redistributions of source code must retain the above copyright 24*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer. 25*4882a593Smuzhiyun * * Redistributions in binary form must reproduce the above copy 26*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 27*4882a593Smuzhiyun * the documentation and/or other materials provided with the 28*4882a593Smuzhiyun * distribution. 29*4882a593Smuzhiyun * * Neither the name of Intel Corporation nor the names of its 30*4882a593Smuzhiyun * contributors may be used to endorse or promote products derived 31*4882a593Smuzhiyun * from this software without specific prior written permission. 32*4882a593Smuzhiyun * 33*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 34*4882a593Smuzhiyun * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 35*4882a593Smuzhiyun * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 36*4882a593Smuzhiyun * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 37*4882a593Smuzhiyun * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 38*4882a593Smuzhiyun * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 39*4882a593Smuzhiyun * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 40*4882a593Smuzhiyun * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 41*4882a593Smuzhiyun * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 42*4882a593Smuzhiyun * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 43*4882a593Smuzhiyun * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 44*4882a593Smuzhiyun * 45*4882a593Smuzhiyun * PCIe NTB Transport Linux driver 46*4882a593Smuzhiyun * 47*4882a593Smuzhiyun * Contact Information: 48*4882a593Smuzhiyun * Jon Mason <jon.mason@intel.com> 49*4882a593Smuzhiyun */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun struct ntb_transport_qp; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct ntb_transport_client { 54*4882a593Smuzhiyun struct device_driver driver; 55*4882a593Smuzhiyun int (*probe)(struct device *client_dev); 56*4882a593Smuzhiyun void (*remove)(struct device *client_dev); 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun int ntb_transport_register_client(struct ntb_transport_client *drvr); 60*4882a593Smuzhiyun void ntb_transport_unregister_client(struct ntb_transport_client *drvr); 61*4882a593Smuzhiyun int ntb_transport_register_client_dev(char *device_name); 62*4882a593Smuzhiyun void ntb_transport_unregister_client_dev(char *device_name); 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun struct ntb_queue_handlers { 65*4882a593Smuzhiyun void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data, 66*4882a593Smuzhiyun void *data, int len); 67*4882a593Smuzhiyun void (*tx_handler)(struct ntb_transport_qp *qp, void *qp_data, 68*4882a593Smuzhiyun void *data, int len); 69*4882a593Smuzhiyun void (*event_handler)(void *data, int status); 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun unsigned char ntb_transport_qp_num(struct ntb_transport_qp *qp); 73*4882a593Smuzhiyun unsigned int ntb_transport_max_size(struct ntb_transport_qp *qp); 74*4882a593Smuzhiyun struct ntb_transport_qp * 75*4882a593Smuzhiyun ntb_transport_create_queue(void *data, struct device *client_dev, 76*4882a593Smuzhiyun const struct ntb_queue_handlers *handlers); 77*4882a593Smuzhiyun void ntb_transport_free_queue(struct ntb_transport_qp *qp); 78*4882a593Smuzhiyun int ntb_transport_rx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data, 79*4882a593Smuzhiyun unsigned int len); 80*4882a593Smuzhiyun int ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data, 81*4882a593Smuzhiyun unsigned int len); 82*4882a593Smuzhiyun void *ntb_transport_rx_remove(struct ntb_transport_qp *qp, unsigned int *len); 83*4882a593Smuzhiyun void ntb_transport_link_up(struct ntb_transport_qp *qp); 84*4882a593Smuzhiyun void ntb_transport_link_down(struct ntb_transport_qp *qp); 85*4882a593Smuzhiyun bool ntb_transport_link_query(struct ntb_transport_qp *qp); 86*4882a593Smuzhiyun unsigned int ntb_transport_tx_free_entry(struct ntb_transport_qp *qp); 87