1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * CompactPCI Hot Plug Core Functions 4 * 5 * Copyright (C) 2002 SOMA Networks, Inc. 6 * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) 7 * Copyright (C) 2001 IBM Corp. 8 * 9 * All rights reserved. 10 * 11 * Send feedback to <scottm@somanetworks.com> 12 */ 13 14#ifndef _CPCI_HOTPLUG_H 15#define _CPCI_HOTPLUG_H 16 17#include <linux/types.h> 18#include <linux/pci.h> 19#include <linux/pci_hotplug.h> 20 21/* PICMG 2.1 R2.0 HS CSR bits: */ 22#define HS_CSR_INS 0x0080 23#define HS_CSR_EXT 0x0040 24#define HS_CSR_PI 0x0030 25#define HS_CSR_LOO 0x0008 26#define HS_CSR_PIE 0x0004 27#define HS_CSR_EIM 0x0002 28#define HS_CSR_DHA 0x0001 29 30struct slot { 31 u8 number; 32 unsigned int devfn; 33 struct pci_bus *bus; 34 struct pci_dev *dev; 35 unsigned int extracting; 36 struct hotplug_slot *hotplug_slot; 37 struct list_head slot_list; 38}; 39 40struct cpci_hp_controller_ops { 41 int (*query_enum)(void); 42 int (*enable_irq)(void); 43 int (*disable_irq)(void); 44 int (*check_irq)(void *dev_id); 45 int (*hardware_test)(struct slot *slot, u32 value); 46 u8 (*get_power)(struct slot *slot); 47 int (*set_power)(struct slot *slot, int value); 48}; 49 50struct cpci_hp_controller { 51 unsigned int irq; 52 unsigned long irq_flags; 53 char *devname; 54 void *dev_id; 55 char *name; 56 struct cpci_hp_controller_ops *ops; 57}; 58 59static inline const char *slot_name(struct slot *slot) 60{ 61 return hotplug_slot_name(slot->hotplug_slot); 62} 63 64int cpci_hp_register_controller(struct cpci_hp_controller *controller); 65int cpci_hp_unregister_controller(struct cpci_hp_controller *controller); 66int cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last); 67int cpci_hp_unregister_bus(struct pci_bus *bus); 68int cpci_hp_start(void); 69int cpci_hp_stop(void); 70 71/* 72 * Internal function prototypes, these functions should not be used by 73 * board/chassis drivers. 74 */ 75u8 cpci_get_attention_status(struct slot *slot); 76u8 cpci_get_latch_status(struct slot *slot); 77u8 cpci_get_adapter_status(struct slot *slot); 78u16 cpci_get_hs_csr(struct slot *slot); 79int cpci_set_attention_status(struct slot *slot, int status); 80int cpci_check_and_clear_ins(struct slot *slot); 81int cpci_check_ext(struct slot *slot); 82int cpci_clear_ext(struct slot *slot); 83int cpci_led_on(struct slot *slot); 84int cpci_led_off(struct slot *slot); 85int cpci_configure_slot(struct slot *slot); 86int cpci_unconfigure_slot(struct slot *slot); 87 88#ifdef CONFIG_HOTPLUG_PCI_CPCI 89int cpci_hotplug_init(int debug); 90#else 91static inline int cpci_hotplug_init(int debug) { return 0; } 92#endif 93 94#endif /* _CPCI_HOTPLUG_H */ 95