2014-10-08 19:54:57 +11:00
/*
* Copyright 2014 IBM Corp .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# ifndef _ASM_PNV_PCI_H
# define _ASM_PNV_PCI_H
# include <linux/pci.h>
2015-05-27 16:07:16 +10:00
# include <misc/cxl-base.h>
2016-05-20 16:41:41 +10:00
# include <asm/opal-api.h>
2014-10-08 19:54:57 +11:00
2016-05-20 16:41:38 +10:00
# define PCI_SLOT_ID_PREFIX 0x8000000000000000
# define PCI_SLOT_ID(phb_id, bdfn) \
( PCI_SLOT_ID_PREFIX | ( ( uint64_t ) ( bdfn ) < < 16 ) | ( phb_id ) )
2016-05-20 16:41:40 +10:00
extern int pnv_pci_get_slot_id ( struct device_node * np , uint64_t * id ) ;
2016-05-20 16:41:41 +10:00
extern int pnv_pci_get_device_tree ( uint32_t phandle , void * buf , uint64_t len ) ;
extern int pnv_pci_get_presence_state ( uint64_t id , uint8_t * state ) ;
extern int pnv_pci_get_power_state ( uint64_t id , uint8_t * state ) ;
extern int pnv_pci_set_power_state ( uint64_t id , uint8_t state ,
struct opal_msg * msg ) ;
2016-05-20 16:41:40 +10:00
2015-01-19 11:52:50 -06:00
int pnv_phb_to_cxl_mode ( struct pci_dev * dev , uint64_t mode ) ;
2014-10-08 19:54:57 +11:00
int pnv_cxl_ioda_msi_setup ( struct pci_dev * dev , unsigned int hwirq ,
unsigned int virq ) ;
int pnv_cxl_alloc_hwirqs ( struct pci_dev * dev , int num ) ;
void pnv_cxl_release_hwirqs ( struct pci_dev * dev , int hwirq , int num ) ;
int pnv_cxl_get_irq_count ( struct pci_dev * dev ) ;
2015-01-28 20:16:04 -06:00
struct device_node * pnv_pci_get_phb_node ( struct pci_dev * dev ) ;
2014-10-08 19:54:57 +11:00
# ifdef CONFIG_CXL_BASE
int pnv_cxl_alloc_hwirq_ranges ( struct cxl_irq_ranges * irqs ,
struct pci_dev * dev , int num ) ;
void pnv_cxl_release_hwirq_ranges ( struct cxl_irq_ranges * irqs ,
struct pci_dev * dev ) ;
# endif
# endif