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