aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/mlx4.h
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@dev.mellanox.co.il>2012-06-19 04:21:40 -0400
committerRoland Dreier <roland@purestorage.com>2012-07-10 12:47:10 -0400
commit00f5ce99dc6ee46c3113393cc8fa12173f9bbcd7 (patch)
treecbcd8e2afcd492b3677bf3eedec29b34f249129c /drivers/net/ethernet/mellanox/mlx4/mlx4.h
parent3045f0920367e625bbec7d66fadb444e673515af (diff)
mlx4: Use port management change event instead of smp_snoop
The port management change event can replace smp_snoop. If the capability bit for this event is set in dev-caps, the event is used (by the driver setting the PORT_MNG_CHG_EVENT bit in the async event mask in the MAP_EQ fw command). In this case, when the driver passes incoming SMP PORT_INFO SET mads to the FW, the FW generates port management change events to signal any changes to the driver. If the FW generates these events, smp_snoop shouldn't be invoked in ib_process_mad(), or duplicate events will occur (once from the FW-generated event, and once from smp_snoop). In the case where the FW does not generate port management change events smp_snoop needs to be invoked to create these events. The flow in smp_snoop has been modified to make use of the same procedures as in the fw-generated-event event case to generate the port management events (LID change, Client-rereg, Pkey change, and/or GID change). Port management change event handling required changing the mlx4_ib_event and mlx4_dispatch_event prototypes; the "param" argument (last argument) had to be changed to unsigned long in order to accomodate passing the EQE pointer. We also needed to move the definition of struct mlx4_eqe from net/mlx4.h to file device.h -- to make it available to the IB driver, to handle port management change events. Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/mlx4.h')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4.h63
1 files changed, 2 insertions, 61 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
index e5d20220762c..4d11d12b9db4 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
@@ -338,66 +338,6 @@ struct mlx4_srq_context {
338 __be64 db_rec_addr; 338 __be64 db_rec_addr;
339}; 339};
340 340
341struct mlx4_eqe {
342 u8 reserved1;
343 u8 type;
344 u8 reserved2;
345 u8 subtype;
346 union {
347 u32 raw[6];
348 struct {
349 __be32 cqn;
350 } __packed comp;
351 struct {
352 u16 reserved1;
353 __be16 token;
354 u32 reserved2;
355 u8 reserved3[3];
356 u8 status;
357 __be64 out_param;
358 } __packed cmd;
359 struct {
360 __be32 qpn;
361 } __packed qp;
362 struct {
363 __be32 srqn;
364 } __packed srq;
365 struct {
366 __be32 cqn;
367 u32 reserved1;
368 u8 reserved2[3];
369 u8 syndrome;
370 } __packed cq_err;
371 struct {
372 u32 reserved1[2];
373 __be32 port;
374 } __packed port_change;
375 struct {
376 #define COMM_CHANNEL_BIT_ARRAY_SIZE 4
377 u32 reserved;
378 u32 bit_vec[COMM_CHANNEL_BIT_ARRAY_SIZE];
379 } __packed comm_channel_arm;
380 struct {
381 u8 port;
382 u8 reserved[3];
383 __be64 mac;
384 } __packed mac_update;
385 struct {
386 u8 port;
387 } __packed sw_event;
388 struct {
389 __be32 slave_id;
390 } __packed flr_event;
391 struct {
392 __be16 current_temperature;
393 __be16 warning_threshold;
394 } __packed warming;
395 } event;
396 u8 slave_id;
397 u8 reserved3[2];
398 u8 owner;
399} __packed;
400
401struct mlx4_eq { 341struct mlx4_eq {
402 struct mlx4_dev *dev; 342 struct mlx4_dev *dev;
403 void __iomem *doorbell; 343 void __iomem *doorbell;
@@ -887,7 +827,8 @@ void mlx4_catas_init(void);
887int mlx4_restart_one(struct pci_dev *pdev); 827int mlx4_restart_one(struct pci_dev *pdev);
888int mlx4_register_device(struct mlx4_dev *dev); 828int mlx4_register_device(struct mlx4_dev *dev);
889void mlx4_unregister_device(struct mlx4_dev *dev); 829void mlx4_unregister_device(struct mlx4_dev *dev);
890void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type, int port); 830void mlx4_dispatch_event(struct mlx4_dev *dev, enum mlx4_dev_event type,
831 unsigned long param);
891 832
892struct mlx4_dev_cap; 833struct mlx4_dev_cap;
893struct mlx4_init_hca_param; 834struct mlx4_init_hca_param;