Home
last modified time | relevance | path

Searched refs:gem (Results 1 - 25 of 165) sorted by relevance

1234567

/kernel/linux/linux-5.10/drivers/gpu/drm/tegra/
H A Dgem.c21 #include "gem.h"
27 drm_gem_object_put(&obj->gem); in tegra_bo_put()
91 0, obj->gem.size, GFP_KERNEL); in tegra_bo_pin()
112 obj->gem.size); in tegra_bo_pin()
138 else if (obj->gem.import_attach) in tegra_bo_mmap()
139 return dma_buf_vmap(obj->gem.import_attach->dmabuf); in tegra_bo_mmap()
151 else if (obj->gem.import_attach) in tegra_bo_munmap()
152 dma_buf_vunmap(obj->gem.import_attach->dmabuf, addr); in tegra_bo_munmap()
161 drm_gem_object_get(&obj->gem); in tegra_bo_get()
190 bo->mm, bo->gem in tegra_bo_iommu_map()
436 tegra_bo_free_object(struct drm_gem_object *gem) tegra_bo_free_object() argument
477 struct drm_gem_object *gem = vma->vm_private_data; tegra_bo_fault() local
497 __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma) __tegra_gem_mmap() argument
535 struct drm_gem_object *gem; tegra_drm_mmap() local
551 struct drm_gem_object *gem = attach->dmabuf->priv; tegra_gem_prime_map_dma_buf() local
584 struct drm_gem_object *gem = attach->dmabuf->priv; tegra_gem_prime_unmap_dma_buf() local
602 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_begin_cpu_access() local
615 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_end_cpu_access() local
627 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_mmap() local
639 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_vmap() local
660 tegra_gem_prime_export(struct drm_gem_object *gem, int flags) tegra_gem_prime_export() argument
681 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_import() local
[all...]
H A Dgem.h30 struct drm_gem_object gem; member
46 static inline struct tegra_bo *to_tegra_bo(struct drm_gem_object *gem) in to_tegra_bo() argument
48 return container_of(gem, struct tegra_bo, gem); in to_tegra_bo()
63 void tegra_bo_free_object(struct drm_gem_object *gem);
69 int __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma);
72 struct dma_buf *tegra_gem_prime_export(struct drm_gem_object *gem,
H A Dfb.c17 #include "gem.h"
116 fb->obj[i] = &planes[i]->gem; in tegra_fb_alloc()
135 struct drm_gem_object *gem; in tegra_fb_create() local
145 gem = drm_gem_object_lookup(file, cmd->handles[i]); in tegra_fb_create()
146 if (!gem) { in tegra_fb_create()
156 if (gem->size < size) { in tegra_fb_create()
161 planes[i] = to_tegra_bo(gem); in tegra_fb_create()
174 drm_gem_object_put(&planes[i]->gem); in tegra_fb_create()
188 err = drm_gem_mmap_obj(&bo->gem, bo->gem in tegra_fb_mmap()
[all...]
H A Ddrm.c24 #include "gem.h"
109 struct drm_gem_object *gem; in host1x_bo_lookup() local
112 gem = drm_gem_object_lookup(file, handle); in host1x_bo_lookup()
113 if (!gem) in host1x_bo_lookup()
116 bo = to_tegra_bo(gem); in host1x_bo_lookup()
244 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
251 if (offset & 3 || offset > obj->gem.size) { in tegra_drm_submit()
274 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
282 reloc->cmdbuf.offset >= obj->gem.size) { in tegra_drm_submit()
288 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
360 struct drm_gem_object *gem; tegra_gem_mmap() local
596 struct drm_gem_object *gem; tegra_gem_set_tiling() local
648 struct drm_gem_object *gem; tegra_gem_get_tiling() local
688 struct drm_gem_object *gem; tegra_gem_set_flags() local
713 struct drm_gem_object *gem; tegra_gem_get_flags() local
[all...]
/kernel/linux/linux-6.6/drivers/gpu/drm/tegra/
H A Dgem.c23 #include "gem.h"
56 drm_gem_object_put(&obj->gem); in tegra_bo_put()
63 struct drm_gem_object *gem = &obj->gem; in tegra_bo_pin() local
79 if (gem->import_attach) { in tegra_bo_pin()
80 struct dma_buf *buf = gem->import_attach->dmabuf; in tegra_bo_pin()
97 map->size = gem->size; in tegra_bo_pin()
117 err = sg_alloc_table_from_pages(map->sgt, obj->pages, obj->num_pages, 0, gem->size, in tegra_bo_pin()
127 err = dma_get_sgtable(dev, map->sgt, obj->vaddr, obj->iova, gem->size); in tegra_bo_pin()
149 map->size = gem in tegra_bo_pin()
494 tegra_bo_free_object(struct drm_gem_object *gem) tegra_bo_free_object() argument
545 struct drm_gem_object *gem = vma->vm_private_data; tegra_bo_fault() local
565 __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma) __tegra_gem_mmap() argument
602 struct drm_gem_object *gem; tegra_drm_mmap() local
618 struct drm_gem_object *gem = attach->dmabuf->priv; tegra_gem_prime_map_dma_buf() local
651 struct drm_gem_object *gem = attach->dmabuf->priv; tegra_gem_prime_unmap_dma_buf() local
669 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_begin_cpu_access() local
682 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_end_cpu_access() local
694 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_mmap() local
706 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_vmap() local
721 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_vunmap() local
738 tegra_gem_prime_export(struct drm_gem_object *gem, int flags) tegra_gem_prime_export() argument
759 struct drm_gem_object *gem = buf->priv; tegra_gem_prime_import() local
776 struct drm_gem_object *gem; tegra_gem_lookup() local
[all...]
H A Dgem.h36 struct drm_gem_object gem; member
52 static inline struct tegra_bo *to_tegra_bo(struct drm_gem_object *gem) in to_tegra_bo() argument
54 return container_of(gem, struct tegra_bo, gem); in to_tegra_bo()
69 void tegra_bo_free_object(struct drm_gem_object *gem);
75 int __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma);
78 struct dma_buf *tegra_gem_prime_export(struct drm_gem_object *gem,
H A Dfb.c18 #include "gem.h"
120 fb->obj[i] = &planes[i]->gem; in tegra_fb_alloc()
139 struct drm_gem_object *gem; in tegra_fb_create() local
149 gem = drm_gem_object_lookup(file, cmd->handles[i]); in tegra_fb_create()
150 if (!gem) { in tegra_fb_create()
160 if (gem->size < size) { in tegra_fb_create()
162 drm_gem_object_put(gem); in tegra_fb_create()
166 planes[i] = to_tegra_bo(gem); in tegra_fb_create()
179 drm_gem_object_put(&planes[i]->gem); in tegra_fb_create()
H A Ddrm.c32 #include "gem.h"
251 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
258 if (offset & 3 || offset > obj->gem.size) { in tegra_drm_submit()
281 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
289 reloc->cmdbuf.offset >= obj->gem.size) { in tegra_drm_submit()
295 refs[num_refs++] = &obj->gem; in tegra_drm_submit()
297 if (reloc->target.offset >= obj->gem.size) { in tegra_drm_submit()
367 struct drm_gem_object *gem; in tegra_gem_mmap() local
370 gem = drm_gem_object_lookup(file, args->handle); in tegra_gem_mmap()
371 if (!gem) in tegra_gem_mmap()
610 struct drm_gem_object *gem; tegra_gem_set_tiling() local
662 struct drm_gem_object *gem; tegra_gem_get_tiling() local
702 struct drm_gem_object *gem; tegra_gem_set_flags() local
727 struct drm_gem_object *gem; tegra_gem_get_flags() local
[all...]
/kernel/linux/linux-6.6/drivers/gpu/drm/
H A Ddrm_gem_ttm_helper.c12 * This library provides helper functions for gem objects backed by
20 * @gem: GEM object
26 const struct drm_gem_object *gem) in drm_gem_ttm_print_info()
42 const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); in drm_gem_ttm_print_info()
56 * @gem: GEM object.
65 int drm_gem_ttm_vmap(struct drm_gem_object *gem, in drm_gem_ttm_vmap() argument
68 struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); in drm_gem_ttm_vmap()
76 * @gem: GEM object.
82 void drm_gem_ttm_vunmap(struct drm_gem_object *gem, in drm_gem_ttm_vunmap() argument
85 struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); in drm_gem_ttm_vunmap()
25 drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem) drm_gem_ttm_print_info() argument
99 drm_gem_ttm_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma) drm_gem_ttm_mmap() argument
138 struct drm_gem_object *gem; drm_gem_ttm_dumb_map_offset() local
[all...]
H A Ddrm_gem_vram_helper.c192 struct drm_gem_object *gem; in drm_gem_vram_create() local
201 gem = dev->driver->gem_create_object(dev, size); in drm_gem_vram_create()
202 if (IS_ERR(gem)) in drm_gem_vram_create()
203 return ERR_CAST(gem); in drm_gem_vram_create()
204 gbo = drm_gem_vram_of_gem(gem); in drm_gem_vram_create()
209 gem = &gbo->bo.base; in drm_gem_vram_create()
212 if (!gem->funcs) in drm_gem_vram_create()
213 gem->funcs = &drm_gem_vram_object_funcs; in drm_gem_vram_create()
215 ret = drm_gem_object_init(dev, gem, size); in drm_gem_vram_create()
580 * @gem
582 drm_gem_vram_object_free(struct drm_gem_object *gem) drm_gem_vram_object_free() argument
772 drm_gem_vram_object_pin(struct drm_gem_object *gem) drm_gem_vram_object_pin() argument
792 drm_gem_vram_object_unpin(struct drm_gem_object *gem) drm_gem_vram_object_unpin() argument
809 drm_gem_vram_object_vmap(struct drm_gem_object *gem, struct iosys_map *map) drm_gem_vram_object_vmap() argument
823 drm_gem_vram_object_vunmap(struct drm_gem_object *gem, struct iosys_map *map) drm_gem_vram_object_vunmap() argument
[all...]
H A Ddrm_gpuva_mgr.c819 struct drm_gem_object *obj = va->gem.obj; in drm_gpuva_link()
826 list_add_tail(&va->gem.entry, &obj->gpuva.list); in drm_gpuva_link()
843 struct drm_gem_object *obj = va->gem.obj; in drm_gpuva_unlink()
850 list_del_init(&va->gem.entry); in drm_gpuva_unlink()
1036 op.map.gem.obj = obj; in op_map_cb()
1037 op.map.gem.offset = offset; in op_map_cb()
1087 struct drm_gem_object *obj = va->gem.obj; in __drm_gpuva_sm_map()
1088 u64 offset = va->gem.offset; in __drm_gpuva_sm_map()
1092 bool merge = !!va->gem.obj; in __drm_gpuva_sm_map()
1116 .gem in __drm_gpuva_sm_map()
[all...]
/kernel/linux/linux-5.10/drivers/gpu/drm/i915/
H A DMakefile130 gem-y += \
131 gem/i915_gem_busy.o \
132 gem/i915_gem_clflush.o \
133 gem/i915_gem_client_blt.o \
134 gem/i915_gem_context.o \
135 gem/i915_gem_dmabuf.o \
136 gem/i915_gem_domain.o \
137 gem/i915_gem_execbuffer.o \
138 gem/i915_gem_fence.o \
139 gem/i915_gem_interna
[all...]
/kernel/linux/linux-5.10/drivers/gpu/drm/vkms/
H A Dvkms_gem.c21 ret = drm_gem_object_init(dev, &obj->gem, size); in __vkms_gem_create()
34 struct vkms_gem_object *gem = container_of(obj, struct vkms_gem_object, in vkms_gem_free_object() local
35 gem); in vkms_gem_free_object()
37 WARN_ON(gem->pages); in vkms_gem_free_object()
38 WARN_ON(gem->vaddr); in vkms_gem_free_object()
40 mutex_destroy(&gem->pages_lock); in vkms_gem_free_object()
42 kfree(gem); in vkms_gem_free_object()
55 num_pages = DIV_ROUND_UP(obj->gem.size, PAGE_SIZE); in vkms_gem_fault()
71 mapping = file_inode(obj->gem.filp)->i_mapping; in vkms_gem_fault()
115 ret = drm_gem_handle_create(file, &obj->gem, handl in vkms_gem_create()
[all...]
/kernel/linux/linux-6.6/drivers/gpu/drm/i915/
H A DMakefile152 gem-y += \
153 gem/i915_gem_busy.o \
154 gem/i915_gem_clflush.o \
155 gem/i915_gem_context.o \
156 gem/i915_gem_create.o \
157 gem/i915_gem_dmabuf.o \
158 gem/i915_gem_domain.o \
159 gem/i915_gem_execbuffer.o \
160 gem/i915_gem_internal.o \
161 gem/i915_gem_objec
[all...]
/kernel/linux/linux-5.10/drivers/gpu/drm/gma500/
H A Dgem.c23 struct gtt_range *gtt = container_of(obj, struct gtt_range, gem); in psb_gem_free_object()
61 r = psb_gtt_alloc_range(dev, size, "gem", 0, PAGE_SIZE); in psb_gem_create()
67 if (drm_gem_object_init(dev, &r->gem, size) != 0) { in psb_gem_create()
74 mapping_set_gfp_mask(r->gem.filp->f_mapping, GFP_KERNEL | __GFP_DMA32); in psb_gem_create()
76 ret = drm_gem_handle_create(file, &r->gem, &handle); in psb_gem_create()
79 &r->gem, size); in psb_gem_create()
80 drm_gem_object_release(&r->gem); in psb_gem_create()
85 drm_gem_object_put(&r->gem); in psb_gem_create()
142 r = container_of(obj, struct gtt_range, gem); /* Get the gtt range */ in psb_gem_fault()
/kernel/linux/linux-5.10/drivers/gpu/drm/
H A Ddrm_gem_ttm_helper.c10 * This library provides helper functions for gem objects backed by
18 * @gem: GEM object
24 const struct drm_gem_object *gem) in drm_gem_ttm_print_info()
40 const struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); in drm_gem_ttm_print_info()
54 * @gem: GEM object.
60 int drm_gem_ttm_mmap(struct drm_gem_object *gem, in drm_gem_ttm_mmap() argument
63 struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem); in drm_gem_ttm_mmap()
71 * ttm has its own object refcounting, so drop gem reference in drm_gem_ttm_mmap()
74 drm_gem_object_put(gem); in drm_gem_ttm_mmap()
80 MODULE_DESCRIPTION("DRM gem tt
23 drm_gem_ttm_print_info(struct drm_printer *p, unsigned int indent, const struct drm_gem_object *gem) drm_gem_ttm_print_info() argument
[all...]
H A Ddrm_gem_vram_helper.c234 struct drm_gem_object *gem = in drm_gem_vram_create() local
236 if (!gem) in drm_gem_vram_create()
238 gbo = drm_gem_vram_of_gem(gem); in drm_gem_vram_create()
629 * @gem: GEM object. Refers to &struct drm_gem_vram_object.gem
631 static void drm_gem_vram_object_free(struct drm_gem_object *gem) in drm_gem_vram_object_free() argument
633 struct drm_gem_vram_object *gbo = drm_gem_vram_of_gem(gem); in drm_gem_vram_object_free()
684 struct drm_gem_object *gem; in drm_gem_vram_driver_dumb_mmap_offset() local
687 gem = drm_gem_object_lookup(file, handle); in drm_gem_vram_driver_dumb_mmap_offset()
688 if (!gem) in drm_gem_vram_driver_dumb_mmap_offset()
840 drm_gem_vram_object_pin(struct drm_gem_object *gem) drm_gem_vram_object_pin() argument
860 drm_gem_vram_object_unpin(struct drm_gem_object *gem) drm_gem_vram_object_unpin() argument
876 drm_gem_vram_object_vmap(struct drm_gem_object *gem) drm_gem_vram_object_vmap() argument
893 drm_gem_vram_object_vunmap(struct drm_gem_object *gem, void *vaddr) drm_gem_vram_object_vunmap() argument
[all...]
H A Ddrm_fb_cma_helper.c42 struct drm_gem_object *gem; in drm_fb_cma_get_gem_obj() local
44 gem = drm_gem_fb_get_obj(fb, plane); in drm_fb_cma_get_gem_obj()
45 if (!gem) in drm_fb_cma_get_gem_obj()
48 return to_drm_gem_cma_obj(gem); in drm_fb_cma_get_gem_obj()
/kernel/linux/linux-5.10/drivers/net/ethernet/sun/
H A Dsungem.c85 #define GEM_MODULE_NAME "gem"
117 static u16 __sungem_phy_read(struct gem *gp, int phy_addr, int reg) in __sungem_phy_read()
145 struct gem *gp = netdev_priv(dev); in _sungem_phy_read()
149 static inline u16 sungem_phy_read(struct gem *gp, int reg) in sungem_phy_read()
154 static void __sungem_phy_write(struct gem *gp, int phy_addr, int reg, u16 val) in __sungem_phy_write()
178 struct gem *gp = netdev_priv(dev); in _sungem_phy_write()
182 static inline void sungem_phy_write(struct gem *gp, int reg, u16 val) in sungem_phy_write()
187 static inline void gem_enable_ints(struct gem *gp) in gem_enable_ints()
193 static inline void gem_disable_ints(struct gem *gp) in gem_disable_ints()
200 static void gem_get_cell(struct gem *g
[all...]
/kernel/linux/linux-6.6/drivers/net/ethernet/sun/
H A Dsungem.c85 #define GEM_MODULE_NAME "gem"
117 static u16 __sungem_phy_read(struct gem *gp, int phy_addr, int reg) in __sungem_phy_read()
145 struct gem *gp = netdev_priv(dev); in _sungem_phy_read()
149 static inline u16 sungem_phy_read(struct gem *gp, int reg) in sungem_phy_read()
154 static void __sungem_phy_write(struct gem *gp, int phy_addr, int reg, u16 val) in __sungem_phy_write()
178 struct gem *gp = netdev_priv(dev); in _sungem_phy_write()
182 static inline void sungem_phy_write(struct gem *gp, int reg, u16 val) in sungem_phy_write()
187 static inline void gem_enable_ints(struct gem *gp) in gem_enable_ints()
193 static inline void gem_disable_ints(struct gem *gp) in gem_disable_ints()
200 static void gem_get_cell(struct gem *g
[all...]
/kernel/linux/linux-6.6/include/drm/
H A Ddrm_gem_ttm_helper.h18 const struct drm_gem_object *gem);
19 int drm_gem_ttm_vmap(struct drm_gem_object *gem,
21 void drm_gem_ttm_vunmap(struct drm_gem_object *gem,
23 int drm_gem_ttm_mmap(struct drm_gem_object *gem,
/kernel/linux/linux-5.10/drivers/gpu/drm/nouveau/
H A Dnouveau_gem.c41 nouveau_gem_object_del(struct drm_gem_object *gem) in nouveau_gem_object_del() argument
43 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_del()
54 if (gem->import_attach) in nouveau_gem_object_del()
55 drm_prime_gem_destroy(gem, nvbo->bo.sg); in nouveau_gem_object_del()
64 nouveau_gem_object_open(struct drm_gem_object *gem, struct drm_file *file_priv) in nouveau_gem_object_open() argument
67 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_open()
141 nouveau_gem_object_close(struct drm_gem_object *gem, struct drm_file *file_priv) in nouveau_gem_object_close() argument
144 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_close()
189 /* Initialize the embedded gem-object. We return a single gem in nouveau_gem_new()
217 nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem, struct drm_nouveau_gem_info *rep) nouveau_gem_info() argument
283 nouveau_gem_set_domain(struct drm_gem_object *gem, uint32_t read_domains, uint32_t write_domains, uint32_t valid_domains) nouveau_gem_set_domain() argument
388 struct drm_gem_object *gem; validate_init() local
903 struct drm_gem_object *gem; nouveau_gem_ioctl_cpu_prep() local
935 struct drm_gem_object *gem; nouveau_gem_ioctl_cpu_fini() local
953 struct drm_gem_object *gem; nouveau_gem_ioctl_info() local
[all...]
/kernel/linux/linux-6.6/drivers/gpu/drm/nouveau/
H A Dnouveau_gem.c77 nouveau_gem_object_del(struct drm_gem_object *gem) in nouveau_gem_object_del() argument
79 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_del()
90 if (gem->import_attach) in nouveau_gem_object_del()
91 drm_prime_gem_destroy(gem, nvbo->bo.sg); in nouveau_gem_object_del()
100 nouveau_gem_object_open(struct drm_gem_object *gem, struct drm_file *file_priv) in nouveau_gem_object_open() argument
103 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_open()
185 nouveau_gem_object_close(struct drm_gem_object *gem, struct drm_file *file_priv) in nouveau_gem_object_close() argument
188 struct nouveau_bo *nvbo = nouveau_gem_object(gem); in nouveau_gem_object_close()
262 /* Initialize the embedded gem-object. We return a single gem in nouveau_gem_new()
296 nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem, struct drm_nouveau_gem_info *rep) nouveau_gem_info() argument
369 nouveau_gem_set_domain(struct drm_gem_object *gem, uint32_t read_domains, uint32_t write_domains, uint32_t valid_domains) nouveau_gem_set_domain() argument
474 struct drm_gem_object *gem; validate_init() local
978 struct drm_gem_object *gem; nouveau_gem_ioctl_cpu_prep() local
1011 struct drm_gem_object *gem; nouveau_gem_ioctl_cpu_fini() local
1029 struct drm_gem_object *gem; nouveau_gem_ioctl_info() local
[all...]
/kernel/linux/linux-5.10/drivers/gpu/drm/qxl/
H A Dqxl_gem.c68 mutex_lock(&qdev->gem.mutex); in qxl_gem_object_create()
69 list_add_tail(&qbo->list, &qdev->gem.objects); in qxl_gem_object_create()
70 mutex_unlock(&qdev->gem.mutex); in qxl_gem_object_create()
125 INIT_LIST_HEAD(&qdev->gem.objects); in qxl_gem_init()
/kernel/linux/linux-6.6/drivers/gpu/drm/loongson/
H A Dlsdc_ttm.h26 /* Protected by gem.mutex */
47 static inline struct ttm_buffer_object *to_ttm_bo(struct drm_gem_object *gem) in to_ttm_bo() argument
49 return container_of(gem, struct ttm_buffer_object, base); in to_ttm_bo()
57 static inline struct lsdc_bo *gem_to_lsdc_bo(struct drm_gem_object *gem) in gem_to_lsdc_bo() argument
59 return container_of(gem, struct lsdc_bo, tbo.base); in gem_to_lsdc_bo()

Completed in 16 milliseconds

1234567