|  | @@ -66,6 +66,8 @@ struct ib_work_queue {
 | 
		
	
		
			
			| 66 | 66 |  	struct list_head list;
 | 
		
	
		
			
			| 67 | 67 |  	/** Number of work queue entries */
 | 
		
	
		
			
			| 68 | 68 |  	unsigned int num_wqes;
 | 
		
	
		
			
			|  | 69 | +	/** Number of occupied work queue entries */
 | 
		
	
		
			
			|  | 70 | +	unsigned int fill;
 | 
		
	
		
			
			| 69 | 71 |  	/** Next work queue entry index
 | 
		
	
		
			
			| 70 | 72 |  	 *
 | 
		
	
		
			
			| 71 | 73 |  	 * This is the index of the next entry to be filled (i.e. the
 | 
		
	
	
		
			
			|  | @@ -355,70 +357,24 @@ extern void ib_destroy_qp ( struct ib_device *ibdev,
 | 
		
	
		
			
			| 355 | 357 |  			    struct ib_queue_pair *qp );
 | 
		
	
		
			
			| 356 | 358 |  extern struct ib_work_queue * ib_find_wq ( struct ib_completion_queue *cq,
 | 
		
	
		
			
			| 357 | 359 |  					   unsigned long qpn, int is_send );
 | 
		
	
		
			
			|  | 360 | +extern int ib_post_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			|  | 361 | +			  struct ib_address_vector *av,
 | 
		
	
		
			
			|  | 362 | +			  struct io_buffer *iobuf );
 | 
		
	
		
			
			|  | 363 | +extern int ib_post_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			|  | 364 | +			  struct io_buffer *iobuf );
 | 
		
	
		
			
			|  | 365 | +extern void ib_complete_send ( struct ib_device *ibdev,
 | 
		
	
		
			
			|  | 366 | +			       struct ib_queue_pair *qp,
 | 
		
	
		
			
			|  | 367 | +			       struct ib_completion *completion,
 | 
		
	
		
			
			|  | 368 | +			       struct io_buffer *iobuf );
 | 
		
	
		
			
			|  | 369 | +extern void ib_complete_recv ( struct ib_device *ibdev,
 | 
		
	
		
			
			|  | 370 | +			       struct ib_queue_pair *qp,
 | 
		
	
		
			
			|  | 371 | +			       struct ib_completion *completion,
 | 
		
	
		
			
			|  | 372 | +			       struct io_buffer *iobuf );
 | 
		
	
		
			
			| 358 | 373 |  extern struct ib_device * alloc_ibdev ( size_t priv_size );
 | 
		
	
		
			
			| 359 | 374 |  extern int register_ibdev ( struct ib_device *ibdev );
 | 
		
	
		
			
			| 360 | 375 |  extern void unregister_ibdev ( struct ib_device *ibdev );
 | 
		
	
		
			
			| 361 | 376 |  extern void ib_link_state_changed ( struct ib_device *ibdev );
 | 
		
	
		
			
			| 362 | 377 |  
 | 
		
	
		
			
			| 363 |  | -/**
 | 
		
	
		
			
			| 364 |  | - * Post send work queue entry
 | 
		
	
		
			
			| 365 |  | - *
 | 
		
	
		
			
			| 366 |  | - * @v ibdev		Infiniband device
 | 
		
	
		
			
			| 367 |  | - * @v qp		Queue pair
 | 
		
	
		
			
			| 368 |  | - * @v av		Address vector
 | 
		
	
		
			
			| 369 |  | - * @v iobuf		I/O buffer
 | 
		
	
		
			
			| 370 |  | - * @ret rc		Return status code
 | 
		
	
		
			
			| 371 |  | - */
 | 
		
	
		
			
			| 372 |  | -static inline __attribute__ (( always_inline )) int
 | 
		
	
		
			
			| 373 |  | -ib_post_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			| 374 |  | -	       struct ib_address_vector *av, struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 375 |  | -	return ibdev->op->post_send ( ibdev, qp, av, iobuf );
 | 
		
	
		
			
			| 376 |  | -}
 | 
		
	
		
			
			| 377 |  | -
 | 
		
	
		
			
			| 378 |  | -/**
 | 
		
	
		
			
			| 379 |  | - * Post receive work queue entry
 | 
		
	
		
			
			| 380 |  | - *
 | 
		
	
		
			
			| 381 |  | - * @v ibdev		Infiniband device
 | 
		
	
		
			
			| 382 |  | - * @v qp		Queue pair
 | 
		
	
		
			
			| 383 |  | - * @v iobuf		I/O buffer
 | 
		
	
		
			
			| 384 |  | - * @ret rc		Return status code
 | 
		
	
		
			
			| 385 |  | - */
 | 
		
	
		
			
			| 386 |  | -static inline __attribute__ (( always_inline )) int
 | 
		
	
		
			
			| 387 |  | -ib_post_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			| 388 |  | -	       struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 389 |  | -	return ibdev->op->post_recv ( ibdev, qp, iobuf );
 | 
		
	
		
			
			| 390 |  | -}
 | 
		
	
		
			
			| 391 |  | -
 | 
		
	
		
			
			| 392 |  | -/**
 | 
		
	
		
			
			| 393 |  | - * Complete send work queue entry
 | 
		
	
		
			
			| 394 |  | - *
 | 
		
	
		
			
			| 395 |  | - * @v ibdev		Infiniband device
 | 
		
	
		
			
			| 396 |  | - * @v qp		Queue pair
 | 
		
	
		
			
			| 397 |  | - * @v completion	Completion
 | 
		
	
		
			
			| 398 |  | - * @v iobuf		I/O buffer
 | 
		
	
		
			
			| 399 |  | - */
 | 
		
	
		
			
			| 400 |  | -static inline __attribute__ (( always_inline )) void
 | 
		
	
		
			
			| 401 |  | -ib_complete_send ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			| 402 |  | -		   struct ib_completion *completion,
 | 
		
	
		
			
			| 403 |  | -		   struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 404 |  | -	return qp->send.cq->complete_send ( ibdev, qp, completion, iobuf );
 | 
		
	
		
			
			| 405 |  | -}
 | 
		
	
		
			
			| 406 |  | -
 | 
		
	
		
			
			| 407 |  | -/**
 | 
		
	
		
			
			| 408 |  | - * Complete receive work queue entry
 | 
		
	
		
			
			| 409 |  | - *
 | 
		
	
		
			
			| 410 |  | - * @v ibdev		Infiniband device
 | 
		
	
		
			
			| 411 |  | - * @v qp		Queue pair
 | 
		
	
		
			
			| 412 |  | - * @v completion	Completion
 | 
		
	
		
			
			| 413 |  | - * @v iobuf		I/O buffer
 | 
		
	
		
			
			| 414 |  | - */
 | 
		
	
		
			
			| 415 |  | -static inline __attribute__ (( always_inline )) void
 | 
		
	
		
			
			| 416 |  | -ib_complete_recv ( struct ib_device *ibdev, struct ib_queue_pair *qp,
 | 
		
	
		
			
			| 417 |  | -		   struct ib_completion *completion,
 | 
		
	
		
			
			| 418 |  | -		   struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 419 |  | -	return qp->recv.cq->complete_recv ( ibdev, qp, completion, iobuf );
 | 
		
	
		
			
			| 420 |  | -}
 | 
		
	
		
			
			| 421 |  | -
 | 
		
	
		
			
			| 422 | 378 |  /**
 | 
		
	
		
			
			| 423 | 379 |   * Poll completion queue
 | 
		
	
		
			
			| 424 | 380 |   *
 |