Home
last modified time | relevance | path

Searched refs:ring (Results 1 – 25 of 303) sorted by relevance

12345678910>>...13

/NextBSD/crypto/heimdal/appl/telnet/telnet/
HDring.c83 ring_init(Ring *ring, unsigned char *buffer, int count) in ring_init() argument
85 memset(ring, 0, sizeof *ring); in ring_init()
87 ring->size = count; in ring_init()
89 ring->supply = ring->consume = ring->bottom = buffer; in ring_init()
91 ring->top = ring->bottom+ring->size; in ring_init()
94 ring->clearto = 0; in ring_init()
107 ring_mark(Ring *ring) in ring_mark() argument
109 ring->mark = ring_decrement(ring, ring->supply, 1); in ring_mark()
117 ring_at_mark(Ring *ring) in ring_at_mark() argument
119 if (ring->mark == ring->consume) { in ring_at_mark()
[all …]
HDring.h67 ring_init (Ring *ring, unsigned char *buffer, int count);
71 ring_supply_data (Ring *ring, unsigned char *buffer, int count);
74 ring_consume_data (Ring *ring, unsigned char *buffer, int count);
79 ring_supplied (Ring *ring, int count),
80 ring_consumed (Ring *ring, int count);
84 ring_empty_count (Ring *ring),
85 ring_empty_consecutive (Ring *ring),
86 ring_full_count (Ring *ring),
87 ring_full_consecutive (Ring *ring);
91 ring_encrypt (Ring *ring, void (*func)(unsigned char *, int)),
[all …]
/NextBSD/sys/dev/drm2/i915/
HDintel_ringbuffer.c53 i915_trace_irq_get(struct intel_ring_buffer *ring, uint32_t seqno) in i915_trace_irq_get() argument
57 if (ring->trace_irq_seqno == 0) { in i915_trace_irq_get()
58 dev_priv = ring->dev->dev_private; in i915_trace_irq_get()
60 if (ring->irq_get(ring)) in i915_trace_irq_get()
61 ring->trace_irq_seqno = seqno; in i915_trace_irq_get()
66 static inline int ring_space(struct intel_ring_buffer *ring) in ring_space() argument
68 int space = (ring->head & HEAD_ADDR) - (ring->tail + 8); in ring_space()
70 space += ring->size; in ring_space()
75 gen2_render_ring_flush(struct intel_ring_buffer *ring, in gen2_render_ring_flush() argument
89 ret = intel_ring_begin(ring, 2); in gen2_render_ring_flush()
[all …]
HDintel_ringbuffer.h25 #define I915_READ_TAIL(ring) I915_READ(RING_TAIL((ring)->mmio_base)) argument
26 #define I915_WRITE_TAIL(ring, val) I915_WRITE(RING_TAIL((ring)->mmio_base), val) argument
28 #define I915_READ_START(ring) I915_READ(RING_START((ring)->mmio_base)) argument
29 #define I915_WRITE_START(ring, val) I915_WRITE(RING_START((ring)->mmio_base), val) argument
31 #define I915_READ_HEAD(ring) I915_READ(RING_HEAD((ring)->mmio_base)) argument
32 #define I915_WRITE_HEAD(ring, val) I915_WRITE(RING_HEAD((ring)->mmio_base), val) argument
34 #define I915_READ_CTL(ring) I915_READ(RING_CTL((ring)->mmio_base)) argument
35 #define I915_WRITE_CTL(ring, val) I915_WRITE(RING_CTL((ring)->mmio_base), val) argument
37 #define I915_READ_IMR(ring) I915_READ(RING_IMR((ring)->mmio_base)) argument
38 #define I915_WRITE_IMR(ring, val) I915_WRITE(RING_IMR((ring)->mmio_base), val) argument
[all …]
HDi915_gem_context.c181 ctx->ring = &dev_priv->rings[RCS]; in create_hw_context()
212 return (ctx == ctx->ring->default_context); in is_default_context()
333 mi_set_context(struct intel_ring_buffer *ring, in mi_set_context() argument
344 if (IS_GEN6(ring->dev) && ring->itlb_before_ctx_switch) { in mi_set_context()
345 ret = ring->flush(ring, I915_GEM_GPU_DOMAINS, 0); in mi_set_context()
350 ret = intel_ring_begin(ring, 6); in mi_set_context()
354 if (IS_GEN7(ring->dev)) in mi_set_context()
355 intel_ring_emit(ring, MI_ARB_ON_OFF | MI_ARB_DISABLE); in mi_set_context()
357 intel_ring_emit(ring, MI_NOOP); in mi_set_context()
359 intel_ring_emit(ring, MI_NOOP); in mi_set_context()
[all …]
/NextBSD/contrib/telnet/telnet/
HDring.c104 ring_init(Ring *ring, unsigned char *buffer, int count) in ring_init() argument
106 memset((char *)ring, 0, sizeof *ring); in ring_init()
108 ring->size = count; in ring_init()
110 ring->supply = ring->consume = ring->bottom = buffer; in ring_init()
112 ring->top = ring->bottom+ring->size; in ring_init()
115 ring->clearto = 0; in ring_init()
128 ring_mark(Ring *ring) in ring_mark() argument
130 ring->mark = ring_decrement(ring, ring->supply, 1); in ring_mark()
138 ring_at_mark(Ring *ring) in ring_at_mark() argument
140 if (ring->mark == ring->consume) { in ring_at_mark()
[all …]
/NextBSD/sys/dev/drm2/radeon/
HDradeon_ring.c64 int radeon_ib_get(struct radeon_device *rdev, int ring, in radeon_ib_get() argument
81 ib->ring = ring; in radeon_ib_get()
138 struct radeon_ring *ring = &rdev->ring[ib->ring]; in radeon_ib_schedule() local
142 if (!ib->length_dw || !ring->ready) { in radeon_ib_schedule()
149 r = radeon_ring_lock(rdev, ring, 64 + RADEON_NUM_RINGS * 8); in radeon_ib_schedule()
156 if (radeon_fence_need_sync(fence, ib->ring)) { in radeon_ib_schedule()
159 fence->ring, ib->ring); in radeon_ib_schedule()
160 radeon_fence_note_sync(fence, ib->ring); in radeon_ib_schedule()
170 radeon_ring_vm_flush(rdev, ib->ring, ib->vm); in radeon_ib_schedule()
173 radeon_ring_ib_execute(rdev, const_ib->ring, const_ib); in radeon_ib_schedule()
[all …]
HDradeon_fence.c62 static void radeon_fence_write(struct radeon_device *rdev, u32 seq, int ring) in radeon_fence_write() argument
64 struct radeon_fence_driver *drv = &rdev->fence_drv[ring]; in radeon_fence_write()
81 static u32 radeon_fence_read(struct radeon_device *rdev, int ring) in radeon_fence_read() argument
83 struct radeon_fence_driver *drv = &rdev->fence_drv[ring]; in radeon_fence_read()
106 int ring) in radeon_fence_emit() argument
115 (*fence)->seq = ++rdev->fence_drv[ring].sync_seq[ring]; in radeon_fence_emit()
116 (*fence)->ring = ring; in radeon_fence_emit()
117 radeon_fence_ring_emit(rdev, ring, *fence); in radeon_fence_emit()
118 CTR2(KTR_DRM, "radeon fence: emit (ring=%d, seq=%d)", ring, (*fence)->seq); in radeon_fence_emit()
131 void radeon_fence_process(struct radeon_device *rdev, int ring) in radeon_fence_process() argument
[all …]
HDevergreen_blit_kms.c45 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; in set_render_target() local
59 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 15)); in set_render_target()
60 radeon_ring_write(ring, (CB_COLOR0_BASE - PACKET3_SET_CONTEXT_REG_START) >> 2); in set_render_target()
61 radeon_ring_write(ring, gpu_addr >> 8); in set_render_target()
62 radeon_ring_write(ring, pitch); in set_render_target()
63 radeon_ring_write(ring, slice); in set_render_target()
64 radeon_ring_write(ring, 0); in set_render_target()
65 radeon_ring_write(ring, cb_color_info); in set_render_target()
66 radeon_ring_write(ring, 0); in set_render_target()
67 radeon_ring_write(ring, (w - 1) | ((h - 1) << 16)); in set_render_target()
[all …]
HDr600_blit_kms.c43 struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; in set_render_target() local
57 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 1)); in set_render_target()
58 radeon_ring_write(ring, (CB_COLOR0_BASE - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2); in set_render_target()
59 radeon_ring_write(ring, gpu_addr >> 8); in set_render_target()
62 radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_BASE_UPDATE, 0)); in set_render_target()
63 radeon_ring_write(ring, 2 << 0); in set_render_target()
66 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 1)); in set_render_target()
67 radeon_ring_write(ring, (CB_COLOR0_SIZE - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2); in set_render_target()
68 radeon_ring_write(ring, (pitch << 0) | (slice << 10)); in set_render_target()
70 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONTEXT_REG, 1)); in set_render_target()
[all …]
HDni.c910 int ring, u32 cp_int_cntl) in cayman_cp_int_cntl_setup() argument
914 WREG32(SRBM_GFX_CNTL, srbm_gfx_cntl | (ring & 3)); in cayman_cp_int_cntl_setup()
924 struct radeon_ring *ring = &rdev->ring[fence->ring]; in cayman_fence_ring_emit() local
925 u64 addr = rdev->fence_drv[fence->ring].gpu_addr; in cayman_fence_ring_emit()
928 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); in cayman_fence_ring_emit()
929 radeon_ring_write(ring, (CP_COHER_CNTL2 - PACKET3_SET_CONFIG_REG_START) >> 2); in cayman_fence_ring_emit()
930 radeon_ring_write(ring, 0); in cayman_fence_ring_emit()
931 radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3)); in cayman_fence_ring_emit()
932 radeon_ring_write(ring, PACKET3_TC_ACTION_ENA | PACKET3_SH_ACTION_ENA); in cayman_fence_ring_emit()
933 radeon_ring_write(ring, 0xFFFFFFFF); in cayman_fence_ring_emit()
[all …]
HDsi.c1799 struct radeon_ring *ring = &rdev->ring[fence->ring]; in si_fence_ring_emit() local
1800 u64 addr = rdev->fence_drv[fence->ring].gpu_addr; in si_fence_ring_emit()
1803 radeon_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); in si_fence_ring_emit()
1804 radeon_ring_write(ring, (CP_COHER_CNTL2 - PACKET3_SET_CONFIG_REG_START) >> 2); in si_fence_ring_emit()
1805 radeon_ring_write(ring, 0); in si_fence_ring_emit()
1806 radeon_ring_write(ring, PACKET3(PACKET3_SURFACE_SYNC, 3)); in si_fence_ring_emit()
1807 radeon_ring_write(ring, PACKET3_TCL1_ACTION_ENA | in si_fence_ring_emit()
1811 radeon_ring_write(ring, 0xFFFFFFFF); in si_fence_ring_emit()
1812 radeon_ring_write(ring, 0); in si_fence_ring_emit()
1813 radeon_ring_write(ring, 10); /* poll interval */ in si_fence_ring_emit()
[all …]
/NextBSD/sys/ofed/drivers/net/mlx4/
HDen_tx.c69 struct mlx4_en_tx_ring *ring; in mlx4_en_create_tx_ring() local
74 ring = kzalloc_node(sizeof(struct mlx4_en_tx_ring), GFP_KERNEL, node); in mlx4_en_create_tx_ring()
75 if (!ring) { in mlx4_en_create_tx_ring()
76 ring = kzalloc(sizeof(struct mlx4_en_tx_ring), GFP_KERNEL); in mlx4_en_create_tx_ring()
77 if (!ring) { in mlx4_en_create_tx_ring()
96 &ring->dma_tag))) in mlx4_en_create_tx_ring()
99 ring->size = size; in mlx4_en_create_tx_ring()
100 ring->size_mask = size - 1; in mlx4_en_create_tx_ring()
101 ring->stride = stride; in mlx4_en_create_tx_ring()
102 ring->inline_thold = MAX(MIN_PKT_LEN, MIN(inline_thold, MAX_INLINE)); in mlx4_en_create_tx_ring()
[all …]
HDen_rx.c49 struct mlx4_en_rx_ring *ring, in mlx4_en_init_rx_desc() argument
53 (ring->buf + (ring->stride * index)); in mlx4_en_init_rx_desc()
66 possible_frags = (ring->stride - sizeof(struct mlx4_en_rx_desc)) / DS_SIZE; in mlx4_en_init_rx_desc()
75 mlx4_en_alloc_buf(struct mlx4_en_rx_ring *ring, in mlx4_en_alloc_buf() argument
85 if (unlikely(ring->spare.mbuf == NULL)) { in mlx4_en_alloc_buf()
86 mb = m_getjcl(M_NOWAIT, MT_DATA, M_PKTHDR, ring->rx_mb_size); in mlx4_en_alloc_buf()
90 mb->m_len = ring->rx_mb_size; in mlx4_en_alloc_buf()
93 err = -bus_dmamap_load_mbuf_sg(ring->dma_tag, ring->spare.dma_map, in mlx4_en_alloc_buf()
101 ring->spare.mbuf = mb; in mlx4_en_alloc_buf()
102 ring->spare.paddr_be = cpu_to_be64(segs[0].ds_addr); in mlx4_en_alloc_buf()
[all …]
/NextBSD/sys/dev/ifmlx4/
HDen_tx.c69 struct mlx4_en_tx_ring *ring; in mlx4_en_create_tx_ring() local
73 ring = kzalloc_node(sizeof(struct mlx4_en_tx_ring), GFP_KERNEL, node); in mlx4_en_create_tx_ring()
74 if (!ring) { in mlx4_en_create_tx_ring()
75 ring = kzalloc(sizeof(struct mlx4_en_tx_ring), GFP_KERNEL); in mlx4_en_create_tx_ring()
76 if (!ring) { in mlx4_en_create_tx_ring()
82 ring->size = size; in mlx4_en_create_tx_ring()
83 ring->size_mask = size - 1; in mlx4_en_create_tx_ring()
84 ring->stride = stride; in mlx4_en_create_tx_ring()
85 ring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS; in mlx4_en_create_tx_ring()
86 ring->inline_thold = min(inline_thold, MAX_INLINE); in mlx4_en_create_tx_ring()
[all …]
HDen_rx.c49 struct mlx4_en_rx_ring *ring, in mlx4_en_init_rx_desc() argument
52 struct mlx4_en_rx_desc *rx_desc = ring->buf + ring->stride * index; in mlx4_en_init_rx_desc()
67 possible_frags = (ring->stride - sizeof(struct mlx4_en_rx_desc)) / DS_SIZE; in mlx4_en_init_rx_desc()
103 struct mlx4_en_rx_ring *ring, int index) in mlx4_en_prepare_rx_desc() argument
105 struct mlx4_en_rx_desc *rx_desc = ring->buf + (index * ring->stride); in mlx4_en_prepare_rx_desc()
106 struct mbuf **mb_list = ring->rx_info + (index << priv->log_rx_info); in mlx4_en_prepare_rx_desc()
121 static inline void mlx4_en_update_rx_prod_db(struct mlx4_en_rx_ring *ring) in mlx4_en_update_rx_prod_db() argument
123 *ring->wqres.db.db = cpu_to_be32(ring->prod & 0xffff); in mlx4_en_update_rx_prod_db()
127 struct mlx4_en_rx_ring *ring, in mlx4_en_free_rx_desc() argument
133 struct mlx4_en_rx_desc *rx_desc = ring->buf + (index << ring->log_stride); in mlx4_en_free_rx_desc()
[all …]
/NextBSD/sys/dev/vxge/vxgehal/
HDvxgehal-ring.c109 __hal_ring_t *ring = (__hal_ring_t *) ringh; in __hal_ring_first_block_address_get() local
112 dma_object = __hal_mempool_memblock_dma(ring->mempool, 0); in __hal_ring_first_block_address_get()
232 __hal_ring_t *ring, in __hal_ring_rxdblock_link() argument
241 vxge_assert((mempoolh != NULL) && (ring != NULL)); in __hal_ring_rxdblock_link()
243 hldev = (__hal_device_t *) ring->channel.devh; in __hal_ring_rxdblock_link()
250 "from = %d, to = %d", (ptr_t) mempoolh, (ptr_t) ring, from, to); in __hal_ring_rxdblock_link()
277 vxge_os_dma_sync(ring->channel.pdev, in __hal_ring_rxdblock_link()
321 __hal_ring_t *ring = (__hal_ring_t *) userdata; in __hal_ring_mempool_item_alloc() local
324 vxge_assert((item != NULL) && (ring != NULL)); in __hal_ring_mempool_item_alloc()
326 hldev = (__hal_device_t *) ring->channel.devh; in __hal_ring_mempool_item_alloc()
[all …]
/NextBSD/sys/dev/nxge/xgehal/
HDxgehal-ring.c81 xge_hal_ring_t *ring, int from, int to) in __hal_ring_rxdblock_link() argument
110 xge_os_dma_sync(ring->channel.pdev, in __hal_ring_rxdblock_link()
135 xge_hal_ring_t *ring = (xge_hal_ring_t *)userdata; in __hal_ring_mempool_item_alloc() local
138 xge_assert(ring); in __hal_ring_mempool_item_alloc()
142 for (i=ring->rxds_per_block-1; i>=0; i--) { in __hal_ring_mempool_item_alloc()
146 int reserve_index = index * ring->rxds_per_block + i; in __hal_ring_mempool_item_alloc()
149 ring->reserved_rxds_arr[reserve_index] = (char *)item + in __hal_ring_mempool_item_alloc()
150 (ring->rxds_per_block - 1 - i) * ring->rxd_size; in __hal_ring_mempool_item_alloc()
160 ring->reserved_rxds_arr[reserve_index]; in __hal_ring_mempool_item_alloc()
162 ((char*)rxdblock_priv + ring->rxd_priv_size * i); in __hal_ring_mempool_item_alloc()
[all …]
/NextBSD/sys/dev/oce/
HDoce_util.c155 oce_destroy_ring_buffer(POCE_SOFTC sc, oce_ring_buffer_t *ring) in oce_destroy_ring_buffer() argument
157 oce_dma_free(sc, &ring->dma); in oce_destroy_ring_buffer()
158 free(ring, M_DEVBUF); in oce_destroy_ring_buffer()
169 oce_ring_buffer_t *ring; in oce_create_ring_buffer() local
172 ring = malloc(sizeof(oce_ring_buffer_t), M_DEVBUF, M_NOWAIT | M_ZERO); in oce_create_ring_buffer()
173 if (ring == NULL) in oce_create_ring_buffer()
176 ring->item_size = item_size; in oce_create_ring_buffer()
177 ring->num_items = q_len; in oce_create_ring_buffer()
184 size, 8, 4096, 0, NULL, NULL, &ring->dma.tag); in oce_create_ring_buffer()
189 rc = bus_dmamem_alloc(ring->dma.tag, in oce_create_ring_buffer()
[all …]
/NextBSD/sys/dev/rt/
HDif_rt.c138 struct rt_softc_rx_ring *ring, int limit);
140 struct rt_softc_tx_ring *ring);
148 struct rt_softc_rx_ring *ring, int qid);
150 struct rt_softc_rx_ring *ring);
152 struct rt_softc_rx_ring *ring);
154 struct rt_softc_tx_ring *ring, int qid);
156 struct rt_softc_tx_ring *ring);
158 struct rt_softc_tx_ring *ring);
986 struct rt_softc_tx_ring *ring; in rt_tx_data() local
1000 ring = &sc->tx_ring[qid]; in rt_tx_data()
[all …]
/NextBSD/sys/dev/ringbench/
HDringbench.c11 int (*ring_enqueue) (void *ring, void *buf);
12 int (*ring_batch_enqueue) (void *ring, void *ents[], int count, int *qcount);
13 int (*ring_dequeue) (void *ring, void *ents[], int count);
14 int (*ring_trylock) (void *ring);
15 void (*ring_lock) (void *ring);
16 int (*ring_unlock) (void *ring);
21 static int rb_br_enqueue(void *ring, void *buf);
22 static int rb_br_batch_enqueue(void *ring, void *ents[], int count, int *qcount);
23 static int rb_br_dequeue(void *ring, void *ents[], int count);
28 static int rb_brsc_enqueue(void *ring, void *buf);
[all …]
/NextBSD/sys/dev/drm/
HDmach64_drv.h86 drm_mach64_descriptor_ring_t ring; /* DMA descriptor table (ring buffer) */ member
544 drm_mach64_descriptor_ring_t *ring = &dev_priv->ring; in mach64_ring_start() local
547 ring->head_addr, ring->head, ring->tail, ring->space); in mach64_ring_start()
564 ring->head_addr | MACH64_CIRCULAR_BUF_SIZE_16KB); in mach64_ring_start()
570 drm_mach64_descriptor_ring_t * ring) in mach64_ring_resume() argument
573 ring->head_addr, ring->head, ring->tail, ring->space); in mach64_ring_resume()
577 ring->head_addr | MACH64_CIRCULAR_BUF_SIZE_16KB); in mach64_ring_resume()
614 drm_mach64_descriptor_ring_t * ring) in mach64_ring_tick() argument
617 ring->head_addr, ring->head, ring->tail, ring->space); in mach64_ring_tick()
622 if (ring->head != ring->tail) { in mach64_ring_tick()
[all …]
HDmach64_dma.c121 drm_mach64_descriptor_ring_t *ring = &dev_priv->ring; in mach64_wait_ring() local
126 if (ring->space >= n) { in mach64_wait_ring()
147 drm_mach64_descriptor_ring_t *ring = &dev_priv->ring; in mach64_ring_idle() local
151 head = ring->head; in mach64_ring_idle()
155 if (ring->head == ring->tail && in mach64_ring_idle()
161 if (ring->head == head) { in mach64_ring_idle()
164 head = ring->head; in mach64_ring_idle()
182 drm_mach64_descriptor_ring_t *ring = &dev_priv->ring; in mach64_ring_reset() local
185 ring->head_addr = ring->start_addr; in mach64_ring_reset()
186 ring->head = ring->tail = 0; in mach64_ring_reset()
[all …]
HDr128_drv.h82 drm_r128_ring_buffer_t ring; member
418 drm_r128_ring_buffer_t *ring = &dev_priv->ring; in r128_update_ring_snapshot() local
419 ring->space = (GET_RING_HEAD(dev_priv) - ring->tail) * sizeof(u32); in r128_update_ring_snapshot()
420 if (ring->space <= 0) in r128_update_ring_snapshot()
421 ring->space += ring->size; in r128_update_ring_snapshot()
430 drm_r128_ring_buffer_t *ring = &dev_priv->ring; int i; \
431 if ( ring->space < ring->high_mark ) { \
434 if ( ring->space >= ring->high_mark ) \
468 int write, _nr; unsigned int tail_mask; volatile u32 *ring;
474 if ( dev_priv->ring.space <= (n) * sizeof(u32) ) { \
[all …]
/NextBSD/sys/dev/iwm/
HDif_iwm_util.c181 struct iwm_tx_ring *ring = &sc->txq[IWM_MVM_CMD_QUEUE]; in iwm_send_cmd() local
204 sc->sc_wantresp = ring->qid << 16 | ring->cur; in iwm_send_cmd()
217 desc = &ring->desc[ring->cur]; in iwm_send_cmd()
218 data = &ring->data[ring->cur]; in iwm_send_cmd()
229 error = bus_dmamem_alloc(ring->data_dmat, (void **)&cmd, in iwm_send_cmd()
233 error = bus_dmamap_load(ring->data_dmat, data->map, in iwm_send_cmd()
239 cmd = &ring->cmd[ring->cur]; in iwm_send_cmd()
245 cmd->hdr.qid = ring->qid; in iwm_send_cmd()
246 cmd->hdr.idx = ring->cur; in iwm_send_cmd()
271 bus_dmamap_sync(ring->data_dmat, data->map, in iwm_send_cmd()
[all …]

12345678910>>...13