aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/amso1100/c2_provider.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw/amso1100/c2_provider.c')
-rw-r--r--drivers/infiniband/hw/amso1100/c2_provider.c85
1 files changed, 44 insertions, 41 deletions
diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c
index 7a6cece6ea9d..e10d27a6e145 100644
--- a/drivers/infiniband/hw/amso1100/c2_provider.c
+++ b/drivers/infiniband/hw/amso1100/c2_provider.c
@@ -67,7 +67,7 @@ static int c2_query_device(struct ib_device *ibdev,
67{ 67{
68 struct c2_dev *c2dev = to_c2dev(ibdev); 68 struct c2_dev *c2dev = to_c2dev(ibdev);
69 69
70 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 70 pr_debug("%s:%u\n", __func__, __LINE__);
71 71
72 *props = c2dev->props; 72 *props = c2dev->props;
73 return 0; 73 return 0;
@@ -76,7 +76,7 @@ static int c2_query_device(struct ib_device *ibdev,
76static int c2_query_port(struct ib_device *ibdev, 76static int c2_query_port(struct ib_device *ibdev,
77 u8 port, struct ib_port_attr *props) 77 u8 port, struct ib_port_attr *props)
78{ 78{
79 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 79 pr_debug("%s:%u\n", __func__, __LINE__);
80 80
81 props->max_mtu = IB_MTU_4096; 81 props->max_mtu = IB_MTU_4096;
82 props->lid = 0; 82 props->lid = 0;
@@ -102,14 +102,14 @@ static int c2_modify_port(struct ib_device *ibdev,
102 u8 port, int port_modify_mask, 102 u8 port, int port_modify_mask,
103 struct ib_port_modify *props) 103 struct ib_port_modify *props)
104{ 104{
105 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 105 pr_debug("%s:%u\n", __func__, __LINE__);
106 return 0; 106 return 0;
107} 107}
108 108
109static int c2_query_pkey(struct ib_device *ibdev, 109static int c2_query_pkey(struct ib_device *ibdev,
110 u8 port, u16 index, u16 * pkey) 110 u8 port, u16 index, u16 * pkey)
111{ 111{
112 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 112 pr_debug("%s:%u\n", __func__, __LINE__);
113 *pkey = 0; 113 *pkey = 0;
114 return 0; 114 return 0;
115} 115}
@@ -119,7 +119,7 @@ static int c2_query_gid(struct ib_device *ibdev, u8 port,
119{ 119{
120 struct c2_dev *c2dev = to_c2dev(ibdev); 120 struct c2_dev *c2dev = to_c2dev(ibdev);
121 121
122 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 122 pr_debug("%s:%u\n", __func__, __LINE__);
123 memset(&(gid->raw[0]), 0, sizeof(gid->raw)); 123 memset(&(gid->raw[0]), 0, sizeof(gid->raw));
124 memcpy(&(gid->raw[0]), c2dev->pseudo_netdev->dev_addr, 6); 124 memcpy(&(gid->raw[0]), c2dev->pseudo_netdev->dev_addr, 6);
125 125
@@ -134,7 +134,7 @@ static struct ib_ucontext *c2_alloc_ucontext(struct ib_device *ibdev,
134{ 134{
135 struct c2_ucontext *context; 135 struct c2_ucontext *context;
136 136
137 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 137 pr_debug("%s:%u\n", __func__, __LINE__);
138 context = kmalloc(sizeof(*context), GFP_KERNEL); 138 context = kmalloc(sizeof(*context), GFP_KERNEL);
139 if (!context) 139 if (!context)
140 return ERR_PTR(-ENOMEM); 140 return ERR_PTR(-ENOMEM);
@@ -144,14 +144,14 @@ static struct ib_ucontext *c2_alloc_ucontext(struct ib_device *ibdev,
144 144
145static int c2_dealloc_ucontext(struct ib_ucontext *context) 145static int c2_dealloc_ucontext(struct ib_ucontext *context)
146{ 146{
147 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 147 pr_debug("%s:%u\n", __func__, __LINE__);
148 kfree(context); 148 kfree(context);
149 return 0; 149 return 0;
150} 150}
151 151
152static int c2_mmap_uar(struct ib_ucontext *context, struct vm_area_struct *vma) 152static int c2_mmap_uar(struct ib_ucontext *context, struct vm_area_struct *vma)
153{ 153{
154 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 154 pr_debug("%s:%u\n", __func__, __LINE__);
155 return -ENOSYS; 155 return -ENOSYS;
156} 156}
157 157
@@ -162,7 +162,7 @@ static struct ib_pd *c2_alloc_pd(struct ib_device *ibdev,
162 struct c2_pd *pd; 162 struct c2_pd *pd;
163 int err; 163 int err;
164 164
165 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 165 pr_debug("%s:%u\n", __func__, __LINE__);
166 166
167 pd = kmalloc(sizeof(*pd), GFP_KERNEL); 167 pd = kmalloc(sizeof(*pd), GFP_KERNEL);
168 if (!pd) 168 if (!pd)
@@ -187,7 +187,7 @@ static struct ib_pd *c2_alloc_pd(struct ib_device *ibdev,
187 187
188static int c2_dealloc_pd(struct ib_pd *pd) 188static int c2_dealloc_pd(struct ib_pd *pd)
189{ 189{
190 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 190 pr_debug("%s:%u\n", __func__, __LINE__);
191 c2_pd_free(to_c2dev(pd->device), to_c2pd(pd)); 191 c2_pd_free(to_c2dev(pd->device), to_c2pd(pd));
192 kfree(pd); 192 kfree(pd);
193 193
@@ -196,13 +196,13 @@ static int c2_dealloc_pd(struct ib_pd *pd)
196 196
197static struct ib_ah *c2_ah_create(struct ib_pd *pd, struct ib_ah_attr *ah_attr) 197static struct ib_ah *c2_ah_create(struct ib_pd *pd, struct ib_ah_attr *ah_attr)
198{ 198{
199 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 199 pr_debug("%s:%u\n", __func__, __LINE__);
200 return ERR_PTR(-ENOSYS); 200 return ERR_PTR(-ENOSYS);
201} 201}
202 202
203static int c2_ah_destroy(struct ib_ah *ah) 203static int c2_ah_destroy(struct ib_ah *ah)
204{ 204{
205 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 205 pr_debug("%s:%u\n", __func__, __LINE__);
206 return -ENOSYS; 206 return -ENOSYS;
207} 207}
208 208
@@ -230,7 +230,7 @@ struct ib_qp *c2_get_qp(struct ib_device *device, int qpn)
230 230
231 qp = c2_find_qpn(c2dev, qpn); 231 qp = c2_find_qpn(c2dev, qpn);
232 pr_debug("%s Returning QP=%p for QPN=%d, device=%p, refcount=%d\n", 232 pr_debug("%s Returning QP=%p for QPN=%d, device=%p, refcount=%d\n",
233 __FUNCTION__, qp, qpn, device, 233 __func__, qp, qpn, device,
234 (qp?atomic_read(&qp->refcount):0)); 234 (qp?atomic_read(&qp->refcount):0));
235 235
236 return (qp?&qp->ibqp:NULL); 236 return (qp?&qp->ibqp:NULL);
@@ -243,13 +243,16 @@ static struct ib_qp *c2_create_qp(struct ib_pd *pd,
243 struct c2_qp *qp; 243 struct c2_qp *qp;
244 int err; 244 int err;
245 245
246 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 246 pr_debug("%s:%u\n", __func__, __LINE__);
247
248 if (init_attr->create_flags)
249 return ERR_PTR(-EINVAL);
247 250
248 switch (init_attr->qp_type) { 251 switch (init_attr->qp_type) {
249 case IB_QPT_RC: 252 case IB_QPT_RC:
250 qp = kzalloc(sizeof(*qp), GFP_KERNEL); 253 qp = kzalloc(sizeof(*qp), GFP_KERNEL);
251 if (!qp) { 254 if (!qp) {
252 pr_debug("%s: Unable to allocate QP\n", __FUNCTION__); 255 pr_debug("%s: Unable to allocate QP\n", __func__);
253 return ERR_PTR(-ENOMEM); 256 return ERR_PTR(-ENOMEM);
254 } 257 }
255 spin_lock_init(&qp->lock); 258 spin_lock_init(&qp->lock);
@@ -266,7 +269,7 @@ static struct ib_qp *c2_create_qp(struct ib_pd *pd,
266 269
267 break; 270 break;
268 default: 271 default:
269 pr_debug("%s: Invalid QP type: %d\n", __FUNCTION__, 272 pr_debug("%s: Invalid QP type: %d\n", __func__,
270 init_attr->qp_type); 273 init_attr->qp_type);
271 return ERR_PTR(-EINVAL); 274 return ERR_PTR(-EINVAL);
272 break; 275 break;
@@ -285,7 +288,7 @@ static int c2_destroy_qp(struct ib_qp *ib_qp)
285 struct c2_qp *qp = to_c2qp(ib_qp); 288 struct c2_qp *qp = to_c2qp(ib_qp);
286 289
287 pr_debug("%s:%u qp=%p,qp->state=%d\n", 290 pr_debug("%s:%u qp=%p,qp->state=%d\n",
288 __FUNCTION__, __LINE__,ib_qp,qp->state); 291 __func__, __LINE__, ib_qp, qp->state);
289 c2_free_qp(to_c2dev(ib_qp->device), qp); 292 c2_free_qp(to_c2dev(ib_qp->device), qp);
290 kfree(qp); 293 kfree(qp);
291 return 0; 294 return 0;
@@ -300,13 +303,13 @@ static struct ib_cq *c2_create_cq(struct ib_device *ibdev, int entries, int vect
300 303
301 cq = kmalloc(sizeof(*cq), GFP_KERNEL); 304 cq = kmalloc(sizeof(*cq), GFP_KERNEL);
302 if (!cq) { 305 if (!cq) {
303 pr_debug("%s: Unable to allocate CQ\n", __FUNCTION__); 306 pr_debug("%s: Unable to allocate CQ\n", __func__);
304 return ERR_PTR(-ENOMEM); 307 return ERR_PTR(-ENOMEM);
305 } 308 }
306 309
307 err = c2_init_cq(to_c2dev(ibdev), entries, NULL, cq); 310 err = c2_init_cq(to_c2dev(ibdev), entries, NULL, cq);
308 if (err) { 311 if (err) {
309 pr_debug("%s: error initializing CQ\n", __FUNCTION__); 312 pr_debug("%s: error initializing CQ\n", __func__);
310 kfree(cq); 313 kfree(cq);
311 return ERR_PTR(err); 314 return ERR_PTR(err);
312 } 315 }
@@ -318,7 +321,7 @@ static int c2_destroy_cq(struct ib_cq *ib_cq)
318{ 321{
319 struct c2_cq *cq = to_c2cq(ib_cq); 322 struct c2_cq *cq = to_c2cq(ib_cq);
320 323
321 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 324 pr_debug("%s:%u\n", __func__, __LINE__);
322 325
323 c2_free_cq(to_c2dev(ib_cq->device), cq); 326 c2_free_cq(to_c2dev(ib_cq->device), cq);
324 kfree(cq); 327 kfree(cq);
@@ -400,7 +403,7 @@ static struct ib_mr *c2_reg_phys_mr(struct ib_pd *ib_pd,
400 mr->umem = NULL; 403 mr->umem = NULL;
401 pr_debug("%s - page shift %d, pbl_depth %d, total_len %u, " 404 pr_debug("%s - page shift %d, pbl_depth %d, total_len %u, "
402 "*iova_start %llx, first pa %llx, last pa %llx\n", 405 "*iova_start %llx, first pa %llx, last pa %llx\n",
403 __FUNCTION__, page_shift, pbl_depth, total_len, 406 __func__, page_shift, pbl_depth, total_len,
404 (unsigned long long) *iova_start, 407 (unsigned long long) *iova_start,
405 (unsigned long long) page_list[0], 408 (unsigned long long) page_list[0],
406 (unsigned long long) page_list[pbl_depth-1]); 409 (unsigned long long) page_list[pbl_depth-1]);
@@ -422,7 +425,7 @@ static struct ib_mr *c2_get_dma_mr(struct ib_pd *pd, int acc)
422 struct ib_phys_buf bl; 425 struct ib_phys_buf bl;
423 u64 kva = 0; 426 u64 kva = 0;
424 427
425 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 428 pr_debug("%s:%u\n", __func__, __LINE__);
426 429
427 /* AMSO1100 limit */ 430 /* AMSO1100 limit */
428 bl.size = 0xffffffff; 431 bl.size = 0xffffffff;
@@ -442,7 +445,7 @@ static struct ib_mr *c2_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
442 struct c2_pd *c2pd = to_c2pd(pd); 445 struct c2_pd *c2pd = to_c2pd(pd);
443 struct c2_mr *c2mr; 446 struct c2_mr *c2mr;
444 447
445 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 448 pr_debug("%s:%u\n", __func__, __LINE__);
446 449
447 c2mr = kmalloc(sizeof(*c2mr), GFP_KERNEL); 450 c2mr = kmalloc(sizeof(*c2mr), GFP_KERNEL);
448 if (!c2mr) 451 if (!c2mr)
@@ -506,7 +509,7 @@ static int c2_dereg_mr(struct ib_mr *ib_mr)
506 struct c2_mr *mr = to_c2mr(ib_mr); 509 struct c2_mr *mr = to_c2mr(ib_mr);
507 int err; 510 int err;
508 511
509 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 512 pr_debug("%s:%u\n", __func__, __LINE__);
510 513
511 err = c2_stag_dealloc(to_c2dev(ib_mr->device), ib_mr->lkey); 514 err = c2_stag_dealloc(to_c2dev(ib_mr->device), ib_mr->lkey);
512 if (err) 515 if (err)
@@ -523,14 +526,14 @@ static int c2_dereg_mr(struct ib_mr *ib_mr)
523static ssize_t show_rev(struct class_device *cdev, char *buf) 526static ssize_t show_rev(struct class_device *cdev, char *buf)
524{ 527{
525 struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev); 528 struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev);
526 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 529 pr_debug("%s:%u\n", __func__, __LINE__);
527 return sprintf(buf, "%x\n", dev->props.hw_ver); 530 return sprintf(buf, "%x\n", dev->props.hw_ver);
528} 531}
529 532
530static ssize_t show_fw_ver(struct class_device *cdev, char *buf) 533static ssize_t show_fw_ver(struct class_device *cdev, char *buf)
531{ 534{
532 struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev); 535 struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev);
533 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 536 pr_debug("%s:%u\n", __func__, __LINE__);
534 return sprintf(buf, "%x.%x.%x\n", 537 return sprintf(buf, "%x.%x.%x\n",
535 (int) (dev->props.fw_ver >> 32), 538 (int) (dev->props.fw_ver >> 32),
536 (int) (dev->props.fw_ver >> 16) & 0xffff, 539 (int) (dev->props.fw_ver >> 16) & 0xffff,
@@ -539,13 +542,13 @@ static ssize_t show_fw_ver(struct class_device *cdev, char *buf)
539 542
540static ssize_t show_hca(struct class_device *cdev, char *buf) 543static ssize_t show_hca(struct class_device *cdev, char *buf)
541{ 544{
542 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 545 pr_debug("%s:%u\n", __func__, __LINE__);
543 return sprintf(buf, "AMSO1100\n"); 546 return sprintf(buf, "AMSO1100\n");
544} 547}
545 548
546static ssize_t show_board(struct class_device *cdev, char *buf) 549static ssize_t show_board(struct class_device *cdev, char *buf)
547{ 550{
548 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 551 pr_debug("%s:%u\n", __func__, __LINE__);
549 return sprintf(buf, "%.*s\n", 32, "AMSO1100 Board ID"); 552 return sprintf(buf, "%.*s\n", 32, "AMSO1100 Board ID");
550} 553}
551 554
@@ -575,13 +578,13 @@ static int c2_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
575 578
576static int c2_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) 579static int c2_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
577{ 580{
578 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 581 pr_debug("%s:%u\n", __func__, __LINE__);
579 return -ENOSYS; 582 return -ENOSYS;
580} 583}
581 584
582static int c2_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) 585static int c2_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
583{ 586{
584 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 587 pr_debug("%s:%u\n", __func__, __LINE__);
585 return -ENOSYS; 588 return -ENOSYS;
586} 589}
587 590
@@ -592,13 +595,13 @@ static int c2_process_mad(struct ib_device *ibdev,
592 struct ib_grh *in_grh, 595 struct ib_grh *in_grh,
593 struct ib_mad *in_mad, struct ib_mad *out_mad) 596 struct ib_mad *in_mad, struct ib_mad *out_mad)
594{ 597{
595 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 598 pr_debug("%s:%u\n", __func__, __LINE__);
596 return -ENOSYS; 599 return -ENOSYS;
597} 600}
598 601
599static int c2_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param) 602static int c2_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
600{ 603{
601 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 604 pr_debug("%s:%u\n", __func__, __LINE__);
602 605
603 /* Request a connection */ 606 /* Request a connection */
604 return c2_llp_connect(cm_id, iw_param); 607 return c2_llp_connect(cm_id, iw_param);
@@ -606,7 +609,7 @@ static int c2_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
606 609
607static int c2_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param) 610static int c2_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
608{ 611{
609 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 612 pr_debug("%s:%u\n", __func__, __LINE__);
610 613
611 /* Accept the new connection */ 614 /* Accept the new connection */
612 return c2_llp_accept(cm_id, iw_param); 615 return c2_llp_accept(cm_id, iw_param);
@@ -616,7 +619,7 @@ static int c2_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len)
616{ 619{
617 int err; 620 int err;
618 621
619 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 622 pr_debug("%s:%u\n", __func__, __LINE__);
620 623
621 err = c2_llp_reject(cm_id, pdata, pdata_len); 624 err = c2_llp_reject(cm_id, pdata, pdata_len);
622 return err; 625 return err;
@@ -626,10 +629,10 @@ static int c2_service_create(struct iw_cm_id *cm_id, int backlog)
626{ 629{
627 int err; 630 int err;
628 631
629 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 632 pr_debug("%s:%u\n", __func__, __LINE__);
630 err = c2_llp_service_create(cm_id, backlog); 633 err = c2_llp_service_create(cm_id, backlog);
631 pr_debug("%s:%u err=%d\n", 634 pr_debug("%s:%u err=%d\n",
632 __FUNCTION__, __LINE__, 635 __func__, __LINE__,
633 err); 636 err);
634 return err; 637 return err;
635} 638}
@@ -637,7 +640,7 @@ static int c2_service_create(struct iw_cm_id *cm_id, int backlog)
637static int c2_service_destroy(struct iw_cm_id *cm_id) 640static int c2_service_destroy(struct iw_cm_id *cm_id)
638{ 641{
639 int err; 642 int err;
640 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 643 pr_debug("%s:%u\n", __func__, __LINE__);
641 644
642 err = c2_llp_service_destroy(cm_id); 645 err = c2_llp_service_destroy(cm_id);
643 646
@@ -743,7 +746,7 @@ static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
743 netdev = alloc_netdev(sizeof(*netdev), name, setup); 746 netdev = alloc_netdev(sizeof(*netdev), name, setup);
744 if (!netdev) { 747 if (!netdev) {
745 printk(KERN_ERR PFX "%s - etherdev alloc failed", 748 printk(KERN_ERR PFX "%s - etherdev alloc failed",
746 __FUNCTION__); 749 __func__);
747 return NULL; 750 return NULL;
748 } 751 }
749 752
@@ -780,7 +783,7 @@ int c2_register_device(struct c2_dev *dev)
780 if (ret) 783 if (ret)
781 goto out2; 784 goto out2;
782 785
783 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 786 pr_debug("%s:%u\n", __func__, __LINE__);
784 strlcpy(dev->ibdev.name, "amso%d", IB_DEVICE_NAME_MAX); 787 strlcpy(dev->ibdev.name, "amso%d", IB_DEVICE_NAME_MAX);
785 dev->ibdev.owner = THIS_MODULE; 788 dev->ibdev.owner = THIS_MODULE;
786 dev->ibdev.uverbs_cmd_mask = 789 dev->ibdev.uverbs_cmd_mask =
@@ -873,13 +876,13 @@ out1:
873out2: 876out2:
874 free_netdev(dev->pseudo_netdev); 877 free_netdev(dev->pseudo_netdev);
875out3: 878out3:
876 pr_debug("%s:%u ret=%d\n", __FUNCTION__, __LINE__, ret); 879 pr_debug("%s:%u ret=%d\n", __func__, __LINE__, ret);
877 return ret; 880 return ret;
878} 881}
879 882
880void c2_unregister_device(struct c2_dev *dev) 883void c2_unregister_device(struct c2_dev *dev)
881{ 884{
882 pr_debug("%s:%u\n", __FUNCTION__, __LINE__); 885 pr_debug("%s:%u\n", __func__, __LINE__);
883 unregister_netdev(dev->pseudo_netdev); 886 unregister_netdev(dev->pseudo_netdev);
884 free_netdev(dev->pseudo_netdev); 887 free_netdev(dev->pseudo_netdev);
885 ib_unregister_device(&dev->ibdev); 888 ib_unregister_device(&dev->ibdev);