summaryrefslogtreecommitdiffstats
path: root/sys/dev/sym
diff options
context:
space:
mode:
authorgroudier <groudier@FreeBSD.org>2000-01-28 20:11:32 +0000
committergroudier <groudier@FreeBSD.org>2000-01-28 20:11:32 +0000
commitba40b8cc8636906706e6072298c3b01f91561fd3 (patch)
treec1bfc02f024f178623f24472b44186e2b42800b0 /sys/dev/sym
parent73f095255dc27e4785f89078ae6e7ffa5e256eed (diff)
downloadFreeBSD-src-ba40b8cc8636906706e6072298c3b01f91561fd3.zip
FreeBSD-src-ba40b8cc8636906706e6072298c3b01f91561fd3.tar.gz
- Fix an issue that paniced the machine in data overrun
condition. - 1 line change that allows to balance chips between ncr and sym using pci compat option (not compiled by default in 4.0 but maintains the driver source 3.4 compatible).
Diffstat (limited to 'sys/dev/sym')
-rw-r--r--sys/dev/sym/sym_hipd.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c
index 726d26d..77cc99d 100644
--- a/sys/dev/sym/sym_hipd.c
+++ b/sys/dev/sym/sym_hipd.c
@@ -128,6 +128,9 @@ typedef u_int32_t u32;
#include <dev/sym/sym_conf.h>
#include <dev/sym/sym_defs.h>
+/* We want to know if the ncr has been configured */
+#include "ncr.h"
+
/*
* On x86 architecture, write buffers management does not
* reorder writes to memory. So, preventing compiler from
@@ -1562,9 +1565,9 @@ struct sym_scrh {
u32 msg_out [ 4];
u32 msg_out_done [ 4];
#ifdef SYM_CONF_BROKEN_U3EN_SUPPORT
- u32 no_data [ 36];
+ u32 no_data [ 38];
#else
- u32 no_data [ 28];
+ u32 no_data [ 30];
#endif
u32 abort_resel [ 16];
u32 resend_ident [ 4];
@@ -3045,6 +3048,8 @@ static struct sym_scrh scripth0 = {
offsetof (struct sym_ccb, xerr_status),
SCR_REG_REG (scratcha, SCR_OR, XE_EXTRA_DATA),
0,
+ SCR_STORE_REL (scratcha, 1),
+ offsetof (struct sym_ccb, xerr_status),
/*
* Count this byte.
* This will allow to return a positive
@@ -6833,7 +6838,7 @@ static int sym_evaluate_dp(hcb_p np, ccb_p cp, u32 scr, int *ofs)
*/
tmp = scr_to_cpu(cp->phys.goalp);
dp_sg = SYM_CONF_MAX_SG;
- if (dp_sg != tmp)
+ if (dp_scr != tmp)
dp_sg -= (tmp - 8 - (int)dp_scr) / (2*4);
dp_sgmin = SYM_CONF_MAX_SG - cp->segments;
@@ -9712,7 +9717,12 @@ sym_pci_probe(pcici_t pci_tag, pcidi_t type)
struct sym_pci_chip *chip;
chip = sym_find_pci_chip(pci_tag);
+#if NNCR > 0
+ /* Only claim chips we are allowed to take precedence over the ncr */
+ if (chip && !(chip->lp_probe_bit & SYM_SETUP_LP_PROBE_MAP))
+#else
if (chip)
+#endif
return chip->name;
return 0;
}
OpenPOWER on IntegriCloud