2019-05-27 09:55:01 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-11-07 12:00:15 +03:00
/*
* RapidIO interconnect services
*
* Copyright 2005 MontaVista Software , Inc .
* Matt Porter < mporter @ kernel . crashing . org >
*/
# include <linux/device.h>
# include <linux/list.h>
# include <linux/rio.h>
2010-10-28 02:34:32 +04:00
# define RIO_MAX_CHK_RETRY 3
2013-05-25 02:55:05 +04:00
# define RIO_MPORT_ANY (-1)
2010-10-28 02:34:32 +04:00
2005-11-07 12:00:15 +03:00
/* Functions internal to the RIO core code */
extern u32 rio_mport_get_feature ( struct rio_mport * mport , int local , u16 destid ,
u8 hopcount , int ftr ) ;
2010-05-27 01:43:59 +04:00
extern u32 rio_mport_get_physefb ( struct rio_mport * port , int local ,
2016-08-03 00:06:57 +03:00
u16 destid , u8 hopcount , u32 * rmap ) ;
2010-05-27 01:43:59 +04:00
extern u32 rio_mport_get_efb ( struct rio_mport * port , int local , u16 destid ,
u8 hopcount , u32 from ) ;
2010-10-28 02:34:32 +04:00
extern int rio_mport_chk_dev_access ( struct rio_mport * mport , u16 destid ,
u8 hopcount ) ;
2013-07-04 02:08:50 +04:00
extern int rio_lock_device ( struct rio_mport * port , u16 destid ,
u8 hopcount , int wait_ms ) ;
extern int rio_unlock_device ( struct rio_mport * port , u16 destid , u8 hopcount ) ;
extern int rio_route_add_entry ( struct rio_dev * rdev ,
u16 table , u16 route_destid , u8 route_port , int lock ) ;
extern int rio_route_get_entry ( struct rio_dev * rdev , u16 table ,
u16 route_destid , u8 * route_port , int lock ) ;
extern int rio_route_clr_table ( struct rio_dev * rdev , u16 table , int lock ) ;
2010-05-27 01:43:59 +04:00
extern int rio_set_port_lockout ( struct rio_dev * rdev , u32 pnum , int lock ) ;
2010-10-28 02:34:34 +04:00
extern struct rio_dev * rio_get_comptag ( u32 comp_tag , struct rio_dev * from ) ;
2016-03-23 00:26:17 +03:00
extern struct rio_net * rio_alloc_net ( struct rio_mport * mport ) ;
extern int rio_add_net ( struct rio_net * net ) ;
extern void rio_free_net ( struct rio_net * net ) ;
2013-05-25 02:55:05 +04:00
extern int rio_add_device ( struct rio_dev * rdev ) ;
2016-03-23 00:26:20 +03:00
extern void rio_del_device ( struct rio_dev * rdev , enum rio_device_state state ) ;
2013-05-25 02:55:05 +04:00
extern int rio_enable_rx_tx_port ( struct rio_mport * port , int local , u16 destid ,
u8 hopcount , u8 port_num ) ;
extern int rio_register_scan ( int mport_id , struct rio_scan * scan_ops ) ;
2013-07-04 02:08:53 +04:00
extern int rio_unregister_scan ( int mport_id , struct rio_scan * scan_ops ) ;
2013-05-25 02:55:05 +04:00
extern void rio_attach_device ( struct rio_dev * rdev ) ;
2013-05-25 02:55:06 +04:00
extern struct rio_mport * rio_find_mport ( int mport_id ) ;
2013-07-04 02:08:53 +04:00
extern int rio_mport_scan ( int mport_id ) ;
2005-11-07 12:00:15 +03:00
/* Structures internal to the RIO core code */
2013-10-07 10:55:47 +04:00
extern const struct attribute_group * rio_dev_groups [ ] ;
2013-08-24 01:24:29 +04:00
extern const struct attribute_group * rio_bus_groups [ ] ;
2014-04-08 02:38:56 +04:00
extern const struct attribute_group * rio_mport_groups [ ] ;
2005-11-07 12:00:15 +03:00
2008-04-19 00:33:42 +04:00
# define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16))
# define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16))