/* * Intel MIC Platform Software Stack (MPSS) * * Copyright(c) 2014 Intel Corporation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation. * * This program is distributed in the hope that 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. * * Intel SCIF driver. */ #ifndef _SCIF_PEER_BUS_H_ #define _SCIF_PEER_BUS_H_ #include #include /* * Peer devices show up as PCIe devices for the mgmt node but not the cards. * The mgmt node discovers all the cards on the PCIe bus and informs the other * cards about their peers. Upon notification of a peer a node adds a peer * device to the peer bus to maintain symmetry in the way devices are * discovered across all nodes in the SCIF network. */ /** * scif_peer_dev - representation of a peer SCIF device * @dev: underlying device * @dnode - The destination node which this device will communicate with. */ struct scif_peer_dev { struct device dev; u8 dnode; }; /** * scif_peer_driver - operations for a scif_peer I/O driver * @driver: underlying device driver (populate name and owner). * @id_table: the ids serviced by this driver. * @probe: the function to call when a device is found. Returns 0 or -errno. * @remove: the function to call when a device is removed. */ struct scif_peer_driver { struct device_driver driver; const struct scif_peer_dev_id *id_table; int (*probe)(struct scif_peer_dev *dev); void (*remove)(struct scif_peer_dev *dev); }; struct scif_dev; int scif_peer_register_driver(struct scif_peer_driver *driver); void scif_peer_unregister_driver(struct scif_peer_driver *driver); struct scif_peer_dev *scif_peer_register_device(struct scif_dev *sdev); void scif_peer_unregister_device(struct scif_peer_dev *sdev); int scif_peer_bus_init(void); void scif_peer_bus_exit(void); #endif /* _SCIF_PEER_BUS_H */