#include <linux/types.h>
 #include <linux/pci.h>
 #include <linux/delay.h>
-#include <asm/semaphore.h>
-#include <asm/io.h>            
 #include "pci_hotplug.h"
 
 #if !defined(MODULE)
 struct controller {
        struct controller *next;
        struct semaphore crit_sect;     /* critical section semaphore */
-       void * hpc_ctlr_handle;         /* HPC controller handle */
+       struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */
        int num_slots;                  /* Number of slots on ctlr */
        int slot_num_inc;               /* 1 or -1 */
        struct pci_dev *pci_dev;
        SLOT11 =        offsetof(struct ctrl_reg, slot11),
        SLOT12 =        offsetof(struct ctrl_reg, slot12),
 };
-typedef u8(*php_intr_callback_t) (unsigned int change_id, void *instance_id);
+typedef u8(*php_intr_callback_t) (u8 hp_slot, void *instance_id);
 struct php_ctlr_state_s {
        struct php_ctlr_state_s *pnext;
        struct pci_dev *pci_dev;
        ACPI
 };
 
-int shpc_init( struct controller *ctrl, struct pci_dev *pdev,
-               php_intr_callback_t attention_button_callback,
-               php_intr_callback_t switch_change_callback,
-               php_intr_callback_t presence_change_callback,
-               php_intr_callback_t power_fault_callback);
+int shpc_init( struct controller *ctrl, struct pci_dev *pdev);
 
 int shpc_get_ctlr_slot_config( struct controller *ctrl,
                int *num_ctlr_slots,
        int     (*power_on_slot )               (struct slot *slot);
        int     (*slot_enable )                 (struct slot *slot);
        int     (*slot_disable )                (struct slot *slot);
-       int     (*enable_all_slots)             (struct slot *slot);
-       int     (*pwr_on_all_slots)             (struct slot *slot);
        int     (*set_bus_speed_mode)   (struct slot *slot, enum pci_bus_speed speed);
        int     (*get_power_status)             (struct slot *slot, u8 *status);
        int     (*get_attention_status) (struct slot *slot, u8 *status);
 
  *
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
-#include <linux/slab.h>
-#include <linux/workqueue.h>
-#include <linux/interrupt.h>
-#include <linux/delay.h>
-#include <linux/wait.h>
 #include <linux/smp_lock.h>
 #include <linux/pci.h>
 #include "../pci.h"
 /* The following routines constitute the bulk of the 
    hotplug controller logic
  */
-static u32 change_bus_speed(struct controller *ctrl, struct slot *p_slot, enum pci_bus_speed speed)
+static int change_bus_speed(struct controller *ctrl, struct slot *p_slot,
+               enum pci_bus_speed speed)
 { 
-       u32 rc = 0;
+       int rc = 0;
 
        dbg("%s: change to speed %d\n", __FUNCTION__, speed);
        down(&ctrl->crit_sect);
        return rc;
 }
 
-static u32 fix_bus_speed(struct controller *ctrl, struct slot *pslot, u8 flag, 
-enum pci_bus_speed asp, enum pci_bus_speed bsp, enum pci_bus_speed msp)
+static int fix_bus_speed(struct controller *ctrl, struct slot *pslot,
+               u8 flag, enum pci_bus_speed asp, enum pci_bus_speed bsp,
+               enum pci_bus_speed msp)
 { 
-       u32 rc = 0;
+       int rc = 0;
        
        if (flag != 0) { /* Other slots on the same bus are occupied */
                if ( asp < bsp ) {
  * Configures board
  *
  */
-static u32 board_added(struct slot *p_slot)
+static int board_added(struct slot *p_slot)
 {
        u8 hp_slot;
        u8 slots_not_empty = 0;
-       u32 rc = 0;
+       int rc = 0;
        enum pci_bus_speed adapter_speed, bus_speed, max_bus_speed;
        u8 pi, mode;
        struct controller *ctrl = p_slot->ctrl;
  * remove_board - Turns off slot and LED's
  *
  */
-static u32 remove_board(struct slot *p_slot)
+static int remove_board(struct slot *p_slot)
 {
        struct controller *ctrl = p_slot->ctrl;
        u8 hp_slot;
-       u32 rc;
+       int rc;
 
        if (shpchp_unconfigure_device(p_slot))
                return(1);
 int shpchp_disable_slot (struct slot *p_slot)
 {
        u8 getstatus = 0;
-       u32 rc = 0;
        int ret = 0;
 
        if (!p_slot->ctrl)
        }
        up(&p_slot->ctrl->crit_sect);
 
-       rc = remove_board(p_slot);
+       ret = remove_board(p_slot);
        update_slot_info(p_slot);
-       return rc;
+       return ret;
 }
 
 
  *
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/types.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/interrupt.h>
-#include <linux/spinlock.h>
-#include <linux/delay.h>
 #include <linux/pci.h>
-#include <asm/system.h>
 #include "shpchp.h"
 
 #ifdef DEBUG
 
 static int shpc_write_cmd(struct slot *slot, u8 t_slot, u8 cmd)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u16 cmd_status;
        int retval = 0;
        u16 temp_word;
 
 static int hpc_check_cmd_status(struct controller *ctrl)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
        u16 cmd_status;
        int retval = 0;
 
 
 static int hpc_get_attention_status(struct slot *slot, u8 *status)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status;
        u8 atten_led_state;
 
 static int hpc_get_power_status(struct slot * slot, u8 *status)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status;
        u8 slot_state;
 
 static int hpc_get_latch_status(struct slot *slot, u8 *status)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status;
 
 
 static int hpc_get_adapter_status(struct slot *slot, u8 *status)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status;
        u8 card_state;
 
 static int hpc_get_prog_int(struct slot *slot, u8 *prog_int)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
 
        DBG_ENTER_ROUTINE 
        
 
 static int hpc_get_adapter_speed(struct slot *slot, enum pci_bus_speed *value)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status, sec_bus_status;
        u8 m66_cap, pcix_cap, pi;
 
 static int hpc_get_mode1_ECC_cap(struct slot *slot, u8 *mode)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u16 sec_bus_status;
        u8 pi;
        int retval = 0;
 
 static int hpc_query_power_fault(struct slot * slot)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u32 slot_reg;
        u16 slot_status;
        u8 pwr_fault_state, status;
 
 static int hpc_set_attention_status(struct slot *slot, u8 value)
 {
-       struct php_ctlr_state_s *php_ctlr =(struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd = 0;
        int rc = 0;
 
 
 static void hpc_set_green_led_on(struct slot *slot)
 {
-       struct php_ctlr_state_s *php_ctlr =(struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
 
        if (!slot->ctrl->hpc_ctlr_handle) {
 
 static void hpc_set_green_led_off(struct slot *slot)
 {
-       struct php_ctlr_state_s *php_ctlr =(struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
 
        if (!slot->ctrl->hpc_ctlr_handle) {
 
 static void hpc_set_green_led_blink(struct slot *slot)
 {
-       struct php_ctlr_state_s *php_ctlr =(struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
 
        if (!slot->ctrl->hpc_ctlr_handle) {
        int *updown,            /* physical_slot_num increament: 1 or -1        */
        int *flags)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
 
        DBG_ENTER_ROUTINE 
 
 
 static void hpc_release_ctlr(struct controller *ctrl)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = ctrl->hpc_ctlr_handle;
        struct php_ctlr_state_s *p, *p_prev;
 
        DBG_ENTER_ROUTINE 
 
 static int hpc_power_on_slot(struct slot * slot)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
        int retval = 0;
 
 
 static int hpc_slot_enable(struct slot * slot)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
        int retval = 0;
 
 
 static int hpc_slot_disable(struct slot * slot)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        u8 slot_cmd;
        int retval = 0;
 
        return retval;
 }
 
-static int hpc_enable_all_slots( struct slot *slot )
-{
-       int retval = 0;
-
-       DBG_ENTER_ROUTINE 
-       
-       if (!slot->ctrl->hpc_ctlr_handle) {
-               err("%s: Invalid HPC controller handle!\n", __FUNCTION__);
-               return -1;
-       }
-
-       retval = shpc_write_cmd(slot, 0, SET_ENABLE_ALL);
-       if (retval) {
-               err("%s: Write command failed!\n", __FUNCTION__);
-               return -1;
-       }
-
-       DBG_LEAVE_ROUTINE
-
-       return retval;
-}
-
-static int hpc_pwr_on_all_slots(struct slot *slot)
-{
-       int retval = 0;
-
-       DBG_ENTER_ROUTINE 
-
-       retval = shpc_write_cmd(slot, 0, SET_PWR_ON_ALL);
-
-       if (retval) {
-               err("%s: Write command failed!\n", __FUNCTION__);
-               return -1;
-       }
-
-       DBG_LEAVE_ROUTINE
-       return retval;
-}
-
 static int hpc_set_bus_speed_mode(struct slot * slot, enum pci_bus_speed value)
 {
        u8 slot_cmd;
        u8 pi;
        int retval = 0;
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
 
        DBG_ENTER_ROUTINE 
        
 
 static int hpc_get_max_bus_speed (struct slot *slot, enum pci_bus_speed *value)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
        int retval = 0;
        u8 pi;
 
 static int hpc_get_cur_bus_speed (struct slot *slot, enum pci_bus_speed *value)
 {
-       struct php_ctlr_state_s *php_ctlr = (struct php_ctlr_state_s *) slot->ctrl->hpc_ctlr_handle;
+       struct php_ctlr_state_s *php_ctlr = slot->ctrl->hpc_ctlr_handle;
        enum pci_bus_speed bus_speed = PCI_SPEED_UNKNOWN;
        u16 sec_bus_status;
        int retval = 0;
        .power_on_slot                  = hpc_power_on_slot,
        .slot_enable                    = hpc_slot_enable,
        .slot_disable                   = hpc_slot_disable,
-       .enable_all_slots               = hpc_enable_all_slots,
-       .pwr_on_all_slots               = hpc_pwr_on_all_slots,
        .set_bus_speed_mode             = hpc_set_bus_speed_mode,         
        .set_attention_status   = hpc_set_attention_status,
        .get_power_status               = hpc_get_power_status,
        .check_cmd_status               = hpc_check_cmd_status,
 };
 
-int shpc_init(struct controller * ctrl,
-               struct pci_dev * pdev,
-               php_intr_callback_t attention_button_callback,
-               php_intr_callback_t switch_change_callback,
-               php_intr_callback_t presence_change_callback,
-               php_intr_callback_t power_fault_callback)
+int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
 {
        struct php_ctlr_state_s *php_ctlr, *p;
        void *instance_id = ctrl;
        static int first = 1;
        u32 shpc_cap_offset, shpc_base_offset;
        u32 tempdword, slot_reg;
-       u16 vendor_id, device_id;
        u8 i;
 
        DBG_ENTER_ROUTINE
 
        php_ctlr->pci_dev = pdev;       /* save pci_dev in context */
 
-       rc = pci_read_config_word(pdev, PCI_VENDOR_ID, &vendor_id);
-       dbg("%s: Vendor ID: %x\n",__FUNCTION__, vendor_id);
-       if (rc) {
-               err("%s: unable to read PCI configuration data\n", __FUNCTION__);
-               goto abort_free_ctlr;
-       }
-
-       rc = pci_read_config_word(pdev, PCI_DEVICE_ID, &device_id);
-       dbg("%s: Device ID: %x\n",__FUNCTION__, device_id);
-       if (rc) {
-               err("%s: unable to read PCI configuration data\n", __FUNCTION__);
-               goto abort_free_ctlr;
-       }
-
-       if ((vendor_id == PCI_VENDOR_ID_AMD) || (device_id == PCI_DEVICE_ID_AMD_GOLAM_7450)) {
+       if ((pdev->vendor == PCI_VENDOR_ID_AMD) || (pdev->device ==
+                               PCI_DEVICE_ID_AMD_GOLAM_7450)) {
                shpc_base_offset = 0;  /* amd shpc driver doesn't use this; assume 0 */
        } else {
                if ((shpc_cap_offset = pci_find_capability(pdev, PCI_CAP_ID_SHPC)) == 0) {
        php_ctlr->irq = pdev->irq;
        dbg("HPC interrupt = %d\n", php_ctlr->irq);
 
-       /* Save interrupt callback info */
-       php_ctlr->attention_button_callback = attention_button_callback;
-       php_ctlr->switch_change_callback = switch_change_callback;
-       php_ctlr->presence_change_callback = presence_change_callback;
-       php_ctlr->power_fault_callback = power_fault_callback;
+       php_ctlr->attention_button_callback = shpchp_handle_attention_button,
+       php_ctlr->switch_change_callback = shpchp_handle_switch_change;
+       php_ctlr->presence_change_callback = shpchp_handle_presence_change;
+       php_ctlr->power_fault_callback = shpchp_handle_power_fault;
        php_ctlr->callback_instance_id = instance_id;
 
        /* Return PCI Controller Info */