xref: /dpdk/drivers/net/ark/ark_pktdir.c (revision 3b4f34f6b6071524a3de6a1db316eca65b4804ca)
1540914bcSEd Czeck /* SPDX-License-Identifier: BSD-3-Clause
2540914bcSEd Czeck  * Copyright (c) 2015-2018 Atomic Rules LLC
3b33ccdb1SEd Czeck  */
4b33ccdb1SEd Czeck 
5b33ccdb1SEd Czeck #include <stdint.h>
6b33ccdb1SEd Czeck #include <inttypes.h>
7b33ccdb1SEd Czeck 
8b33ccdb1SEd Czeck #include "ark_pktdir.h"
9b33ccdb1SEd Czeck #include "ark_global.h"
1053a9ba13SYong Wang #include "ark_logs.h"
11b33ccdb1SEd Czeck 
12b33ccdb1SEd Czeck 
13b33ccdb1SEd Czeck ark_pkt_dir_t
ark_pktdir_init(void * base)14b33ccdb1SEd Czeck ark_pktdir_init(void *base)
15b33ccdb1SEd Czeck {
16b33ccdb1SEd Czeck 	struct ark_pkt_dir_inst *inst =
17b33ccdb1SEd Czeck 		rte_malloc("ark_pkt_dir_inst",
18b33ccdb1SEd Czeck 			   sizeof(struct ark_pkt_dir_inst),
19b33ccdb1SEd Czeck 			   0);
2053a9ba13SYong Wang 	if (inst == NULL) {
211502d443SEd Czeck 		ARK_PMD_LOG(ERR, "Failed to malloc ark_pkt_dir_inst.\n");
2253a9ba13SYong Wang 		return inst;
2353a9ba13SYong Wang 	}
24b33ccdb1SEd Czeck 	inst->regs = (struct ark_pkt_dir_regs *)base;
25*3b4f34f6SEd Czeck 	inst->regs->ctrl = ARK_PKT_DIR_INIT_VAL; /* POR state */
26b33ccdb1SEd Czeck 	return inst;
27b33ccdb1SEd Czeck }
28b33ccdb1SEd Czeck 
29b33ccdb1SEd Czeck void
ark_pktdir_uninit(ark_pkt_dir_t handle)30b33ccdb1SEd Czeck ark_pktdir_uninit(ark_pkt_dir_t handle)
31b33ccdb1SEd Czeck {
32b33ccdb1SEd Czeck 	struct ark_pkt_dir_inst *inst = (struct ark_pkt_dir_inst *)handle;
33b33ccdb1SEd Czeck 
34b33ccdb1SEd Czeck 	rte_free(inst);
35b33ccdb1SEd Czeck }
36b33ccdb1SEd Czeck 
37b33ccdb1SEd Czeck void
ark_pktdir_setup(ark_pkt_dir_t handle,uint32_t v)38b33ccdb1SEd Czeck ark_pktdir_setup(ark_pkt_dir_t handle, uint32_t v)
39b33ccdb1SEd Czeck {
40b33ccdb1SEd Czeck 	struct ark_pkt_dir_inst *inst = (struct ark_pkt_dir_inst *)handle;
41b33ccdb1SEd Czeck 	inst->regs->ctrl = v;
42b33ccdb1SEd Czeck }
43b33ccdb1SEd Czeck 
44b33ccdb1SEd Czeck uint32_t
ark_pktdir_status(ark_pkt_dir_t handle)45b33ccdb1SEd Czeck ark_pktdir_status(ark_pkt_dir_t handle)
46b33ccdb1SEd Czeck {
47b33ccdb1SEd Czeck 	struct ark_pkt_dir_inst *inst = (struct ark_pkt_dir_inst *)handle;
48b33ccdb1SEd Czeck 	return inst->regs->ctrl;
49b33ccdb1SEd Czeck }
50b33ccdb1SEd Czeck 
51b33ccdb1SEd Czeck uint32_t
ark_pktdir_stall_cnt(ark_pkt_dir_t handle)52b33ccdb1SEd Czeck ark_pktdir_stall_cnt(ark_pkt_dir_t handle)
53b33ccdb1SEd Czeck {
54b33ccdb1SEd Czeck 	struct ark_pkt_dir_inst *inst = (struct ark_pkt_dir_inst *)handle;
55b33ccdb1SEd Czeck 	return inst->regs->stall_cnt;
56b33ccdb1SEd Czeck }
57