xref: /freebsd/sys/dev/qat/qat_common/adf_cfg_instance.c (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
1*78ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
2*78ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
3*78ee8d1cSJulian Grajkowski #include "adf_cfg_instance.h"
4*78ee8d1cSJulian Grajkowski 
5*78ee8d1cSJulian Grajkowski void
crypto_instance_init(struct adf_cfg_instance * instance,struct adf_cfg_bundle * bundle)6*78ee8d1cSJulian Grajkowski crypto_instance_init(struct adf_cfg_instance *instance,
7*78ee8d1cSJulian Grajkowski 		     struct adf_cfg_bundle *bundle)
8*78ee8d1cSJulian Grajkowski {
9*78ee8d1cSJulian Grajkowski 	int i = 0;
10*78ee8d1cSJulian Grajkowski 
11*78ee8d1cSJulian Grajkowski 	instance->stype = CRYPTO;
12*78ee8d1cSJulian Grajkowski 	for (i = 0; i < bundle->num_of_rings / 2; i++) {
13*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
14*78ee8d1cSJulian Grajkowski 			continue;
15*78ee8d1cSJulian Grajkowski 
16*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_ASYM &&
17*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == TX) {
18*78ee8d1cSJulian Grajkowski 			instance->asym_tx = bundle->rings[i]->number;
19*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
20*78ee8d1cSJulian Grajkowski 			break;
21*78ee8d1cSJulian Grajkowski 		}
22*78ee8d1cSJulian Grajkowski 	}
23*78ee8d1cSJulian Grajkowski 
24*78ee8d1cSJulian Grajkowski 	for (i = 0; i < bundle->num_of_rings / 2; i++) {
25*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
26*78ee8d1cSJulian Grajkowski 			continue;
27*78ee8d1cSJulian Grajkowski 
28*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_SYM &&
29*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == TX) {
30*78ee8d1cSJulian Grajkowski 			instance->sym_tx = bundle->rings[i]->number;
31*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
32*78ee8d1cSJulian Grajkowski 			break;
33*78ee8d1cSJulian Grajkowski 		}
34*78ee8d1cSJulian Grajkowski 	}
35*78ee8d1cSJulian Grajkowski 
36*78ee8d1cSJulian Grajkowski 	for (i = bundle->num_of_rings / 2; i < bundle->num_of_rings; i++) {
37*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
38*78ee8d1cSJulian Grajkowski 			continue;
39*78ee8d1cSJulian Grajkowski 
40*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_ASYM &&
41*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == RX) {
42*78ee8d1cSJulian Grajkowski 			instance->asym_rx = bundle->rings[i]->number;
43*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
44*78ee8d1cSJulian Grajkowski 			break;
45*78ee8d1cSJulian Grajkowski 		}
46*78ee8d1cSJulian Grajkowski 	}
47*78ee8d1cSJulian Grajkowski 
48*78ee8d1cSJulian Grajkowski 	for (i = bundle->num_of_rings / 2; i < bundle->num_of_rings; i++) {
49*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
50*78ee8d1cSJulian Grajkowski 			continue;
51*78ee8d1cSJulian Grajkowski 
52*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_SYM &&
53*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == RX) {
54*78ee8d1cSJulian Grajkowski 			instance->sym_rx = bundle->rings[i]->number;
55*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
56*78ee8d1cSJulian Grajkowski 			break;
57*78ee8d1cSJulian Grajkowski 		}
58*78ee8d1cSJulian Grajkowski 	}
59*78ee8d1cSJulian Grajkowski }
60*78ee8d1cSJulian Grajkowski 
61*78ee8d1cSJulian Grajkowski void
dc_instance_init(struct adf_cfg_instance * instance,struct adf_cfg_bundle * bundle)62*78ee8d1cSJulian Grajkowski dc_instance_init(struct adf_cfg_instance *instance,
63*78ee8d1cSJulian Grajkowski 		 struct adf_cfg_bundle *bundle)
64*78ee8d1cSJulian Grajkowski {
65*78ee8d1cSJulian Grajkowski 	int i = 0;
66*78ee8d1cSJulian Grajkowski 
67*78ee8d1cSJulian Grajkowski 	instance->stype = COMP;
68*78ee8d1cSJulian Grajkowski 	for (i = 0; i < bundle->num_of_rings / 2; i++) {
69*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
70*78ee8d1cSJulian Grajkowski 			continue;
71*78ee8d1cSJulian Grajkowski 
72*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_DC &&
73*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == TX) {
74*78ee8d1cSJulian Grajkowski 			instance->dc_tx = bundle->rings[i]->number;
75*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
76*78ee8d1cSJulian Grajkowski 			break;
77*78ee8d1cSJulian Grajkowski 		}
78*78ee8d1cSJulian Grajkowski 	}
79*78ee8d1cSJulian Grajkowski 
80*78ee8d1cSJulian Grajkowski 	for (i = bundle->num_of_rings / 2; i < bundle->num_of_rings; i++) {
81*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
82*78ee8d1cSJulian Grajkowski 			continue;
83*78ee8d1cSJulian Grajkowski 
84*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_DC &&
85*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == RX) {
86*78ee8d1cSJulian Grajkowski 			instance->dc_rx = bundle->rings[i]->number;
87*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
88*78ee8d1cSJulian Grajkowski 			break;
89*78ee8d1cSJulian Grajkowski 		}
90*78ee8d1cSJulian Grajkowski 	}
91*78ee8d1cSJulian Grajkowski }
92*78ee8d1cSJulian Grajkowski 
93*78ee8d1cSJulian Grajkowski void
asym_instance_init(struct adf_cfg_instance * instance,struct adf_cfg_bundle * bundle)94*78ee8d1cSJulian Grajkowski asym_instance_init(struct adf_cfg_instance *instance,
95*78ee8d1cSJulian Grajkowski 		   struct adf_cfg_bundle *bundle)
96*78ee8d1cSJulian Grajkowski {
97*78ee8d1cSJulian Grajkowski 	int i = 0;
98*78ee8d1cSJulian Grajkowski 
99*78ee8d1cSJulian Grajkowski 	instance->stype = ASYM;
100*78ee8d1cSJulian Grajkowski 	for (i = 0; i < bundle->num_of_rings / 2; i++) {
101*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
102*78ee8d1cSJulian Grajkowski 			continue;
103*78ee8d1cSJulian Grajkowski 
104*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_ASYM &&
105*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == TX) {
106*78ee8d1cSJulian Grajkowski 			instance->asym_tx = bundle->rings[i]->number;
107*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
108*78ee8d1cSJulian Grajkowski 			break;
109*78ee8d1cSJulian Grajkowski 		}
110*78ee8d1cSJulian Grajkowski 	}
111*78ee8d1cSJulian Grajkowski 
112*78ee8d1cSJulian Grajkowski 	for (i = bundle->num_of_rings / 2; i < bundle->num_of_rings; i++) {
113*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
114*78ee8d1cSJulian Grajkowski 			continue;
115*78ee8d1cSJulian Grajkowski 
116*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_ASYM &&
117*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == RX) {
118*78ee8d1cSJulian Grajkowski 			instance->asym_rx = bundle->rings[i]->number;
119*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
120*78ee8d1cSJulian Grajkowski 			break;
121*78ee8d1cSJulian Grajkowski 		}
122*78ee8d1cSJulian Grajkowski 	}
123*78ee8d1cSJulian Grajkowski }
124*78ee8d1cSJulian Grajkowski 
125*78ee8d1cSJulian Grajkowski void
sym_instance_init(struct adf_cfg_instance * instance,struct adf_cfg_bundle * bundle)126*78ee8d1cSJulian Grajkowski sym_instance_init(struct adf_cfg_instance *instance,
127*78ee8d1cSJulian Grajkowski 		  struct adf_cfg_bundle *bundle)
128*78ee8d1cSJulian Grajkowski {
129*78ee8d1cSJulian Grajkowski 	int i = 0;
130*78ee8d1cSJulian Grajkowski 
131*78ee8d1cSJulian Grajkowski 	instance->stype = SYM;
132*78ee8d1cSJulian Grajkowski 	for (i = 0; i < bundle->num_of_rings / 2; i++) {
133*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
134*78ee8d1cSJulian Grajkowski 			continue;
135*78ee8d1cSJulian Grajkowski 
136*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_SYM &&
137*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == TX) {
138*78ee8d1cSJulian Grajkowski 			instance->sym_tx = bundle->rings[i]->number;
139*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
140*78ee8d1cSJulian Grajkowski 			break;
141*78ee8d1cSJulian Grajkowski 		}
142*78ee8d1cSJulian Grajkowski 	}
143*78ee8d1cSJulian Grajkowski 
144*78ee8d1cSJulian Grajkowski 	for (i = 0 + bundle->num_of_rings / 2; i < bundle->num_of_rings; i++) {
145*78ee8d1cSJulian Grajkowski 		if ((bundle->in_use >> bundle->rings[i]->number) & 0x1)
146*78ee8d1cSJulian Grajkowski 			continue;
147*78ee8d1cSJulian Grajkowski 
148*78ee8d1cSJulian Grajkowski 		if (bundle->rings[i]->serv_type == ADF_ACCEL_SERV_SYM &&
149*78ee8d1cSJulian Grajkowski 		    bundle->rings[i]->mode == RX) {
150*78ee8d1cSJulian Grajkowski 			instance->sym_rx = bundle->rings[i]->number;
151*78ee8d1cSJulian Grajkowski 			bundle->in_use |= 1 << bundle->rings[i]->number;
152*78ee8d1cSJulian Grajkowski 			break;
153*78ee8d1cSJulian Grajkowski 		}
154*78ee8d1cSJulian Grajkowski 	}
155*78ee8d1cSJulian Grajkowski }
156