1
2
3
4#ifndef _MLXSW_CMD_H
5#define _MLXSW_CMD_H
6
7#include "item.h"
8
9#define MLXSW_CMD_MBOX_SIZE 4096
10
11static inline char *mlxsw_cmd_mbox_alloc(void)
12{
13 return kzalloc(MLXSW_CMD_MBOX_SIZE, GFP_KERNEL);
14}
15
16static inline void mlxsw_cmd_mbox_free(char *mbox)
17{
18 kfree(mbox);
19}
20
21static inline void mlxsw_cmd_mbox_zero(char *mbox)
22{
23 memset(mbox, 0, MLXSW_CMD_MBOX_SIZE);
24}
25
26struct mlxsw_core;
27
28int mlxsw_cmd_exec(struct mlxsw_core *mlxsw_core, u16 opcode, u8 opcode_mod,
29 u32 in_mod, bool out_mbox_direct, bool reset_ok,
30 char *in_mbox, size_t in_mbox_size,
31 char *out_mbox, size_t out_mbox_size);
32
33static inline int mlxsw_cmd_exec_in(struct mlxsw_core *mlxsw_core, u16 opcode,
34 u8 opcode_mod, u32 in_mod, char *in_mbox,
35 size_t in_mbox_size)
36{
37 return mlxsw_cmd_exec(mlxsw_core, opcode, opcode_mod, in_mod, false,
38 false, in_mbox, in_mbox_size, NULL, 0);
39}
40
41static inline int mlxsw_cmd_exec_out(struct mlxsw_core *mlxsw_core, u16 opcode,
42 u8 opcode_mod, u32 in_mod,
43 bool out_mbox_direct,
44 char *out_mbox, size_t out_mbox_size)
45{
46 return mlxsw_cmd_exec(mlxsw_core, opcode, opcode_mod, in_mod,
47 out_mbox_direct, false, NULL, 0,
48 out_mbox, out_mbox_size);
49}
50
51static inline int mlxsw_cmd_exec_none(struct mlxsw_core *mlxsw_core, u16 opcode,
52 u8 opcode_mod, u32 in_mod)
53{
54 return mlxsw_cmd_exec(mlxsw_core, opcode, opcode_mod, in_mod, false,
55 false, NULL, 0, NULL, 0);
56}
57
58enum mlxsw_cmd_opcode {
59 MLXSW_CMD_OPCODE_QUERY_FW = 0x004,
60 MLXSW_CMD_OPCODE_QUERY_BOARDINFO = 0x006,
61 MLXSW_CMD_OPCODE_QUERY_AQ_CAP = 0x003,
62 MLXSW_CMD_OPCODE_MAP_FA = 0xFFF,
63 MLXSW_CMD_OPCODE_UNMAP_FA = 0xFFE,
64 MLXSW_CMD_OPCODE_CONFIG_PROFILE = 0x100,
65 MLXSW_CMD_OPCODE_ACCESS_REG = 0x040,
66 MLXSW_CMD_OPCODE_SW2HW_DQ = 0x201,
67 MLXSW_CMD_OPCODE_HW2SW_DQ = 0x202,
68 MLXSW_CMD_OPCODE_2ERR_DQ = 0x01E,
69 MLXSW_CMD_OPCODE_QUERY_DQ = 0x022,
70 MLXSW_CMD_OPCODE_SW2HW_CQ = 0x016,
71 MLXSW_CMD_OPCODE_HW2SW_CQ = 0x017,
72 MLXSW_CMD_OPCODE_QUERY_CQ = 0x018,
73 MLXSW_CMD_OPCODE_SW2HW_EQ = 0x013,
74 MLXSW_CMD_OPCODE_HW2SW_EQ = 0x014,
75 MLXSW_CMD_OPCODE_QUERY_EQ = 0x015,
76 MLXSW_CMD_OPCODE_QUERY_RESOURCES = 0x101,
77};
78
79static inline const char *mlxsw_cmd_opcode_str(u16 opcode)
80{
81 switch (opcode) {
82 case MLXSW_CMD_OPCODE_QUERY_FW:
83 return "QUERY_FW";
84 case MLXSW_CMD_OPCODE_QUERY_BOARDINFO:
85 return "QUERY_BOARDINFO";
86 case MLXSW_CMD_OPCODE_QUERY_AQ_CAP:
87 return "QUERY_AQ_CAP";
88 case MLXSW_CMD_OPCODE_MAP_FA:
89 return "MAP_FA";
90 case MLXSW_CMD_OPCODE_UNMAP_FA:
91 return "UNMAP_FA";
92 case MLXSW_CMD_OPCODE_CONFIG_PROFILE:
93 return "CONFIG_PROFILE";
94 case MLXSW_CMD_OPCODE_ACCESS_REG:
95 return "ACCESS_REG";
96 case MLXSW_CMD_OPCODE_SW2HW_DQ:
97 return "SW2HW_DQ";
98 case MLXSW_CMD_OPCODE_HW2SW_DQ:
99 return "HW2SW_DQ";
100 case MLXSW_CMD_OPCODE_2ERR_DQ:
101 return "2ERR_DQ";
102 case MLXSW_CMD_OPCODE_QUERY_DQ:
103 return "QUERY_DQ";
104 case MLXSW_CMD_OPCODE_SW2HW_CQ:
105 return "SW2HW_CQ";
106 case MLXSW_CMD_OPCODE_HW2SW_CQ:
107 return "HW2SW_CQ";
108 case MLXSW_CMD_OPCODE_QUERY_CQ:
109 return "QUERY_CQ";
110 case MLXSW_CMD_OPCODE_SW2HW_EQ:
111 return "SW2HW_EQ";
112 case MLXSW_CMD_OPCODE_HW2SW_EQ:
113 return "HW2SW_EQ";
114 case MLXSW_CMD_OPCODE_QUERY_EQ:
115 return "QUERY_EQ";
116 case MLXSW_CMD_OPCODE_QUERY_RESOURCES:
117 return "QUERY_RESOURCES";
118 default:
119 return "*UNKNOWN*";
120 }
121}
122
123enum mlxsw_cmd_status {
124
125 MLXSW_CMD_STATUS_OK = 0x00,
126
127 MLXSW_CMD_STATUS_INTERNAL_ERR = 0x01,
128
129 MLXSW_CMD_STATUS_BAD_OP = 0x02,
130
131 MLXSW_CMD_STATUS_BAD_PARAM = 0x03,
132
133 MLXSW_CMD_STATUS_BAD_SYS_STATE = 0x04,
134
135
136
137 MLXSW_CMD_STATUS_BAD_RESOURCE = 0x05,
138
139 MLXSW_CMD_STATUS_RESOURCE_BUSY = 0x06,
140
141 MLXSW_CMD_STATUS_EXCEED_LIM = 0x08,
142
143 MLXSW_CMD_STATUS_BAD_RES_STATE = 0x09,
144
145
146
147 MLXSW_CMD_STATUS_BAD_INDEX = 0x0A,
148
149 MLXSW_CMD_STATUS_BAD_NVMEM = 0x0B,
150
151 MLXSW_CMD_STATUS_RUNNING_RESET = 0x26,
152
153 MLXSW_CMD_STATUS_BAD_PKT = 0x30,
154};
155
156static inline const char *mlxsw_cmd_status_str(u8 status)
157{
158 switch (status) {
159 case MLXSW_CMD_STATUS_OK:
160 return "OK";
161 case MLXSW_CMD_STATUS_INTERNAL_ERR:
162 return "INTERNAL_ERR";
163 case MLXSW_CMD_STATUS_BAD_OP:
164 return "BAD_OP";
165 case MLXSW_CMD_STATUS_BAD_PARAM:
166 return "BAD_PARAM";
167 case MLXSW_CMD_STATUS_BAD_SYS_STATE:
168 return "BAD_SYS_STATE";
169 case MLXSW_CMD_STATUS_BAD_RESOURCE:
170 return "BAD_RESOURCE";
171 case MLXSW_CMD_STATUS_RESOURCE_BUSY:
172 return "RESOURCE_BUSY";
173 case MLXSW_CMD_STATUS_EXCEED_LIM:
174 return "EXCEED_LIM";
175 case MLXSW_CMD_STATUS_BAD_RES_STATE:
176 return "BAD_RES_STATE";
177 case MLXSW_CMD_STATUS_BAD_INDEX:
178 return "BAD_INDEX";
179 case MLXSW_CMD_STATUS_BAD_NVMEM:
180 return "BAD_NVMEM";
181 case MLXSW_CMD_STATUS_RUNNING_RESET:
182 return "RUNNING_RESET";
183 case MLXSW_CMD_STATUS_BAD_PKT:
184 return "BAD_PKT";
185 default:
186 return "*UNKNOWN*";
187 }
188}
189
190
191
192
193
194
195
196
197
198
199static inline int mlxsw_cmd_query_fw(struct mlxsw_core *mlxsw_core,
200 char *out_mbox)
201{
202 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_FW,
203 0, 0, false, out_mbox, MLXSW_CMD_MBOX_SIZE);
204}
205
206
207
208
209MLXSW_ITEM32(cmd_mbox, query_fw, fw_pages, 0x00, 16, 16);
210
211
212
213
214MLXSW_ITEM32(cmd_mbox, query_fw, fw_rev_major, 0x00, 0, 16);
215
216
217
218
219MLXSW_ITEM32(cmd_mbox, query_fw, fw_rev_subminor, 0x04, 16, 16);
220
221
222
223
224MLXSW_ITEM32(cmd_mbox, query_fw, fw_rev_minor, 0x04, 0, 16);
225
226
227
228
229MLXSW_ITEM32(cmd_mbox, query_fw, core_clk, 0x08, 16, 16);
230
231
232
233
234
235
236MLXSW_ITEM32(cmd_mbox, query_fw, cmd_interface_rev, 0x08, 0, 16);
237
238
239
240
241MLXSW_ITEM32(cmd_mbox, query_fw, dt, 0x0C, 31, 1);
242
243
244
245
246
247MLXSW_ITEM32(cmd_mbox, query_fw, api_version, 0x0C, 0, 16);
248
249
250
251
252MLXSW_ITEM32(cmd_mbox, query_fw, fw_hour, 0x10, 24, 8);
253
254
255
256
257MLXSW_ITEM32(cmd_mbox, query_fw, fw_minutes, 0x10, 16, 8);
258
259
260
261
262MLXSW_ITEM32(cmd_mbox, query_fw, fw_seconds, 0x10, 8, 8);
263
264
265
266
267MLXSW_ITEM32(cmd_mbox, query_fw, fw_year, 0x14, 16, 16);
268
269
270
271
272MLXSW_ITEM32(cmd_mbox, query_fw, fw_month, 0x14, 8, 8);
273
274
275
276
277MLXSW_ITEM32(cmd_mbox, query_fw, fw_day, 0x14, 0, 8);
278
279
280
281
282
283MLXSW_ITEM64(cmd_mbox, query_fw, clr_int_base_offset, 0x20, 0, 64);
284
285
286
287
288
289MLXSW_ITEM32(cmd_mbox, query_fw, clr_int_bar, 0x28, 30, 2);
290
291
292
293
294
295MLXSW_ITEM64(cmd_mbox, query_fw, error_buf_offset, 0x30, 0, 64);
296
297
298
299
300MLXSW_ITEM32(cmd_mbox, query_fw, error_buf_size, 0x38, 0, 32);
301
302
303
304
305
306
307MLXSW_ITEM32(cmd_mbox, query_fw, error_int_bar, 0x3C, 30, 2);
308
309
310
311
312MLXSW_ITEM64(cmd_mbox, query_fw, doorbell_page_offset, 0x40, 0, 64);
313
314
315
316
317
318MLXSW_ITEM32(cmd_mbox, query_fw, doorbell_page_bar, 0x48, 30, 2);
319
320
321
322
323MLXSW_ITEM64(cmd_mbox, query_fw, free_running_clock_offset, 0x50, 0, 64);
324
325
326
327
328
329
330MLXSW_ITEM32(cmd_mbox, query_fw, fr_rn_clk_bar, 0x58, 30, 2);
331
332
333
334
335
336
337
338
339static inline int mlxsw_cmd_boardinfo(struct mlxsw_core *mlxsw_core,
340 char *out_mbox)
341{
342 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_BOARDINFO,
343 0, 0, false, out_mbox, MLXSW_CMD_MBOX_SIZE);
344}
345
346
347
348
349
350
351
352MLXSW_ITEM32(cmd_mbox, boardinfo, xm_num_local_ports, 0x00, 4, 3);
353
354
355
356
357MLXSW_ITEM32(cmd_mbox, boardinfo, xm_exists, 0x00, 0, 1);
358
359
360
361MLXSW_ITEM_BIT_ARRAY(cmd_mbox, boardinfo, xm_local_port_entry, 0x04, 4, 8);
362
363
364
365
366
367MLXSW_ITEM32(cmd_mbox, boardinfo, intapin, 0x10, 24, 8);
368
369
370
371
372
373
374
375MLXSW_ITEM32(cmd_mbox, boardinfo, vsd_vendor_id, 0x1C, 0, 16);
376
377
378
379
380
381#define MLXSW_CMD_BOARDINFO_VSD_LEN 208
382MLXSW_ITEM_BUF(cmd_mbox, boardinfo, vsd, 0x20, MLXSW_CMD_BOARDINFO_VSD_LEN);
383
384
385
386
387
388
389#define MLXSW_CMD_BOARDINFO_PSID_LEN 16
390MLXSW_ITEM_BUF(cmd_mbox, boardinfo, psid, 0xF0, MLXSW_CMD_BOARDINFO_PSID_LEN);
391
392
393
394
395
396
397
398
399
400static inline int mlxsw_cmd_query_aq_cap(struct mlxsw_core *mlxsw_core,
401 char *out_mbox)
402{
403 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_AQ_CAP,
404 0, 0, false, out_mbox, MLXSW_CMD_MBOX_SIZE);
405}
406
407
408
409
410MLXSW_ITEM32(cmd_mbox, query_aq_cap, log_max_sdq_sz, 0x00, 24, 8);
411
412
413
414
415MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_num_sdqs, 0x00, 0, 8);
416
417
418
419
420MLXSW_ITEM32(cmd_mbox, query_aq_cap, log_max_rdq_sz, 0x04, 24, 8);
421
422
423
424
425MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_num_rdqs, 0x04, 0, 8);
426
427
428
429
430MLXSW_ITEM32(cmd_mbox, query_aq_cap, log_max_cq_sz, 0x08, 24, 8);
431
432
433
434
435MLXSW_ITEM32(cmd_mbox, query_aq_cap, log_max_cqv2_sz, 0x08, 16, 8);
436
437
438
439
440MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_num_cqs, 0x08, 0, 8);
441
442
443
444
445MLXSW_ITEM32(cmd_mbox, query_aq_cap, log_max_eq_sz, 0x0C, 24, 8);
446
447
448
449
450MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_num_eqs, 0x0C, 0, 8);
451
452
453
454
455
456MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_sg_sq, 0x10, 8, 8);
457
458
459
460
461
462MLXSW_ITEM32(cmd_mbox, query_aq_cap, max_sg_rq, 0x10, 0, 8);
463
464
465
466
467
468
469
470
471
472
473
474
475
476#define MLXSW_CMD_MAP_FA_VPM_ENTRIES_MAX 32
477
478static inline int mlxsw_cmd_map_fa(struct mlxsw_core *mlxsw_core,
479 char *in_mbox, u32 vpm_entries_count)
480{
481 return mlxsw_cmd_exec_in(mlxsw_core, MLXSW_CMD_OPCODE_MAP_FA,
482 0, vpm_entries_count,
483 in_mbox, MLXSW_CMD_MBOX_SIZE);
484}
485
486
487
488
489MLXSW_ITEM64_INDEXED(cmd_mbox, map_fa, pa, 0x00, 12, 52, 0x08, 0x00, true);
490
491
492
493
494
495MLXSW_ITEM32_INDEXED(cmd_mbox, map_fa, log2size, 0x00, 0, 5, 0x08, 0x04, false);
496
497
498
499
500
501
502
503
504
505
506
507static inline int mlxsw_cmd_unmap_fa(struct mlxsw_core *mlxsw_core)
508{
509 return mlxsw_cmd_exec_none(mlxsw_core, MLXSW_CMD_OPCODE_UNMAP_FA, 0, 0);
510}
511
512
513
514
515
516
517
518
519
520
521
522
523#define MLXSW_CMD_QUERY_RESOURCES_TABLE_END_ID 0xffff
524#define MLXSW_CMD_QUERY_RESOURCES_MAX_QUERIES 100
525#define MLXSW_CMD_QUERY_RESOURCES_PER_QUERY 32
526
527static inline int mlxsw_cmd_query_resources(struct mlxsw_core *mlxsw_core,
528 char *out_mbox, int index)
529{
530 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_RESOURCES,
531 0, index, false, out_mbox,
532 MLXSW_CMD_MBOX_SIZE);
533}
534
535
536
537
538MLXSW_ITEM32_INDEXED(cmd_mbox, query_resource, id, 0x00, 16, 16, 0x8, 0, false);
539
540
541
542
543MLXSW_ITEM64_INDEXED(cmd_mbox, query_resource, data,
544 0x00, 0, 40, 0x8, 0, false);
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561static inline int mlxsw_cmd_config_profile_set(struct mlxsw_core *mlxsw_core,
562 char *in_mbox)
563{
564 return mlxsw_cmd_exec_in(mlxsw_core, MLXSW_CMD_OPCODE_CONFIG_PROFILE,
565 1, 0, in_mbox, MLXSW_CMD_MBOX_SIZE);
566}
567
568
569
570
571
572MLXSW_ITEM32(cmd_mbox, config_profile, set_max_vepa_channels, 0x0C, 0, 1);
573
574
575
576
577
578MLXSW_ITEM32(cmd_mbox, config_profile, set_max_lag, 0x0C, 1, 1);
579
580
581
582
583
584MLXSW_ITEM32(cmd_mbox, config_profile, set_max_port_per_lag, 0x0C, 2, 1);
585
586
587
588
589
590MLXSW_ITEM32(cmd_mbox, config_profile, set_max_mid, 0x0C, 3, 1);
591
592
593
594
595
596MLXSW_ITEM32(cmd_mbox, config_profile, set_max_pgt, 0x0C, 4, 1);
597
598
599
600
601
602MLXSW_ITEM32(cmd_mbox, config_profile, set_max_system_port, 0x0C, 5, 1);
603
604
605
606
607
608MLXSW_ITEM32(cmd_mbox, config_profile, set_max_vlan_groups, 0x0C, 6, 1);
609
610
611
612
613
614MLXSW_ITEM32(cmd_mbox, config_profile, set_max_regions, 0x0C, 7, 1);
615
616
617
618
619
620MLXSW_ITEM32(cmd_mbox, config_profile, set_flood_mode, 0x0C, 8, 1);
621
622
623
624
625
626MLXSW_ITEM32(cmd_mbox, config_profile, set_flood_tables, 0x0C, 9, 1);
627
628
629
630
631
632MLXSW_ITEM32(cmd_mbox, config_profile, set_max_ib_mc, 0x0C, 12, 1);
633
634
635
636
637
638MLXSW_ITEM32(cmd_mbox, config_profile, set_max_pkey, 0x0C, 13, 1);
639
640
641
642
643
644MLXSW_ITEM32(cmd_mbox, config_profile,
645 set_adaptive_routing_group_cap, 0x0C, 14, 1);
646
647
648
649
650
651MLXSW_ITEM32(cmd_mbox, config_profile, set_ar_sec, 0x0C, 15, 1);
652
653
654
655
656
657MLXSW_ITEM32(cmd_mbox, config_profile, set_kvd_linear_size, 0x0C, 24, 1);
658
659
660
661
662
663MLXSW_ITEM32(cmd_mbox, config_profile, set_kvd_hash_single_size, 0x0C, 25, 1);
664
665
666
667
668
669MLXSW_ITEM32(cmd_mbox, config_profile, set_kvd_hash_double_size, 0x0C, 26, 1);
670
671
672
673
674
675MLXSW_ITEM32(cmd_mbox, config_profile, set_cqe_version, 0x08, 0, 1);
676
677
678
679
680
681MLXSW_ITEM32(cmd_mbox, config_profile, set_kvh_xlt_cache_mode, 0x08, 3, 1);
682
683
684
685
686
687MLXSW_ITEM32(cmd_mbox, config_profile, max_vepa_channels, 0x10, 0, 8);
688
689
690
691
692MLXSW_ITEM32(cmd_mbox, config_profile, max_lag, 0x14, 0, 16);
693
694
695
696
697MLXSW_ITEM32(cmd_mbox, config_profile, max_port_per_lag, 0x18, 0, 16);
698
699
700
701
702
703MLXSW_ITEM32(cmd_mbox, config_profile, max_mid, 0x1C, 0, 16);
704
705
706
707
708
709MLXSW_ITEM32(cmd_mbox, config_profile, max_pgt, 0x20, 0, 16);
710
711
712
713
714MLXSW_ITEM32(cmd_mbox, config_profile, max_system_port, 0x24, 0, 16);
715
716
717
718
719MLXSW_ITEM32(cmd_mbox, config_profile, max_vlan_groups, 0x28, 0, 12);
720
721
722
723
724MLXSW_ITEM32(cmd_mbox, config_profile, max_regions, 0x2C, 0, 16);
725
726
727
728
729
730MLXSW_ITEM32(cmd_mbox, config_profile, max_flood_tables, 0x30, 16, 4);
731
732
733
734
735
736
737MLXSW_ITEM32(cmd_mbox, config_profile, max_vid_flood_tables, 0x30, 8, 4);
738
739
740
741
742
743
744
745
746
747
748MLXSW_ITEM32(cmd_mbox, config_profile, flood_mode, 0x30, 0, 2);
749
750
751
752
753MLXSW_ITEM32(cmd_mbox, config_profile,
754 max_fid_offset_flood_tables, 0x34, 24, 4);
755
756
757
758
759MLXSW_ITEM32(cmd_mbox, config_profile,
760 fid_offset_flood_table_size, 0x34, 0, 16);
761
762
763
764
765
766
767
768MLXSW_ITEM32(cmd_mbox, config_profile, max_fid_flood_tables, 0x38, 24, 4);
769
770
771
772
773MLXSW_ITEM32(cmd_mbox, config_profile, fid_flood_table_size, 0x38, 0, 16);
774
775
776
777
778
779MLXSW_ITEM32(cmd_mbox, config_profile, max_ib_mc, 0x40, 0, 15);
780
781
782
783
784MLXSW_ITEM32(cmd_mbox, config_profile, max_pkey, 0x44, 0, 15);
785
786
787
788
789
790
791
792
793
794MLXSW_ITEM32(cmd_mbox, config_profile, ar_sec, 0x4C, 24, 2);
795
796
797
798
799
800
801MLXSW_ITEM32(cmd_mbox, config_profile, adaptive_routing_group_cap, 0x4C, 0, 16);
802
803
804
805
806
807MLXSW_ITEM32(cmd_mbox, config_profile, arn, 0x50, 31, 1);
808
809
810
811
812
813
814MLXSW_ITEM32(cmd_mbox, config_profile, kvh_xlt_cache_mode, 0x50, 8, 4);
815
816
817
818
819
820
821MLXSW_ITEM32(cmd_mbox, config_profile, kvd_linear_size, 0x54, 0, 24);
822
823
824
825
826
827
828
829
830MLXSW_ITEM32(cmd_mbox, config_profile, kvd_hash_single_size, 0x58, 0, 24);
831
832
833
834
835
836
837
838
839MLXSW_ITEM32(cmd_mbox, config_profile, kvd_hash_double_size, 0x5C, 0, 24);
840
841
842
843
844
845
846
847
848
849MLXSW_ITEM32_INDEXED(cmd_mbox, config_profile, swid_config_mask,
850 0x60, 24, 8, 0x08, 0x00, false);
851
852
853
854
855
856
857
858
859
860MLXSW_ITEM32_INDEXED(cmd_mbox, config_profile, swid_config_type,
861 0x60, 20, 4, 0x08, 0x00, false);
862
863
864
865
866MLXSW_ITEM32_INDEXED(cmd_mbox, config_profile, swid_config_properties,
867 0x60, 0, 8, 0x08, 0x00, false);
868
869
870
871
872
873
874
875MLXSW_ITEM32(cmd_mbox, config_profile, cqe_version, 0xB0, 0, 8);
876
877
878
879
880
881
882
883
884
885static inline int mlxsw_cmd_access_reg(struct mlxsw_core *mlxsw_core,
886 bool reset_ok,
887 char *in_mbox, char *out_mbox)
888{
889 return mlxsw_cmd_exec(mlxsw_core, MLXSW_CMD_OPCODE_ACCESS_REG,
890 0, 0, false, reset_ok,
891 in_mbox, MLXSW_CMD_MBOX_SIZE,
892 out_mbox, MLXSW_CMD_MBOX_SIZE);
893}
894
895
896
897
898
899
900
901
902
903
904
905static inline int __mlxsw_cmd_sw2hw_dq(struct mlxsw_core *mlxsw_core,
906 char *in_mbox, u32 dq_number,
907 u8 opcode_mod)
908{
909 return mlxsw_cmd_exec_in(mlxsw_core, MLXSW_CMD_OPCODE_SW2HW_DQ,
910 opcode_mod, dq_number,
911 in_mbox, MLXSW_CMD_MBOX_SIZE);
912}
913
914enum {
915 MLXSW_CMD_OPCODE_MOD_SDQ = 0,
916 MLXSW_CMD_OPCODE_MOD_RDQ = 1,
917};
918
919static inline int mlxsw_cmd_sw2hw_sdq(struct mlxsw_core *mlxsw_core,
920 char *in_mbox, u32 dq_number)
921{
922 return __mlxsw_cmd_sw2hw_dq(mlxsw_core, in_mbox, dq_number,
923 MLXSW_CMD_OPCODE_MOD_SDQ);
924}
925
926static inline int mlxsw_cmd_sw2hw_rdq(struct mlxsw_core *mlxsw_core,
927 char *in_mbox, u32 dq_number)
928{
929 return __mlxsw_cmd_sw2hw_dq(mlxsw_core, in_mbox, dq_number,
930 MLXSW_CMD_OPCODE_MOD_RDQ);
931}
932
933
934
935
936MLXSW_ITEM32(cmd_mbox, sw2hw_dq, cq, 0x00, 24, 8);
937
938
939
940
941
942MLXSW_ITEM32(cmd_mbox, sw2hw_dq, sdq_tclass, 0x00, 16, 6);
943
944
945
946
947MLXSW_ITEM32(cmd_mbox, sw2hw_dq, log2_dq_sz, 0x00, 0, 6);
948
949
950
951
952MLXSW_ITEM64_INDEXED(cmd_mbox, sw2hw_dq, pa, 0x10, 12, 52, 0x08, 0x00, true);
953
954
955
956
957
958
959
960
961
962
963
964static inline int __mlxsw_cmd_hw2sw_dq(struct mlxsw_core *mlxsw_core,
965 u32 dq_number, u8 opcode_mod)
966{
967 return mlxsw_cmd_exec_none(mlxsw_core, MLXSW_CMD_OPCODE_HW2SW_DQ,
968 opcode_mod, dq_number);
969}
970
971static inline int mlxsw_cmd_hw2sw_sdq(struct mlxsw_core *mlxsw_core,
972 u32 dq_number)
973{
974 return __mlxsw_cmd_hw2sw_dq(mlxsw_core, dq_number,
975 MLXSW_CMD_OPCODE_MOD_SDQ);
976}
977
978static inline int mlxsw_cmd_hw2sw_rdq(struct mlxsw_core *mlxsw_core,
979 u32 dq_number)
980{
981 return __mlxsw_cmd_hw2sw_dq(mlxsw_core, dq_number,
982 MLXSW_CMD_OPCODE_MOD_RDQ);
983}
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999static inline int __mlxsw_cmd_2err_dq(struct mlxsw_core *mlxsw_core,
1000 u32 dq_number, u8 opcode_mod)
1001{
1002 return mlxsw_cmd_exec_none(mlxsw_core, MLXSW_CMD_OPCODE_2ERR_DQ,
1003 opcode_mod, dq_number);
1004}
1005
1006static inline int mlxsw_cmd_2err_sdq(struct mlxsw_core *mlxsw_core,
1007 u32 dq_number)
1008{
1009 return __mlxsw_cmd_2err_dq(mlxsw_core, dq_number,
1010 MLXSW_CMD_OPCODE_MOD_SDQ);
1011}
1012
1013static inline int mlxsw_cmd_2err_rdq(struct mlxsw_core *mlxsw_core,
1014 u32 dq_number)
1015{
1016 return __mlxsw_cmd_2err_dq(mlxsw_core, dq_number,
1017 MLXSW_CMD_OPCODE_MOD_RDQ);
1018}
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030static inline int __mlxsw_cmd_query_dq(struct mlxsw_core *mlxsw_core,
1031 char *out_mbox, u32 dq_number,
1032 u8 opcode_mod)
1033{
1034 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_2ERR_DQ,
1035 opcode_mod, dq_number, false,
1036 out_mbox, MLXSW_CMD_MBOX_SIZE);
1037}
1038
1039static inline int mlxsw_cmd_query_sdq(struct mlxsw_core *mlxsw_core,
1040 char *out_mbox, u32 dq_number)
1041{
1042 return __mlxsw_cmd_query_dq(mlxsw_core, out_mbox, dq_number,
1043 MLXSW_CMD_OPCODE_MOD_SDQ);
1044}
1045
1046static inline int mlxsw_cmd_query_rdq(struct mlxsw_core *mlxsw_core,
1047 char *out_mbox, u32 dq_number)
1048{
1049 return __mlxsw_cmd_query_dq(mlxsw_core, out_mbox, dq_number,
1050 MLXSW_CMD_OPCODE_MOD_RDQ);
1051}
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063static inline int mlxsw_cmd_sw2hw_cq(struct mlxsw_core *mlxsw_core,
1064 char *in_mbox, u32 cq_number)
1065{
1066 return mlxsw_cmd_exec_in(mlxsw_core, MLXSW_CMD_OPCODE_SW2HW_CQ,
1067 0, cq_number, in_mbox, MLXSW_CMD_MBOX_SIZE);
1068}
1069
1070enum mlxsw_cmd_mbox_sw2hw_cq_cqe_ver {
1071 MLXSW_CMD_MBOX_SW2HW_CQ_CQE_VER_1,
1072 MLXSW_CMD_MBOX_SW2HW_CQ_CQE_VER_2,
1073};
1074
1075
1076
1077
1078MLXSW_ITEM32(cmd_mbox, sw2hw_cq, cqe_ver, 0x00, 28, 4);
1079
1080
1081
1082
1083MLXSW_ITEM32(cmd_mbox, sw2hw_cq, c_eqn, 0x00, 24, 1);
1084
1085
1086
1087
1088
1089
1090MLXSW_ITEM32(cmd_mbox, sw2hw_cq, st, 0x00, 8, 1);
1091
1092
1093
1094
1095MLXSW_ITEM32(cmd_mbox, sw2hw_cq, log_cq_size, 0x00, 0, 4);
1096
1097
1098
1099
1100
1101
1102MLXSW_ITEM32(cmd_mbox, sw2hw_cq, producer_counter, 0x04, 0, 16);
1103
1104
1105
1106
1107MLXSW_ITEM64_INDEXED(cmd_mbox, sw2hw_cq, pa, 0x10, 11, 53, 0x08, 0x00, true);
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117static inline int mlxsw_cmd_hw2sw_cq(struct mlxsw_core *mlxsw_core,
1118 u32 cq_number)
1119{
1120 return mlxsw_cmd_exec_none(mlxsw_core, MLXSW_CMD_OPCODE_HW2SW_CQ,
1121 0, cq_number);
1122}
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136static inline int mlxsw_cmd_query_cq(struct mlxsw_core *mlxsw_core,
1137 char *out_mbox, u32 cq_number)
1138{
1139 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_CQ,
1140 0, cq_number, false,
1141 out_mbox, MLXSW_CMD_MBOX_SIZE);
1142}
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154static inline int mlxsw_cmd_sw2hw_eq(struct mlxsw_core *mlxsw_core,
1155 char *in_mbox, u32 eq_number)
1156{
1157 return mlxsw_cmd_exec_in(mlxsw_core, MLXSW_CMD_OPCODE_SW2HW_EQ,
1158 0, eq_number, in_mbox, MLXSW_CMD_MBOX_SIZE);
1159}
1160
1161
1162
1163
1164
1165MLXSW_ITEM32(cmd_mbox, sw2hw_eq, int_msix, 0x00, 24, 1);
1166
1167
1168
1169
1170
1171
1172
1173
1174MLXSW_ITEM32(cmd_mbox, sw2hw_eq, st, 0x00, 8, 2);
1175
1176
1177
1178
1179MLXSW_ITEM32(cmd_mbox, sw2hw_eq, log_eq_size, 0x00, 0, 4);
1180
1181
1182
1183
1184
1185
1186MLXSW_ITEM32(cmd_mbox, sw2hw_eq, producer_counter, 0x04, 0, 16);
1187
1188
1189
1190
1191MLXSW_ITEM64_INDEXED(cmd_mbox, sw2hw_eq, pa, 0x10, 11, 53, 0x08, 0x00, true);
1192
1193
1194
1195
1196
1197
1198
1199static inline int mlxsw_cmd_hw2sw_eq(struct mlxsw_core *mlxsw_core,
1200 u32 eq_number)
1201{
1202 return mlxsw_cmd_exec_none(mlxsw_core, MLXSW_CMD_OPCODE_HW2SW_EQ,
1203 0, eq_number);
1204}
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214static inline int mlxsw_cmd_query_eq(struct mlxsw_core *mlxsw_core,
1215 char *out_mbox, u32 eq_number)
1216{
1217 return mlxsw_cmd_exec_out(mlxsw_core, MLXSW_CMD_OPCODE_QUERY_EQ,
1218 0, eq_number, false,
1219 out_mbox, MLXSW_CMD_MBOX_SIZE);
1220}
1221
1222#endif
1223