mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 05:31:15 +00:00
rapidio: add Port-Write handling for EM
Add RapidIO Port-Write message handling in the context of Error Management Extensions Specification Rev.1.3. Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Tested-by: Thomas Moll <thomas.moll@sysgo.com> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Li Yang <leoli@freescale.com> Cc: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
818a04a0bb
commit
e5cabeb3d6
10 changed files with 776 additions and 41 deletions
|
@ -64,10 +64,13 @@
|
|||
#define RIO_INB_MBOX_RESOURCE 1
|
||||
#define RIO_OUTB_MBOX_RESOURCE 2
|
||||
|
||||
#define RIO_PW_MSG_SIZE 64
|
||||
|
||||
extern struct bus_type rio_bus_type;
|
||||
extern struct list_head rio_devices; /* list of all devices */
|
||||
|
||||
struct rio_mport;
|
||||
union rio_pw_msg;
|
||||
|
||||
/**
|
||||
* struct rio_dev - RIO device info
|
||||
|
@ -107,11 +110,15 @@ struct rio_dev {
|
|||
u32 swpinfo; /* Only used for switches */
|
||||
u32 src_ops;
|
||||
u32 dst_ops;
|
||||
u32 comp_tag;
|
||||
u32 phys_efptr;
|
||||
u32 em_efptr;
|
||||
u64 dma_mask;
|
||||
struct rio_switch *rswitch; /* RIO switch info */
|
||||
struct rio_driver *driver; /* RIO driver claiming this device */
|
||||
struct device dev; /* LDM device structure */
|
||||
struct resource riores[RIO_MAX_DEV_RESOURCES];
|
||||
int (*pwcback) (struct rio_dev *rdev, union rio_pw_msg *msg, int step);
|
||||
u16 destid;
|
||||
};
|
||||
|
||||
|
@ -211,9 +218,12 @@ struct rio_net {
|
|||
* @hopcount: Hopcount to this switch
|
||||
* @destid: Associated destid in the path
|
||||
* @route_table: Copy of switch routing table
|
||||
* @port_ok: Status of each port (one bit per port) - OK=1 or UNINIT=0
|
||||
* @add_entry: Callback for switch-specific route add function
|
||||
* @get_entry: Callback for switch-specific route get function
|
||||
* @clr_table: Callback for switch-specific clear route table function
|
||||
* @em_init: Callback for switch-specific error management initialization function
|
||||
* @em_handle: Callback for switch-specific error management handler function
|
||||
*/
|
||||
struct rio_switch {
|
||||
struct list_head node;
|
||||
|
@ -221,12 +231,15 @@ struct rio_switch {
|
|||
u16 hopcount;
|
||||
u16 destid;
|
||||
u8 *route_table;
|
||||
u32 port_ok;
|
||||
int (*add_entry) (struct rio_mport * mport, u16 destid, u8 hopcount,
|
||||
u16 table, u16 route_destid, u8 route_port);
|
||||
int (*get_entry) (struct rio_mport * mport, u16 destid, u8 hopcount,
|
||||
u16 table, u16 route_destid, u8 * route_port);
|
||||
int (*clr_table) (struct rio_mport *mport, u16 destid, u8 hopcount,
|
||||
u16 table);
|
||||
int (*em_init) (struct rio_dev *dev);
|
||||
int (*em_handle) (struct rio_dev *dev, u8 swport);
|
||||
};
|
||||
|
||||
/* Low-level architecture-dependent routines */
|
||||
|
@ -238,6 +251,7 @@ struct rio_switch {
|
|||
* @cread: Callback to perform network read of config space.
|
||||
* @cwrite: Callback to perform network write of config space.
|
||||
* @dsend: Callback to send a doorbell message.
|
||||
* @pwenable: Callback to enable/disable port-write message handling.
|
||||
*/
|
||||
struct rio_ops {
|
||||
int (*lcread) (struct rio_mport *mport, int index, u32 offset, int len,
|
||||
|
@ -249,6 +263,7 @@ struct rio_ops {
|
|||
int (*cwrite) (struct rio_mport *mport, int index, u16 destid,
|
||||
u8 hopcount, u32 offset, int len, u32 data);
|
||||
int (*dsend) (struct rio_mport *mport, int index, u16 destid, u16 data);
|
||||
int (*pwenable) (struct rio_mport *mport, int enable);
|
||||
};
|
||||
|
||||
#define RIO_RESOURCE_MEM 0x00000100
|
||||
|
@ -325,6 +340,33 @@ struct rio_route_ops {
|
|||
u16 table);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rio_em_ops - Per-switch error management operations
|
||||
* @vid: RIO vendor ID
|
||||
* @did: RIO device ID
|
||||
* @init_hook: Switch specific error management initialization (may be NULL)
|
||||
* @handler_hook: Switch specific error management handler (may be NULL)
|
||||
*
|
||||
* Defines the operations that are necessary to initialize and handle
|
||||
* error management events for a particular RIO switch device.
|
||||
*/
|
||||
struct rio_em_ops {
|
||||
u16 vid, did;
|
||||
int (*init_hook) (struct rio_dev *dev);
|
||||
int (*handler_hook) (struct rio_dev *dev, u8 swport);
|
||||
};
|
||||
|
||||
union rio_pw_msg {
|
||||
struct {
|
||||
u32 comptag; /* Component Tag CSR */
|
||||
u32 errdetect; /* Port N Error Detect CSR */
|
||||
u32 is_port; /* Implementation specific + PortID */
|
||||
u32 ltlerrdet; /* LTL Error Detect CSR */
|
||||
u32 padding[12];
|
||||
} em;
|
||||
u32 raw[RIO_PW_MSG_SIZE/sizeof(u32)];
|
||||
};
|
||||
|
||||
/* Architecture and hardware-specific functions */
|
||||
extern int rio_init_mports(void);
|
||||
extern void rio_register_mport(struct rio_mport *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue