1*2959ab24SNipun Gupta /* SPDX-License-Identifier: GPL-2.0 2*2959ab24SNipun Gupta * 3*2959ab24SNipun Gupta * Header file for the CDX Bus 4*2959ab24SNipun Gupta * 5*2959ab24SNipun Gupta * Copyright (C) 2022-2023, Advanced Micro Devices, Inc. 6*2959ab24SNipun Gupta */ 7*2959ab24SNipun Gupta 8*2959ab24SNipun Gupta #ifndef _CDX_H_ 9*2959ab24SNipun Gupta #define _CDX_H_ 10*2959ab24SNipun Gupta 11*2959ab24SNipun Gupta #include <linux/cdx/cdx_bus.h> 12*2959ab24SNipun Gupta 13*2959ab24SNipun Gupta /** 14*2959ab24SNipun Gupta * struct cdx_dev_params - CDX device parameters 15*2959ab24SNipun Gupta * @cdx: CDX controller associated with the device 16*2959ab24SNipun Gupta * @parent: Associated CDX controller 17*2959ab24SNipun Gupta * @vendor: Vendor ID for CDX device 18*2959ab24SNipun Gupta * @device: Device ID for CDX device 19*2959ab24SNipun Gupta * @bus_num: Bus number for this CDX device 20*2959ab24SNipun Gupta * @dev_num: Device number for this device 21*2959ab24SNipun Gupta * @res: array of MMIO region entries 22*2959ab24SNipun Gupta * @res_count: number of valid MMIO regions 23*2959ab24SNipun Gupta * @req_id: Requestor ID associated with CDX device 24*2959ab24SNipun Gupta */ 25*2959ab24SNipun Gupta struct cdx_dev_params { 26*2959ab24SNipun Gupta struct cdx_controller *cdx; 27*2959ab24SNipun Gupta u16 vendor; 28*2959ab24SNipun Gupta u16 device; 29*2959ab24SNipun Gupta u8 bus_num; 30*2959ab24SNipun Gupta u8 dev_num; 31*2959ab24SNipun Gupta struct resource res[MAX_CDX_DEV_RESOURCES]; 32*2959ab24SNipun Gupta u8 res_count; 33*2959ab24SNipun Gupta u32 req_id; 34*2959ab24SNipun Gupta }; 35*2959ab24SNipun Gupta 36*2959ab24SNipun Gupta /** 37*2959ab24SNipun Gupta * cdx_register_controller - Register a CDX controller and its ports 38*2959ab24SNipun Gupta * on the CDX bus. 39*2959ab24SNipun Gupta * @cdx: The CDX controller to register 40*2959ab24SNipun Gupta * 41*2959ab24SNipun Gupta * Return: -errno on failure, 0 on success. 42*2959ab24SNipun Gupta */ 43*2959ab24SNipun Gupta int cdx_register_controller(struct cdx_controller *cdx); 44*2959ab24SNipun Gupta 45*2959ab24SNipun Gupta /** 46*2959ab24SNipun Gupta * cdx_unregister_controller - Unregister a CDX controller 47*2959ab24SNipun Gupta * @cdx: The CDX controller to unregister 48*2959ab24SNipun Gupta */ 49*2959ab24SNipun Gupta void cdx_unregister_controller(struct cdx_controller *cdx); 50*2959ab24SNipun Gupta 51*2959ab24SNipun Gupta /** 52*2959ab24SNipun Gupta * cdx_device_add - Add a CDX device. This function adds a CDX device 53*2959ab24SNipun Gupta * on the CDX bus as per the device parameters provided 54*2959ab24SNipun Gupta * by caller. It also creates and registers an associated 55*2959ab24SNipun Gupta * Linux generic device. 56*2959ab24SNipun Gupta * @dev_params: device parameters associated with the device to be created. 57*2959ab24SNipun Gupta * 58*2959ab24SNipun Gupta * Return: -errno on failure, 0 on success. 59*2959ab24SNipun Gupta */ 60*2959ab24SNipun Gupta int cdx_device_add(struct cdx_dev_params *dev_params); 61*2959ab24SNipun Gupta 62*2959ab24SNipun Gupta #endif /* _CDX_H_ */ 63