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)) |