From owner-freebsd-drivers@FreeBSD.ORG Mon Jun 19 12:27:56 2006 Return-Path: X-Original-To: freebsd-drivers@freebsd.org Delivered-To: freebsd-drivers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4D62116A47B for ; Mon, 19 Jun 2006 12:27:56 +0000 (UTC) (envelope-from Karsten.Brandt@sick.de) Received: from csmailwak.sick.de (ns.sick.de [62.180.123.243]) by mx1.FreeBSD.org (Postfix) with ESMTP id E078C43D53 for ; Mon, 19 Jun 2006 12:27:52 +0000 (GMT) (envelope-from Karsten.Brandt@sick.de) Received: from ntmai08.mai.de.internal (unverified) by csmailwak.sick.de (SICK Content Security) with ESMTP id for ; Mon, 19 Jun 2006 14:27:48 +0200 To: freebsd-drivers@freebsd.org MIME-Version: 1.0 X-Mailer: Lotus Notes Release 6.5.1 January 21, 2004 Message-ID: From: Karsten Brandt Date: Mon, 19 Jun 2006 14:24:38 +0200 X-MIMETrack: Serialize by Router on MAIMF01.mai.de.internal/SRV/SICK(Release 6.5.5|November 30, 2005) at 06/19/2006 02:24:38 PM, Serialize complete at 06/19/2006 02:24:38 PM Content-Type: text/plain; charset="US-ASCII" X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: ata CD driver X-BeenThere: freebsd-drivers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Writing device drivers for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jun 2006 12:27:56 -0000 Hello Andrey, thanks for your fast reply. I believe that I've found the related source in src/sys/dev/ata/ata-cbus.c static int ata_cbuschannel_banking(device_t dev, int flags) { struct ata_cbus_controller *ctlr = device_get_softc(device_get_parent(dev)); struct ata_channel *ch = device_get_softc(dev); int res; mtx_lock(&ctlr->bank_mtx); switch (flags) { case ATA_LF_LOCK: if (ctlr->locked_bank == -1) ctlr->locked_bank = ch->unit; if (ctlr->locked_bank == ch->unit) { ctlr->hardware_bank = ch->unit; ATA_OUTB(ctlr->bankio, 0, ch->unit); } else ctlr->restart_bank = ch->unit; break; case ATA_LF_UNLOCK: if (ctlr->locked_bank == ch->unit) { ctlr->locked_bank = -1; if (ctlr->restart_bank != -1) { if ((ch = ctlr->interrupt[ctlr->restart_bank].argument)) { ctlr->restart_bank = -1; mtx_unlock(&ctlr->bank_mtx); ata_start(ch->dev); return -1; } } } break; case ATA_LF_WHICH: break; } res = ctlr->locked_bank; mtx_unlock(&ctlr->bank_mtx); return res; } static device_method_t ata_cbuschannel_methods[] = { /* device interface */ DEVMETHOD(device_probe, ata_cbuschannel_probe), DEVMETHOD(device_attach, ata_attach), DEVMETHOD(device_detach, ata_detach), DEVMETHOD(device_suspend, ata_suspend), DEVMETHOD(device_resume, ata_resume), /* ATA methods */ DEVMETHOD(ata_locking, ata_cbuschannel_banking), { 0, 0 } }; Regards, Karsten