1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3 *
4 * This file is provided under a dual BSD/GPLv2 license. When using or
5 * redistributing this file, you may do so under either license.
6 *
7 * GPL LICENSE SUMMARY
8 *
9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
23 * The full GNU General Public License is included in this distribution
24 * in the file called LICENSE.GPL.
25 *
26 * BSD LICENSE
27 *
28 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
29 * All rights reserved.
30 *
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
33 * are met:
34 *
35 * * Redistributions of source code must retain the above copyright
36 * notice, this list of conditions and the following disclaimer.
37 * * Redistributions in binary form must reproduce the above copyright
38 * notice, this list of conditions and the following disclaimer in
39 * the documentation and/or other materials provided with the
40 * distribution.
41 *
42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53 *
54 * $FreeBSD$
55 */
56 #ifndef _SCIC_SDS_CONTROLLER_REGISTERS_H_
57 #define _SCIC_SDS_CONTROLLER_REGISTERS_H_
58
59 /**
60 * @file
61 *
62 * @brief This file contains macros used to perform the register reads/writes
63 * to the SCU hardware.
64 */
65
66 #ifdef __cplusplus
67 extern "C" {
68 #endif // __cplusplus
69
70 #include <dev/isci/scil/scu_registers.h>
71 #include <dev/isci/scil/scic_sds_controller.h>
72
73 /**
74 * @name SMU_REGISTER_ACCESS_MACROS
75 */
76 /*@{*/
77 #define scic_sds_controller_smu_register_read(controller, reg) \
78 smu_register_read( \
79 (controller), \
80 (controller)->smu_registers->reg \
81 )
82
83 #define scic_sds_controller_smu_register_write(controller, reg, value) \
84 smu_register_write( \
85 (controller), \
86 (controller)->smu_registers->reg, \
87 (value) \
88 )
89 /*@}*/
90
91 /**
92 * @name AFE_REGISTER_ACCESS_MACROS
93 */
94 /*@{*/
95 #define scu_afe_register_write(controller, reg, value) \
96 scu_register_write( \
97 (controller), \
98 (controller)->scu_registers->afe.reg, \
99 (value) \
100 )
101
102 #define scu_afe_register_read(controller, reg) \
103 scu_register_read( \
104 (controller), \
105 (controller)->scu_registers->afe.reg \
106 )
107 /*@}*/
108
109 /**
110 * @name SGPIO_PEG0_REGISTER_ACCESS_MACROS
111 */
112 /*@{*/
113 #define scu_sgpio_peg0_register_read(controller, reg) \
114 scu_register_read( \
115 (controller), \
116 (controller)->scu_registers->peg0.sgpio.reg \
117 )
118
119 #define scu_sgpio_peg0_register_write(controller, reg, value) \
120 scu_register_write( \
121 (controller), \
122 (controller)->scu_registers->peg0.sgpio.reg, \
123 (value) \
124 )
125 /*@}*/
126
127 /**
128 * @name VIIT_REGISTER_ACCESS_MACROS
129 */
130 /*@{*/
131 #define scu_controller_viit_register_write(controller, index, reg, value) \
132 scu_register_write( \
133 (controller), \
134 (controller)->scu_registers->peg0.viit[index].reg, \
135 value \
136 )
137 /*@}*/
138
139 /**
140 * @name SCRATCH_RAM_REGISTER_ACCESS_MACROS
141 */
142 /*@{*/
143 // Scratch RAM access may be needed before the scu_registers pointer
144 // has been initialized. So instead, explicitly cast BAR1 to a
145 // SCU_REGISTERS_T data structure.
146
147 // Scratch RAM is stored in the Zoning Permission Table for OROM use.
148 #define scu_controller_scratch_ram_register_write(controller, index, value) \
149 scu_register_write( \
150 (controller), \
151 ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt0.table[index], \
152 value \
153 )
154
155 #define scu_controller_scratch_ram_register_read(controller, index) \
156 scu_register_read( \
157 (controller), \
158 ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt0.table[index] \
159 )
160
161 #define scu_controller_scratch_ram_register_write_ext(controller, index, value) \
162 scu_register_write( \
163 (controller), \
164 ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt1.table[index], \
165 value \
166 )
167
168 #define scu_controller_scratch_ram_register_read_ext(controller, index) \
169 scu_register_read( \
170 (controller), \
171 ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt1.table[index] \
172 )
173 /*@}*/
174
175
176 //*****************************************************************************
177 //* SMU REGISTERS
178 //*****************************************************************************
179
180 /**
181 * @name SMU_REGISTERS
182 */
183 /*@{*/
184 #define SMU_PCP_WRITE(controller, value) \
185 scic_sds_controller_smu_register_write( \
186 controller, post_context_port, value \
187 )
188
189 #define SMU_TCR_READ(controller, value) \
190 scic_sds_controller_smu_register_read( \
191 controller, task_context_range \
192 )
193
194 #define SMU_TCR_WRITE(controller, value) \
195 scic_sds_controller_smu_register_write( \
196 controller, task_context_range, value \
197 )
198
199 #define SMU_HTTBAR_WRITE(controller, address) \
200 { \
201 scic_sds_controller_smu_register_write( \
202 controller, \
203 host_task_table_lower, \
204 sci_cb_physical_address_lower(address) \
205 );\
206 scic_sds_controller_smu_register_write( \
207 controller, \
208 host_task_table_upper, \
209 sci_cb_physical_address_upper(address) \
210 ); \
211 }
212
213 #define SMU_CQBAR_WRITE(controller, address) \
214 { \
215 scic_sds_controller_smu_register_write( \
216 controller, \
217 completion_queue_lower, \
218 sci_cb_physical_address_lower(address) \
219 ); \
220 scic_sds_controller_smu_register_write( \
221 controller, \
222 completion_queue_upper, \
223 sci_cb_physical_address_upper(address) \
224 ); \
225 }
226
227 #define SMU_CQGR_WRITE(controller, value) \
228 scic_sds_controller_smu_register_write( \
229 controller, completion_queue_get, value \
230 )
231
232 #define SMU_CQGR_READ(controller, value) \
233 scic_sds_controller_smu_register_read( \
234 controller, completion_queue_get \
235 )
236
237 #define SMU_CQPR_WRITE(controller, value) \
238 scic_sds_controller_smu_register_write( \
239 controller, completion_queue_put, value \
240 )
241
242 #define SMU_RNCBAR_WRITE(controller, address) \
243 { \
244 scic_sds_controller_smu_register_write( \
245 controller, \
246 remote_node_context_lower, \
247 sci_cb_physical_address_lower(address) \
248 ); \
249 scic_sds_controller_smu_register_write( \
250 controller, \
251 remote_node_context_upper, \
252 sci_cb_physical_address_upper(address) \
253 ); \
254 }
255
256 #define SMU_AMR_READ(controller) \
257 scic_sds_controller_smu_register_read( \
258 controller, address_modifier \
259 )
260
261 #define SMU_IMR_READ(controller) \
262 scic_sds_controller_smu_register_read( \
263 controller, interrupt_mask \
264 )
265
266 #define SMU_IMR_WRITE(controller, mask) \
267 scic_sds_controller_smu_register_write( \
268 controller, interrupt_mask, mask \
269 )
270
271 #define SMU_ISR_READ(controller) \
272 scic_sds_controller_smu_register_read( \
273 controller, interrupt_status \
274 )
275
276 #define SMU_ISR_WRITE(controller, status) \
277 scic_sds_controller_smu_register_write( \
278 controller, interrupt_status, status \
279 )
280
281 #define SMU_ICC_READ(controller) \
282 scic_sds_controller_smu_register_read( \
283 controller, interrupt_coalesce_control \
284 )
285
286 #define SMU_ICC_WRITE(controller, value) \
287 scic_sds_controller_smu_register_write( \
288 controller, interrupt_coalesce_control, value \
289 )
290
291 #define SMU_CQC_WRITE(controller, value) \
292 scic_sds_controller_smu_register_write( \
293 controller, completion_queue_control, value \
294 )
295
296 #define SMU_SMUSRCR_WRITE(controller, value) \
297 scic_sds_controller_smu_register_write( \
298 controller, soft_reset_control, value \
299 )
300
301 #define SMU_TCA_WRITE(controller, index, value) \
302 scic_sds_controller_smu_register_write( \
303 controller, task_context_assignment[index], value \
304 )
305
306 #define SMU_TCA_READ(controller, index) \
307 scic_sds_controller_smu_register_read( \
308 controller, task_context_assignment[index] \
309 )
310
311 #define SMU_DCC_READ(controller) \
312 scic_sds_controller_smu_register_read( \
313 controller, device_context_capacity \
314 )
315
316 #define SMU_DFC_READ(controller) \
317 scic_sds_controller_smu_register_read( \
318 controller, device_function_capacity \
319 )
320
321 #define SMU_SMUCSR_READ(controller) \
322 scic_sds_controller_smu_register_read( \
323 controller, control_status \
324 )
325
326 #define SMU_CGUCR_READ(controller) \
327 scic_sds_controller_smu_register_read( \
328 controller, clock_gating_control \
329 )
330
331 #define SMU_CGUCR_WRITE(controller, value) \
332 scic_sds_controller_smu_register_write( \
333 controller, clock_gating_control, value \
334 )
335
336 #define SMU_CQPR_READ(controller) \
337 scic_sds_controller_smu_register_read( \
338 controller, completion_queue_put \
339 )
340
341 /*@}*/
342
343 /**
344 * @name SCU_REGISTER_ACCESS_MACROS
345 */
346 /*@{*/
347 #define scic_sds_controller_scu_register_read(controller, reg) \
348 scu_register_read( \
349 (controller), \
350 (controller)->scu_registers->reg \
351 )
352
353 #define scic_sds_controller_scu_register_write(controller, reg, value) \
354 scu_register_write( \
355 (controller), \
356 (controller)->scu_registers->reg, \
357 (value) \
358 )
359 /*@}*/
360
361
362 //****************************************************************************
363 //* SCU SDMA REGISTERS
364 //****************************************************************************
365
366 /**
367 * @name SCU_SDMA_REGISTER_ACCESS_MACROS
368 */
369 /*@{*/
370 #define scu_sdma_register_read(controller, reg) \
371 scu_register_read( \
372 (controller), \
373 (controller)->scu_registers->sdma.reg \
374 )
375
376 #define scu_sdma_register_write(controller, reg, value) \
377 scu_register_write( \
378 (controller), \
379 (controller)->scu_registers->sdma.reg, \
380 (value) \
381 )
382 /*@}*/
383
384 /**
385 * @name SCU_SDMA_REGISTERS
386 */
387 /*@{*/
388 #define SCU_PUFATHAR_WRITE(controller, address) \
389 { \
390 scu_sdma_register_write( \
391 controller, \
392 uf_address_table_lower, \
393 sci_cb_physical_address_lower(address) \
394 ); \
395 scu_sdma_register_write( \
396 controller, \
397 uf_address_table_upper, \
398 sci_cb_physical_address_upper(address) \
399 ); \
400 }
401
402 #define SCU_UFHBAR_WRITE(controller, address) \
403 { \
404 scu_sdma_register_write( \
405 controller, \
406 uf_header_base_address_lower, \
407 sci_cb_physical_address_lower(address) \
408 ); \
409 scu_sdma_register_write( \
410 controller, \
411 uf_header_base_address_upper, \
412 sci_cb_physical_address_upper(address) \
413 ); \
414 }
415
416 #define SCU_UFQC_READ(controller) \
417 scu_sdma_register_read( \
418 controller, \
419 unsolicited_frame_queue_control \
420 )
421
422 #define SCU_UFQC_WRITE(controller, value) \
423 scu_sdma_register_write( \
424 controller, \
425 unsolicited_frame_queue_control, \
426 value \
427 )
428
429 #define SCU_UFQPP_READ(controller) \
430 scu_sdma_register_read( \
431 controller, \
432 unsolicited_frame_put_pointer \
433 )
434
435 #define SCU_UFQPP_WRITE(controller, value) \
436 scu_sdma_register_write( \
437 controller, \
438 unsolicited_frame_put_pointer, \
439 value \
440 )
441
442 #define SCU_UFQGP_WRITE(controller, value) \
443 scu_sdma_register_write( \
444 controller, \
445 unsolicited_frame_get_pointer, \
446 value \
447 )
448
449 #define SCU_PDMACR_READ(controller) \
450 scu_sdma_register_read( \
451 controller, \
452 pdma_configuration \
453 )
454
455 #define SCU_PDMACR_WRITE(controller, value) \
456 scu_sdma_register_write( \
457 controller, \
458 pdma_configuration, \
459 value \
460 )
461
462 #define SCU_CDMACR_READ(controller) \
463 scu_sdma_register_read( \
464 controller, \
465 cdma_configuration \
466 )
467
468 #define SCU_CDMACR_WRITE(controller, value) \
469 scu_sdma_register_write( \
470 controller, \
471 cdma_configuration, \
472 value \
473 )
474 /*@}*/
475
476 //*****************************************************************************
477 //* SCU CRAM AND FBRAM Registers
478 //*****************************************************************************
479 /**
480 * @name SCU_CRAM_REGISTER_ACCESS_MACROS
481 */
482 /*@{*/
483 #define scu_cram_register_read(controller, reg) \
484 scu_register_read( \
485 (controller), \
486 (controller)->scu_registers->cram.reg \
487 )
488
489 #define scu_cram_register_write(controller, reg, value) \
490 scu_register_write( \
491 (controller), \
492 (controller)->scu_registers->cram.reg, \
493 (value) \
494 )
495 /*@}*/
496
497 /**
498 * @name SCU_FBRAM_REGISTER_ACCESS_MACROS
499 */
500 /*@{*/
501 #define scu_fbram_register_read(controller, reg) \
502 scu_register_read( \
503 (controller), \
504 (controller)->scu_registers->fbram.reg \
505 )
506
507 #define scu_fbram_register_write(controller, reg, value) \
508 scu_register_write( \
509 (controller), \
510 (controller)->scu_registers->fbram.reg, \
511 (value) \
512 )
513 /*@}*/
514
515
516 /**
517 * @name SCU_CRAM_REGISTERS
518 */
519 /*@{*/
520
521 // SRAM ECC CONTROL REGISTER BITS
522 #define SIGNLE_BIT_ERROR_CORRECTION_ENABLE 0x00000001
523 #define MULTI_BIT_ERROR_REPORTING_ENABLE 0x00000002
524 #define SINGLE_BIT_ERROR_REPORTING_ENABLE 0x00000004
525
526 //SRAM ECC control register (SECR0)
527 #define SCU_SECR0_WRITE(controller, value) \
528 scu_cram_register_write( \
529 controller, \
530 sram_ecc_control_0, \
531 value \
532 )
533 /*@}*/
534
535 /**
536 * @name SCU_FBRAM_REGISTERS
537 */
538 /*@{*/
539
540 //SRAM ECC control register (SECR1)
541 #define SCU_SECR1_WRITE(controller, value) \
542 scu_fbram_register_write( \
543 controller, \
544 sram_ecc_control_1, \
545 value \
546 )
547 /*@}*/
548
549
550 //*****************************************************************************
551 //* SCU Port Task Scheduler Group Registers
552 //*****************************************************************************
553
554 /**
555 * @name SCU_PTSG_REGISTER_ACCESS_MACROS
556 */
557 /*@{*/
558 #define scu_ptsg_register_read(controller, reg) \
559 scu_register_read( \
560 (controller), \
561 (controller)->scu_registers->peg0.ptsg.reg \
562 )
563
564 #define scu_ptsg_register_write(controller, reg, value) \
565 scu_register_write( \
566 (controller), \
567 (controller)->scu_registers->peg0.ptsg.reg, \
568 (value) \
569 )
570 /*@}*/
571
572 /**
573 * @name SCU_PTSG_REGISTERS
574 */
575 /*@{*/
576 #define SCU_PTSGCR_READ(controller) \
577 scu_ptsg_register_read( \
578 (controller), \
579 control \
580 )
581
582 #define SCU_PTSGCR_WRITE(controller, value) \
583 scu_ptsg_register_write( \
584 (controller), \
585 control, \
586 value \
587 )
588
589 #define SCU_PTSGRTC_READ(controller) \
590 scu_ptsg_register_read( \
591 controller, \
592 real_time_clock \
593 )
594 /*@}*/
595
596 #ifdef __cplusplus
597 }
598 #endif // __cplusplus
599
600 #endif // _SCIC_SDS_CONTROLLER_REGISTERS_H_
Cache object: 2aa4202b92a32e9bf44b8e191cfa3e76
|