1014a9e22SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2014a9e22SJerin Jacob * Copyright(C) 2021 Marvell.
3014a9e22SJerin Jacob */
4014a9e22SJerin Jacob
5014a9e22SJerin Jacob #ifndef _ROC_IO_GENERIC_H_
6014a9e22SJerin Jacob #define _ROC_IO_GENERIC_H_
7014a9e22SJerin Jacob
8*fdbec406SAnoob Joseph #include "roc_platform.h"
9*fdbec406SAnoob Joseph
10014a9e22SJerin Jacob #define ROC_LMT_BASE_ID_GET(lmt_addr, lmt_id) (lmt_id = 0)
11ee48f711SNithin Dabilpuram #define ROC_LMT_CPT_BASE_ID_GET(lmt_addr, lmt_id) (lmt_id = 0)
12014a9e22SJerin Jacob
13014a9e22SJerin Jacob #define roc_load_pair(val0, val1, addr) \
14014a9e22SJerin Jacob do { \
15014a9e22SJerin Jacob val0 = plt_read64((void *)(addr)); \
16014a9e22SJerin Jacob val1 = plt_read64((uint8_t *)(addr) + 8); \
17014a9e22SJerin Jacob } while (0)
18014a9e22SJerin Jacob
19014a9e22SJerin Jacob #define roc_store_pair(val0, val1, addr) \
20014a9e22SJerin Jacob do { \
21014a9e22SJerin Jacob plt_write64(val0, (void *)(addr)); \
22014a9e22SJerin Jacob plt_write64(val1, (((uint8_t *)(addr)) + 8)); \
23014a9e22SJerin Jacob } while (0)
24014a9e22SJerin Jacob
25014a9e22SJerin Jacob #define roc_prefetch_store_keep(ptr) \
26014a9e22SJerin Jacob do { \
27014a9e22SJerin Jacob } while (0)
28014a9e22SJerin Jacob
29014a9e22SJerin Jacob static __plt_always_inline void
roc_atomic128_cas_noreturn(uint64_t swap0,uint64_t swap1,uint64_t ptr)30014a9e22SJerin Jacob roc_atomic128_cas_noreturn(uint64_t swap0, uint64_t swap1, uint64_t ptr)
31014a9e22SJerin Jacob {
32014a9e22SJerin Jacob PLT_SET_USED(swap0);
33014a9e22SJerin Jacob PLT_SET_USED(swap1);
34014a9e22SJerin Jacob PLT_SET_USED(ptr);
35014a9e22SJerin Jacob }
36014a9e22SJerin Jacob
37014a9e22SJerin Jacob static __plt_always_inline uint64_t
roc_atomic64_cas(uint64_t compare,uint64_t swap,int64_t * ptr)38014a9e22SJerin Jacob roc_atomic64_cas(uint64_t compare, uint64_t swap, int64_t *ptr)
39014a9e22SJerin Jacob {
40014a9e22SJerin Jacob PLT_SET_USED(swap);
41014a9e22SJerin Jacob PLT_SET_USED(ptr);
42014a9e22SJerin Jacob
43014a9e22SJerin Jacob return compare;
44014a9e22SJerin Jacob }
45014a9e22SJerin Jacob
4609cad550SAshwin Sekhar T K static __plt_always_inline uint64_t
roc_atomic64_casl(uint64_t compare,uint64_t swap,int64_t * ptr)4709cad550SAshwin Sekhar T K roc_atomic64_casl(uint64_t compare, uint64_t swap, int64_t *ptr)
4809cad550SAshwin Sekhar T K {
4909cad550SAshwin Sekhar T K PLT_SET_USED(swap);
5009cad550SAshwin Sekhar T K PLT_SET_USED(ptr);
5109cad550SAshwin Sekhar T K
5209cad550SAshwin Sekhar T K return compare;
5309cad550SAshwin Sekhar T K }
5409cad550SAshwin Sekhar T K
55014a9e22SJerin Jacob static inline uint64_t
roc_atomic64_add_nosync(int64_t incr,int64_t * ptr)56014a9e22SJerin Jacob roc_atomic64_add_nosync(int64_t incr, int64_t *ptr)
57014a9e22SJerin Jacob {
58014a9e22SJerin Jacob PLT_SET_USED(ptr);
59014a9e22SJerin Jacob PLT_SET_USED(incr);
60014a9e22SJerin Jacob
61014a9e22SJerin Jacob return 0;
62014a9e22SJerin Jacob }
63014a9e22SJerin Jacob
64014a9e22SJerin Jacob static inline uint64_t
roc_atomic64_add_sync(int64_t incr,int64_t * ptr)65014a9e22SJerin Jacob roc_atomic64_add_sync(int64_t incr, int64_t *ptr)
66014a9e22SJerin Jacob {
67014a9e22SJerin Jacob PLT_SET_USED(ptr);
68014a9e22SJerin Jacob PLT_SET_USED(incr);
69014a9e22SJerin Jacob
70014a9e22SJerin Jacob return 0;
71014a9e22SJerin Jacob }
72014a9e22SJerin Jacob
73014a9e22SJerin Jacob static inline uint64_t
roc_lmt_submit_ldeor(plt_iova_t io_address)74014a9e22SJerin Jacob roc_lmt_submit_ldeor(plt_iova_t io_address)
75014a9e22SJerin Jacob {
76014a9e22SJerin Jacob PLT_SET_USED(io_address);
77014a9e22SJerin Jacob
78014a9e22SJerin Jacob return 0;
79014a9e22SJerin Jacob }
80014a9e22SJerin Jacob
81014a9e22SJerin Jacob static __plt_always_inline uint64_t
roc_lmt_submit_ldeorl(plt_iova_t io_address)82014a9e22SJerin Jacob roc_lmt_submit_ldeorl(plt_iova_t io_address)
83014a9e22SJerin Jacob {
84014a9e22SJerin Jacob PLT_SET_USED(io_address);
85014a9e22SJerin Jacob
86014a9e22SJerin Jacob return 0;
87014a9e22SJerin Jacob }
88014a9e22SJerin Jacob
89014a9e22SJerin Jacob static inline void
roc_lmt_submit_steor(uint64_t data,plt_iova_t io_address)90014a9e22SJerin Jacob roc_lmt_submit_steor(uint64_t data, plt_iova_t io_address)
91014a9e22SJerin Jacob {
92014a9e22SJerin Jacob PLT_SET_USED(data);
93014a9e22SJerin Jacob PLT_SET_USED(io_address);
94014a9e22SJerin Jacob }
95014a9e22SJerin Jacob
96014a9e22SJerin Jacob static inline void
roc_lmt_submit_steorl(uint64_t data,plt_iova_t io_address)97014a9e22SJerin Jacob roc_lmt_submit_steorl(uint64_t data, plt_iova_t io_address)
98014a9e22SJerin Jacob {
99014a9e22SJerin Jacob PLT_SET_USED(data);
100014a9e22SJerin Jacob PLT_SET_USED(io_address);
101014a9e22SJerin Jacob }
102014a9e22SJerin Jacob
103014a9e22SJerin Jacob static __plt_always_inline void
roc_lmt_mov(void * out,const void * in,const uint32_t lmtext)104014a9e22SJerin Jacob roc_lmt_mov(void *out, const void *in, const uint32_t lmtext)
105014a9e22SJerin Jacob {
106014a9e22SJerin Jacob PLT_SET_USED(in);
107014a9e22SJerin Jacob PLT_SET_USED(lmtext);
108014a9e22SJerin Jacob memset(out, 0, sizeof(__uint128_t) * (lmtext ? lmtext > 1 ? 4 : 3 : 2));
109014a9e22SJerin Jacob }
110014a9e22SJerin Jacob
111014a9e22SJerin Jacob static __plt_always_inline void
roc_lmt_mov64(void * out,const void * in)112ae2c2cb6SPavan Nikhilesh roc_lmt_mov64(void *out, const void *in)
113ae2c2cb6SPavan Nikhilesh {
114ae2c2cb6SPavan Nikhilesh PLT_SET_USED(out);
115ae2c2cb6SPavan Nikhilesh PLT_SET_USED(in);
116ae2c2cb6SPavan Nikhilesh }
117ae2c2cb6SPavan Nikhilesh
118ae2c2cb6SPavan Nikhilesh static __plt_always_inline void
roc_lmt_mov_nv(void * out,const void * in,const uint32_t lmtext)119ae2c2cb6SPavan Nikhilesh roc_lmt_mov_nv(void *out, const void *in, const uint32_t lmtext)
120ae2c2cb6SPavan Nikhilesh {
121ae2c2cb6SPavan Nikhilesh PLT_SET_USED(in);
122ae2c2cb6SPavan Nikhilesh PLT_SET_USED(lmtext);
123ae2c2cb6SPavan Nikhilesh memset(out, 0, sizeof(__uint128_t) * (lmtext ? lmtext > 1 ? 4 : 3 : 2));
124ae2c2cb6SPavan Nikhilesh }
125ae2c2cb6SPavan Nikhilesh
126ae2c2cb6SPavan Nikhilesh static __plt_always_inline void
roc_lmt_mov_seg(void * out,const void * in,const uint16_t segdw)127014a9e22SJerin Jacob roc_lmt_mov_seg(void *out, const void *in, const uint16_t segdw)
128014a9e22SJerin Jacob {
129014a9e22SJerin Jacob PLT_SET_USED(out);
130014a9e22SJerin Jacob PLT_SET_USED(in);
131014a9e22SJerin Jacob PLT_SET_USED(segdw);
132014a9e22SJerin Jacob }
133014a9e22SJerin Jacob
134014a9e22SJerin Jacob static __plt_always_inline void
roc_lmt_mov_one(void * out,const void * in)135014a9e22SJerin Jacob roc_lmt_mov_one(void *out, const void *in)
136014a9e22SJerin Jacob {
137014a9e22SJerin Jacob PLT_SET_USED(out);
138014a9e22SJerin Jacob PLT_SET_USED(in);
139014a9e22SJerin Jacob }
140014a9e22SJerin Jacob
141014a9e22SJerin Jacob static __plt_always_inline void
roc_lmt_mov_seg_nv(void * out,const void * in,const uint16_t segdw)142014a9e22SJerin Jacob roc_lmt_mov_seg_nv(void *out, const void *in, const uint16_t segdw)
143014a9e22SJerin Jacob {
144014a9e22SJerin Jacob PLT_SET_USED(out);
145014a9e22SJerin Jacob PLT_SET_USED(in);
146014a9e22SJerin Jacob PLT_SET_USED(segdw);
147014a9e22SJerin Jacob }
148014a9e22SJerin Jacob
149804c108bSTomasz Duszynski static __plt_always_inline void
roc_atf_ret(void)150804c108bSTomasz Duszynski roc_atf_ret(void)
151804c108bSTomasz Duszynski {
152804c108bSTomasz Duszynski }
153804c108bSTomasz Duszynski
154014a9e22SJerin Jacob #endif /* _ROC_IO_GENERIC_H_ */
155