xref: /freebsd/sys/dev/dpaa/fman_port_var.h (revision 5d884fc07662760a2090928e98e51dc8162389a3)
1*5d884fc0SJustin Hibbits /*
2*5d884fc0SJustin Hibbits  * Copyright (c) 2026 Justin Hibbits
3*5d884fc0SJustin Hibbits  *
4*5d884fc0SJustin Hibbits  * SPDX-License-Identifier: BSD-2-Clause
5*5d884fc0SJustin Hibbits  */
6*5d884fc0SJustin Hibbits 
7*5d884fc0SJustin Hibbits #ifndef DPAA_FMAN_PORT_VAR_H
8*5d884fc0SJustin Hibbits #define	DPAA_FMAN_PORT_VAR_H
9*5d884fc0SJustin Hibbits 
10*5d884fc0SJustin Hibbits #include "fman_port.h"
11*5d884fc0SJustin Hibbits 
12*5d884fc0SJustin Hibbits struct fman_port_rsrc {
13*5d884fc0SJustin Hibbits 	uint32_t	num;
14*5d884fc0SJustin Hibbits 	uint32_t	extra;
15*5d884fc0SJustin Hibbits };
16*5d884fc0SJustin Hibbits 
17*5d884fc0SJustin Hibbits /* Base softc.  Shared by all FMan port drivers. */
18*5d884fc0SJustin Hibbits #define	MAX_BM_POOLS	64
19*5d884fc0SJustin Hibbits struct fman_port_softc {
20*5d884fc0SJustin Hibbits 	device_t sc_dev;
21*5d884fc0SJustin Hibbits 	struct resource *sc_mem;
22*5d884fc0SJustin Hibbits 	int sc_port_id;
23*5d884fc0SJustin Hibbits 	int sc_port_type;
24*5d884fc0SJustin Hibbits 	int sc_port_speed;
25*5d884fc0SJustin Hibbits 
26*5d884fc0SJustin Hibbits 	int sc_revision_major;
27*5d884fc0SJustin Hibbits 	int sc_revision_minor;
28*5d884fc0SJustin Hibbits 
29*5d884fc0SJustin Hibbits 	int sc_max_frame_length;
30*5d884fc0SJustin Hibbits 	int sc_bm_max_pools;
31*5d884fc0SJustin Hibbits 	int sc_max_port_fifo_size;
32*5d884fc0SJustin Hibbits 
33*5d884fc0SJustin Hibbits 	int sc_default_fqid;
34*5d884fc0SJustin Hibbits 	int sc_err_fqid;
35*5d884fc0SJustin Hibbits 
36*5d884fc0SJustin Hibbits 	int sc_max_ext_portals;
37*5d884fc0SJustin Hibbits 	int sc_max_sub_portals;
38*5d884fc0SJustin Hibbits 
39*5d884fc0SJustin Hibbits 	struct fman_port_rsrc sc_open_dmas;
40*5d884fc0SJustin Hibbits 	struct fman_port_rsrc sc_tasks;
41*5d884fc0SJustin Hibbits 	struct fman_port_rsrc sc_fifo_bufs;
42*5d884fc0SJustin Hibbits };
43*5d884fc0SJustin Hibbits 
44*5d884fc0SJustin Hibbits #define	PORT_V3		0x01
45*5d884fc0SJustin Hibbits 
46*5d884fc0SJustin Hibbits /* QMI per-port registers. */
47*5d884fc0SJustin Hibbits #define	FMQM_PNC			0x400
48*5d884fc0SJustin Hibbits #define	  PNC_EN			  0x80000000
49*5d884fc0SJustin Hibbits #define	  PNC_STEN			  0x80000000
50*5d884fc0SJustin Hibbits #define	FMQM_PNS			0x404
51*5d884fc0SJustin Hibbits #define	  PNS_DEQ_FD_BSY		  0x20000000
52*5d884fc0SJustin Hibbits #define	FMQM_PNEN			0x41c
53*5d884fc0SJustin Hibbits #define	FMQM_PNDN			0x42c
54*5d884fc0SJustin Hibbits #define	FMQM_PNDC			0x430
55*5d884fc0SJustin Hibbits 
56*5d884fc0SJustin Hibbits #define	FMBM_CFG			0x000
57*5d884fc0SJustin Hibbits #define	  BMI_PORT_CFG_EN		  0x80000000
58*5d884fc0SJustin Hibbits 
59*5d884fc0SJustin Hibbits /*
60*5d884fc0SJustin Hibbits  * Next Invoked Action (NIA) engine + action codes.  Written into the
61*5d884fc0SJustin Hibbits  * per-engine "next" registers to chain BMI -> Parser -> KeyGen ->
62*5d884fc0SJustin Hibbits  * BMI-enqueue -> QMI-enqueue.
63*5d884fc0SJustin Hibbits  */
64*5d884fc0SJustin Hibbits #define	NIA_ORDER_RESTORE		0x00800000
65*5d884fc0SJustin Hibbits #define	NIA_ENG_BMI			0x00500000
66*5d884fc0SJustin Hibbits #define	NIA_ENG_QMI_DEQ			0x00580000
67*5d884fc0SJustin Hibbits #define	NIA_ENG_QMI_ENQ			0x00540000
68*5d884fc0SJustin Hibbits #define	NIA_ENG_HWP			0x00440000
69*5d884fc0SJustin Hibbits #define	NIA_ENG_HWK			0x00480000
70*5d884fc0SJustin Hibbits #define	NIA_BMI_AC_TX_RELEASE		0x000002c0
71*5d884fc0SJustin Hibbits #define	NIA_BMI_AC_TX			0x00000274
72*5d884fc0SJustin Hibbits #define	NIA_BMI_AC_RELEASE		0x000000c0
73*5d884fc0SJustin Hibbits #define	NIA_BMI_AC_ENQ_FRAME		0x00000002
74*5d884fc0SJustin Hibbits #define	NIA_BMI_AC_FETCH_ALLFRAME	0x0000020c
75*5d884fc0SJustin Hibbits 
76*5d884fc0SJustin Hibbits #define	PORT_MAX_FRAME_LENGTH		9600
77*5d884fc0SJustin Hibbits 
78*5d884fc0SJustin Hibbits int fman_port_attach_common(device_t dev, struct fman_port_softc *sc,
79*5d884fc0SJustin Hibbits     int port_speed);
80*5d884fc0SJustin Hibbits int fman_port_detach_common(device_t dev, struct fman_port_softc *sc);
81*5d884fc0SJustin Hibbits 
82*5d884fc0SJustin Hibbits void fman_port_config_common(struct fman_port_softc *sc,
83*5d884fc0SJustin Hibbits     struct fman_port_params *params);
84*5d884fc0SJustin Hibbits 
85*5d884fc0SJustin Hibbits #endif /* DPAA_FMAN_PORT_VAR_H */
86