diff options
author | Matt Porter <mporter@kernel.crashing.org> | 2005-11-07 04:00:15 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-07 10:53:46 -0500 |
commit | 394b701ce4fbfde919a9bcbf84cb4820a7c6d47c (patch) | |
tree | a397fff4043a9810e753fb81224349bd36db45b8 /drivers/rapidio/rio.h | |
parent | d217d5450f11d8c907c0458d175b0dc999b4d06d (diff) |
[PATCH] RapidIO support: core base
Adds a RapidIO subsystem to the kernel. RIO is a switched fabric interconnect
used in higher-end embedded applications. The curious can look at the specs
over at http://www.rapidio.org
The core code implements enumeration/discovery, management of
devices/resources, and interfaces for RIO drivers.
There's a lot more to do to take advantages of all the hardware features.
However, this should provide a good base for folks with RIO hardware to start
contributing.
Signed-off-by: Matt Porter <mporter@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/rapidio/rio.h')
-rw-r--r-- | drivers/rapidio/rio.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/drivers/rapidio/rio.h b/drivers/rapidio/rio.h new file mode 100644 index 000000000000..f865a68cd3d5 --- /dev/null +++ b/drivers/rapidio/rio.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * RapidIO interconnect services | ||
3 | * | ||
4 | * Copyright 2005 MontaVista Software, Inc. | ||
5 | * Matt Porter <mporter@kernel.crashing.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | */ | ||
12 | |||
13 | #include <linux/device.h> | ||
14 | #include <linux/list.h> | ||
15 | #include <linux/rio.h> | ||
16 | |||
17 | /* Functions internal to the RIO core code */ | ||
18 | |||
19 | extern u32 rio_mport_get_feature(struct rio_mport *mport, int local, u16 destid, | ||
20 | u8 hopcount, int ftr); | ||
21 | extern int rio_create_sysfs_dev_files(struct rio_dev *rdev); | ||
22 | extern int rio_enum_mport(struct rio_mport *mport); | ||
23 | extern int rio_disc_mport(struct rio_mport *mport); | ||
24 | |||
25 | /* Structures internal to the RIO core code */ | ||
26 | extern struct device_attribute rio_dev_attrs[]; | ||
27 | extern spinlock_t rio_global_list_lock; | ||
28 | |||
29 | /* Helpers internal to the RIO core code */ | ||
30 | #define DECLARE_RIO_ROUTE_SECTION(section, vid, did, add_hook, get_hook) \ | ||
31 | static struct rio_route_ops __rio_route_ops __attribute_used__ \ | ||
32 | __attribute__((__section__(#section))) = { vid, did, add_hook, get_hook }; | ||
33 | |||
34 | /** | ||
35 | * DECLARE_RIO_ROUTE_OPS - Registers switch routing operations | ||
36 | * @vid: RIO vendor ID | ||
37 | * @did: RIO device ID | ||
38 | * @add_hook: Callback that adds a route entry | ||
39 | * @get_hook: Callback that gets a route entry | ||
40 | * | ||
41 | * Manipulating switch route tables in RIO is switch specific. This | ||
42 | * registers a switch by vendor and device ID with two callbacks for | ||
43 | * modifying and retrieving route entries in a switch. A &struct | ||
44 | * rio_route_ops is initialized with the ops and placed into a | ||
45 | * RIO-specific kernel section. | ||
46 | */ | ||
47 | #define DECLARE_RIO_ROUTE_OPS(vid, did, add_hook, get_hook) \ | ||
48 | DECLARE_RIO_ROUTE_SECTION(.rio_route_ops, \ | ||
49 | vid, did, add_hook, get_hook) | ||
50 | |||
51 | #ifdef CONFIG_RAPIDIO_8_BIT_TRANSPORT | ||
52 | #define RIO_GET_DID(x) ((x & 0x00ff0000) >> 16) | ||
53 | #define RIO_SET_DID(x) ((x & 0x000000ff) << 16) | ||
54 | #else | ||
55 | #define RIO_GET_DID(x) (x & 0xffff) | ||
56 | #define RIO_SET_DID(x) (x & 0xffff) | ||
57 | #endif | ||