aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2008-04-25 09:01:41 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-04-27 13:20:00 -0400
commit3dbd10f3d8b00dad35d3fac95e91c066ae71d9a8 (patch)
treecbd020e0d4e9911afc88dbfc725f66139fb30129 /drivers/scsi
parenta198c3d0393faa1fa9f0e6e917ce980d3638f8df (diff)
[SCSI] aic7xxx: teach aicasm to not emit unused debug code/data
Add a 'count' variable to each symbol which gets increased every time the symbol is referenced. And then modify the register definition to include counts for symbols which are referenced from the source code only and not from the sequencer code. This will give us an automatic usage count for the symbols with only minimal hand-crafting. Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/aic7xxx/aic79xx.reg113
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx.reg43
-rw-r--r--drivers/scsi/aic7xxx/aicasm/aicasm.c6
-rw-r--r--drivers/scsi/aic7xxx/aicasm/aicasm_gram.y12
-rw-r--r--drivers/scsi/aic7xxx/aicasm/aicasm_scan.l1
-rw-r--r--drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c25
-rw-r--r--drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h1
7 files changed, 185 insertions, 16 deletions
diff --git a/drivers/scsi/aic7xxx/aic79xx.reg b/drivers/scsi/aic7xxx/aic79xx.reg
index 6ab514d7f980..cca16fc5b4ad 100644
--- a/drivers/scsi/aic7xxx/aic79xx.reg
+++ b/drivers/scsi/aic7xxx/aic79xx.reg
@@ -198,6 +198,7 @@ register SEQINTCODE {
198register CLRINT { 198register CLRINT {
199 address 0x003 199 address 0x003
200 access_mode WO 200 access_mode WO
201 count 19
201 field CLRHWERRINT 0x80 /* Rev B or greater */ 202 field CLRHWERRINT 0x80 /* Rev B or greater */
202 field CLRBRKADRINT 0x40 203 field CLRBRKADRINT 0x40
203 field CLRSWTMINT 0x20 204 field CLRSWTMINT 0x20
@@ -245,6 +246,7 @@ register CLRERR {
245register HCNTRL { 246register HCNTRL {
246 address 0x005 247 address 0x005
247 access_mode RW 248 access_mode RW
249 count 12
248 field SEQ_RESET 0x80 /* Rev B or greater */ 250 field SEQ_RESET 0x80 /* Rev B or greater */
249 field POWRDN 0x40 251 field POWRDN 0x40
250 field SWINT 0x10 252 field SWINT 0x10
@@ -262,6 +264,7 @@ register HNSCB_QOFF {
262 address 0x006 264 address 0x006
263 access_mode RW 265 access_mode RW
264 size 2 266 size 2
267 count 2
265} 268}
266 269
267/* 270/*
@@ -270,6 +273,7 @@ register HNSCB_QOFF {
270register HESCB_QOFF { 273register HESCB_QOFF {
271 address 0x008 274 address 0x008
272 access_mode RW 275 access_mode RW
276 count 2
273} 277}
274 278
275/* 279/*
@@ -287,6 +291,7 @@ register HS_MAILBOX {
287 */ 291 */
288register SEQINTSTAT { 292register SEQINTSTAT {
289 address 0x00C 293 address 0x00C
294 count 1
290 access_mode RO 295 access_mode RO
291 field SEQ_SWTMRTO 0x10 296 field SEQ_SWTMRTO 0x10
292 field SEQ_SEQINT 0x08 297 field SEQ_SEQINT 0x08
@@ -332,6 +337,7 @@ register SNSCB_QOFF {
332 */ 337 */
333register SESCB_QOFF { 338register SESCB_QOFF {
334 address 0x012 339 address 0x012
340 count 2
335 access_mode RW 341 access_mode RW
336 modes M_CCHAN 342 modes M_CCHAN
337} 343}
@@ -397,6 +403,7 @@ register DFCNTRL {
397 address 0x019 403 address 0x019
398 access_mode RW 404 access_mode RW
399 modes M_DFF0, M_DFF1 405 modes M_DFF0, M_DFF1
406 count 11
400 field PRELOADEN 0x80 407 field PRELOADEN 0x80
401 field SCSIENWRDIS 0x40 /* Rev B only. */ 408 field SCSIENWRDIS 0x40 /* Rev B only. */
402 field SCSIEN 0x20 409 field SCSIEN 0x20
@@ -415,6 +422,7 @@ register DFCNTRL {
415 */ 422 */
416register DSCOMMAND0 { 423register DSCOMMAND0 {
417 address 0x019 424 address 0x019
425 count 1
418 access_mode RW 426 access_mode RW
419 modes M_CFG 427 modes M_CFG
420 field CACHETHEN 0x80 /* Cache Threshold enable */ 428 field CACHETHEN 0x80 /* Cache Threshold enable */
@@ -580,6 +588,7 @@ register DFF_THRSH {
580 address 0x088 588 address 0x088
581 access_mode RW 589 access_mode RW
582 modes M_CFG 590 modes M_CFG
591 count 1
583 field WR_DFTHRSH 0x70 { 592 field WR_DFTHRSH 0x70 {
584 WR_DFTHRSH_MIN, 593 WR_DFTHRSH_MIN,
585 WR_DFTHRSH_25, 594 WR_DFTHRSH_25,
@@ -800,6 +809,7 @@ register PCIXCTL {
800 address 0x093 809 address 0x093
801 access_mode RW 810 access_mode RW
802 modes M_CFG 811 modes M_CFG
812 count 1
803 field SERRPULSE 0x80 813 field SERRPULSE 0x80
804 field UNEXPSCIEN 0x20 814 field UNEXPSCIEN 0x20
805 field SPLTSMADIS 0x10 815 field SPLTSMADIS 0x10
@@ -844,6 +854,7 @@ register DCHSPLTSTAT0 {
844 address 0x096 854 address 0x096
845 access_mode RW 855 access_mode RW
846 modes M_DFF0, M_DFF1 856 modes M_DFF0, M_DFF1
857 count 2
847 field STAETERM 0x80 858 field STAETERM 0x80
848 field SCBCERR 0x40 859 field SCBCERR 0x40
849 field SCADERR 0x20 860 field SCADERR 0x20
@@ -895,6 +906,7 @@ register DCHSPLTSTAT1 {
895 address 0x097 906 address 0x097
896 access_mode RW 907 access_mode RW
897 modes M_DFF0, M_DFF1 908 modes M_DFF0, M_DFF1
909 count 2
898 field RXDATABUCKET 0x01 910 field RXDATABUCKET 0x01
899} 911}
900 912
@@ -1048,6 +1060,7 @@ register SGSPLTSTAT0 {
1048 address 0x09E 1060 address 0x09E
1049 access_mode RW 1061 access_mode RW
1050 modes M_DFF0, M_DFF1 1062 modes M_DFF0, M_DFF1
1063 count 2
1051 field STAETERM 0x80 1064 field STAETERM 0x80
1052 field SCBCERR 0x40 1065 field SCBCERR 0x40
1053 field SCADERR 0x20 1066 field SCADERR 0x20
@@ -1065,6 +1078,7 @@ register SGSPLTSTAT1 {
1065 address 0x09F 1078 address 0x09F
1066 access_mode RW 1079 access_mode RW
1067 modes M_DFF0, M_DFF1 1080 modes M_DFF0, M_DFF1
1081 count 2
1068 field RXDATABUCKET 0x01 1082 field RXDATABUCKET 0x01
1069} 1083}
1070 1084
@@ -1086,6 +1100,7 @@ register DF0PCISTAT {
1086 address 0x0A0 1100 address 0x0A0
1087 access_mode RW 1101 access_mode RW
1088 modes M_CFG 1102 modes M_CFG
1103 count 1
1089 field DPE 0x80 1104 field DPE 0x80
1090 field SSE 0x40 1105 field SSE 0x40
1091 field RMA 0x20 1106 field RMA 0x20
@@ -1184,6 +1199,7 @@ register TARGPCISTAT {
1184 address 0x0A7 1199 address 0x0A7
1185 access_mode RW 1200 access_mode RW
1186 modes M_CFG 1201 modes M_CFG
1202 count 5
1187 field DPE 0x80 1203 field DPE 0x80
1188 field SSE 0x40 1204 field SSE 0x40
1189 field STA 0x08 1205 field STA 0x08
@@ -1198,6 +1214,7 @@ register LQIN {
1198 address 0x020 1214 address 0x020
1199 access_mode RW 1215 access_mode RW
1200 size 20 1216 size 20
1217 count 2
1201 modes M_DFF0, M_DFF1, M_SCSI 1218 modes M_DFF0, M_DFF1, M_SCSI
1202} 1219}
1203 1220
@@ -1229,6 +1246,7 @@ register LUNPTR {
1229 address 0x022 1246 address 0x022
1230 access_mode RW 1247 access_mode RW
1231 modes M_CFG 1248 modes M_CFG
1249 count 2
1232} 1250}
1233 1251
1234/* 1252/*
@@ -1259,6 +1277,7 @@ register CMDLENPTR {
1259 address 0x025 1277 address 0x025
1260 access_mode RW 1278 access_mode RW
1261 modes M_CFG 1279 modes M_CFG
1280 count 1
1262} 1281}
1263 1282
1264/* 1283/*
@@ -1270,6 +1289,7 @@ register ATTRPTR {
1270 address 0x026 1289 address 0x026
1271 access_mode RW 1290 access_mode RW
1272 modes M_CFG 1291 modes M_CFG
1292 count 1
1273} 1293}
1274 1294
1275/* 1295/*
@@ -1281,6 +1301,7 @@ register FLAGPTR {
1281 address 0x027 1301 address 0x027
1282 access_mode RW 1302 access_mode RW
1283 modes M_CFG 1303 modes M_CFG
1304 count 1
1284} 1305}
1285 1306
1286/* 1307/*
@@ -1291,6 +1312,7 @@ register CMDPTR {
1291 address 0x028 1312 address 0x028
1292 access_mode RW 1313 access_mode RW
1293 modes M_CFG 1314 modes M_CFG
1315 count 1
1294} 1316}
1295 1317
1296/* 1318/*
@@ -1301,6 +1323,7 @@ register QNEXTPTR {
1301 address 0x029 1323 address 0x029
1302 access_mode RW 1324 access_mode RW
1303 modes M_CFG 1325 modes M_CFG
1326 count 1
1304} 1327}
1305 1328
1306/* 1329/*
@@ -1323,6 +1346,7 @@ register ABRTBYTEPTR {
1323 address 0x02B 1346 address 0x02B
1324 access_mode RW 1347 access_mode RW
1325 modes M_CFG 1348 modes M_CFG
1349 count 1
1326} 1350}
1327 1351
1328/* 1352/*
@@ -1333,6 +1357,7 @@ register ABRTBITPTR {
1333 address 0x02C 1357 address 0x02C
1334 access_mode RW 1358 access_mode RW
1335 modes M_CFG 1359 modes M_CFG
1360 count 1
1336} 1361}
1337 1362
1338/* 1363/*
@@ -1370,6 +1395,7 @@ register LUNLEN {
1370 address 0x030 1395 address 0x030
1371 access_mode RW 1396 access_mode RW
1372 modes M_CFG 1397 modes M_CFG
1398 count 2
1373 mask ILUNLEN 0x0F 1399 mask ILUNLEN 0x0F
1374 mask TLUNLEN 0xF0 1400 mask TLUNLEN 0xF0
1375} 1401}
@@ -1383,6 +1409,7 @@ register CDBLIMIT {
1383 address 0x031 1409 address 0x031
1384 access_mode RW 1410 access_mode RW
1385 modes M_CFG 1411 modes M_CFG
1412 count 1
1386} 1413}
1387 1414
1388/* 1415/*
@@ -1394,6 +1421,7 @@ register MAXCMD {
1394 address 0x032 1421 address 0x032
1395 access_mode RW 1422 access_mode RW
1396 modes M_CFG 1423 modes M_CFG
1424 count 9
1397} 1425}
1398 1426
1399/* 1427/*
@@ -1458,6 +1486,7 @@ register LQCTL1 {
1458 address 0x038 1486 address 0x038
1459 access_mode RW 1487 access_mode RW
1460 modes M_DFF0, M_DFF1, M_SCSI 1488 modes M_DFF0, M_DFF1, M_SCSI
1489 count 2
1461 field PCI2PCI 0x04 1490 field PCI2PCI 0x04
1462 field SINGLECMD 0x02 1491 field SINGLECMD 0x02
1463 field ABORTPENDING 0x01 1492 field ABORTPENDING 0x01
@@ -1470,6 +1499,7 @@ register LQCTL2 {
1470 address 0x039 1499 address 0x039
1471 access_mode RW 1500 access_mode RW
1472 modes M_DFF0, M_DFF1, M_SCSI 1501 modes M_DFF0, M_DFF1, M_SCSI
1502 count 5
1473 field LQIRETRY 0x80 1503 field LQIRETRY 0x80
1474 field LQICONTINUE 0x40 1504 field LQICONTINUE 0x40
1475 field LQITOIDLE 0x20 1505 field LQITOIDLE 0x20
@@ -1528,6 +1558,7 @@ register SCSISEQ1 {
1528 address 0x03B 1558 address 0x03B
1529 access_mode RW 1559 access_mode RW
1530 modes M_DFF0, M_DFF1, M_SCSI 1560 modes M_DFF0, M_DFF1, M_SCSI
1561 count 8
1531 field MANUALCTL 0x40 1562 field MANUALCTL 0x40
1532 field ENSELI 0x20 1563 field ENSELI 0x20
1533 field ENRSELI 0x10 1564 field ENRSELI 0x10
@@ -1667,6 +1698,9 @@ register SCSISIGO {
1667 } 1698 }
1668} 1699}
1669 1700
1701/*
1702 * SCSI Control Signal In
1703 */
1670register SCSISIGI { 1704register SCSISIGI {
1671 address 0x041 1705 address 0x041
1672 access_mode RO 1706 access_mode RO
@@ -1703,6 +1737,7 @@ register MULTARGID {
1703 access_mode RW 1737 access_mode RW
1704 modes M_CFG 1738 modes M_CFG
1705 size 2 1739 size 2
1740 count 2
1706} 1741}
1707 1742
1708/* 1743/*
@@ -1758,6 +1793,7 @@ register TARGIDIN {
1758 address 0x048 1793 address 0x048
1759 access_mode RO 1794 access_mode RO
1760 modes M_DFF0, M_DFF1, M_SCSI 1795 modes M_DFF0, M_DFF1, M_SCSI
1796 count 2
1761 field CLKOUT 0x80 1797 field CLKOUT 0x80
1762 field TARGID 0x0F 1798 field TARGID 0x0F
1763} 1799}
@@ -1798,6 +1834,7 @@ register OPTIONMODE {
1798 address 0x04A 1834 address 0x04A
1799 access_mode RW 1835 access_mode RW
1800 modes M_CFG 1836 modes M_CFG
1837 count 4
1801 field BIOSCANCTL 0x80 1838 field BIOSCANCTL 0x80
1802 field AUTOACKEN 0x40 1839 field AUTOACKEN 0x40
1803 field BIASCANCTL 0x20 1840 field BIASCANCTL 0x20
@@ -1850,6 +1887,7 @@ register SIMODE0 {
1850 address 0x04B 1887 address 0x04B
1851 access_mode RW 1888 access_mode RW
1852 modes M_CFG 1889 modes M_CFG
1890 count 8
1853 field ENSELDO 0x40 1891 field ENSELDO 0x40
1854 field ENSELDI 0x20 1892 field ENSELDI 0x20
1855 field ENSELINGO 0x10 1893 field ENSELINGO 0x10
@@ -1945,6 +1983,7 @@ register PERRDIAG {
1945 address 0x04E 1983 address 0x04E
1946 access_mode RO 1984 access_mode RO
1947 modes M_DFF0, M_DFF1, M_SCSI 1985 modes M_DFF0, M_DFF1, M_SCSI
1986 count 3
1948 field HIZERO 0x80 1987 field HIZERO 0x80
1949 field HIPERR 0x40 1988 field HIPERR 0x40
1950 field PREVPHASE 0x20 1989 field PREVPHASE 0x20
@@ -1962,6 +2001,7 @@ register LQISTATE {
1962 address 0x04E 2001 address 0x04E
1963 access_mode RO 2002 access_mode RO
1964 modes M_CFG 2003 modes M_CFG
2004 count 6
1965} 2005}
1966 2006
1967/* 2007/*
@@ -1971,6 +2011,7 @@ register SOFFCNT {
1971 address 0x04F 2011 address 0x04F
1972 access_mode RO 2012 access_mode RO
1973 modes M_DFF0, M_DFF1, M_SCSI 2013 modes M_DFF0, M_DFF1, M_SCSI
2014 count 1
1974} 2015}
1975 2016
1976/* 2017/*
@@ -1980,6 +2021,7 @@ register LQOSTATE {
1980 address 0x04F 2021 address 0x04F
1981 access_mode RO 2022 access_mode RO
1982 modes M_CFG 2023 modes M_CFG
2024 count 2
1983} 2025}
1984 2026
1985/* 2027/*
@@ -1989,6 +2031,7 @@ register LQISTAT0 {
1989 address 0x050 2031 address 0x050
1990 access_mode RO 2032 access_mode RO
1991 modes M_DFF0, M_DFF1, M_SCSI 2033 modes M_DFF0, M_DFF1, M_SCSI
2034 count 2
1992 field LQIATNQAS 0x20 2035 field LQIATNQAS 0x20
1993 field LQICRCT1 0x10 2036 field LQICRCT1 0x10
1994 field LQICRCT2 0x08 2037 field LQICRCT2 0x08
@@ -2004,6 +2047,7 @@ register CLRLQIINT0 {
2004 address 0x050 2047 address 0x050
2005 access_mode WO 2048 access_mode WO
2006 modes M_DFF0, M_DFF1, M_SCSI 2049 modes M_DFF0, M_DFF1, M_SCSI
2050 count 1
2007 field CLRLQIATNQAS 0x20 2051 field CLRLQIATNQAS 0x20
2008 field CLRLQICRCT1 0x10 2052 field CLRLQICRCT1 0x10
2009 field CLRLQICRCT2 0x08 2053 field CLRLQICRCT2 0x08
@@ -2019,6 +2063,7 @@ register LQIMODE0 {
2019 address 0x050 2063 address 0x050
2020 access_mode RW 2064 access_mode RW
2021 modes M_CFG 2065 modes M_CFG
2066 count 3
2022 field ENLQIATNQASK 0x20 2067 field ENLQIATNQASK 0x20
2023 field ENLQICRCT1 0x10 2068 field ENLQICRCT1 0x10
2024 field ENLQICRCT2 0x08 2069 field ENLQICRCT2 0x08
@@ -2034,6 +2079,7 @@ register LQISTAT1 {
2034 address 0x051 2079 address 0x051
2035 access_mode RO 2080 access_mode RO
2036 modes M_DFF0, M_DFF1, M_SCSI 2081 modes M_DFF0, M_DFF1, M_SCSI
2082 count 3
2037 field LQIPHASE_LQ 0x80 2083 field LQIPHASE_LQ 0x80
2038 field LQIPHASE_NLQ 0x40 2084 field LQIPHASE_NLQ 0x40
2039 field LQIABORT 0x20 2085 field LQIABORT 0x20
@@ -2051,6 +2097,7 @@ register CLRLQIINT1 {
2051 address 0x051 2097 address 0x051
2052 access_mode WO 2098 access_mode WO
2053 modes M_DFF0, M_DFF1, M_SCSI 2099 modes M_DFF0, M_DFF1, M_SCSI
2100 count 4
2054 field CLRLQIPHASE_LQ 0x80 2101 field CLRLQIPHASE_LQ 0x80
2055 field CLRLQIPHASE_NLQ 0x40 2102 field CLRLQIPHASE_NLQ 0x40
2056 field CLRLIQABORT 0x20 2103 field CLRLIQABORT 0x20
@@ -2068,6 +2115,7 @@ register LQIMODE1 {
2068 address 0x051 2115 address 0x051
2069 access_mode RW 2116 access_mode RW
2070 modes M_CFG 2117 modes M_CFG
2118 count 4
2071 field ENLQIPHASE_LQ 0x80 /* LQIPHASE1 */ 2119 field ENLQIPHASE_LQ 0x80 /* LQIPHASE1 */
2072 field ENLQIPHASE_NLQ 0x40 /* LQIPHASE2 */ 2120 field ENLQIPHASE_NLQ 0x40 /* LQIPHASE2 */
2073 field ENLIQABORT 0x20 2121 field ENLIQABORT 0x20
@@ -2102,6 +2150,7 @@ register SSTAT3 {
2102 address 0x053 2150 address 0x053
2103 access_mode RO 2151 access_mode RO
2104 modes M_DFF0, M_DFF1, M_SCSI 2152 modes M_DFF0, M_DFF1, M_SCSI
2153 count 3
2105 field NTRAMPERR 0x02 2154 field NTRAMPERR 0x02
2106 field OSRAMPERR 0x01 2155 field OSRAMPERR 0x01
2107} 2156}
@@ -2113,6 +2162,7 @@ register CLRSINT3 {
2113 address 0x053 2162 address 0x053
2114 access_mode WO 2163 access_mode WO
2115 modes M_DFF0, M_DFF1, M_SCSI 2164 modes M_DFF0, M_DFF1, M_SCSI
2165 count 3
2116 field CLRNTRAMPERR 0x02 2166 field CLRNTRAMPERR 0x02
2117 field CLROSRAMPERR 0x01 2167 field CLROSRAMPERR 0x01
2118} 2168}
@@ -2124,6 +2174,7 @@ register SIMODE3 {
2124 address 0x053 2174 address 0x053
2125 access_mode RW 2175 access_mode RW
2126 modes M_CFG 2176 modes M_CFG
2177 count 4
2127 field ENNTRAMPERR 0x02 2178 field ENNTRAMPERR 0x02
2128 field ENOSRAMPERR 0x01 2179 field ENOSRAMPERR 0x01
2129} 2180}
@@ -2135,6 +2186,7 @@ register LQOSTAT0 {
2135 address 0x054 2186 address 0x054
2136 access_mode RO 2187 access_mode RO
2137 modes M_DFF0, M_DFF1, M_SCSI 2188 modes M_DFF0, M_DFF1, M_SCSI
2189 count 2
2138 field LQOTARGSCBPERR 0x10 2190 field LQOTARGSCBPERR 0x10
2139 field LQOSTOPT2 0x08 2191 field LQOSTOPT2 0x08
2140 field LQOATNLQ 0x04 2192 field LQOATNLQ 0x04
@@ -2149,6 +2201,7 @@ register CLRLQOINT0 {
2149 address 0x054 2201 address 0x054
2150 access_mode WO 2202 access_mode WO
2151 modes M_DFF0, M_DFF1, M_SCSI 2203 modes M_DFF0, M_DFF1, M_SCSI
2204 count 3
2152 field CLRLQOTARGSCBPERR 0x10 2205 field CLRLQOTARGSCBPERR 0x10
2153 field CLRLQOSTOPT2 0x08 2206 field CLRLQOSTOPT2 0x08
2154 field CLRLQOATNLQ 0x04 2207 field CLRLQOATNLQ 0x04
@@ -2163,6 +2216,7 @@ register LQOMODE0 {
2163 address 0x054 2216 address 0x054
2164 access_mode RW 2217 access_mode RW
2165 modes M_CFG 2218 modes M_CFG
2219 count 4
2166 field ENLQOTARGSCBPERR 0x10 2220 field ENLQOTARGSCBPERR 0x10
2167 field ENLQOSTOPT2 0x08 2221 field ENLQOSTOPT2 0x08
2168 field ENLQOATNLQ 0x04 2222 field ENLQOATNLQ 0x04
@@ -2191,6 +2245,7 @@ register CLRLQOINT1 {
2191 address 0x055 2245 address 0x055
2192 access_mode WO 2246 access_mode WO
2193 modes M_DFF0, M_DFF1, M_SCSI 2247 modes M_DFF0, M_DFF1, M_SCSI
2248 count 7
2194 field CLRLQOINITSCBPERR 0x10 2249 field CLRLQOINITSCBPERR 0x10
2195 field CLRLQOSTOPI2 0x08 2250 field CLRLQOSTOPI2 0x08
2196 field CLRLQOBADQAS 0x04 2251 field CLRLQOBADQAS 0x04
@@ -2205,6 +2260,7 @@ register LQOMODE1 {
2205 address 0x055 2260 address 0x055
2206 access_mode RW 2261 access_mode RW
2207 modes M_CFG 2262 modes M_CFG
2263 count 4
2208 field ENLQOINITSCBPERR 0x10 2264 field ENLQOINITSCBPERR 0x10
2209 field ENLQOSTOPI2 0x08 2265 field ENLQOSTOPI2 0x08
2210 field ENLQOBADQAS 0x04 2266 field ENLQOBADQAS 0x04
@@ -2232,6 +2288,7 @@ register OS_SPACE_CNT {
2232 address 0x056 2288 address 0x056
2233 access_mode RO 2289 access_mode RO
2234 modes M_CFG 2290 modes M_CFG
2291 count 2
2235} 2292}
2236 2293
2237/* 2294/*
@@ -2286,13 +2343,19 @@ register NEXTSCB {
2286 modes M_SCSI 2343 modes M_SCSI
2287} 2344}
2288 2345
2289/* Rev B only. */ 2346/*
2347 * LQO SCSI Control
2348 * (Rev B only.)
2349 */
2290register LQOSCSCTL { 2350register LQOSCSCTL {
2291 address 0x05A 2351 address 0x05A
2292 access_mode RW 2352 access_mode RW
2293 size 1 2353 size 1
2294 modes M_CFG 2354 modes M_CFG
2355 count 1
2295 field LQOH2A_VERSION 0x80 2356 field LQOH2A_VERSION 0x80
2357 field LQOBUSETDLY 0x40
2358 field LQONOHOLDLACK 0x02
2296 field LQONOCHKOVER 0x01 2359 field LQONOCHKOVER 0x01
2297} 2360}
2298 2361
@@ -2459,6 +2522,7 @@ register NEGPERIOD {
2459 address 0x061 2522 address 0x061
2460 access_mode RW 2523 access_mode RW
2461 modes M_SCSI 2524 modes M_SCSI
2525 count 1
2462} 2526}
2463 2527
2464/* 2528/*
@@ -2478,6 +2542,7 @@ register NEGOFFSET {
2478 address 0x062 2542 address 0x062
2479 access_mode RW 2543 access_mode RW
2480 modes M_SCSI 2544 modes M_SCSI
2545 count 1
2481} 2546}
2482 2547
2483/* 2548/*
@@ -2487,6 +2552,7 @@ register NEGPPROPTS {
2487 address 0x063 2552 address 0x063
2488 access_mode RW 2553 access_mode RW
2489 modes M_SCSI 2554 modes M_SCSI
2555 count 1
2490 field PPROPT_PACE 0x08 2556 field PPROPT_PACE 0x08
2491 field PPROPT_QAS 0x04 2557 field PPROPT_QAS 0x04
2492 field PPROPT_DT 0x02 2558 field PPROPT_DT 0x02
@@ -2516,12 +2582,19 @@ register ANNEXCOL {
2516 address 0x065 2582 address 0x065
2517 access_mode RW 2583 access_mode RW
2518 modes M_SCSI 2584 modes M_SCSI
2585 count 7
2519} 2586}
2520 2587
2588/*
2589 * SCSI Check
2590 * (Rev. B only)
2591 */
2521register SCSCHKN { 2592register SCSCHKN {
2522 address 0x066 2593 address 0x066
2523 access_mode RW 2594 access_mode RW
2524 modes M_CFG 2595 modes M_CFG
2596 count 1
2597 field BIDICHKDIS 0x80
2525 field STSELSKIDDIS 0x40 2598 field STSELSKIDDIS 0x40
2526 field CURRFIFODEF 0x20 2599 field CURRFIFODEF 0x20
2527 field WIDERESEN 0x10 2600 field WIDERESEN 0x10
@@ -2561,6 +2634,7 @@ register ANNEXDAT {
2561 address 0x066 2634 address 0x066
2562 access_mode RW 2635 access_mode RW
2563 modes M_SCSI 2636 modes M_SCSI
2637 count 3
2564} 2638}
2565 2639
2566/* 2640/*
@@ -2596,6 +2670,7 @@ register TOWNID {
2596 address 0x069 2670 address 0x069
2597 access_mode RW 2671 access_mode RW
2598 modes M_SCSI 2672 modes M_SCSI
2673 count 2
2599} 2674}
2600 2675
2601/* 2676/*
@@ -2737,6 +2812,7 @@ register SCBAUTOPTR {
2737 address 0x0AB 2812 address 0x0AB
2738 access_mode RW 2813 access_mode RW
2739 modes M_CFG 2814 modes M_CFG
2815 count 1
2740 field AUSCBPTR_EN 0x80 2816 field AUSCBPTR_EN 0x80
2741 field SCBPTR_ADDR 0x38 2817 field SCBPTR_ADDR 0x38
2742 field SCBPTR_OFF 0x07 2818 field SCBPTR_OFF 0x07
@@ -2881,6 +2957,7 @@ register BRDDAT {
2881 address 0x0B8 2957 address 0x0B8
2882 access_mode RW 2958 access_mode RW
2883 modes M_SCSI 2959 modes M_SCSI
2960 count 2
2884} 2961}
2885 2962
2886/* 2963/*
@@ -2890,6 +2967,7 @@ register BRDCTL {
2890 address 0x0B9 2967 address 0x0B9
2891 access_mode RW 2968 access_mode RW
2892 modes M_SCSI 2969 modes M_SCSI
2970 count 7
2893 field FLXARBACK 0x80 2971 field FLXARBACK 0x80
2894 field FLXARBREQ 0x40 2972 field FLXARBREQ 0x40
2895 field BRDADDR 0x38 2973 field BRDADDR 0x38
@@ -2905,6 +2983,7 @@ register SEEADR {
2905 address 0x0BA 2983 address 0x0BA
2906 access_mode RW 2984 access_mode RW
2907 modes M_SCSI 2985 modes M_SCSI
2986 count 4
2908} 2987}
2909 2988
2910/* 2989/*
@@ -2915,6 +2994,7 @@ register SEEDAT {
2915 access_mode RW 2994 access_mode RW
2916 size 2 2995 size 2
2917 modes M_SCSI 2996 modes M_SCSI
2997 count 4
2918} 2998}
2919 2999
2920/* 3000/*
@@ -2924,6 +3004,7 @@ register SEESTAT {
2924 address 0x0BE 3004 address 0x0BE
2925 access_mode RO 3005 access_mode RO
2926 modes M_SCSI 3006 modes M_SCSI
3007 count 1
2927 field INIT_DONE 0x80 3008 field INIT_DONE 0x80
2928 field SEEOPCODE 0x70 3009 field SEEOPCODE 0x70
2929 field LDALTID_L 0x08 3010 field LDALTID_L 0x08
@@ -2939,6 +3020,7 @@ register SEECTL {
2939 address 0x0BE 3020 address 0x0BE
2940 access_mode RW 3021 access_mode RW
2941 modes M_SCSI 3022 modes M_SCSI
3023 count 4
2942 field SEEOPCODE 0x70 { 3024 field SEEOPCODE 0x70 {
2943 SEEOP_ERASE 0x70, 3025 SEEOP_ERASE 0x70,
2944 SEEOP_READ 0x60, 3026 SEEOP_READ 0x60,
@@ -3000,6 +3082,7 @@ register DSPDATACTL {
3000 address 0x0C1 3082 address 0x0C1
3001 access_mode RW 3083 access_mode RW
3002 modes M_CFG 3084 modes M_CFG
3085 count 3
3003 field BYPASSENAB 0x80 3086 field BYPASSENAB 0x80
3004 field DESQDIS 0x10 3087 field DESQDIS 0x10
3005 field RCVROFFSTDIS 0x04 3088 field RCVROFFSTDIS 0x04
@@ -3058,6 +3141,7 @@ register DSPSELECT {
3058 address 0x0C4 3141 address 0x0C4
3059 access_mode RW 3142 access_mode RW
3060 modes M_CFG 3143 modes M_CFG
3144 count 1
3061 field AUTOINCEN 0x80 3145 field AUTOINCEN 0x80
3062 field DSPSEL 0x1F 3146 field DSPSEL 0x1F
3063} 3147}
@@ -3071,6 +3155,7 @@ register WRTBIASCTL {
3071 address 0x0C5 3155 address 0x0C5
3072 access_mode WO 3156 access_mode WO
3073 modes M_CFG 3157 modes M_CFG
3158 count 3
3074 field AUTOXBCDIS 0x80 3159 field AUTOXBCDIS 0x80
3075 field XMITMANVAL 0x3F 3160 field XMITMANVAL 0x3F
3076} 3161}
@@ -3196,7 +3281,8 @@ register OVLYADDR {
3196 */ 3281 */
3197register SEQCTL0 { 3282register SEQCTL0 {
3198 address 0x0D6 3283 address 0x0D6
3199 access_mode RW 3284 access_mode RW
3285 count 11
3200 field PERRORDIS 0x80 3286 field PERRORDIS 0x80
3201 field PAUSEDIS 0x40 3287 field PAUSEDIS 0x40
3202 field FAILDIS 0x20 3288 field FAILDIS 0x20
@@ -3226,7 +3312,8 @@ register SEQCTL1 {
3226 */ 3312 */
3227register FLAGS { 3313register FLAGS {
3228 address 0x0D8 3314 address 0x0D8
3229 access_mode RO 3315 access_mode RO
3316 count 23
3230 field ZERO 0x02 3317 field ZERO 0x02
3231 field CARRY 0x01 3318 field CARRY 0x01
3232} 3319}
@@ -3255,7 +3342,8 @@ register SEQINTCTL {
3255 */ 3342 */
3256register SEQRAM { 3343register SEQRAM {
3257 address 0x0DA 3344 address 0x0DA
3258 access_mode RW 3345 access_mode RW
3346 count 2
3259} 3347}
3260 3348
3261/* 3349/*
@@ -3266,6 +3354,7 @@ register PRGMCNT {
3266 address 0x0DE 3354 address 0x0DE
3267 access_mode RW 3355 access_mode RW
3268 size 2 3356 size 2
3357 count 5
3269} 3358}
3270 3359
3271/* 3360/*
@@ -3273,7 +3362,7 @@ register PRGMCNT {
3273 */ 3362 */
3274register ACCUM { 3363register ACCUM {
3275 address 0x0E0 3364 address 0x0E0
3276 access_mode RW 3365 access_mode RW
3277 accumulator 3366 accumulator
3278} 3367}
3279 3368
@@ -3401,6 +3490,7 @@ register INTVEC1_ADDR {
3401 access_mode RW 3490 access_mode RW
3402 size 2 3491 size 2
3403 modes M_CFG 3492 modes M_CFG
3493 count 1
3404} 3494}
3405 3495
3406/* 3496/*
@@ -3412,6 +3502,7 @@ register CURADDR {
3412 access_mode RW 3502 access_mode RW
3413 size 2 3503 size 2
3414 modes M_SCSI 3504 modes M_SCSI
3505 count 2
3415} 3506}
3416 3507
3417/* 3508/*
@@ -3423,6 +3514,7 @@ register INTVEC2_ADDR {
3423 access_mode RW 3514 access_mode RW
3424 size 2 3515 size 2
3425 modes M_CFG 3516 modes M_CFG
3517 count 1
3426} 3518}
3427 3519
3428/* 3520/*
@@ -3579,6 +3671,7 @@ scratch_ram {
3579 /* Parameters for DMA Logic */ 3671 /* Parameters for DMA Logic */
3580 DMAPARAMS { 3672 DMAPARAMS {
3581 size 1 3673 size 1
3674 count 8
3582 field PRELOADEN 0x80 3675 field PRELOADEN 0x80
3583 field WIDEODD 0x40 3676 field WIDEODD 0x40
3584 field SCSIEN 0x20 3677 field SCSIEN 0x20
@@ -3648,9 +3741,11 @@ scratch_ram {
3648 */ 3741 */
3649 KERNEL_TQINPOS { 3742 KERNEL_TQINPOS {
3650 size 1 3743 size 1
3744 count 1
3651 } 3745 }
3652 TQINPOS { 3746 TQINPOS {
3653 size 1 3747 size 1
3748 count 8
3654 } 3749 }
3655 /* 3750 /*
3656 * Base address of our shared data with the kernel driver in host 3751 * Base address of our shared data with the kernel driver in host
@@ -3681,6 +3776,7 @@ scratch_ram {
3681 } 3776 }
3682 ARG_2 { 3777 ARG_2 {
3683 size 1 3778 size 1
3779 count 1
3684 alias RETURN_2 3780 alias RETURN_2
3685 } 3781 }
3686 3782
@@ -3698,6 +3794,7 @@ scratch_ram {
3698 */ 3794 */
3699 SCSISEQ_TEMPLATE { 3795 SCSISEQ_TEMPLATE {
3700 size 1 3796 size 1
3797 count 7
3701 field MANUALCTL 0x40 3798 field MANUALCTL 0x40
3702 field ENSELI 0x20 3799 field ENSELI 0x20
3703 field ENRSELI 0x10 3800 field ENRSELI 0x10
@@ -3711,6 +3808,7 @@ scratch_ram {
3711 */ 3808 */
3712 INITIATOR_TAG { 3809 INITIATOR_TAG {
3713 size 1 3810 size 1
3811 count 1
3714 } 3812 }
3715 3813
3716 SEQ_FLAGS2 { 3814 SEQ_FLAGS2 {
@@ -3777,6 +3875,7 @@ scratch_ram {
3777 */ 3875 */
3778 CMDSIZE_TABLE { 3876 CMDSIZE_TABLE {
3779 size 8 3877 size 8
3878 count 8
3780 } 3879 }
3781 /* 3880 /*
3782 * When an SCB with the MK_MESSAGE flag is 3881 * When an SCB with the MK_MESSAGE flag is
@@ -3803,8 +3902,8 @@ scratch_ram {
3803/************************* Hardware SCB Definition ****************************/ 3902/************************* Hardware SCB Definition ****************************/
3804scb { 3903scb {
3805 address 0x180 3904 address 0x180
3806 size 64 3905 size 64
3807 modes 0, 1, 2, 3 3906 modes 0, 1, 2, 3
3808 SCB_RESIDUAL_DATACNT { 3907 SCB_RESIDUAL_DATACNT {
3809 size 4 3908 size 4
3810 alias SCB_CDB_STORE 3909 alias SCB_CDB_STORE
diff --git a/drivers/scsi/aic7xxx/aic7xxx.reg b/drivers/scsi/aic7xxx/aic7xxx.reg
index 2a103534df9f..0d2f763c3427 100644
--- a/drivers/scsi/aic7xxx/aic7xxx.reg
+++ b/drivers/scsi/aic7xxx/aic7xxx.reg
@@ -238,6 +238,7 @@ register SXFRCTL2 {
238register OPTIONMODE { 238register OPTIONMODE {
239 address 0x008 239 address 0x008
240 access_mode RW 240 access_mode RW
241 count 2
241 field AUTORATEEN 0x80 242 field AUTORATEEN 0x80
242 field AUTOACKEN 0x40 243 field AUTOACKEN 0x40
243 field ATNMGMNTEN 0x20 244 field ATNMGMNTEN 0x20
@@ -254,6 +255,7 @@ register TARGCRCCNT {
254 address 0x00a 255 address 0x00a
255 size 2 256 size 2
256 access_mode RW 257 access_mode RW
258 count 2
257} 259}
258 260
259/* 261/*
@@ -344,6 +346,7 @@ register SSTAT2 {
344register SSTAT3 { 346register SSTAT3 {
345 address 0x00e 347 address 0x00e
346 access_mode RO 348 access_mode RO
349 count 2
347 mask SCSICNT 0xf0 350 mask SCSICNT 0xf0
348 mask OFFCNT 0x0f 351 mask OFFCNT 0x0f
349 mask U2OFFCNT 0x7f 352 mask U2OFFCNT 0x7f
@@ -367,6 +370,7 @@ register SCSIID_ULTRA2 {
367register SIMODE0 { 370register SIMODE0 {
368 address 0x010 371 address 0x010
369 access_mode RW 372 access_mode RW
373 count 2
370 field ENSELDO 0x40 374 field ENSELDO 0x40
371 field ENSELDI 0x20 375 field ENSELDI 0x20
372 field ENSELINGO 0x10 376 field ENSELINGO 0x10
@@ -429,6 +433,7 @@ register SHADDR {
429register SELTIMER { 433register SELTIMER {
430 address 0x018 434 address 0x018
431 access_mode RW 435 access_mode RW
436 count 1
432 field STAGE6 0x20 437 field STAGE6 0x20
433 field STAGE5 0x10 438 field STAGE5 0x10
434 field STAGE4 0x08 439 field STAGE4 0x08
@@ -467,6 +472,7 @@ register TARGID {
467 address 0x01b 472 address 0x01b
468 size 2 473 size 2
469 access_mode RW 474 access_mode RW
475 count 14
470} 476}
471 477
472/* 478/*
@@ -480,6 +486,7 @@ register TARGID {
480register SPIOCAP { 486register SPIOCAP {
481 address 0x01b 487 address 0x01b
482 access_mode RW 488 access_mode RW
489 count 10
483 field SOFT1 0x80 490 field SOFT1 0x80
484 field SOFT0 0x40 491 field SOFT0 0x40
485 field SOFTCMDEN 0x20 492 field SOFTCMDEN 0x20
@@ -492,6 +499,7 @@ register SPIOCAP {
492 499
493register BRDCTL { 500register BRDCTL {
494 address 0x01d 501 address 0x01d
502 count 11
495 field BRDDAT7 0x80 503 field BRDDAT7 0x80
496 field BRDDAT6 0x40 504 field BRDDAT6 0x40
497 field BRDDAT5 0x20 505 field BRDDAT5 0x20
@@ -534,6 +542,7 @@ register BRDCTL {
534 */ 542 */
535register SEECTL { 543register SEECTL {
536 address 0x01e 544 address 0x01e
545 count 11
537 field EXTARBACK 0x80 546 field EXTARBACK 0x80
538 field EXTARBREQ 0x40 547 field EXTARBREQ 0x40
539 field SEEMS 0x20 548 field SEEMS 0x20
@@ -570,6 +579,7 @@ register SBLKCTL {
570register SEQCTL { 579register SEQCTL {
571 address 0x060 580 address 0x060
572 access_mode RW 581 access_mode RW
582 count 15
573 field PERRORDIS 0x80 583 field PERRORDIS 0x80
574 field PAUSEDIS 0x40 584 field PAUSEDIS 0x40
575 field FAILDIS 0x20 585 field FAILDIS 0x20
@@ -590,6 +600,7 @@ register SEQCTL {
590register SEQRAM { 600register SEQRAM {
591 address 0x061 601 address 0x061
592 access_mode RW 602 access_mode RW
603 count 2
593} 604}
594 605
595/* 606/*
@@ -604,6 +615,7 @@ register SEQADDR0 {
604register SEQADDR1 { 615register SEQADDR1 {
605 address 0x063 616 address 0x063
606 access_mode RW 617 access_mode RW
618 count 8
607 mask SEQADDR1_MASK 0x01 619 mask SEQADDR1_MASK 0x01
608} 620}
609 621
@@ -649,6 +661,7 @@ register NONE {
649register FLAGS { 661register FLAGS {
650 address 0x06b 662 address 0x06b
651 access_mode RO 663 access_mode RO
664 count 18
652 field ZERO 0x02 665 field ZERO 0x02
653 field CARRY 0x01 666 field CARRY 0x01
654} 667}
@@ -671,6 +684,7 @@ register FUNCTION1 {
671register STACK { 684register STACK {
672 address 0x06f 685 address 0x06f
673 access_mode RO 686 access_mode RO
687 count 5
674} 688}
675 689
676const STACK_SIZE 4 690const STACK_SIZE 4
@@ -692,6 +706,7 @@ register BCTL {
692register DSCOMMAND0 { 706register DSCOMMAND0 {
693 address 0x084 707 address 0x084
694 access_mode RW 708 access_mode RW
709 count 7
695 field CACHETHEN 0x80 /* Cache Threshold enable */ 710 field CACHETHEN 0x80 /* Cache Threshold enable */
696 field DPARCKEN 0x40 /* Data Parity Check Enable */ 711 field DPARCKEN 0x40 /* Data Parity Check Enable */
697 field MPARCKEN 0x20 /* Memory Parity Check Enable */ 712 field MPARCKEN 0x20 /* Memory Parity Check Enable */
@@ -717,6 +732,7 @@ register DSCOMMAND1 {
717register BUSTIME { 732register BUSTIME {
718 address 0x085 733 address 0x085
719 access_mode RW 734 access_mode RW
735 count 2
720 mask BOFF 0xf0 736 mask BOFF 0xf0
721 mask BON 0x0f 737 mask BON 0x0f
722} 738}
@@ -727,6 +743,7 @@ register BUSTIME {
727register BUSSPD { 743register BUSSPD {
728 address 0x086 744 address 0x086
729 access_mode RW 745 access_mode RW
746 count 2
730 mask DFTHRSH 0xc0 747 mask DFTHRSH 0xc0
731 mask STBOFF 0x38 748 mask STBOFF 0x38
732 mask STBON 0x07 749 mask STBON 0x07
@@ -737,6 +754,7 @@ register BUSSPD {
737/* aic7850/55/60/70/80/95 only */ 754/* aic7850/55/60/70/80/95 only */
738register DSPCISTATUS { 755register DSPCISTATUS {
739 address 0x086 756 address 0x086
757 count 4
740 mask DFTHRSH_100 0xc0 758 mask DFTHRSH_100 0xc0
741} 759}
742 760
@@ -758,6 +776,7 @@ const SEQ_MAILBOX_SHIFT 0
758register HCNTRL { 776register HCNTRL {
759 address 0x087 777 address 0x087
760 access_mode RW 778 access_mode RW
779 count 14
761 field POWRDN 0x40 780 field POWRDN 0x40
762 field SWINT 0x10 781 field SWINT 0x10
763 field IRQMS 0x08 782 field IRQMS 0x08
@@ -869,6 +888,7 @@ register INTSTAT {
869register ERROR { 888register ERROR {
870 address 0x092 889 address 0x092
871 access_mode RO 890 access_mode RO
891 count 26
872 field CIOPARERR 0x80 /* Ultra2 only */ 892 field CIOPARERR 0x80 /* Ultra2 only */
873 field PCIERRSTAT 0x40 /* PCI only */ 893 field PCIERRSTAT 0x40 /* PCI only */
874 field MPARERR 0x20 /* PCI only */ 894 field MPARERR 0x20 /* PCI only */
@@ -885,6 +905,7 @@ register ERROR {
885register CLRINT { 905register CLRINT {
886 address 0x092 906 address 0x092
887 access_mode WO 907 access_mode WO
908 count 24
888 field CLRPARERR 0x10 /* PCI only */ 909 field CLRPARERR 0x10 /* PCI only */
889 field CLRBRKADRINT 0x08 910 field CLRBRKADRINT 0x08
890 field CLRSCSIINT 0x04 911 field CLRSCSIINT 0x04
@@ -943,6 +964,7 @@ register DFDAT {
943register SCBCNT { 964register SCBCNT {
944 address 0x09a 965 address 0x09a
945 access_mode RW 966 access_mode RW
967 count 1
946 field SCBAUTO 0x80 968 field SCBAUTO 0x80
947 mask SCBCNT_MASK 0x1f 969 mask SCBCNT_MASK 0x1f
948} 970}
@@ -954,6 +976,7 @@ register SCBCNT {
954register QINFIFO { 976register QINFIFO {
955 address 0x09b 977 address 0x09b
956 access_mode RW 978 access_mode RW
979 count 12
957} 980}
958 981
959/* 982/*
@@ -972,11 +995,13 @@ register QINCNT {
972register QOUTFIFO { 995register QOUTFIFO {
973 address 0x09d 996 address 0x09d
974 access_mode WO 997 access_mode WO
998 count 7
975} 999}
976 1000
977register CRCCONTROL1 { 1001register CRCCONTROL1 {
978 address 0x09d 1002 address 0x09d
979 access_mode RW 1003 access_mode RW
1004 count 3
980 field CRCONSEEN 0x80 1005 field CRCONSEEN 0x80
981 field CRCVALCHKEN 0x40 1006 field CRCVALCHKEN 0x40
982 field CRCENDCHKEN 0x20 1007 field CRCENDCHKEN 0x20
@@ -1013,6 +1038,7 @@ register SCSIPHASE {
1013register SFUNCT { 1038register SFUNCT {
1014 address 0x09f 1039 address 0x09f
1015 access_mode RW 1040 access_mode RW
1041 count 4
1016 field ALT_MODE 0x80 1042 field ALT_MODE 0x80
1017} 1043}
1018 1044
@@ -1095,6 +1121,7 @@ scb {
1095 } 1121 }
1096 SCB_SCSIOFFSET { 1122 SCB_SCSIOFFSET {
1097 size 1 1123 size 1
1124 count 1
1098 } 1125 }
1099 SCB_NEXT { 1126 SCB_NEXT {
1100 size 1 1127 size 1
@@ -1118,6 +1145,7 @@ const SG_SIZEOF 0x08 /* sizeof(struct ahc_dma) */
1118register SEECTL_2840 { 1145register SEECTL_2840 {
1119 address 0x0c0 1146 address 0x0c0
1120 access_mode RW 1147 access_mode RW
1148 count 2
1121 field CS_2840 0x04 1149 field CS_2840 0x04
1122 field CK_2840 0x02 1150 field CK_2840 0x02
1123 field DO_2840 0x01 1151 field DO_2840 0x01
@@ -1126,6 +1154,7 @@ register SEECTL_2840 {
1126register STATUS_2840 { 1154register STATUS_2840 {
1127 address 0x0c1 1155 address 0x0c1
1128 access_mode RW 1156 access_mode RW
1157 count 4
1129 field EEPROM_TF 0x80 1158 field EEPROM_TF 0x80
1130 mask BIOS_SEL 0x60 1159 mask BIOS_SEL 0x60
1131 mask ADSEL 0x1e 1160 mask ADSEL 0x1e
@@ -1161,6 +1190,7 @@ register CCSGCTL {
1161 1190
1162register CCSCBCNT { 1191register CCSCBCNT {
1163 address 0xEF 1192 address 0xEF
1193 count 1
1164} 1194}
1165 1195
1166register CCSCBCTL { 1196register CCSCBCTL {
@@ -1187,6 +1217,7 @@ register CCSCBRAM {
1187register SCBBADDR { 1217register SCBBADDR {
1188 address 0x0F0 1218 address 0x0F0
1189 access_mode RW 1219 access_mode RW
1220 count 3
1190} 1221}
1191 1222
1192register CCSCBPTR { 1223register CCSCBPTR {
@@ -1195,6 +1226,7 @@ register CCSCBPTR {
1195 1226
1196register HNSCB_QOFF { 1227register HNSCB_QOFF {
1197 address 0x0F4 1228 address 0x0F4
1229 count 4
1198} 1230}
1199 1231
1200register SNSCB_QOFF { 1232register SNSCB_QOFF {
@@ -1234,6 +1266,7 @@ register DFF_THRSH {
1234 mask WR_DFTHRSH_85 0x50 1266 mask WR_DFTHRSH_85 0x50
1235 mask WR_DFTHRSH_90 0x60 1267 mask WR_DFTHRSH_90 0x60
1236 mask WR_DFTHRSH_MAX 0x70 1268 mask WR_DFTHRSH_MAX 0x70
1269 count 4
1237} 1270}
1238 1271
1239register SG_CACHE_PRE { 1272register SG_CACHE_PRE {
@@ -1287,6 +1320,7 @@ scratch_ram {
1287 ULTRA_ENB { 1320 ULTRA_ENB {
1288 alias CMDSIZE_TABLE 1321 alias CMDSIZE_TABLE
1289 size 2 1322 size 2
1323 count 2
1290 } 1324 }
1291 /* 1325 /*
1292 * Bit vector of targets that have disconnection disabled as set by 1326 * Bit vector of targets that have disconnection disabled as set by
@@ -1296,6 +1330,7 @@ scratch_ram {
1296 */ 1330 */
1297 DISC_DSB { 1331 DISC_DSB {
1298 size 2 1332 size 2
1333 count 6
1299 } 1334 }
1300 CMDSIZE_TABLE_TAIL { 1335 CMDSIZE_TABLE_TAIL {
1301 size 4 1336 size 4
@@ -1323,6 +1358,7 @@ scratch_ram {
1323 /* Parameters for DMA Logic */ 1358 /* Parameters for DMA Logic */
1324 DMAPARAMS { 1359 DMAPARAMS {
1325 size 1 1360 size 1
1361 count 12
1326 field PRELOADEN 0x80 1362 field PRELOADEN 0x80
1327 field WIDEODD 0x40 1363 field WIDEODD 0x40
1328 field SCSIEN 0x20 1364 field SCSIEN 0x20
@@ -1441,6 +1477,7 @@ scratch_ram {
1441 } 1477 }
1442 ARG_1 { 1478 ARG_1 {
1443 size 1 1479 size 1
1480 count 1
1444 mask SEND_MSG 0x80 1481 mask SEND_MSG 0x80
1445 mask SEND_SENSE 0x40 1482 mask SEND_SENSE 0x40
1446 mask SEND_REJ 0x20 1483 mask SEND_REJ 0x20
@@ -1495,6 +1532,7 @@ scratch_ram {
1495 size 1 1532 size 1
1496 field HA_274_EXTENDED_TRANS 0x01 1533 field HA_274_EXTENDED_TRANS 0x01
1497 alias INITIATOR_TAG 1534 alias INITIATOR_TAG
1535 count 1
1498 } 1536 }
1499 1537
1500 SEQ_FLAGS2 { 1538 SEQ_FLAGS2 {
@@ -1518,6 +1556,7 @@ scratch_ram {
1518 */ 1556 */
1519 SCSICONF { 1557 SCSICONF {
1520 size 1 1558 size 1
1559 count 12
1521 field TERM_ENB 0x80 1560 field TERM_ENB 0x80
1522 field RESET_SCSI 0x40 1561 field RESET_SCSI 0x40
1523 field ENSPCHK 0x20 1562 field ENSPCHK 0x20
@@ -1527,16 +1566,19 @@ scratch_ram {
1527 INTDEF { 1566 INTDEF {
1528 address 0x05c 1567 address 0x05c
1529 size 1 1568 size 1
1569 count 1
1530 field EDGE_TRIG 0x80 1570 field EDGE_TRIG 0x80
1531 mask VECTOR 0x0f 1571 mask VECTOR 0x0f
1532 } 1572 }
1533 HOSTCONF { 1573 HOSTCONF {
1534 address 0x05d 1574 address 0x05d
1535 size 1 1575 size 1
1576 count 1
1536 } 1577 }
1537 HA_274_BIOSCTRL { 1578 HA_274_BIOSCTRL {
1538 address 0x05f 1579 address 0x05f
1539 size 1 1580 size 1
1581 count 1
1540 mask BIOSMODE 0x30 1582 mask BIOSMODE 0x30
1541 mask BIOSDISABLED 0x30 1583 mask BIOSDISABLED 0x30
1542 field CHANNEL_B_PRIMARY 0x08 1584 field CHANNEL_B_PRIMARY 0x08
@@ -1552,6 +1594,7 @@ scratch_ram {
1552 */ 1594 */
1553 TARG_OFFSET { 1595 TARG_OFFSET {
1554 size 16 1596 size 16
1597 count 1
1555 } 1598 }
1556} 1599}
1557 1600
diff --git a/drivers/scsi/aic7xxx/aicasm/aicasm.c b/drivers/scsi/aic7xxx/aicasm/aicasm.c
index 924102720b14..e4a778720301 100644
--- a/drivers/scsi/aic7xxx/aicasm/aicasm.c
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm.c
@@ -362,7 +362,7 @@ output_code()
362" *\n" 362" *\n"
363"%s */\n", versions); 363"%s */\n", versions);
364 364
365 fprintf(ofile, "static uint8_t seqprog[] = {\n"); 365 fprintf(ofile, "static const uint8_t seqprog[] = {\n");
366 for (cur_instr = STAILQ_FIRST(&seq_program); 366 for (cur_instr = STAILQ_FIRST(&seq_program);
367 cur_instr != NULL; 367 cur_instr != NULL;
368 cur_instr = STAILQ_NEXT(cur_instr, links)) { 368 cur_instr = STAILQ_NEXT(cur_instr, links)) {
@@ -415,7 +415,7 @@ output_code()
415 } 415 }
416 416
417 fprintf(ofile, 417 fprintf(ofile,
418"static struct patch {\n" 418"static const struct patch {\n"
419" %spatch_func_t *patch_func;\n" 419" %spatch_func_t *patch_func;\n"
420" uint32_t begin :10,\n" 420" uint32_t begin :10,\n"
421" skip_instr :10,\n" 421" skip_instr :10,\n"
@@ -435,7 +435,7 @@ output_code()
435 fprintf(ofile, "\n};\n\n"); 435 fprintf(ofile, "\n};\n\n");
436 436
437 fprintf(ofile, 437 fprintf(ofile,
438"static struct cs {\n" 438"static const struct cs {\n"
439" uint16_t begin;\n" 439" uint16_t begin;\n"
440" uint16_t end;\n" 440" uint16_t end;\n"
441"} critical_sections[] = {\n"); 441"} critical_sections[] = {\n");
diff --git a/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y b/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
index e1079dd3cc28..81be6a261cc8 100644
--- a/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm_gram.y
@@ -143,6 +143,8 @@ void yyerror(const char *string);
143 143
144%token <value> T_ADDRESS 144%token <value> T_ADDRESS
145 145
146%token T_COUNT
147
146%token T_ACCESS_MODE 148%token T_ACCESS_MODE
147 149
148%token T_MODES 150%token T_MODES
@@ -353,6 +355,7 @@ reg_attribute_list:
353reg_attribute: 355reg_attribute:
354 reg_address 356 reg_address
355| size 357| size
358| count
356| access_mode 359| access_mode
357| modes 360| modes
358| field_defn 361| field_defn
@@ -393,6 +396,13 @@ size:
393 } 396 }
394; 397;
395 398
399count:
400 T_COUNT T_NUMBER
401 {
402 cur_symbol->count += $2;
403 }
404;
405
396access_mode: 406access_mode:
397 T_ACCESS_MODE T_MODE 407 T_ACCESS_MODE T_MODE
398 { 408 {
@@ -801,6 +811,7 @@ scratch_ram:
801 cur_symtype = SRAMLOC; 811 cur_symtype = SRAMLOC;
802 cur_symbol->type = SRAMLOC; 812 cur_symbol->type = SRAMLOC;
803 initialize_symbol(cur_symbol); 813 initialize_symbol(cur_symbol);
814 cur_symbol->count += 1;
804 } 815 }
805 reg_address 816 reg_address
806 { 817 {
@@ -832,6 +843,7 @@ scb:
832 initialize_symbol(cur_symbol); 843 initialize_symbol(cur_symbol);
833 /* 64 bytes of SCB space */ 844 /* 64 bytes of SCB space */
834 cur_symbol->info.rinfo->size = 64; 845 cur_symbol->info.rinfo->size = 64;
846 cur_symbol->count += 1;
835 } 847 }
836 reg_address 848 reg_address
837 { 849 {
diff --git a/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l b/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l
index 62b6c1bc82c6..2c7f02daf88d 100644
--- a/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm_scan.l
@@ -162,6 +162,7 @@ register { return T_REGISTER; }
162const { yylval.value = FALSE; return T_CONST; } 162const { yylval.value = FALSE; return T_CONST; }
163download { return T_DOWNLOAD; } 163download { return T_DOWNLOAD; }
164address { return T_ADDRESS; } 164address { return T_ADDRESS; }
165count { return T_COUNT; }
165access_mode { return T_ACCESS_MODE; } 166access_mode { return T_ACCESS_MODE; }
166modes { return T_MODES; } 167modes { return T_MODES; }
167RW|RO|WO { 168RW|RO|WO {
diff --git a/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c b/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c
index f1f448dff569..fcd357872b43 100644
--- a/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.c
@@ -77,6 +77,7 @@ symbol_create(char *name)
77 if (new_symbol->name == NULL) 77 if (new_symbol->name == NULL)
78 stop("Unable to strdup symbol name", EX_SOFTWARE); 78 stop("Unable to strdup symbol name", EX_SOFTWARE);
79 new_symbol->type = UNINITIALIZED; 79 new_symbol->type = UNINITIALIZED;
80 new_symbol->count = 1;
80 return (new_symbol); 81 return (new_symbol);
81} 82}
82 83
@@ -198,6 +199,12 @@ symtable_get(char *name)
198 } 199 }
199 } 200 }
200 memcpy(&stored_ptr, data.data, sizeof(stored_ptr)); 201 memcpy(&stored_ptr, data.data, sizeof(stored_ptr));
202 stored_ptr->count++;
203 data.data = &stored_ptr;
204 if (symtable->put(symtable, &key, &data, /*flags*/0) !=0) {
205 perror("Symtable put failed");
206 exit(EX_SOFTWARE);
207 }
201 return (stored_ptr); 208 return (stored_ptr);
202} 209}
203 210
@@ -256,7 +263,7 @@ symlist_add(symlist_t *symlist, symbol_t *symbol, int how)
256 && (curnode->symbol->info.finfo->value > 263 && (curnode->symbol->info.finfo->value >
257 newnode->symbol->info.finfo->value)))) 264 newnode->symbol->info.finfo->value))))
258 || (!field && (curnode->symbol->info.rinfo->address > 265 || (!field && (curnode->symbol->info.rinfo->address >
259 newnode->symbol->info.rinfo->address))) { 266 newnode->symbol->info.rinfo->address))) {
260 SLIST_INSERT_HEAD(symlist, newnode, links); 267 SLIST_INSERT_HEAD(symlist, newnode, links);
261 return; 268 return;
262 } 269 }
@@ -271,7 +278,7 @@ symlist_add(symlist_t *symlist, symbol_t *symbol, int how)
271 278
272 cursymbol = SLIST_NEXT(curnode, links)->symbol; 279 cursymbol = SLIST_NEXT(curnode, links)->symbol;
273 if ((field 280 if ((field
274 && (cursymbol->type > symbol->type 281 && (cursymbol->type > symbol->type
275 || (cursymbol->type == symbol->type 282 || (cursymbol->type == symbol->type
276 && (cursymbol->info.finfo->value > 283 && (cursymbol->info.finfo->value >
277 symbol->info.finfo->value)))) 284 symbol->info.finfo->value))))
@@ -351,7 +358,7 @@ aic_print_reg_dump_types(FILE *ofile)
351{ 358{
352 if (ofile == NULL) 359 if (ofile == NULL)
353 return; 360 return;
354 361
355 fprintf(ofile, 362 fprintf(ofile,
356"typedef int (%sreg_print_t)(u_int, u_int *, u_int);\n" 363"typedef int (%sreg_print_t)(u_int, u_int *, u_int);\n"
357"typedef struct %sreg_parse_entry {\n" 364"typedef struct %sreg_parse_entry {\n"
@@ -370,7 +377,7 @@ aic_print_reg_dump_start(FILE *dfile, symbol_node_t *regnode)
370 return; 377 return;
371 378
372 fprintf(dfile, 379 fprintf(dfile,
373"static %sreg_parse_entry_t %s_parse_table[] = {\n", 380"static const %sreg_parse_entry_t %s_parse_table[] = {\n",
374 prefix, 381 prefix,
375 regnode->symbol->name); 382 regnode->symbol->name);
376} 383}
@@ -385,7 +392,7 @@ aic_print_reg_dump_end(FILE *ofile, FILE *dfile,
385 lower_name = strdup(regnode->symbol->name); 392 lower_name = strdup(regnode->symbol->name);
386 if (lower_name == NULL) 393 if (lower_name == NULL)
387 stop("Unable to strdup symbol name", EX_SOFTWARE); 394 stop("Unable to strdup symbol name", EX_SOFTWARE);
388 395
389 for (letter = lower_name; *letter != '\0'; letter++) 396 for (letter = lower_name; *letter != '\0'; letter++)
390 *letter = tolower(*letter); 397 *letter = tolower(*letter);
391 398
@@ -472,6 +479,7 @@ symtable_dump(FILE *ofile, FILE *dfile)
472 DBT key; 479 DBT key;
473 DBT data; 480 DBT data;
474 int flag; 481 int flag;
482 int reg_count = 0, reg_used = 0;
475 u_int i; 483 u_int i;
476 484
477 if (symtable == NULL) 485 if (symtable == NULL)
@@ -541,6 +549,9 @@ symtable_dump(FILE *ofile, FILE *dfile)
541 int num_entries; 549 int num_entries;
542 550
543 num_entries = 0; 551 num_entries = 0;
552 reg_count++;
553 if (curnode->symbol->count == 1)
554 break;
544 fields = &curnode->symbol->info.rinfo->fields; 555 fields = &curnode->symbol->info.rinfo->fields;
545 SLIST_FOREACH(fieldnode, fields, links) { 556 SLIST_FOREACH(fieldnode, fields, links) {
546 if (num_entries == 0) 557 if (num_entries == 0)
@@ -553,11 +564,14 @@ symtable_dump(FILE *ofile, FILE *dfile)
553 } 564 }
554 aic_print_reg_dump_end(ofile, dfile, 565 aic_print_reg_dump_end(ofile, dfile,
555 curnode, num_entries); 566 curnode, num_entries);
567 reg_used++;
556 } 568 }
557 default: 569 default:
558 break; 570 break;
559 } 571 }
560 } 572 }
573 fprintf(stderr, "%s: %d of %d register definitions used\n", appname,
574 reg_used, reg_count);
561 575
562 /* Fold in the masks and bits */ 576 /* Fold in the masks and bits */
563 while (SLIST_FIRST(&masks) != NULL) { 577 while (SLIST_FIRST(&masks) != NULL) {
@@ -646,7 +660,6 @@ symtable_dump(FILE *ofile, FILE *dfile)
646 free(curnode); 660 free(curnode);
647 } 661 }
648 662
649
650 fprintf(ofile, "\n\n/* Downloaded Constant Definitions */\n"); 663 fprintf(ofile, "\n\n/* Downloaded Constant Definitions */\n");
651 664
652 for (i = 0; SLIST_FIRST(&download_constants) != NULL; i++) { 665 for (i = 0; SLIST_FIRST(&download_constants) != NULL; i++) {
diff --git a/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h b/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h
index afc22e8b4903..05190c1a2fb7 100644
--- a/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h
+++ b/drivers/scsi/aic7xxx/aicasm/aicasm_symbol.h
@@ -128,6 +128,7 @@ typedef struct expression_info {
128typedef struct symbol { 128typedef struct symbol {
129 char *name; 129 char *name;
130 symtype type; 130 symtype type;
131 int count;
131 union { 132 union {
132 struct reg_info *rinfo; 133 struct reg_info *rinfo;
133 struct field_info *finfo; 134 struct field_info *finfo;