Date: Tue, 25 Feb 1997 02:47:34 +0100 (MET) From: Wolfgang Helbig <helbig@MX.BA-Stuttgart.De> To: se@freebsd.org (Stefan Esser) Cc: hackers@freebsd.org Subject: Re: CMD640b workaround - final(?) version Message-ID: <199702250147.CAA00172@helbig.informatik.ba-stuttgart.de> In-Reply-To: <19970213004131.DV50639@x14.mi.uni-koeln.de> from Stefan Esser at "Feb 13, 97 00:41:31 am"
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Stefan,
I changed the code as you suggested. Now pci.c is clean again.
I added a new source pci/wdc_p.c. It is telling wd.c, which
pci-devices are probed, so wd.c can adapt to different devices.
Up to now only to CMD640b. If there are other IDE-PCI-Chips that
need special treatment, they can be easily detected in wd.c now and
treated accordingly.
I had to add a line in conf/files:
pci/wdc_p.c optional wdc device-driver
For review, I include the source of wdc_p.c.
If you think it's okay now, I will post a diff-file for wd.c,
so kern/2305 can be closed.
Here is the source of /sys/pci/wdc_p.c
/*
*
* Copyright (c) 1996 Wolfgang Helbig <helbig@ba-stuttgart.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice immediately at the beginning of the file, without modification,
* this list of conditions, and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Absolutely no warranty of function or purpose is made by the author.
* 4. Modifications may be freely made to this file if the above conditions
* are met.
*
* $ID$
*/
#include "pci.h"
#if NPCI > 0
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
#include <pci/pcireg.h>
#include <pci/pcivar.h>
#include "wdc.h"
extern char *wdc_pci __P((pcidi_t type));
static char* wdc_pci_probe __P((pcici_t tag, pcidi_t type));
static void wdc_pci_attach __P((pcici_t config_id, int unit));
static u_long wdc_pci_count = 0;
static struct pci_device wdc_pci_driver = {
"wdc",
wdc_pci_probe,
wdc_pci_attach,
&wdc_pci_count,
NULL
};
DATA_SET (pcidevice_set, wdc_pci_driver);
static char*
wdc_pci_probe (pcici_t tag, pcidi_t type)
{
char *name;
if (name = wdc_pci(type))
wdc_pci_count++;
return name;
}
static void
wdc_pci_attach(config_id, unit)
pcici_t config_id;
int unit;
{
return;
}
#endif /* NPCI > 0 */
TIA
Wolfgang
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702250147.CAA00172>
