diff options
Diffstat (limited to 'drivers/rapidio/rio.h')
| -rw-r--r-- | drivers/rapidio/rio.h | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/drivers/rapidio/rio.h b/drivers/rapidio/rio.h index 7786d02581f2..f27b7a9c47d2 100644 --- a/drivers/rapidio/rio.h +++ b/drivers/rapidio/rio.h | |||
| @@ -18,38 +18,50 @@ | |||
| 18 | 18 | ||
| 19 | extern u32 rio_mport_get_feature(struct rio_mport *mport, int local, u16 destid, | 19 | extern u32 rio_mport_get_feature(struct rio_mport *mport, int local, u16 destid, |
| 20 | u8 hopcount, int ftr); | 20 | u8 hopcount, int ftr); |
| 21 | extern u32 rio_mport_get_physefb(struct rio_mport *port, int local, | ||
| 22 | u16 destid, u8 hopcount); | ||
| 23 | extern u32 rio_mport_get_efb(struct rio_mport *port, int local, u16 destid, | ||
| 24 | u8 hopcount, u32 from); | ||
| 21 | extern int rio_create_sysfs_dev_files(struct rio_dev *rdev); | 25 | extern int rio_create_sysfs_dev_files(struct rio_dev *rdev); |
| 22 | extern int rio_enum_mport(struct rio_mport *mport); | 26 | extern int rio_enum_mport(struct rio_mport *mport); |
| 23 | extern int rio_disc_mport(struct rio_mport *mport); | 27 | extern int rio_disc_mport(struct rio_mport *mport); |
| 28 | extern int rio_std_route_add_entry(struct rio_mport *mport, u16 destid, | ||
| 29 | u8 hopcount, u16 table, u16 route_destid, | ||
| 30 | u8 route_port); | ||
| 31 | extern int rio_std_route_get_entry(struct rio_mport *mport, u16 destid, | ||
| 32 | u8 hopcount, u16 table, u16 route_destid, | ||
| 33 | u8 *route_port); | ||
| 34 | extern int rio_std_route_clr_table(struct rio_mport *mport, u16 destid, | ||
| 35 | u8 hopcount, u16 table); | ||
| 36 | extern int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock); | ||
| 24 | 37 | ||
| 25 | /* Structures internal to the RIO core code */ | 38 | /* Structures internal to the RIO core code */ |
| 26 | extern struct device_attribute rio_dev_attrs[]; | 39 | extern struct device_attribute rio_dev_attrs[]; |
| 27 | extern spinlock_t rio_global_list_lock; | 40 | extern spinlock_t rio_global_list_lock; |
| 28 | 41 | ||
| 29 | extern struct rio_route_ops __start_rio_route_ops[]; | 42 | extern struct rio_switch_ops __start_rio_switch_ops[]; |
| 30 | extern struct rio_route_ops __end_rio_route_ops[]; | 43 | extern struct rio_switch_ops __end_rio_switch_ops[]; |
| 31 | 44 | ||
| 32 | /* Helpers internal to the RIO core code */ | 45 | /* Helpers internal to the RIO core code */ |
| 33 | #define DECLARE_RIO_ROUTE_SECTION(section, vid, did, add_hook, get_hook) \ | 46 | #define DECLARE_RIO_SWITCH_SECTION(section, name, vid, did, init_hook) \ |
| 34 | static struct rio_route_ops __rio_route_ops __used \ | 47 | static const struct rio_switch_ops __rio_switch_##name __used \ |
| 35 | __section(section)= { vid, did, add_hook, get_hook }; | 48 | __section(section) = { vid, did, init_hook }; |
| 36 | 49 | ||
| 37 | /** | 50 | /** |
| 38 | * DECLARE_RIO_ROUTE_OPS - Registers switch routing operations | 51 | * DECLARE_RIO_SWITCH_INIT - Registers switch initialization routine |
| 39 | * @vid: RIO vendor ID | 52 | * @vid: RIO vendor ID |
| 40 | * @did: RIO device ID | 53 | * @did: RIO device ID |
| 41 | * @add_hook: Callback that adds a route entry | 54 | * @init_hook: Callback that performs switch-specific initialization |
| 42 | * @get_hook: Callback that gets a route entry | ||
| 43 | * | 55 | * |
| 44 | * Manipulating switch route tables in RIO is switch specific. This | 56 | * Manipulating switch route tables and error management in RIO |
| 45 | * registers a switch by vendor and device ID with two callbacks for | 57 | * is switch specific. This registers a switch by vendor and device ID with |
| 46 | * modifying and retrieving route entries in a switch. A &struct | 58 | * initialization callback for setting up switch operations and (if required) |
| 47 | * rio_route_ops is initialized with the ops and placed into a | 59 | * hardware initialization. A &struct rio_switch_ops is initialized with |
| 48 | * RIO-specific kernel section. | 60 | * pointer to the init routine and placed into a RIO-specific kernel section. |
| 49 | */ | 61 | */ |
| 50 | #define DECLARE_RIO_ROUTE_OPS(vid, did, add_hook, get_hook) \ | 62 | #define DECLARE_RIO_SWITCH_INIT(vid, did, init_hook) \ |
| 51 | DECLARE_RIO_ROUTE_SECTION(.rio_route_ops, \ | 63 | DECLARE_RIO_SWITCH_SECTION(.rio_switch_ops, vid##did, \ |
| 52 | vid, did, add_hook, get_hook) | 64 | vid, did, init_hook) |
| 53 | 65 | ||
| 54 | #define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16)) | 66 | #define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16)) |
| 55 | #define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16)) | 67 | #define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16)) |
