| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2006 Cisco Systems, Inc.  All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This software is available to you under a choice of one of two | 
					
						
							|  |  |  |  * licenses.  You may choose to be licensed under the terms of the GNU | 
					
						
							|  |  |  |  * General Public License (GPL) Version 2, available from the file | 
					
						
							|  |  |  |  * COPYING in the main directory of this source tree, or the | 
					
						
							|  |  |  |  * OpenIB.org BSD license below: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     Redistribution and use in source and binary forms, with or | 
					
						
							|  |  |  |  *     without modification, are permitted provided that the following | 
					
						
							|  |  |  |  *     conditions are met: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *      - Redistributions of source code must retain the above | 
					
						
							|  |  |  |  *        copyright notice, this list of conditions and the following | 
					
						
							|  |  |  |  *        disclaimer. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *      - Redistributions in binary form must reproduce the above | 
					
						
							|  |  |  |  *        copyright notice, this list of conditions and the following | 
					
						
							|  |  |  |  *        disclaimer in the documentation and/or other materials | 
					
						
							|  |  |  |  *        provided with the distribution. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
					
						
							|  |  |  |  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
					
						
							|  |  |  |  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | 
					
						
							|  |  |  |  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | 
					
						
							|  |  |  |  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | 
					
						
							|  |  |  |  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 
					
						
							|  |  |  |  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
					
						
							|  |  |  |  * SOFTWARE. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef MLX4_DRIVER_H
 | 
					
						
							|  |  |  | #define MLX4_DRIVER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-02 11:44:49 +00:00
										 |  |  | #include <linux/mlx4/device.h>
 | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct mlx4_dev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-18 22:33:49 +00:00
										 |  |  | #define MLX4_MAC_MASK	   0xffffffffffffULL
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | enum mlx4_dev_event { | 
					
						
							|  |  |  | 	MLX4_DEV_EVENT_CATASTROPHIC_ERROR, | 
					
						
							|  |  |  | 	MLX4_DEV_EVENT_PORT_UP, | 
					
						
							|  |  |  | 	MLX4_DEV_EVENT_PORT_DOWN, | 
					
						
							|  |  |  | 	MLX4_DEV_EVENT_PORT_REINIT, | 
					
						
							| 
									
										
											  
											
												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>
											
										 
											2012-06-19 11:21:40 +03:00
										 |  |  | 	MLX4_DEV_EVENT_PORT_MGMT_CHANGE, | 
					
						
							| 
									
										
										
										
											2012-08-03 08:40:42 +00:00
										 |  |  | 	MLX4_DEV_EVENT_SLAVE_INIT, | 
					
						
							|  |  |  | 	MLX4_DEV_EVENT_SLAVE_SHUTDOWN, | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct mlx4_interface { | 
					
						
							|  |  |  | 	void *			(*add)	 (struct mlx4_dev *dev); | 
					
						
							|  |  |  | 	void			(*remove)(struct mlx4_dev *dev, void *context); | 
					
						
							|  |  |  | 	void			(*event) (struct mlx4_dev *dev, void *context, | 
					
						
							| 
									
										
											  
											
												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>
											
										 
											2012-06-19 11:21:40 +03:00
										 |  |  | 					  enum mlx4_dev_event event, unsigned long param); | 
					
						
							| 
									
										
										
										
											2010-08-26 14:18:43 +00:00
										 |  |  | 	void *			(*get_dev)(struct mlx4_dev *dev, void *context, u8 port); | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | 	struct list_head	list; | 
					
						
							| 
									
										
										
										
											2010-08-26 14:18:43 +00:00
										 |  |  | 	enum mlx4_protocol	protocol; | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int mlx4_register_interface(struct mlx4_interface *intf); | 
					
						
							|  |  |  | void mlx4_unregister_interface(struct mlx4_interface *intf); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-26 14:18:43 +00:00
										 |  |  | void *mlx4_get_protocol_dev(struct mlx4_dev *dev, enum mlx4_protocol proto, int port); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-08 18:00:38 -07:00
										 |  |  | #endif /* MLX4_DRIVER_H */
 |