Lines Matching defs:dmb
218 static void ism_free_dmb(struct ism_dev *ism, struct smcd_dmb *dmb)
220 clear_bit(dmb->sba_idx, ism->sba_bitmap);
221 dma_free_coherent(&ism->pdev->dev, dmb->dmb_len,
222 dmb->cpu_addr, dmb->dma_addr);
225 static int ism_alloc_dmb(struct ism_dev *ism, struct smcd_dmb *dmb)
229 if (PAGE_ALIGN(dmb->dmb_len) > dma_get_max_seg_size(&ism->pdev->dev))
232 if (!dmb->sba_idx) {
238 dmb->sba_idx = bit;
240 if (dmb->sba_idx < ISM_DMB_BIT_OFFSET ||
241 test_and_set_bit(dmb->sba_idx, ism->sba_bitmap))
244 dmb->cpu_addr = dma_alloc_coherent(&ism->pdev->dev, dmb->dmb_len,
245 &dmb->dma_addr,
247 if (!dmb->cpu_addr)
248 clear_bit(dmb->sba_idx, ism->sba_bitmap);
250 return dmb->cpu_addr ? 0 : -ENOMEM;
253 static int ism_register_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb)
259 ret = ism_alloc_dmb(ism, dmb);
267 cmd.request.dmb = dmb->dma_addr;
268 cmd.request.dmb_len = dmb->dmb_len;
269 cmd.request.sba_idx = dmb->sba_idx;
270 cmd.request.vlan_valid = dmb->vlan_valid;
271 cmd.request.vlan_id = dmb->vlan_id;
272 cmd.request.rgid = dmb->rgid;
276 ism_free_dmb(ism, dmb);
279 dmb->dmb_tok = cmd.response.dmb_tok;
284 static int ism_unregister_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb)
294 cmd.request.dmb_tok = dmb->dmb_tok;
300 ism_free_dmb(ism, dmb);