diff options
-rw-r--r-- | drivers/scsi/advansys.c | 73 |
1 files changed, 3 insertions, 70 deletions
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c index 0459c85b74b8..ab9108293d0f 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c | |||
@@ -992,19 +992,6 @@ typedef struct asc_mc_saved { | |||
992 | #define ADV_MAX_SG_LIST 255 | 992 | #define ADV_MAX_SG_LIST 255 |
993 | #define NO_OF_SG_PER_BLOCK 15 | 993 | #define NO_OF_SG_PER_BLOCK 15 |
994 | 994 | ||
995 | /* Number of SG blocks needed. */ | ||
996 | #define ADV_NUM_SG_BLOCK \ | ||
997 | ((ADV_MAX_SG_LIST + (NO_OF_SG_PER_BLOCK - 1))/NO_OF_SG_PER_BLOCK) | ||
998 | |||
999 | /* Total contiguous memory needed for SG blocks. */ | ||
1000 | #define ADV_SG_TOTAL_MEM_SIZE \ | ||
1001 | (sizeof(ADV_SG_BLOCK) * ADV_NUM_SG_BLOCK) | ||
1002 | |||
1003 | #define ADV_PAGE_SIZE PAGE_SIZE | ||
1004 | |||
1005 | #define ADV_NUM_PAGE_CROSSING \ | ||
1006 | ((ADV_SG_TOTAL_MEM_SIZE + (ADV_PAGE_SIZE - 1))/ADV_PAGE_SIZE) | ||
1007 | |||
1008 | #define ADV_EEP_DVC_CFG_BEGIN (0x00) | 995 | #define ADV_EEP_DVC_CFG_BEGIN (0x00) |
1009 | #define ADV_EEP_DVC_CFG_END (0x15) | 996 | #define ADV_EEP_DVC_CFG_END (0x15) |
1010 | #define ADV_EEP_DVC_CTL_BEGIN (0x16) /* location of OEM name */ | 997 | #define ADV_EEP_DVC_CTL_BEGIN (0x16) /* location of OEM name */ |
@@ -1792,8 +1779,7 @@ typedef struct adv_carr_t { | |||
1792 | #define ASC_GET_CARRP(carrp) ((carrp) & ASC_NEXT_VPA_MASK) | 1779 | #define ASC_GET_CARRP(carrp) ((carrp) & ASC_NEXT_VPA_MASK) |
1793 | 1780 | ||
1794 | #define ADV_CARRIER_NUM_PAGE_CROSSING \ | 1781 | #define ADV_CARRIER_NUM_PAGE_CROSSING \ |
1795 | (((ADV_CARRIER_COUNT * sizeof(ADV_CARR_T)) + \ | 1782 | (((ADV_CARRIER_COUNT * sizeof(ADV_CARR_T)) + (PAGE_SIZE - 1))/PAGE_SIZE) |
1796 | (ADV_PAGE_SIZE - 1))/ADV_PAGE_SIZE) | ||
1797 | 1783 | ||
1798 | #define ADV_CARRIER_BUFSIZE \ | 1784 | #define ADV_CARRIER_BUFSIZE \ |
1799 | ((ADV_CARRIER_COUNT + ADV_CARRIER_NUM_PAGE_CROSSING) * sizeof(ADV_CARR_T)) | 1785 | ((ADV_CARRIER_COUNT + ADV_CARRIER_NUM_PAGE_CROSSING) * sizeof(ADV_CARR_T)) |
@@ -2174,16 +2160,6 @@ do { \ | |||
2174 | #define QHSTA_M_FROZEN_TIDQ 0x46 /* TID Queue frozen. */ | 2160 | #define QHSTA_M_FROZEN_TIDQ 0x46 /* TID Queue frozen. */ |
2175 | #define QHSTA_M_SGBACKUP_ERROR 0x47 /* Scatter-Gather backup error */ | 2161 | #define QHSTA_M_SGBACKUP_ERROR 0x47 /* Scatter-Gather backup error */ |
2176 | 2162 | ||
2177 | /* | ||
2178 | * DvcGetPhyAddr() flag arguments | ||
2179 | */ | ||
2180 | #define ADV_IS_SCSIQ_FLAG 0x01 /* 'addr' is ASC_SCSI_REQ_Q pointer */ | ||
2181 | #define ADV_ASCGETSGLIST_VADDR 0x02 /* 'addr' is AscGetSGList() virtual addr */ | ||
2182 | #define ADV_IS_SENSE_FLAG 0x04 /* 'addr' is sense virtual pointer */ | ||
2183 | #define ADV_IS_DATA_FLAG 0x08 /* 'addr' is data virtual pointer */ | ||
2184 | #define ADV_IS_SGLIST_FLAG 0x10 /* 'addr' is sglist virtual pointer */ | ||
2185 | #define ADV_IS_CARRIER_FLAG 0x20 /* 'addr' is ADV_CARR_T pointer */ | ||
2186 | |||
2187 | /* Return the address that is aligned at the next doubleword >= to 'addr'. */ | 2163 | /* Return the address that is aligned at the next doubleword >= to 'addr'. */ |
2188 | #define ADV_8BALIGN(addr) (((ulong) (addr) + 0x7) & ~0x7) | 2164 | #define ADV_8BALIGN(addr) (((ulong) (addr) + 0x7) & ~0x7) |
2189 | #define ADV_16BALIGN(addr) (((ulong) (addr) + 0xF) & ~0xF) | 2165 | #define ADV_16BALIGN(addr) (((ulong) (addr) + 0xF) & ~0xF) |
@@ -6483,29 +6459,6 @@ static int AdvLoadMicrocode(AdvPortAddr iop_base, unsigned char *buf, int size, | |||
6483 | return 0; | 6459 | return 0; |
6484 | } | 6460 | } |
6485 | 6461 | ||
6486 | /* | ||
6487 | * DvcGetPhyAddr() | ||
6488 | * | ||
6489 | * Return the physical address of 'vaddr' and set '*lenp' to the | ||
6490 | * number of physically contiguous bytes that follow 'vaddr'. | ||
6491 | * 'flag' indicates the type of structure whose physical address | ||
6492 | * is being translated. | ||
6493 | * | ||
6494 | * Note: Because Linux currently doesn't page the kernel and all | ||
6495 | * kernel buffers are physically contiguous, leave '*lenp' unchanged. | ||
6496 | */ | ||
6497 | ADV_PADDR | ||
6498 | DvcGetPhyAddr(ADV_DVC_VAR *asc_dvc, ADV_SCSI_REQ_Q *scsiq, | ||
6499 | uchar *vaddr, ADV_SDCNT *lenp, int flag) | ||
6500 | { | ||
6501 | ADV_PADDR paddr = virt_to_bus(vaddr); | ||
6502 | |||
6503 | ASC_DBG(4, "vaddr 0x%p, lenp 0x%p *lenp %lu, paddr 0x%lx\n", | ||
6504 | vaddr, lenp, (ulong)*((ulong *)lenp), (ulong)paddr); | ||
6505 | |||
6506 | return paddr; | ||
6507 | } | ||
6508 | |||
6509 | static void AdvBuildCarrierFreelist(struct adv_dvc_var *asc_dvc) | 6462 | static void AdvBuildCarrierFreelist(struct adv_dvc_var *asc_dvc) |
6510 | { | 6463 | { |
6511 | ADV_CARR_T *carrp; | 6464 | ADV_CARR_T *carrp; |
@@ -6522,24 +6475,10 @@ static void AdvBuildCarrierFreelist(struct adv_dvc_var *asc_dvc) | |||
6522 | 6475 | ||
6523 | do { | 6476 | do { |
6524 | /* Get physical address of the carrier 'carrp'. */ | 6477 | /* Get physical address of the carrier 'carrp'. */ |
6525 | ADV_DCNT contig_len = sizeof(ADV_CARR_T); | 6478 | carr_paddr = cpu_to_le32(virt_to_bus(carrp)); |
6526 | carr_paddr = cpu_to_le32(DvcGetPhyAddr(asc_dvc, NULL, | ||
6527 | (uchar *)carrp, | ||
6528 | (ADV_SDCNT *)&contig_len, | ||
6529 | ADV_IS_CARRIER_FLAG)); | ||
6530 | 6479 | ||
6531 | buf_size -= sizeof(ADV_CARR_T); | 6480 | buf_size -= sizeof(ADV_CARR_T); |
6532 | 6481 | ||
6533 | /* | ||
6534 | * If the current carrier is not physically contiguous, then | ||
6535 | * maybe there was a page crossing. Try the next carrier | ||
6536 | * aligned start address. | ||
6537 | */ | ||
6538 | if (contig_len < sizeof(ADV_CARR_T)) { | ||
6539 | carrp++; | ||
6540 | continue; | ||
6541 | } | ||
6542 | |||
6543 | carrp->carr_pa = carr_paddr; | 6482 | carrp->carr_pa = carr_paddr; |
6544 | carrp->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(carrp)); | 6483 | carrp->carr_va = cpu_to_le32(ADV_VADDR_TO_U32(carrp)); |
6545 | 6484 | ||
@@ -10915,7 +10854,6 @@ static int AscExeScsiQueue(ASC_DVC_VAR *asc_dvc, ASC_SCSI_Q *scsiq) | |||
10915 | static int AdvExeScsiQueue(ADV_DVC_VAR *asc_dvc, ADV_SCSI_REQ_Q *scsiq) | 10854 | static int AdvExeScsiQueue(ADV_DVC_VAR *asc_dvc, ADV_SCSI_REQ_Q *scsiq) |
10916 | { | 10855 | { |
10917 | AdvPortAddr iop_base; | 10856 | AdvPortAddr iop_base; |
10918 | ADV_DCNT req_size; | ||
10919 | ADV_PADDR req_paddr; | 10857 | ADV_PADDR req_paddr; |
10920 | ADV_CARR_T *new_carrp; | 10858 | ADV_CARR_T *new_carrp; |
10921 | 10859 | ||
@@ -10953,13 +10891,8 @@ static int AdvExeScsiQueue(ADV_DVC_VAR *asc_dvc, ADV_SCSI_REQ_Q *scsiq) | |||
10953 | */ | 10891 | */ |
10954 | scsiq->a_flag &= ~ADV_SCSIQ_DONE; | 10892 | scsiq->a_flag &= ~ADV_SCSIQ_DONE; |
10955 | 10893 | ||
10956 | req_size = sizeof(ADV_SCSI_REQ_Q); | 10894 | req_paddr = virt_to_bus(scsiq); |
10957 | req_paddr = DvcGetPhyAddr(asc_dvc, scsiq, (uchar *)scsiq, | ||
10958 | (ADV_SDCNT *)&req_size, ADV_IS_SCSIQ_FLAG); | ||
10959 | |||
10960 | BUG_ON(req_paddr & 31); | 10895 | BUG_ON(req_paddr & 31); |
10961 | BUG_ON(req_size < sizeof(ADV_SCSI_REQ_Q)); | ||
10962 | |||
10963 | /* Wait for assertion before making little-endian */ | 10896 | /* Wait for assertion before making little-endian */ |
10964 | req_paddr = cpu_to_le32(req_paddr); | 10897 | req_paddr = cpu_to_le32(req_paddr); |
10965 | 10898 | ||