hpsa.c (f66c83d059d1ed90968caa81d401f160912b063a) hpsa.c (9e03aa2f830c5f0ea8c28790a61e65ed7403b053)
1/*
2 * Disk Array driver for HP Smart Array SAS controllers
3 * Copyright 2000, 2009 Hewlett-Packard Development Company, L.P.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
8 *

--- 569 unchanged lines hidden (view full) ---

578 * register number
579 */
580static void set_performant_mode(struct ctlr_info *h, struct CommandList *c)
581{
582 if (likely(h->transMethod & CFGTBL_Trans_Performant)) {
583 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1);
584 if (likely(h->msix_vector))
585 c->Header.ReplyQueue =
1/*
2 * Disk Array driver for HP Smart Array SAS controllers
3 * Copyright 2000, 2009 Hewlett-Packard Development Company, L.P.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; version 2 of the License.
8 *

--- 569 unchanged lines hidden (view full) ---

578 * register number
579 */
580static void set_performant_mode(struct ctlr_info *h, struct CommandList *c)
581{
582 if (likely(h->transMethod & CFGTBL_Trans_Performant)) {
583 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1);
584 if (likely(h->msix_vector))
585 c->Header.ReplyQueue =
586 raw_smp_processor_id() % h->nreply_queues;
586 smp_processor_id() % h->nreply_queues;
587 }
588}
589
590static int is_firmware_flash_cmd(u8 *cdb)
591{
592 return cdb[0] == BMIC_WRITE && cdb[6] == BMIC_FLASH_FIRMWARE;
593}
594

--- 454 unchanged lines hidden (view full) ---

1049 }
1050
1051free_and_out:
1052 kfree(added);
1053 kfree(removed);
1054}
1055
1056/*
587 }
588}
589
590static int is_firmware_flash_cmd(u8 *cdb)
591{
592 return cdb[0] == BMIC_WRITE && cdb[6] == BMIC_FLASH_FIRMWARE;
593}
594

--- 454 unchanged lines hidden (view full) ---

1049 }
1050
1051free_and_out:
1052 kfree(added);
1053 kfree(removed);
1054}
1055
1056/*
1057 * Lookup bus/target/lun and retrun corresponding struct hpsa_scsi_dev_t *
1057 * Lookup bus/target/lun and return corresponding struct hpsa_scsi_dev_t *
1058 * Assume's h->devlock is held.
1059 */
1060static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h,
1061 int bus, int target, int lun)
1062{
1063 int i;
1064 struct hpsa_scsi_dev_t *sd;
1065

--- 134 unchanged lines hidden (view full) ---

1200 sense_data_size = sizeof(ei->SenseInfo);
1201 if (ei->SenseLen < sense_data_size)
1202 sense_data_size = ei->SenseLen;
1203
1204 memcpy(cmd->sense_buffer, ei->SenseInfo, sense_data_size);
1205 scsi_set_resid(cmd, ei->ResidualCnt);
1206
1207 if (ei->CommandStatus == 0) {
1058 * Assume's h->devlock is held.
1059 */
1060static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h,
1061 int bus, int target, int lun)
1062{
1063 int i;
1064 struct hpsa_scsi_dev_t *sd;
1065

--- 134 unchanged lines hidden (view full) ---

1200 sense_data_size = sizeof(ei->SenseInfo);
1201 if (ei->SenseLen < sense_data_size)
1202 sense_data_size = ei->SenseLen;
1203
1204 memcpy(cmd->sense_buffer, ei->SenseInfo, sense_data_size);
1205 scsi_set_resid(cmd, ei->ResidualCnt);
1206
1207 if (ei->CommandStatus == 0) {
1208 cmd_free(h, cp);
1209 cmd->scsi_done(cmd);
1208 cmd->scsi_done(cmd);
1209 cmd_free(h, cp);
1210 return;
1211 }
1212
1213 /* an error has occurred */
1214 switch (ei->CommandStatus) {
1215
1216 case CMD_TARGET_STATUS:
1217 if (ei->ScsiStatus) {

--- 156 unchanged lines hidden (view full) ---

1374 cmd->result = DID_ERROR << 16;
1375 dev_warn(&h->pdev->dev, "Command unabortable\n");
1376 break;
1377 default:
1378 cmd->result = DID_ERROR << 16;
1379 dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n",
1380 cp, ei->CommandStatus);
1381 }
1210 return;
1211 }
1212
1213 /* an error has occurred */
1214 switch (ei->CommandStatus) {
1215
1216 case CMD_TARGET_STATUS:
1217 if (ei->ScsiStatus) {

--- 156 unchanged lines hidden (view full) ---

1374 cmd->result = DID_ERROR << 16;
1375 dev_warn(&h->pdev->dev, "Command unabortable\n");
1376 break;
1377 default:
1378 cmd->result = DID_ERROR << 16;
1379 dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n",
1380 cp, ei->CommandStatus);
1381 }
1382 cmd_free(h, cp);
1383 cmd->scsi_done(cmd);
1382 cmd->scsi_done(cmd);
1383 cmd_free(h, cp);
1384}
1385
1386static void hpsa_pci_unmap(struct pci_dev *pdev,
1387 struct CommandList *c, int sg_used, int data_direction)
1388{
1389 int i;
1390 union u64bit addr64;
1391

--- 1324 unchanged lines hidden (view full) ---

2716 i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds);
2717 if (i == h->nr_cmds) {
2718 spin_unlock_irqrestore(&h->lock, flags);
2719 return NULL;
2720 }
2721 } while (test_and_set_bit
2722 (i & (BITS_PER_LONG - 1),
2723 h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0);
1384}
1385
1386static void hpsa_pci_unmap(struct pci_dev *pdev,
1387 struct CommandList *c, int sg_used, int data_direction)
1388{
1389 int i;
1390 union u64bit addr64;
1391

--- 1324 unchanged lines hidden (view full) ---

2716 i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds);
2717 if (i == h->nr_cmds) {
2718 spin_unlock_irqrestore(&h->lock, flags);
2719 return NULL;
2720 }
2721 } while (test_and_set_bit
2722 (i & (BITS_PER_LONG - 1),
2723 h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0);
2724 h->nr_allocs++;
2724 spin_unlock_irqrestore(&h->lock, flags);
2725
2726 c = h->cmd_pool + i;
2727 memset(c, 0, sizeof(*c));
2728 cmd_dma_handle = h->cmd_pool_dhandle
2729 + i * sizeof(*c);
2730 c->err_info = h->errinfo_pool + i;
2731 memset(c->err_info, 0, sizeof(*c->err_info));

--- 55 unchanged lines hidden (view full) ---

2787{
2788 int i;
2789 unsigned long flags;
2790
2791 i = c - h->cmd_pool;
2792 spin_lock_irqsave(&h->lock, flags);
2793 clear_bit(i & (BITS_PER_LONG - 1),
2794 h->cmd_pool_bits + (i / BITS_PER_LONG));
2725 spin_unlock_irqrestore(&h->lock, flags);
2726
2727 c = h->cmd_pool + i;
2728 memset(c, 0, sizeof(*c));
2729 cmd_dma_handle = h->cmd_pool_dhandle
2730 + i * sizeof(*c);
2731 c->err_info = h->errinfo_pool + i;
2732 memset(c->err_info, 0, sizeof(*c->err_info));

--- 55 unchanged lines hidden (view full) ---

2788{
2789 int i;
2790 unsigned long flags;
2791
2792 i = c - h->cmd_pool;
2793 spin_lock_irqsave(&h->lock, flags);
2794 clear_bit(i & (BITS_PER_LONG - 1),
2795 h->cmd_pool_bits + (i / BITS_PER_LONG));
2796 h->nr_frees++;
2795 spin_unlock_irqrestore(&h->lock, flags);
2796}
2797
2798static void cmd_special_free(struct ctlr_info *h, struct CommandList *c)
2799{
2800 union u64bit temp64;
2801
2802 temp64.val32.lower = c->ErrDesc.Addr.lower;

--- 2386 unchanged lines hidden ---
2797 spin_unlock_irqrestore(&h->lock, flags);
2798}
2799
2800static void cmd_special_free(struct ctlr_info *h, struct CommandList *c)
2801{
2802 union u64bit temp64;
2803
2804 temp64.val32.lower = c->ErrDesc.Addr.lower;

--- 2386 unchanged lines hidden ---