/illumos-gate/usr/src/uts/i86pc/io/ |
H A D | rootnex.c | 379 rootnex_dma_t *dma, ddi_dma_attr_t *attr, ddi_dma_obj_t *dmao, int kmflag); 381 rootnex_dma_t *dma, ddi_dma_attr_t *attr); 382 static void rootnex_teardown_copybuf(rootnex_dma_t *dma); 383 static int rootnex_setup_windows(ddi_dma_impl_t *hp, rootnex_dma_t *dma, 385 static void rootnex_teardown_windows(rootnex_dma_t *dma); 386 static void rootnex_init_win(ddi_dma_impl_t *hp, rootnex_dma_t *dma, 389 rootnex_dma_t *dma, ddi_dma_cookie_t *cookie, off_t cur_offset, 392 rootnex_dma_t *dma, rootnex_window_t **windowp, ddi_dma_cookie_t *cookie, 395 rootnex_dma_t *dma, rootnex_window_t **windowp, 398 rootnex_dma_t *dma, rootnex_window_t **windowp, ddi_dma_cookie_t *cookie); [all …]
|
/illumos-gate/usr/src/uts/intel/io/vmxnet3s/ |
H A D | vmxnet3_utils.c | 105 vmxnet3_alloc_dma_mem(vmxnet3_softc_t *dp, vmxnet3_dmabuf_t *dma, size_t size, in vmxnet3_alloc_dma_mem() argument 119 &dma->dmaHandle)) != DDI_SUCCESS) { in vmxnet3_alloc_dma_mem() 128 if (ddi_dma_mem_alloc(dma->dmaHandle, size, &vmxnet3_dev_attr, in vmxnet3_alloc_dma_mem() 129 DDI_DMA_CONSISTENT, cb, NULL, &dma->buf, &dma->bufLen, in vmxnet3_alloc_dma_mem() 130 &dma->dataHandle) != DDI_SUCCESS) { in vmxnet3_alloc_dma_mem() 139 if ((dmaerr = ddi_dma_addr_bind_handle(dma->dmaHandle, NULL, dma->buf, in vmxnet3_alloc_dma_mem() 140 dma->bufLen, DDI_DMA_RDWR | DDI_DMA_STREAMING, cb, NULL, &cookie, in vmxnet3_alloc_dma_mem() 149 dma->bufPA = cookie.dmac_laddress; in vmxnet3_alloc_dma_mem() 154 ddi_dma_mem_free(&dma->dataHandle); in vmxnet3_alloc_dma_mem() 156 ddi_dma_free_handle(&dma->dmaHandle); in vmxnet3_alloc_dma_mem() [all …]
|
H A D | vmxnet3.h | 66 vmxnet3_dmabuf_t dma; member 74 vmxnet3_dmabuf_t dma; member 94 vmxnet3_dmabuf_t dma; member 177 int vmxnet3_alloc_dma_mem_1(vmxnet3_softc_t *dp, vmxnet3_dmabuf_t *dma, 179 int vmxnet3_alloc_dma_mem_128(vmxnet3_softc_t *dp, vmxnet3_dmabuf_t *dma, 181 int vmxnet3_alloc_dma_mem_512(vmxnet3_softc_t *dp, vmxnet3_dmabuf_t *dma, 183 void vmxnet3_free_dma_mem(vmxnet3_dmabuf_t *dma); 249 (((Vmxnet3_GenericDesc *) (Ring)->dma.buf) + Idx)
|
H A D | vmxnet3_main.c | 293 if ((err = vmxnet3_alloc_dma_mem_512(dp, &cmdRing->dma, ringSize, in vmxnet3_alloc_cmdring() 297 (void) memset(cmdRing->dma.buf, 0, ringSize); in vmxnet3_alloc_cmdring() 316 if (vmxnet3_alloc_dma_mem_512(dp, &compRing->dma, ringSize, in vmxnet3_alloc_compring() 320 (void) memset(compRing->dma.buf, 0, ringSize); in vmxnet3_alloc_compring() 342 ASSERT(!txq->cmdRing.dma.buf && !txq->compRing.dma.buf); in vmxnet3_prepare_txqueue() 347 tqdesc->conf.txRingBasePA = txq->cmdRing.dma.bufPA; in vmxnet3_prepare_txqueue() 355 tqdesc->conf.compRingBasePA = txq->compRing.dma.bufPA; in vmxnet3_prepare_txqueue() 370 vmxnet3_free_dma_mem(&txq->compRing.dma); in vmxnet3_prepare_txqueue() 372 vmxnet3_free_dma_mem(&txq->cmdRing.dma); in vmxnet3_prepare_txqueue() 392 ASSERT(!rxq->cmdRing.dma.buf && !rxq->compRing.dma.buf); in vmxnet3_prepare_rxqueue() [all …]
|
H A D | vmxnet3_rx.c | 44 if ((err = vmxnet3_alloc_dma_mem_1(dp, &rxBuf->dma, (dp->cur_mtu + 18), in vmxnet3_alloc_rxbuf() 65 vmxnet3_free_dma_mem(&rxBuf->dma); in vmxnet3_free_rxbuf() 204 rxBuf->mblk = desballoc((uchar_t *)rxBuf->dma.buf, in vmxnet3_rx_populate() 205 rxBuf->dma.bufLen, BPRI_MED, &rxBuf->freeCB); in vmxnet3_rx_populate() 221 rxDesc->rxd.addr = rxBuf->dma.bufPA; in vmxnet3_rx_populate() 222 rxDesc->rxd.len = rxBuf->dma.bufLen; in vmxnet3_rx_populate()
|
/illumos-gate/usr/src/uts/common/io/atge/ |
H A D | atge_l1.c | 129 atge_dma_t *dma; in atge_l1_alloc_dma() local 143 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_tx_desc, in atge_l1_alloc_dma() 145 if (dma == NULL) { in atge_l1_alloc_dma() 150 atgep->atge_tx_ring->r_desc_ring = dma; in atge_l1_alloc_dma() 171 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_rx_desc, in atge_l1_alloc_dma() 173 if (dma == NULL) { in atge_l1_alloc_dma() 178 l1->atge_rx_ring->r_desc_ring = dma; in atge_l1_alloc_dma() 197 dma = atge_alloc_a_dma_blk(atgep, &atge_l1_dma_attr_cmb, in atge_l1_alloc_dma() 199 l1->atge_l1_cmb = dma; in atge_l1_alloc_dma() 200 if (dma == NULL) { in atge_l1_alloc_dma() [all …]
|
H A D | atge_l1c.c | 157 atge_dma_t *dma; in atge_l1c_alloc_dma() local 171 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_tx_desc, in atge_l1c_alloc_dma() 173 if (dma == NULL) { in atge_l1c_alloc_dma() 178 atgep->atge_tx_ring->r_desc_ring = dma; in atge_l1c_alloc_dma() 199 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_rx_desc, in atge_l1c_alloc_dma() 201 if (dma == NULL) { in atge_l1c_alloc_dma() 206 l1c->atge_rx_ring->r_desc_ring = dma; in atge_l1c_alloc_dma() 225 dma = atge_alloc_a_dma_blk(atgep, &atge_l1c_dma_attr_cmb, in atge_l1c_alloc_dma() 227 l1c->atge_l1c_cmb = dma; in atge_l1c_alloc_dma() 228 if (dma == NULL) { in atge_l1c_alloc_dma() [all …]
|
H A D | atge_l1e.c | 110 atge_dma_t *dma; in atge_rx_desc_free() local 121 dma = l1e->atge_l1e_rx_page[pages]; in atge_rx_desc_free() 122 if (dma != NULL) { in atge_rx_desc_free() 123 (void) ddi_dma_unbind_handle(dma->hdl); in atge_rx_desc_free() 124 ddi_dma_mem_free(&dma->acchdl); in atge_rx_desc_free() 125 ddi_dma_free_handle(&dma->hdl); in atge_rx_desc_free() 126 kmem_free(dma, sizeof (atge_dma_t)); in atge_rx_desc_free() 137 atge_dma_t *dma; in atge_l1e_alloc_dma() local 154 dma = atge_alloc_a_dma_blk(atgep, &atge_l1e_dma_attr_tx_desc, in atge_l1e_alloc_dma() 156 if (dma == NULL) { in atge_l1e_alloc_dma() [all …]
|
H A D | atge.h | 134 #define ATGE_PUT64(dma, addr, v) \ argument 135 ddi_put64(dma->acchdl, (addr), (v)) 137 #define ATGE_PUT32(dma, addr, v) \ argument 138 ddi_put32(dma->acchdl, (addr), (v)) 140 #define ATGE_GET32(dma, addr) \ argument 141 ddi_get32(dma->acchdl, (addr)) 143 #define ATGE_GET64(dma, addr) \ argument 144 ddi_get64(dma->acchdl, (addr)) 146 #define DMA_SYNC(dma, s, l, d) \ argument 147 (void) ddi_dma_sync(dma->hdl, (off_t)(s), (l), d)
|
H A D | atge_main.c | 1431 atge_dma_t *dma; in atge_alloc_buffers() local 1440 dma = atge_buf_alloc(r->r_atge, buflen, f); in atge_alloc_buffers() 1441 if (dma == NULL) { in atge_alloc_buffers() 1446 tbl[i] = dma; in atge_alloc_buffers() 1475 atge_dma_t *dma; in atge_alloc_a_dma_blk() local 1477 dma = kmem_zalloc(sizeof (atge_dma_t), KM_SLEEP); in atge_alloc_a_dma_blk() 1480 DDI_DMA_SLEEP, NULL, &dma->hdl); in atge_alloc_a_dma_blk() 1488 err = ddi_dma_mem_alloc(dma->hdl, in atge_alloc_a_dma_blk() 1490 &dma->addr, &dma->len, &dma->acchdl); in atge_alloc_a_dma_blk() 1495 ddi_dma_free_handle(&dma->hdl); in atge_alloc_a_dma_blk() [all …]
|
/illumos-gate/usr/src/uts/common/io/usb/hcd/xhci/ |
H A D | xhci_ring.c | 216 xhci_ring_trb_tail_valid(xhci_ring_t *xrp, uint64_t dma) in xhci_ring_trb_tail_valid() argument 221 return (dma == tail); in xhci_ring_trb_tail_valid() 229 xhci_ring_trb_valid_range(xhci_ring_t *xrp, uint64_t dma, uint_t range) in xhci_ring_trb_valid_range() argument 238 if (taddr == dma) in xhci_ring_trb_valid_range() 407 xhci_ring_trb_consumed(xhci_ring_t *xrp, uint64_t dma) in xhci_ring_trb_consumed() argument 412 if (dma < pa || dma >= high || in xhci_ring_trb_consumed() 413 dma % sizeof (xhci_trb_t) != 0) in xhci_ring_trb_consumed() 416 dma -= pa; in xhci_ring_trb_consumed() 417 dma /= sizeof (xhci_trb_t); in xhci_ring_trb_consumed() 419 VERIFY(dma < xrp->xr_ntrb); in xhci_ring_trb_consumed() [all …]
|
/illumos-gate/usr/src/uts/common/io/1394/adapters/ |
H A D | hci1394_ixl_isr.c | 297 if (hci1394_ixl_check_status(&xferctlp->dma[ixldepth], in hci1394_ixl_intr_check_xfer() 333 if (hci1394_ixl_check_status(&xferctlp->dma[ixldepth], in hci1394_ixl_intr_check_xfer() 475 hci1394_xfer_ctl_dma_t *dma; in hci1394_ixl_intr_check_done() local 504 dma = &xferctlp->dma[ixldepth]; in hci1394_ixl_intr_check_done() 531 dmastartp = dma->dma_bound & ~DESC_Z_MASK; in hci1394_ixl_intr_check_done() 532 dmaendp = dmastartp + ((dma->dma_bound & DESC_Z_MASK) << 4); in hci1394_ixl_intr_check_done() 567 acc_hdl = dma->dma_buf->bi_handle; in hci1394_ixl_intr_check_done() 568 dma_hdl = dma->dma_buf->bi_dma_handle; in hci1394_ixl_intr_check_done() 569 hcidescp = (hci1394_desc_t *)dma->dma_descp; in hci1394_ixl_intr_check_done() 570 hcidesc_off = (off_t)hcidescp - (off_t)dma->dma_buf->bi_kaddr; in hci1394_ixl_intr_check_done() [all …]
|
H A D | hci1394_ixl_misc.c | 93 ixl_exec_startp->compiler_privatep)->dma[0].dma_bound; in hci1394_ixl_set_start() 150 &xferctlp->dma[ixldepth], ixlcur->ixl_opcode, in hci1394_ixl_reset_status() 238 hci1394_ixl_check_status(hci1394_xfer_ctl_dma_t *dma, uint16_t ixlopcode, in hci1394_ixl_check_status() argument 252 hcidescp = (hci1394_desc_t *)(dma->dma_descp); in hci1394_ixl_check_status() 253 hcidesc_off = (off_t)hcidescp - (off_t)dma->dma_buf->bi_kaddr; in hci1394_ixl_check_status() 254 acc_hdl = dma->dma_buf->bi_handle; in hci1394_ixl_check_status() 255 dma_hdl = dma->dma_buf->bi_dma_handle; in hci1394_ixl_check_status() 295 hcicnt = dma->dma_bound & DESC_Z_MASK; in hci1394_ixl_check_status() 297 hcidesc_off = (off_t)hcidescp - (off_t)dma->dma_buf->bi_kaddr; in hci1394_ixl_check_status() 343 (off_t)dma->dma_buf->bi_kaddr; in hci1394_ixl_check_status()
|
H A D | hci1394_ixl_update.c | 516 ixlp->compiler_privatep)->dma[0].dma_bound; in hci1394_ixl_update_prep_jump() 538 hcidescp = (hci1394_desc_t *)xferctlp->dma[xferctlp->cnt - 1].dma_descp; in hci1394_ixl_update_prep_jump() 539 acc_hdl = xferctlp->dma[xferctlp->cnt - 1].dma_buf->bi_handle; in hci1394_ixl_update_prep_jump() 540 dma_hdl = xferctlp->dma[xferctlp->cnt - 1].dma_buf->bi_dma_handle; in hci1394_ixl_update_prep_jump() 675 uvp->hci_offset = xferctlp->dma[0].dma_bound & DESC_Z_MASK; in hci1394_ixl_update_prep_set_skipmode() 746 uvp->skipaddr = xferctlp->dma[0].dma_bound; in hci1394_ixl_update_prep_set_skipmode() 769 uvp->skipaddr = xferctlp->dma[0].dma_bound; in hci1394_ixl_update_prep_set_skipmode() 837 uvp->hdr_offset = xferctlp->dma[0].dma_bound & DESC_Z_MASK; in hci1394_ixl_update_prep_set_tagsync() 938 uvp->hci_offset = xferctlp->dma[0].dma_bound & DESC_Z_MASK; in hci1394_ixl_update_prep_recv_pkt() 958 hcidescp = (hci1394_desc_t *)xferctlp->dma[0].dma_descp - in hci1394_ixl_update_prep_recv_pkt() [all …]
|
H A D | hci1394_ixl_comp.c | 290 ixl_exec_stp->compiler_privatep)->dma[0].dma_bound; in hci1394_compile_ixl_endup() 903 xferctl_curp->dma[0].dma_descp; in hci1394_finalize_all_xfer_desc() 904 acc_hdl = xferctl_curp->dma[0].dma_buf->bi_handle; in hci1394_finalize_all_xfer_desc() 930 xferctl_curp->dma[repcnt - 1].dma_descp; in hci1394_finalize_all_xfer_desc() 932 xferctl_curp->dma[repcnt - 1].dma_buf->bi_handle; in hci1394_finalize_all_xfer_desc() 947 dma_execnext_addr = xferctl_nxtp->dma[0].dma_bound; in hci1394_finalize_all_xfer_desc() 956 xferctl_curp->dma[repcnt - 1].dma_descp; in hci1394_finalize_all_xfer_desc() 958 xferctl_curp->dma[repcnt - 1].dma_buf->bi_handle; in hci1394_finalize_all_xfer_desc() 969 xferctl_curp->dma[repcnt - 1].dma_descp; in hci1394_finalize_all_xfer_desc() 970 acc_hdl = xferctl_curp->dma[repcnt - 1].dma_buf->bi_handle; in hci1394_finalize_all_xfer_desc() [all …]
|
/illumos-gate/usr/src/uts/common/io/scsi/adapters/smartpqi/ |
H A D | smartpqi_init.c | 457 pqi_dma_overhead_t *dma; in pqi_report_device_capability() local 470 if ((dma = pqi_alloc_single(s, sizeof (*cap))) == NULL) in pqi_report_device_capability() 474 sg->sg_addr = dma->dma_addr; in pqi_report_device_capability() 475 sg->sg_len = dma->len_to_alloc; in pqi_report_device_capability() 479 (void) ddi_dma_sync(dma->handle, 0, 0, DDI_DMA_SYNC_FORCPU); in pqi_report_device_capability() 480 cap = (pqi_device_capability_t *)dma->alloc_memory; in pqi_report_device_capability() 496 pqi_free_single(s, dma); in pqi_report_device_capability() 859 pqi_dma_overhead_t *dma; in pqi_enable_events() local 864 dma = pqi_alloc_single(s, PQI_REPORT_EVENT_CONFIG_BUFFER_LENGTH); in pqi_enable_events() 865 if (dma == NULL) in pqi_enable_events() [all …]
|
/illumos-gate/usr/src/uts/common/io/vioblk/ |
H A D | vioblk.c | 323 vioblk_internal(vioblk_t *vib, int type, virtio_dma_t *dma, in vioblk_internal() argument 342 if (dma != NULL) { in vioblk_internal() 344 for (uint_t n = 0; n < virtio_dma_ncookies(dma); n++) { in vioblk_internal() 346 virtio_dma_cookie_pa(dma, n), in vioblk_internal() 347 virtio_dma_cookie_size(dma, n), dir) != in vioblk_internal() 363 virtio_dma_t *dma = NULL; in vioblk_map_discard() local 366 dma = virtio_dma_alloc(vib->vib_virtio, in vioblk_map_discard() 369 if (dma == NULL) in vioblk_map_discard() 372 wzp = virtio_dma_va(dma, 0); in vioblk_map_discard() 387 virtio_dma_cookie_pa(dma, 0), in vioblk_map_discard() [all …]
|
/illumos-gate/usr/src/uts/common/io/scsi/adapters/lmrc/ |
H A D | lmrc.c | 664 lmrc_dma_t *dma = &mfi->mfi_frame_dma; in lmrc_poll_mfi() local 671 (void) ddi_dma_sync(dma->ld_hdl, 0, dma->ld_len, in lmrc_poll_mfi() 710 lmrc_dma_t *dma = &mfi->mfi_frame_dma; in lmrc_wait_mfi() local 719 (void) ddi_dma_sync(dma->ld_hdl, 0, dma->ld_len, in lmrc_wait_mfi() 1532 lmrc_dma_t dma; in lmrc_ioc_init() local 1535 ret = lmrc_dma_alloc(lmrc, lmrc->l_dma_attr, &dma, in lmrc_ioc_init() 1544 IOCInitMsg = dma.ld_buf; in lmrc_ioc_init() 1570 hdr->mh_data_xfer_len = lmrc_dma_get_size(&dma); in lmrc_ioc_init() 1572 lmrc_dma_set_addr64(&dma, &init->mi_queue_info_new_phys_addr); in lmrc_ioc_init() 1582 (void) ddi_dma_sync(dma.ld_hdl, 0, dma.ld_len, DDI_DMA_SYNC_FORDEV); in lmrc_ioc_init() [all …]
|
H A D | lmrc_raid.c | 163 lmrc_dma_t *dma = &mfi->mfi_data_dma; in lmrc_sync_raidmap_again() local 164 mfi_ld_ref_t *ld_sync = dma->ld_buf; in lmrc_sync_raidmap_again() 168 bzero(dma->ld_buf, dma->ld_len); in lmrc_sync_raidmap_again() 197 lmrc_dma_t *dma = &mfi->mfi_data_dma; in lmrc_complete_sync_raidmap() local 198 lmrc_fw_raid_map_t *rm = dma->ld_buf; in lmrc_complete_sync_raidmap() 219 VERIFY3U(lmrc->l_raidmap->rm_raidmap_sz, ==, dma->ld_len); in lmrc_complete_sync_raidmap()
|
/illumos-gate/usr/src/uts/common/fs/nfs/ |
H A D | nfs4_stub_vnops.c | 213 static void nfs4_trigger_domount_args_destroy(domount_args_t *dma, 747 domount_args_t *dma; in nfs4_trigger_mount() local 839 error = nfs4_trigger_domount_args_create(vp, cr, &dma); in nfs4_trigger_mount() 852 nfs4_trigger_domount_args_destroy(dma, vp); in nfs4_trigger_mount() 860 error = nfs4_trigger_domount(vp, dma, &vfsp, mcred, newvpp); in nfs4_trigger_mount() 861 nfs4_trigger_domount_args_destroy(dma, vp); in nfs4_trigger_mount() 910 domount_args_t *dma; in nfs4_trigger_domount_args_create() local 1049 dma = kmem_zalloc(sizeof (domount_args_t), KM_SLEEP); in nfs4_trigger_domount_args_create() 1050 dma->dma_esi = esi_first; in nfs4_trigger_domount_args_create() 1051 dma->dma_hostlist = hostlist; in nfs4_trigger_domount_args_create() [all …]
|
/illumos-gate/usr/src/uts/common/io/ena/ |
H A D | ena.c | 637 ena_dma_buf_t *dma = &aq->ea_sq.eas_dma; in ena_admin_sq_init() local 650 if (!ena_dma_alloc(ena, dma, &conf, size)) { in ena_admin_sq_init() 655 ENA_DMA_VERIFY_ADDR(ena, dma->edb_cookie->dmac_laddress); in ena_admin_sq_init() 656 aq->ea_sq.eas_entries = (void *)dma->edb_va; in ena_admin_sq_init() 658 ena_dma_bzero(dma); in ena_admin_sq_init() 665 addr_low = (uint32_t)(dma->edb_cookie->dmac_laddress); in ena_admin_sq_init() 666 addr_high = (uint32_t)(dma->edb_cookie->dmac_laddress >> 32); in ena_admin_sq_init() 692 ena_dma_buf_t *dma = &aq->ea_cq.eac_dma; in ena_admin_cq_init() local 705 if (!ena_dma_alloc(ena, dma, &conf, size)) { in ena_admin_cq_init() 710 ENA_DMA_VERIFY_ADDR(ena, dma->edb_cookie->dmac_laddress); in ena_admin_cq_init() [all …]
|
/illumos-gate/usr/src/uts/common/io/myri10ge/drv/ |
H A D | myri10ge_var.h | 121 struct myri10ge_dma_stuff dma; member 151 mcp_dma_addr_t dma; /* Kept in network byte order */ member 307 struct myri10ge_dma_stuff dma; member 496 uint_t alloc_flags, int bind_flags, struct myri10ge_dma_stuff *dma, 498 void myri10ge_dma_free(struct myri10ge_dma_stuff *dma);
|
/illumos-gate/usr/src/uts/common/io/nvme/ |
H A D | nvme.c | 1282 nvme_check_dma_hdl(nvme_dma_t *dma) in nvme_check_dma_hdl() argument 1286 if (dma == NULL) in nvme_check_dma_hdl() 1289 ddi_fm_dma_err_get(dma->nd_dmah, &error, DDI_FME_VERSION); in nvme_check_dma_hdl() 1298 nvme_free_dma_common(nvme_dma_t *dma) in nvme_free_dma_common() argument 1300 if (dma->nd_dmah != NULL) in nvme_free_dma_common() 1301 (void) ddi_dma_unbind_handle(dma->nd_dmah); in nvme_free_dma_common() 1302 if (dma->nd_acch != NULL) in nvme_free_dma_common() 1303 ddi_dma_mem_free(&dma->nd_acch); in nvme_free_dma_common() 1304 if (dma->nd_dmah != NULL) in nvme_free_dma_common() 1305 ddi_dma_free_handle(&dma->nd_dmah); in nvme_free_dma_common() [all …]
|
/illumos-gate/usr/src/uts/common/io/sdcard/impl/ |
H A D | sda_host.c | 55 sda_host_alloc(dev_info_t *dip, int nslot, sda_ops_t *ops, ddi_dma_attr_t *dma) in sda_host_alloc() argument 66 h->h_dma = dma; in sda_host_alloc()
|
/illumos-gate/usr/src/uts/intel/os/ |
H A D | bootenv.rc | 27 setprop ata-dma-enabled 1 28 setprop atapi-cd-dma-enabled 1
|