2019-05-27 08:55:01 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-11-07 01:00:15 -08: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-27 15:34:32 -07:00
# define RIO_MAX_CHK_RETRY 3
2013-05-24 15:55:05 -07:00
# define RIO_MPORT_ANY (-1)
2010-10-27 15:34:32 -07:00
2005-11-07 01:00:15 -08: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-26 14:43:59 -07:00
extern u32 rio_mport_get_physefb ( struct rio_mport * port , int local ,
2016-08-02 14:06:57 -07:00
u16 destid , u8 hopcount , u32 * rmap ) ;
2010-05-26 14:43:59 -07:00
extern u32 rio_mport_get_efb ( struct rio_mport * port , int local , u16 destid ,
u8 hopcount , u32 from ) ;
2010-10-27 15:34:32 -07:00
extern int rio_mport_chk_dev_access ( struct rio_mport * mport , u16 destid ,
u8 hopcount ) ;
2013-07-03 15:08:50 -07: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-26 14:43:59 -07:00
extern int rio_set_port_lockout ( struct rio_dev * rdev , u32 pnum , int lock ) ;
2010-10-27 15:34:34 -07:00
extern struct rio_dev * rio_get_comptag ( u32 comp_tag , struct rio_dev * from ) ;
2016-03-22 14:26:17 -07: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-24 15:55:05 -07:00
extern int rio_add_device ( struct rio_dev * rdev ) ;
2016-03-22 14:26:20 -07:00
extern void rio_del_device ( struct rio_dev * rdev , enum rio_device_state state ) ;
2013-05-24 15:55:05 -07: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-03 15:08:53 -07:00
extern int rio_unregister_scan ( int mport_id , struct rio_scan * scan_ops ) ;
2013-05-24 15:55:05 -07:00
extern void rio_attach_device ( struct rio_dev * rdev ) ;
2013-05-24 15:55:06 -07:00
extern struct rio_mport * rio_find_mport ( int mport_id ) ;
2013-07-03 15:08:53 -07:00
extern int rio_mport_scan ( int mport_id ) ;
2005-11-07 01:00:15 -08:00
/* Structures internal to the RIO core code */
2013-10-06 23:55:47 -07:00
extern const struct attribute_group * rio_dev_groups [ ] ;
2013-08-23 14:24:29 -07:00
extern const struct attribute_group * rio_bus_groups [ ] ;
2014-04-07 15:38:56 -07:00
extern const struct attribute_group * rio_mport_groups [ ] ;
2005-11-07 01:00:15 -08:00
2008-04-18 13:33:42 -07: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))