Skip to content

Commit

Permalink
[SCSI] megaraid_sas: function pointer for disable interrupt
Browse files Browse the repository at this point in the history
This patch adds function pointer to invoke disable interrupt for
xscale and ppc IOP based controllers. Removes old implementation that checks
for controller type in megasas_disable_intr.

Signed-off-by: Sumant Patro <Sumant.Patro@lsil.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
  • Loading branch information
Sumant Patro authored and James Bottomley committed Oct 4, 2006
1 parent b1df99d commit b274cab
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 23 deletions.
55 changes: 32 additions & 23 deletions drivers/scsi/megaraid/megaraid_sas.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,19 @@ megasas_enable_intr_xscale(struct megasas_register_set __iomem * regs)
readl(&regs->outbound_intr_mask);
}

/**
* megasas_disable_intr_xscale -Disables interrupt
* @regs: MFI register set
*/
static inline void
megasas_disable_intr_xscale(struct megasas_register_set __iomem * regs)
{
u32 mask = 0x1f;
writel(mask, &regs->outbound_intr_mask);
/* Dummy readl to force pci flush */
readl(&regs->outbound_intr_mask);
}

/**
* megasas_read_fw_status_reg_xscale - returns the current FW status value
* @regs: MFI register set
Expand Down Expand Up @@ -185,6 +198,7 @@ static struct megasas_instance_template megasas_instance_template_xscale = {

.fire_cmd = megasas_fire_cmd_xscale,
.enable_intr = megasas_enable_intr_xscale,
.disable_intr = megasas_disable_intr_xscale,
.clear_intr = megasas_clear_intr_xscale,
.read_fw_status_reg = megasas_read_fw_status_reg_xscale,
};
Expand Down Expand Up @@ -214,6 +228,19 @@ megasas_enable_intr_ppc(struct megasas_register_set __iomem * regs)
readl(&regs->outbound_intr_mask);
}

/**
* megasas_disable_intr_ppc - Disable interrupt
* @regs: MFI register set
*/
static inline void
megasas_disable_intr_ppc(struct megasas_register_set __iomem * regs)
{
u32 mask = 0xFFFFFFFF;
writel(mask, &regs->outbound_intr_mask);
/* Dummy readl to force pci flush */
readl(&regs->outbound_intr_mask);
}

/**
* megasas_read_fw_status_reg_ppc - returns the current FW status value
* @regs: MFI register set
Expand Down Expand Up @@ -265,6 +292,7 @@ static struct megasas_instance_template megasas_instance_template_ppc = {

.fire_cmd = megasas_fire_cmd_ppc,
.enable_intr = megasas_enable_intr_ppc,
.disable_intr = megasas_disable_intr_ppc,
.clear_intr = megasas_clear_intr_ppc,
.read_fw_status_reg = megasas_read_fw_status_reg_ppc,
};
Expand All @@ -274,25 +302,6 @@ static struct megasas_instance_template megasas_instance_template_ppc = {
* specific to ppc (deviceid : 0x60) controllers
*/

/**
* megasas_disable_intr - Disables interrupts
* @regs: MFI register set
*/
static inline void
megasas_disable_intr(struct megasas_instance *instance)
{
u32 mask = 0x1f;
struct megasas_register_set __iomem *regs = instance->reg_set;

if(instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1078R)
mask = 0xffffffff;

writel(mask, &regs->outbound_intr_mask);

/* Dummy readl to force pci flush */
readl(&regs->outbound_intr_mask);
}

/**
* megasas_issue_polled - Issues a polling command
* @instance: Adapter soft state
Expand Down Expand Up @@ -1293,7 +1302,7 @@ megasas_transition_to_ready(struct megasas_instance* instance)
/*
* Bring it to READY state; assuming max wait 10 secs
*/
megasas_disable_intr(instance);
instance->instancet->disable_intr(instance->reg_set);
writel(MFI_RESET_FLAGS, &instance->reg_set->inbound_doorbell);

max_wait = 10;
Expand Down Expand Up @@ -1799,7 +1808,7 @@ static int megasas_init_mfi(struct megasas_instance *instance)
/*
* disable the intr before firing the init frame to FW
*/
megasas_disable_intr(instance);
instance->instancet->disable_intr(instance->reg_set);

/*
* Issue the init frame in polled mode
Expand Down Expand Up @@ -2279,7 +2288,7 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
megasas_mgmt_info.max_index--;

pci_set_drvdata(pdev, NULL);
megasas_disable_intr(instance);
instance->instancet->disable_intr(instance->reg_set);
free_irq(instance->pdev->irq, instance);

megasas_release_mfi(instance);
Expand Down Expand Up @@ -2409,7 +2418,7 @@ static void megasas_detach_one(struct pci_dev *pdev)

pci_set_drvdata(instance->pdev, NULL);

megasas_disable_intr(instance);
instance->instancet->disable_intr(instance->reg_set);

free_irq(instance->pdev->irq, instance);

Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/megaraid/megaraid_sas.h
Original file line number Diff line number Diff line change
Expand Up @@ -1049,6 +1049,7 @@ struct megasas_evt_detail {
void (*fire_cmd)(dma_addr_t ,u32 ,struct megasas_register_set __iomem *);

void (*enable_intr)(struct megasas_register_set __iomem *) ;
void (*disable_intr)(struct megasas_register_set __iomem *);

int (*clear_intr)(struct megasas_register_set __iomem *);

Expand Down

0 comments on commit b274cab

Please sign in to comment.