xref: /freebsd/sys/dev/thunderbolt/tb_if.m (revision 2ed9833791f28e14843ac813f90cb030e45948dc)
1*2ed98337SAymeric Wibo#-
2*2ed98337SAymeric Wibo# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3*2ed98337SAymeric Wibo#
4*2ed98337SAymeric Wibo# Copyright (c) 2022 Scott Long
5*2ed98337SAymeric Wibo# All rights reserved.
6*2ed98337SAymeric Wibo#
7*2ed98337SAymeric Wibo# Redistribution and use in source and binary forms, with or without
8*2ed98337SAymeric Wibo# modification, are permitted provided that the following conditions
9*2ed98337SAymeric Wibo# are met:
10*2ed98337SAymeric Wibo# 1. Redistributions of source code must retain the above copyright
11*2ed98337SAymeric Wibo#    notice, this list of conditions and the following disclaimer.
12*2ed98337SAymeric Wibo# 2. Redistributions in binary form must reproduce the above copyright
13*2ed98337SAymeric Wibo#    notice, this list of conditions and the following disclaimer in the
14*2ed98337SAymeric Wibo#    documentation and/or other materials provided with the distribution.
15*2ed98337SAymeric Wibo#
16*2ed98337SAymeric Wibo# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17*2ed98337SAymeric Wibo# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*2ed98337SAymeric Wibo# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*2ed98337SAymeric Wibo# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20*2ed98337SAymeric Wibo# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21*2ed98337SAymeric Wibo# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22*2ed98337SAymeric Wibo# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23*2ed98337SAymeric Wibo# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24*2ed98337SAymeric Wibo# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*2ed98337SAymeric Wibo# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*2ed98337SAymeric Wibo# SUCH DAMAGE.
27*2ed98337SAymeric Wibo#
28*2ed98337SAymeric Wibo# $FreeBSD$
29*2ed98337SAymeric Wibo#
30*2ed98337SAymeric Wibo
31*2ed98337SAymeric Wibo#include <sys/bus.h>
32*2ed98337SAymeric Wibo#include <sys/types.h>
33*2ed98337SAymeric Wibo#include <dev/thunderbolt/tb_reg.h>
34*2ed98337SAymeric Wibo
35*2ed98337SAymeric WiboINTERFACE tb;
36*2ed98337SAymeric Wibo
37*2ed98337SAymeric WiboCODE {
38*2ed98337SAymeric Wibo	struct nhi_softc;
39*2ed98337SAymeric Wibo
40*2ed98337SAymeric Wibo	int
41*2ed98337SAymeric Wibo	tb_generic_find_ufp(device_t dev, device_t *ufp)
42*2ed98337SAymeric Wibo	{
43*2ed98337SAymeric Wibo		device_t parent;
44*2ed98337SAymeric Wibo
45*2ed98337SAymeric Wibo		parent = device_get_parent(dev);
46*2ed98337SAymeric Wibo		if (parent == NULL)
47*2ed98337SAymeric Wibo			return (EOPNOTSUPP);
48*2ed98337SAymeric Wibo
49*2ed98337SAymeric Wibo		return (TB_FIND_UFP(parent, ufp));
50*2ed98337SAymeric Wibo	}
51*2ed98337SAymeric Wibo
52*2ed98337SAymeric Wibo	int
53*2ed98337SAymeric Wibo	tb_generic_get_debug(device_t dev, u_int *debug)
54*2ed98337SAymeric Wibo	{
55*2ed98337SAymeric Wibo		device_t parent;
56*2ed98337SAymeric Wibo
57*2ed98337SAymeric Wibo		parent = device_get_parent(dev);
58*2ed98337SAymeric Wibo		if (parent == NULL)
59*2ed98337SAymeric Wibo			return (EOPNOTSUPP);
60*2ed98337SAymeric Wibo
61*2ed98337SAymeric Wibo		return (TB_GET_DEBUG(parent, debug));
62*2ed98337SAymeric Wibo	}
63*2ed98337SAymeric Wibo
64*2ed98337SAymeric Wibo}
65*2ed98337SAymeric Wibo
66*2ed98337SAymeric WiboHEADER {
67*2ed98337SAymeric Wibo	struct nhi_softc;
68*2ed98337SAymeric Wibo
69*2ed98337SAymeric Wibo	struct tb_lcmbox_cmd {
70*2ed98337SAymeric Wibo		uint32_t cmd;
71*2ed98337SAymeric Wibo		uint32_t cmd_resp;
72*2ed98337SAymeric Wibo		uint32_t data_in;
73*2ed98337SAymeric Wibo		uint32_t data_out;
74*2ed98337SAymeric Wibo	};
75*2ed98337SAymeric Wibo
76*2ed98337SAymeric Wibo	int tb_generic_find_ufp(device_t, device_t *);
77*2ed98337SAymeric Wibo	int tb_generic_get_debug(device_t, u_int *);
78*2ed98337SAymeric Wibo}
79*2ed98337SAymeric Wibo
80*2ed98337SAymeric Wibo#
81*2ed98337SAymeric Wibo# Read the LC Mailbox
82*2ed98337SAymeric Wibo#
83*2ed98337SAymeric WiboMETHOD int lc_mailbox {
84*2ed98337SAymeric Wibo	device_t	dev;
85*2ed98337SAymeric Wibo	struct tb_lcmbox_cmd	*cmd;
86*2ed98337SAymeric Wibo};
87*2ed98337SAymeric Wibo
88*2ed98337SAymeric Wibo#
89*2ed98337SAymeric Wibo# Read from the PCIE2CIO port
90*2ed98337SAymeric Wibo#
91*2ed98337SAymeric WiboMETHOD int pcie2cio_read {
92*2ed98337SAymeric Wibo	device_t	dev;
93*2ed98337SAymeric Wibo	u_int		space;
94*2ed98337SAymeric Wibo	u_int		port;
95*2ed98337SAymeric Wibo	u_int		index;
96*2ed98337SAymeric Wibo	uint32_t	*val;
97*2ed98337SAymeric Wibo}
98*2ed98337SAymeric Wibo
99*2ed98337SAymeric Wibo#
100*2ed98337SAymeric Wibo# Write to the PCIE2CIO port
101*2ed98337SAymeric Wibo#
102*2ed98337SAymeric WiboMETHOD int pcie2cio_write {
103*2ed98337SAymeric Wibo	device_t	dev;
104*2ed98337SAymeric Wibo	u_int		space;
105*2ed98337SAymeric Wibo	u_int		port;
106*2ed98337SAymeric Wibo	u_int		index;
107*2ed98337SAymeric Wibo	uint32_t	val;
108*2ed98337SAymeric Wibo}
109*2ed98337SAymeric Wibo
110*2ed98337SAymeric Wibo#
111*2ed98337SAymeric Wibo# Return the device that's the upstream facing port
112*2ed98337SAymeric Wibo#
113*2ed98337SAymeric WiboMETHOD int find_ufp {
114*2ed98337SAymeric Wibo	device_t dev;
115*2ed98337SAymeric Wibo	device_t *ufp;
116*2ed98337SAymeric Wibo} DEFAULT tb_generic_find_ufp;
117*2ed98337SAymeric Wibo
118*2ed98337SAymeric WiboMETHOD int get_debug {
119*2ed98337SAymeric Wibo	device_t dev;
120*2ed98337SAymeric Wibo	u_int *debug;
121*2ed98337SAymeric Wibo} DEFAULT tb_generic_get_debug;
122