[MLX4] added HCA Soft Reset mechanism (used by Ethernet interface so far)
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 4 Aug 2008 16:18:23 +0000 (16:18 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 4 Aug 2008 16:18:23 +0000 (16:18 +0000)
commit04b3cee66ee5fa69b131feb54c8af34639d52377
treea3d19022a323ce0c408ed2bcfbb4f708d85b0c43
parentecc23d2be527e6cec1857a0eba747e8c63d6a30f
[MLX4] added HCA Soft Reset mechanism (used by Ethernet interface so far)

Soft Reset here is HCA re-initialization without bus driver reloading.
A reset can be initiated by clients (mlx4_eth, mlx4_hca) and/or driver (mlx4_bus).
Driver issues reset upon card fatal error, which prevents the following work with the card.
Clients may request the reset at any moment upon their will.

Clients have to register event callback after getting bus interface.

When a reset event comes, the bus driver will:
   - bar the following work with card, returning –EFAULT to all, but destroy_xx, commands;
   - reset the card to stop incoming traffic (only in case of client-initiated reset);
   - notify all registered clients about pending reset.

Getting this notification clients have to:
   - wait for all issued commands to end;
   - reset its own clients, if any, and bar their work;
   - release all the device resources, they were using till now;
   - send “I’m reset-ready” notification to the bus driver;

The driver starts to perform device reset only after receiving the “I’m reset-ready” notifications from all the registered clients. It re-initializes the device and notifies all the clients.

Having received this notification, clients have to:
   - dereference the old bus interface;
   - get the new interface from bus driver;
   - register new event handler;
   - resume/restart itself;
   - wake up its own clients, if any;

git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1463 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
32 files changed:
hw/mlx4/kernel/bus/core/SOURCES
hw/mlx4/kernel/bus/core/cache.c
hw/mlx4/kernel/bus/drv/drv.c
hw/mlx4/kernel/bus/drv/drv.h
hw/mlx4/kernel/bus/drv/mlx4_bus.inx
hw/mlx4/kernel/bus/drv/pdo.c
hw/mlx4/kernel/bus/ib/ah.c
hw/mlx4/kernel/bus/ib/cq.c
hw/mlx4/kernel/bus/ib/mad.c
hw/mlx4/kernel/bus/ib/main.c
hw/mlx4/kernel/bus/ib/mr.c
hw/mlx4/kernel/bus/ib/qp.c
hw/mlx4/kernel/bus/ib/srq.c
hw/mlx4/kernel/bus/inc/bus_intf.h
hw/mlx4/kernel/bus/inc/device.h
hw/mlx4/kernel/bus/inc/ib_verbs.h
hw/mlx4/kernel/bus/net/alloc.c
hw/mlx4/kernel/bus/net/catas.c
hw/mlx4/kernel/bus/net/cmd.c
hw/mlx4/kernel/bus/net/cq.c
hw/mlx4/kernel/bus/net/eq.c
hw/mlx4/kernel/bus/net/fw.c
hw/mlx4/kernel/bus/net/main.c
hw/mlx4/kernel/bus/net/mlx4.h
hw/mlx4/kernel/bus/net/mr.c
hw/mlx4/kernel/bus/net/pd.c
hw/mlx4/kernel/bus/net/port.c
hw/mlx4/kernel/bus/net/qp.c
hw/mlx4/kernel/bus/net/srq.c
hw/mlx4/kernel/hca/data.c
hw/mlx4/kernel/inc/l2w.h
hw/mlx4/kernel/inc/vip_dev.h