Lines Matching refs:cookie
54 static inline size_t cookie_msi_granule(struct iommu_dma_cookie *cookie)
56 if (cookie->type == IOMMU_DMA_IOVA_COOKIE) {
57 return cookie->iovad.granule;
64 struct iommu_dma_cookie *cookie;
66 cookie = kzalloc(sizeof(*cookie), GFP_KERNEL);
67 if (cookie) {
68 INIT_LIST_HEAD(&cookie->msi_page_list);
69 cookie->type = type;
71 return cookie;
110 struct iommu_dma_cookie *cookie;
120 cookie = cookie_alloc(IOMMU_DMA_MSI_COOKIE);
121 if (!cookie) {
125 cookie->msi_iova = base;
126 domain->iova_cookie = cookie;
140 struct iommu_dma_cookie *cookie = domain->iova_cookie;
143 if (!cookie) {
147 if (cookie->type == IOMMU_DMA_IOVA_COOKIE && cookie->iovad.granule) {
148 put_iova_domain(&cookie->iovad);
151 list_for_each_entry_safe(msi, tmp, &cookie->msi_page_list, list)
156 kfree(cookie);
179 static int cookie_init_hw_msi_region(struct iommu_dma_cookie *cookie, phys_addr_t start, phys_addr_t end)
181 struct iova_domain *iovad = &cookie->iovad;
197 list_add(&msi_page->list, &cookie->msi_page_list);
250 struct iommu_dma_cookie *cookie = domain->iova_cookie;
251 struct iova_domain *iovad = &cookie->iovad;
278 ret = cookie_init_hw_msi_region(cookie, region->start, region->start + region->length);
291 struct iommu_dma_cookie *cookie;
294 cookie = container_of(iovad, struct iommu_dma_cookie, iovad);
295 domain = cookie->fq_domain;
317 struct iommu_dma_cookie *cookie = domain->iova_cookie;
322 if (!cookie || cookie->type != IOMMU_DMA_IOVA_COOKIE) {
326 iovad = &cookie->iovad;
354 if (!cookie->fq_domain && !iommu_domain_get_attr(domain, DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE, &attr) && attr) {
358 cookie->fq_domain = domain;
390 struct iommu_dma_cookie *cookie;
399 cookie = domain->iova_cookie;
400 iovad = &cookie->iovad;
469 struct iommu_dma_cookie *cookie = domain->iova_cookie;
470 struct iova_domain *iovad = &cookie->iovad;
473 if (cookie->type == IOMMU_DMA_MSI_COOKIE) {
474 cookie->msi_iova += size;
475 return cookie->msi_iova - size;
508 static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie, dma_addr_t iova, size_t size)
510 struct iova_domain *iovad = &cookie->iovad;
513 if (cookie->type == IOMMU_DMA_MSI_COOKIE) {
514 cookie->msi_iova -= size;
515 } else if (cookie->fq_domain) { /* non-strict mode */
525 struct iommu_dma_cookie *cookie = domain->iova_cookie;
526 struct iova_domain *iovad = &cookie->iovad;
538 if (!cookie->fq_domain) {
541 iommu_dma_free_iova(cookie, dma_addr, size);
547 struct iommu_dma_cookie *cookie = domain->iova_cookie;
548 struct iova_domain *iovad = &cookie->iovad;
564 iommu_dma_free_iova(cookie, iova, size);
657 struct iommu_dma_cookie *cookie = domain->iova_cookie;
658 struct iova_domain *iovad = &cookie->iovad;
725 iommu_dma_free_iova(cookie, iova, size);
911 struct iommu_dma_cookie *cookie = domain->iova_cookie;
912 struct iova_domain *iovad = &cookie->iovad;
984 iommu_dma_free_iova(cookie, iova, iova_len);
1283 struct iommu_dma_cookie *cookie = domain->iova_cookie;
1287 size_t size = cookie_msi_granule(cookie);
1290 list_for_each_entry(msi_page, &cookie->msi_page_list, list) if (msi_page->phys == msi_addr) return msi_page;
1309 list_add(&msi_page->list, &cookie->msi_page_list);
1313 iommu_dma_free_iova(cookie, iova, size);