ism 211 drivers/s390/net/ism.h static inline void __ism_read_cmd(struct ism_dev *ism, void *data, ism 214 drivers/s390/net/ism.h struct zpci_dev *zdev = to_zpci(ism->pdev); ism 225 drivers/s390/net/ism.h static inline void __ism_write_cmd(struct ism_dev *ism, void *data, ism 228 drivers/s390/net/ism.h struct zpci_dev *zdev = to_zpci(ism->pdev); ism 235 drivers/s390/net/ism.h static inline int __ism_move(struct ism_dev *ism, u64 dmb_req, void *data, ism 238 drivers/s390/net/ism.h struct zpci_dev *zdev = to_zpci(ism->pdev); ism 36 drivers/s390/net/ism_drv.c static int ism_cmd(struct ism_dev *ism, void *cmd) ism 41 drivers/s390/net/ism_drv.c __ism_write_cmd(ism, req + 1, sizeof(*req), req->len - sizeof(*req)); ism 42 drivers/s390/net/ism_drv.c __ism_write_cmd(ism, req, 0, sizeof(*req)); ism 46 drivers/s390/net/ism_drv.c __ism_read_cmd(ism, resp, 0, sizeof(*resp)); ism 52 drivers/s390/net/ism_drv.c __ism_read_cmd(ism, resp + 1, sizeof(*resp), resp->len - sizeof(*resp)); ism 57 drivers/s390/net/ism_drv.c static int ism_cmd_simple(struct ism_dev *ism, u32 cmd_code) ism 65 drivers/s390/net/ism_drv.c return ism_cmd(ism, &cmd); ism 68 drivers/s390/net/ism_drv.c static int query_info(struct ism_dev *ism) ism 76 drivers/s390/net/ism_drv.c if (ism_cmd(ism, &cmd)) ism 85 drivers/s390/net/ism_drv.c static int register_sba(struct ism_dev *ism) ism 91 drivers/s390/net/ism_drv.c sba = dma_alloc_coherent(&ism->pdev->dev, PAGE_SIZE, &dma_handle, ism 101 drivers/s390/net/ism_drv.c if (ism_cmd(ism, &cmd)) { ism 102 drivers/s390/net/ism_drv.c dma_free_coherent(&ism->pdev->dev, PAGE_SIZE, sba, dma_handle); ism 106 drivers/s390/net/ism_drv.c ism->sba = sba; ism 107 drivers/s390/net/ism_drv.c ism->sba_dma_addr = dma_handle; ism 112 drivers/s390/net/ism_drv.c static int register_ieq(struct ism_dev *ism) ism 118 drivers/s390/net/ism_drv.c ieq = dma_alloc_coherent(&ism->pdev->dev, PAGE_SIZE, &dma_handle, ism 129 drivers/s390/net/ism_drv.c if (ism_cmd(ism, &cmd)) { ism 130 drivers/s390/net/ism_drv.c dma_free_coherent(&ism->pdev->dev, PAGE_SIZE, ieq, dma_handle); ism 134 drivers/s390/net/ism_drv.c ism->ieq = ieq; ism 135 drivers/s390/net/ism_drv.c ism->ieq_idx = -1; ism 136 drivers/s390/net/ism_drv.c ism->ieq_dma_addr = dma_handle; ism 141 drivers/s390/net/ism_drv.c static int unregister_sba(struct ism_dev *ism) ism 145 drivers/s390/net/ism_drv.c if (!ism->sba) ism 148 drivers/s390/net/ism_drv.c ret = ism_cmd_simple(ism, ISM_UNREG_SBA); ism 152 drivers/s390/net/ism_drv.c dma_free_coherent(&ism->pdev->dev, PAGE_SIZE, ism 153 drivers/s390/net/ism_drv.c ism->sba, ism->sba_dma_addr); ism 155 drivers/s390/net/ism_drv.c ism->sba = NULL; ism 156 drivers/s390/net/ism_drv.c ism->sba_dma_addr = 0; ism 161 drivers/s390/net/ism_drv.c static int unregister_ieq(struct ism_dev *ism) ism 165 drivers/s390/net/ism_drv.c if (!ism->ieq) ism 168 drivers/s390/net/ism_drv.c ret = ism_cmd_simple(ism, ISM_UNREG_IEQ); ism 172 drivers/s390/net/ism_drv.c dma_free_coherent(&ism->pdev->dev, PAGE_SIZE, ism 173 drivers/s390/net/ism_drv.c ism->ieq, ism->ieq_dma_addr); ism 175 drivers/s390/net/ism_drv.c ism->ieq = NULL; ism 176 drivers/s390/net/ism_drv.c ism->ieq_dma_addr = 0; ism 181 drivers/s390/net/ism_drv.c static int ism_read_local_gid(struct ism_dev *ism) ism 190 drivers/s390/net/ism_drv.c ret = ism_cmd(ism, &cmd); ism 194 drivers/s390/net/ism_drv.c ism->smcd->local_gid = cmd.response.gid; ism 202 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 213 drivers/s390/net/ism_drv.c return ism_cmd(ism, &cmd); ism 216 drivers/s390/net/ism_drv.c static void ism_free_dmb(struct ism_dev *ism, struct smcd_dmb *dmb) ism 218 drivers/s390/net/ism_drv.c clear_bit(dmb->sba_idx, ism->sba_bitmap); ism 219 drivers/s390/net/ism_drv.c dma_free_coherent(&ism->pdev->dev, dmb->dmb_len, ism 223 drivers/s390/net/ism_drv.c static int ism_alloc_dmb(struct ism_dev *ism, struct smcd_dmb *dmb) ism 227 drivers/s390/net/ism_drv.c if (PAGE_ALIGN(dmb->dmb_len) > dma_get_max_seg_size(&ism->pdev->dev)) ism 231 drivers/s390/net/ism_drv.c bit = find_next_zero_bit(ism->sba_bitmap, ISM_NR_DMBS, ism 239 drivers/s390/net/ism_drv.c test_and_set_bit(dmb->sba_idx, ism->sba_bitmap)) ism 242 drivers/s390/net/ism_drv.c dmb->cpu_addr = dma_alloc_coherent(&ism->pdev->dev, dmb->dmb_len, ism 246 drivers/s390/net/ism_drv.c clear_bit(dmb->sba_idx, ism->sba_bitmap); ism 253 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 257 drivers/s390/net/ism_drv.c ret = ism_alloc_dmb(ism, dmb); ism 272 drivers/s390/net/ism_drv.c ret = ism_cmd(ism, &cmd); ism 274 drivers/s390/net/ism_drv.c ism_free_dmb(ism, dmb); ism 284 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 294 drivers/s390/net/ism_drv.c ret = ism_cmd(ism, &cmd); ism 298 drivers/s390/net/ism_drv.c ism_free_dmb(ism, dmb); ism 305 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 314 drivers/s390/net/ism_drv.c return ism_cmd(ism, &cmd); ism 319 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 328 drivers/s390/net/ism_drv.c return ism_cmd(ism, &cmd); ism 344 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 356 drivers/s390/net/ism_drv.c return ism_cmd(ism, &cmd); ism 368 drivers/s390/net/ism_drv.c struct ism_dev *ism = smcd->priv; ism 378 drivers/s390/net/ism_drv.c ret = __ism_move(ism, dmb_req, data, bytes); ism 390 drivers/s390/net/ism_drv.c static void ism_handle_event(struct ism_dev *ism) ism 394 drivers/s390/net/ism_drv.c while ((ism->ieq_idx + 1) != READ_ONCE(ism->ieq->header.idx)) { ism 395 drivers/s390/net/ism_drv.c if (++(ism->ieq_idx) == ARRAY_SIZE(ism->ieq->entry)) ism 396 drivers/s390/net/ism_drv.c ism->ieq_idx = 0; ism 398 drivers/s390/net/ism_drv.c entry = &ism->ieq->entry[ism->ieq_idx]; ism 400 drivers/s390/net/ism_drv.c smcd_handle_event(ism->smcd, entry); ism 406 drivers/s390/net/ism_drv.c struct ism_dev *ism = data; ism 410 drivers/s390/net/ism_drv.c bv = (void *) &ism->sba->dmb_bits[ISM_DMB_WORD_OFFSET]; ism 411 drivers/s390/net/ism_drv.c end = sizeof(ism->sba->dmb_bits) * BITS_PER_BYTE - ISM_DMB_BIT_OFFSET; ism 413 drivers/s390/net/ism_drv.c spin_lock(&ism->lock); ism 414 drivers/s390/net/ism_drv.c ism->sba->s = 0; ism 422 drivers/s390/net/ism_drv.c ism->sba->dmbe_mask[bit + ISM_DMB_BIT_OFFSET] = 0; ism 424 drivers/s390/net/ism_drv.c smcd_handle_irq(ism->smcd, bit + ISM_DMB_BIT_OFFSET); ism 427 drivers/s390/net/ism_drv.c if (ism->sba->e) { ism 428 drivers/s390/net/ism_drv.c ism->sba->e = 0; ism 430 drivers/s390/net/ism_drv.c ism_handle_event(ism); ism 432 drivers/s390/net/ism_drv.c spin_unlock(&ism->lock); ism 448 drivers/s390/net/ism_drv.c static int ism_dev_init(struct ism_dev *ism) ism 450 drivers/s390/net/ism_drv.c struct pci_dev *pdev = ism->pdev; ism 458 drivers/s390/net/ism_drv.c pci_name(pdev), ism); ism 462 drivers/s390/net/ism_drv.c ret = register_sba(ism); ism 466 drivers/s390/net/ism_drv.c ret = register_ieq(ism); ism 470 drivers/s390/net/ism_drv.c ret = ism_read_local_gid(ism); ism 474 drivers/s390/net/ism_drv.c ret = smcd_register_dev(ism->smcd); ism 478 drivers/s390/net/ism_drv.c query_info(ism); ism 482 drivers/s390/net/ism_drv.c unregister_ieq(ism); ism 484 drivers/s390/net/ism_drv.c unregister_sba(ism); ism 486 drivers/s390/net/ism_drv.c free_irq(pci_irq_vector(pdev, 0), ism); ism 495 drivers/s390/net/ism_drv.c struct ism_dev *ism; ism 498 drivers/s390/net/ism_drv.c ism = kzalloc(sizeof(*ism), GFP_KERNEL); ism 499 drivers/s390/net/ism_drv.c if (!ism) ism 502 drivers/s390/net/ism_drv.c spin_lock_init(&ism->lock); ism 503 drivers/s390/net/ism_drv.c dev_set_drvdata(&pdev->dev, ism); ism 504 drivers/s390/net/ism_drv.c ism->pdev = pdev; ism 522 drivers/s390/net/ism_drv.c ism->smcd = smcd_alloc_dev(&pdev->dev, dev_name(&pdev->dev), &ism_ops, ism 524 drivers/s390/net/ism_drv.c if (!ism->smcd) { ism 529 drivers/s390/net/ism_drv.c ism->smcd->priv = ism; ism 530 drivers/s390/net/ism_drv.c ret = ism_dev_init(ism); ism 537 drivers/s390/net/ism_drv.c smcd_free_dev(ism->smcd); ism 543 drivers/s390/net/ism_drv.c kfree(ism); ism 548 drivers/s390/net/ism_drv.c static void ism_dev_exit(struct ism_dev *ism) ism 550 drivers/s390/net/ism_drv.c struct pci_dev *pdev = ism->pdev; ism 552 drivers/s390/net/ism_drv.c smcd_unregister_dev(ism->smcd); ism 553 drivers/s390/net/ism_drv.c unregister_ieq(ism); ism 554 drivers/s390/net/ism_drv.c unregister_sba(ism); ism 555 drivers/s390/net/ism_drv.c free_irq(pci_irq_vector(pdev, 0), ism); ism 561 drivers/s390/net/ism_drv.c struct ism_dev *ism = dev_get_drvdata(&pdev->dev); ism 563 drivers/s390/net/ism_drv.c ism_dev_exit(ism); ism 565 drivers/s390/net/ism_drv.c smcd_free_dev(ism->smcd); ism 569 drivers/s390/net/ism_drv.c kfree(ism); ism 574 drivers/s390/net/ism_drv.c struct ism_dev *ism = dev_get_drvdata(dev); ism 576 drivers/s390/net/ism_drv.c ism_dev_exit(ism); ism 582 drivers/s390/net/ism_drv.c struct ism_dev *ism = dev_get_drvdata(dev); ism 584 drivers/s390/net/ism_drv.c return ism_dev_init(ism); ism 397 net/sched/sch_hfsc.c seg_y2x(u64 y, u64 ism) ism 403 net/sched/sch_hfsc.c else if (ism == HT_INFINITY) ism 406 net/sched/sch_hfsc.c x = (y >> ISM_SHIFT) * ism ism 407 net/sched/sch_hfsc.c + (((y & ISM_MASK) * ism) >> ISM_SHIFT); ism 428 net/sched/sch_hfsc.c u64 ism; ism 431 net/sched/sch_hfsc.c ism = HT_INFINITY; ism 433 net/sched/sch_hfsc.c ism = ((u64)PSCHED_TICKS_PER_SEC << ISM_SHIFT); ism 434 net/sched/sch_hfsc.c ism += m - 1; ism 435 net/sched/sch_hfsc.c do_div(ism, m); ism 437 net/sched/sch_hfsc.c return ism;