| /* |
| * Copyright (C) 2010 Samsung Electronics. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #ifndef __S5100_PCIE_H__ |
| #define __S5100_PCIE_H__ |
| |
| #include <linux/exynos-pci-noti.h> |
| |
| #define MAX_MSI_NUM (16) |
| |
| extern int s5100pcie_init(int ch_num); |
| extern int exynos_pcie_host_v1_register_event(struct exynos_pcie_register_event *reg); |
| extern void exynos_pcie_host_v1_register_dump(int ch_num); |
| |
| struct s5100pcie { |
| unsigned int busdev_num; |
| int pcie_channel_num; |
| struct pci_dev *s5100_pdev; |
| int irq_num_base; |
| u32 __iomem *doorbell_addr; |
| u32 __iomem *reg_base; |
| |
| unsigned gpio_cp_wakeup; |
| u32 link_status; |
| bool suspend_try; |
| |
| struct exynos_pcie_register_event pcie_event; |
| struct pci_saved_state *pci_saved_configs; |
| }; |
| |
| extern struct s5100pcie s5100pcie; |
| |
| extern int exynos_pcie_host_v1_poweron(int ch_num); |
| extern int exynos_pcie_host_v1_poweroff(int ch_num); |
| extern int exynos_check_pcie_link_status(int ch_num); |
| extern int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs, \ |
| unsigned int max_vecs, unsigned int flags, \ |
| const struct irq_affinity *affd); |
| extern int exynos_pcie_host_v1_l1ss_ctrl(int enable, int id); |
| extern int pcie_iommu_map(int ch_num, unsigned long iova, phys_addr_t paddr, |
| size_t size, int prot); |
| |
| #define AUTOSUSPEND_TIMEOUT 200 |
| |
| int s5100pcie_request_msi_int(int int_num); |
| void __iomem *s5100pcie_get_doorbell_address(void); |
| struct pci_dev *s5100pcie_get_pcidev(void); |
| void s5100pcie_set_cp_wake_gpio(int cp_wakeup); |
| int s5100pcie_send_doorbell_int(int int_num); |
| void save_s5100_status(void); |
| void restore_s5100_state(void); |
| void disable_msi_int(void); |
| void print_msi_register(void); |
| int s5100_recover_pcie_link(bool start); |
| void s5100_check_doorbell_ready(void); |
| int request_pcie_msi_int(struct link_device *ld, |
| struct platform_device *pdev); |
| |
| #endif /* __S5100_PCIE_H__ */ |