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