Date: Sat, 27 Dec 1997 00:45:23 +0100 (CET) From: ob@seicom.NET To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: kern/5382: APM funcionality for aic scsi-driver Message-ID: <199712262345.AAA05410@www.partner.de> Resent-Message-ID: <199712262350.PAA13845@hub.freebsd.org>
index | next in thread | raw e-mail
>Number: 5382
>Category: kern
>Synopsis: APM functionality for aic scsi-driver
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Class: support
>Submitter-Id: current-users
>Arrival-Date: Fri Dec 26 15:50:01 PST 1997
>Last-Modified:
>Originator: Oliver Breuninger
>Organization:
Seicom GmbH
>Release: FreeBSD 2.2.5-RELEASE i386
>Environment:
Aic APM driver support for e.g. Toshiba T2400 notebook with internal
Adaptec SCSI (aic6360/aha152x) controller.
>Description:
After resuming a suspended notebook the aic driver doesn't work any more.
>How-To-Repeat:
>Fix:
The SCSI devices should unmounted, while the notebook is in resume mode.
APM modifications:
--- aic6360.c.orig Wed Oct 30 23:38:39 1996
+++ aic6360.c Fri Dec 26 23:30:37 1997
@@ -2,4 +2,5 @@
* Copyright (c) 1994 Charles Hannum.
* Copyright (c) 1994 Jarle Greipsland
+ * Copyright (c) 1997 Oliver Breuninger (APM modification)
* All rights reserved.
*
@@ -61,4 +62,5 @@
#endif
+
/* Use doubleword transfers to/from SCSI chip. Note: This requires
* motherboard support. Basicly, some motherboard chipsets are able to
@@ -115,4 +117,5 @@
#include "opt_ddb.h"
#include "aic.h"
+#include "apm.h"
#include <sys/types.h>
@@ -130,4 +133,7 @@
#include <machine/clock.h>
+#if NAPM > 0
+#include <machine/apm_bios.h>
+#endif /* NAPM > 0 */
#include <i386/isa/isa_device.h>
@@ -590,4 +596,5 @@
#define AIC_HASNEXUS 0x05 /* Actively using the SCSI bus */
#define AIC_CLEANING 0x06
+#define AIC_SUSPEND 0x07 /* Suspend mode (APM) */
short flags;
#define AIC_DROP_MSGI 0x01 /* Discard all msgs (parity err detected) */
@@ -621,4 +628,9 @@
int *aicport; /* I/O port information */
#endif
+#if NAPM > 0
+ struct apmhook s_hook; /* reconfiguration support */
+ struct apmhook r_hook; /* reconfiguration support */
+#endif /* NAPM > 0 */
+
} *aicdata[NAIC];
@@ -649,4 +661,8 @@
static int aicprobe __P((struct isa_device *));
static int aicattach __P((struct isa_device *));
+#if NAPM > 0
+static int aic_suspend __P((struct aic_data *));
+static int aic_resume __P((struct aic_data *));
+#endif /* NAPM > 0 */
static void aic_minphys __P((struct buf *));
static u_int32_t aic_adapter_info __P((int));
@@ -759,4 +775,31 @@
}
+#if NAPM > 0
+static int
+aic_suspend(aic)
+ struct aic_data *aic;
+{
+ AIC_TRACE(("Suspend aic:\n"));
+ printf ("aic: suspend\n");
+ aic->state = AIC_SUSPEND;
+ return 0;
+}
+
+static int
+aic_resume(aic)
+ struct aic_data *aic;
+{
+ AIC_TRACE(("Resume aic:\n"));
+ printf ("aic: resume\n");
+ aic->state = 0;
+ aic_init(aic);
+/*
+ aic6360_reset(aic);
+ aic_scsi_reset(aic);
+*/
+ return 0;
+}
+#endif /* NAPM > 0 */
+
/* Do the real search-for-device.
* Prerequisite: aic->iobase should be set to the proper value
@@ -834,4 +877,17 @@
aic->sc_link.device = &aic_dev;
+#if NAPM > 0
+ aic->s_hook.ah_fun = aic_suspend;
+ aic->s_hook.ah_arg = (void *) aic;
+ aic->s_hook.ah_name = "Adaptec AHA1520/AIC6369";
+ aic->s_hook.ah_order = APM_MID_ORDER;
+ apm_hook_establish(APM_HOOK_SUSPEND, &aic->s_hook);
+ aic->r_hook.ah_fun = aic_resume;
+ aic->r_hook.ah_arg = (void *) aic;
+ aic->r_hook.ah_name = "Adaptec AHA1520/AIC6369";
+ aic->r_hook.ah_order = APM_MID_ORDER;
+ apm_hook_establish(APM_HOOK_RESUME, &aic->r_hook);
+#endif /* NAPM > 0 */
+
/*
* Prepare the scsibus_data area for the upperlevel
@@ -851,5 +907,4 @@
}
-
/* Initialize AIC6360 chip itself
* The following conditions should hold:
@@ -897,4 +952,5 @@
u_short iobase = aic->iobase;
+ AIC_TRACE(("aic_scsi_reset:\n"));
outb(SCSISEQ, SCSIRSTO);
DELAY(500);
@@ -915,4 +971,6 @@
int r;
+ AIC_TRACE(("aic_init:\n"));
+
/* Reset the SCSI-bus itself */
aic_scsi_reset(aic);
>Audit-Trail:
>Unformatted:
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712262345.AAA05410>
