b77a2030df
Add common mport removal support functions into the RapidIO subsystem core. Changes to the existing mport registration process have been made to avoid race conditions with active subsystem interfaces immediately after mport device registration: part of initialization code from rio_register_mport() have been moved into separate function rio_mport_initialize() to allow to perform mport registration as the final step of setup process. Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Aurelien Jacquiot <a-jacquiot@ti.com> Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
62 lines
2.7 KiB
C
62 lines
2.7 KiB
C
/*
|
|
* RapidIO interconnect services
|
|
*
|
|
* Copyright 2005 MontaVista Software, Inc.
|
|
* Matt Porter <mporter@kernel.crashing.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/list.h>
|
|
#include <linux/rio.h>
|
|
|
|
#define RIO_MAX_CHK_RETRY 3
|
|
#define RIO_MPORT_ANY (-1)
|
|
|
|
/* 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);
|
|
extern u32 rio_mport_get_physefb(struct rio_mport *port, int local,
|
|
u16 destid, u8 hopcount);
|
|
extern u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid,
|
|
u8 hopcount, u32 from);
|
|
extern int rio_mport_chk_dev_access(struct rio_mport *mport, u16 destid,
|
|
u8 hopcount);
|
|
extern int rio_create_sysfs_dev_files(struct rio_dev *rdev);
|
|
extern void rio_remove_sysfs_dev_files(struct rio_dev *rdev);
|
|
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);
|
|
extern int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock);
|
|
extern struct rio_dev *rio_get_comptag(u32 comp_tag, struct rio_dev *from);
|
|
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);
|
|
extern int rio_add_device(struct rio_dev *rdev);
|
|
extern void rio_del_device(struct rio_dev *rdev, enum rio_device_state state);
|
|
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);
|
|
extern int rio_unregister_scan(int mport_id, struct rio_scan *scan_ops);
|
|
extern void rio_attach_device(struct rio_dev *rdev);
|
|
extern struct rio_mport *rio_find_mport(int mport_id);
|
|
extern int rio_mport_scan(int mport_id);
|
|
|
|
/* Structures internal to the RIO core code */
|
|
extern const struct attribute_group *rio_dev_groups[];
|
|
extern const struct attribute_group *rio_bus_groups[];
|
|
extern const struct attribute_group *rio_mport_groups[];
|
|
|
|
#define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16))
|
|
#define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16))
|