diff options
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_verbs.c')
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_verbs.c | 41 | 
1 files changed, 34 insertions, 7 deletions
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index c0d0296e7a00..fbc43e5f717b 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c @@ -512,12 +512,16 @@ static void nes_free_fast_reg_page_list(struct ib_fast_reg_page_list *pifrpl)  /**   * nes_query_device   */ -static int nes_query_device(struct ib_device *ibdev, struct ib_device_attr *props) +static int nes_query_device(struct ib_device *ibdev, struct ib_device_attr *props, +			    struct ib_udata *uhw)  {  	struct nes_vnic *nesvnic = to_nesvnic(ibdev);  	struct nes_device *nesdev = nesvnic->nesdev;  	struct nes_ib_device *nesibdev = nesvnic->nesibdev; +	if (uhw->inlen || uhw->outlen) +		return -EINVAL; +  	memset(props, 0, sizeof(*props));  	memcpy(&props->sys_image_guid, nesvnic->netdev->dev_addr, 6); @@ -606,7 +610,6 @@ static int nes_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr  	return 0;  } -  /**   * nes_query_pkey   */ @@ -1527,10 +1530,12 @@ static int nes_destroy_qp(struct ib_qp *ibqp)  /**   * nes_create_cq   */ -static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries, -		int comp_vector, -		struct ib_ucontext *context, struct ib_udata *udata) +static struct ib_cq *nes_create_cq(struct ib_device *ibdev, +				   const struct ib_cq_init_attr *attr, +				   struct ib_ucontext *context, +				   struct ib_udata *udata)  { +	int entries = attr->cqe;  	u64 u64temp;  	struct nes_vnic *nesvnic = to_nesvnic(ibdev);  	struct nes_device *nesdev = nesvnic->nesdev; @@ -1550,6 +1555,9 @@ static struct ib_cq *nes_create_cq(struct ib_device *ibdev, int entries,  	unsigned long flags;  	int ret; +	if (attr->flags) +		return ERR_PTR(-EINVAL); +  	if (entries > nesadapter->max_cqe)  		return ERR_PTR(-EINVAL); @@ -3222,8 +3230,10 @@ static int nes_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)   * nes_process_mad   */  static int nes_process_mad(struct ib_device *ibdev, int mad_flags, -		u8 port_num, struct ib_wc *in_wc, struct ib_grh *in_grh, -		struct ib_mad *in_mad, struct ib_mad *out_mad) +		u8 port_num, const struct ib_wc *in_wc, const struct ib_grh *in_grh, +		const struct ib_mad_hdr *in, size_t in_mad_size, +		struct ib_mad_hdr *out, size_t *out_mad_size, +		u16 *out_mad_pkey_index)  {  	nes_debug(NES_DBG_INIT, "\n");  	return -ENOSYS; @@ -3828,6 +3838,22 @@ static int nes_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags notify_  	return 0;  } +static int nes_port_immutable(struct ib_device *ibdev, u8 port_num, +			      struct ib_port_immutable *immutable) +{ +	struct ib_port_attr attr; +	int err; + +	err = nes_query_port(ibdev, port_num, &attr); +	if (err) +		return err; + +	immutable->pkey_tbl_len = attr.pkey_tbl_len; +	immutable->gid_tbl_len = attr.gid_tbl_len; +	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP; + +	return 0; +}  /**   * nes_init_ofa_device @@ -3928,6 +3954,7 @@ struct nes_ib_device *nes_init_ofa_device(struct net_device *netdev)  	nesibdev->ibdev.iwcm->reject = nes_reject;  	nesibdev->ibdev.iwcm->create_listen = nes_create_listen;  	nesibdev->ibdev.iwcm->destroy_listen = nes_destroy_listen; +	nesibdev->ibdev.get_port_immutable   = nes_port_immutable;  	return nesibdev;  }  |