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 latch_status:1;
  36        unsigned int adapter_status:1;
  37        unsigned int extracting;
  38        struct hotplug_slot hotplug_slot;
  39        struct list_head slot_list;
  40};
  41
  42struct cpci_hp_controller_ops {
  43        int (*query_enum)(void);
  44        int (*enable_irq)(void);
  45        int (*disable_irq)(void);
  46        int (*check_irq)(void *dev_id);
  47        int (*hardware_test)(struct slot *slot, u32 value);
  48        u8  (*get_power)(struct slot *slot);
  49        int (*set_power)(struct slot *slot, int value);
  50};
  51
  52struct cpci_hp_controller {
  53        unsigned int irq;
  54        unsigned long irq_flags;
  55        char *devname;
  56        void *dev_id;
  57        char *name;
  58        struct cpci_hp_controller_ops *ops;
  59};
  60
  61static inline const char *slot_name(struct slot *slot)
  62{
  63        return hotplug_slot_name(&slot->hotplug_slot);
  64}
  65
  66static inline struct slot *to_slot(struct hotplug_slot *hotplug_slot)
  67{
  68        return container_of(hotplug_slot, struct slot, hotplug_slot);
  69}
  70
  71int cpci_hp_register_controller(struct cpci_hp_controller *controller);
  72int cpci_hp_unregister_controller(struct cpci_hp_controller *controller);
  73int cpci_hp_register_bus(struct pci_bus *bus, u8 first, u8 last);
  74int cpci_hp_unregister_bus(struct pci_bus *bus);
  75int cpci_hp_start(void);
  76int cpci_hp_stop(void);
  77
  78/*
  79 * Internal function prototypes, these functions should not be used by
  80 * board/chassis drivers.
  81 */
  82u8 cpci_get_attention_status(struct slot *slot);
  83u8 cpci_get_latch_status(struct slot *slot);
  84u8 cpci_get_adapter_status(struct slot *slot);
  85u16 cpci_get_hs_csr(struct slot *slot);
  86int cpci_set_attention_status(struct slot *slot, int status);
  87int cpci_check_and_clear_ins(struct slot *slot);
  88int cpci_check_ext(struct slot *slot);
  89int cpci_clear_ext(struct slot *slot);
  90int cpci_led_on(struct slot *slot);
  91int cpci_led_off(struct slot *slot);
  92int cpci_configure_slot(struct slot *slot);
  93int cpci_unconfigure_slot(struct slot *slot);
  94
  95#ifdef CONFIG_HOTPLUG_PCI_CPCI
  96int cpci_hotplug_init(int debug);
  97#else
  98static inline int cpci_hotplug_init(int debug) { return 0; }
  99#endif
 100
 101#endif  /* _CPCI_HOTPLUG_H */
 102