linux/drivers/pci/hotplug/cpci_hotplug.h
<<
>>
Prefs
   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