From owner-p4-projects@FreeBSD.ORG Sun Jun 7 22:39:17 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 078311065670; Sun, 7 Jun 2009 22:39:17 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB195106564A for ; Sun, 7 Jun 2009 22:39:16 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id A70DF8FC0A for ; Sun, 7 Jun 2009 22:39:16 +0000 (UTC) (envelope-from mav@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n57MdGTv003219 for ; Sun, 7 Jun 2009 22:39:16 GMT (envelope-from mav@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n57MdGC8003217 for perforce@freebsd.org; Sun, 7 Jun 2009 22:39:16 GMT (envelope-from mav@freebsd.org) Date: Sun, 7 Jun 2009 22:39:16 GMT Message-Id: <200906072239.n57MdGC8003217@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to mav@freebsd.org using -f From: Alexander Motin To: Perforce Change Reviews Cc: Subject: PERFORCE change 163745 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Jun 2009 22:39:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=163745 Change 163745 by mav@mav_mavbook on 2009/06/07 22:38:27 Massive cleaning. Affected files ... .. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#18 edit .. //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#6 edit Differences ... ==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.c#18 (text+ko) ==== @@ -82,8 +82,8 @@ static void ahci_start_fr(device_t dev); static void ahci_stop_fr(device_t dev); -static int ata_sata_connect(struct ahci_channel *ch); -static int ata_sata_phy_reset(device_t dev, int quick); +static int ahci_sata_connect(struct ahci_channel *ch); +static int ahci_sata_phy_reset(device_t dev, int quick); static void ahciaction(struct cam_sim *sim, union ccb *ccb); static void ahcipoll(struct cam_sim *sim); @@ -470,17 +470,6 @@ ahci_dmainit(dev); ahci_slotsalloc(dev); - - /* set the SATA resources */ - ch->r_io[ATA_SSTATUS].res = ch->r_mem; - ch->r_io[ATA_SSTATUS].offset = AHCI_P_SSTS; - ch->r_io[ATA_SERROR].res = ch->r_mem; - ch->r_io[ATA_SERROR].offset = AHCI_P_SERR; - ch->r_io[ATA_SCONTROL].res = ch->r_mem; - ch->r_io[ATA_SCONTROL].offset = AHCI_P_SCTL; - ch->r_io[ATA_SACTIVE].res = ch->r_mem; - ch->r_io[ATA_SACTIVE].offset = AHCI_P_SACT; - ahci_ch_resume(dev); mtx_lock(&ch->mtx); @@ -578,12 +567,12 @@ ahci_stop_fr(dev); ATA_OUTL(ch->r_mem, AHCI_P_CMD, 0); /* Allow everything, including partial and slumber modes. */ - ATA_IDX_OUTL(ch, ATA_SCONTROL, 0); + ATA_OUTL(ch->r_mem, AHCI_P_SCTL, 0); /* Request slumber mode transition and give some time to get there. */ ATA_OUTL(ch->r_mem, AHCI_P_CMD, AHCI_P_CMD_SLUMBER); DELAY(100); /* Disable PHY. */ - ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_DISABLE); + ATA_OUTL(ch->r_mem, AHCI_P_SCTL, ATA_SC_DET_DISABLE); return (0); } @@ -612,7 +601,6 @@ return (0); } - devclass_t ahcich_devclass; static device_method_t ahcich_methods[] = { DEVMETHOD(device_probe, ahci_ch_probe), @@ -629,17 +617,172 @@ }; DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahci_devclass, 0, 0); +struct ahci_dc_cb_args { + bus_addr_t maddr; + int error; +}; + +static void +ahci_dmainit(device_t dev) +{ + struct ahci_controller *ctlr = device_get_softc(device_get_parent(dev)); + struct ahci_channel *ch = device_get_softc(dev); + struct ahci_dc_cb_args dcba; + + ch->dma.alignment = 2; + ch->dma.boundary = 65536; + ch->dma.segsize = 65536; + ch->dma.max_iosize = AHCI_DMA_ENTRIES * PAGE_SIZE; + if (ATA_INL(ctlr->r_mem, AHCI_CAP) & AHCI_CAP_64BIT) + ch->dma.max_address = BUS_SPACE_MAXADDR; + else + ch->dma.max_address = BUS_SPACE_MAXADDR_32BIT; + + if (bus_dma_tag_create(bus_get_dma_tag(dev), PAGE_SIZE, 64 * 1024, + ch->dma.max_address, BUS_SPACE_MAXADDR, + NULL, NULL, MAXWSPCSZ, 1, MAXWSPCSZ, + 0, NULL, NULL, &ch->dma.work_tag)) + goto error; + + if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, 0, + &ch->dma.work_map)) + goto error; + + if (bus_dmamap_load(ch->dma.work_tag, ch->dma.work_map, ch->dma.work, + MAXWSPCSZ, ahci_dmasetupc_cb, &dcba, 0) || dcba.error) { + bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); + goto error; + } + ch->dma.work_bus = dcba.maddr; + + if (bus_dma_tag_create(bus_get_dma_tag(dev), + ch->dma.alignment, ch->dma.boundary, + ch->dma.max_address, BUS_SPACE_MAXADDR, + NULL, NULL, + ch->dma.max_iosize * AHCI_MAX_SLOTS, + AHCI_DMA_ENTRIES, ch->dma.segsize, + 0, NULL, NULL, &ch->dma.data_tag)) { + goto error; + } + return; + +error: + device_printf(dev, "WARNING - DMA initialization failed, disabling DMA\n"); + ahci_dmafini(dev); +} + +static void +ahci_dmasetupc_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int error) +{ + struct ahci_dc_cb_args *dcba = (struct ahci_dc_cb_args *)xsc; + + if (!(dcba->error = error)) + dcba->maddr = segs[0].ds_addr; +} + +static void +ahci_dmafini(device_t dev) +{ + struct ahci_channel *ch = device_get_softc(dev); + + if (ch->dma.data_tag) { + bus_dma_tag_destroy(ch->dma.data_tag); + ch->dma.data_tag = NULL; + } + if (ch->dma.work_bus) { + bus_dmamap_unload(ch->dma.work_tag, ch->dma.work_map); + bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); + ch->dma.work_bus = 0; + ch->dma.work_map = NULL; + ch->dma.work = NULL; + } + if (ch->dma.work_tag) { + bus_dma_tag_destroy(ch->dma.work_tag); + ch->dma.work_tag = NULL; + } +} + static void +ahci_slotsalloc(device_t dev) +{ + struct ahci_channel *ch = device_get_softc(dev); + struct ahci_dc_cb_args dcba; + int i; + + /* Alloc and setup command/dma slots */ + bzero(ch->slot, sizeof(ch->slot)); + for (i = 0; i < AHCI_MAX_SLOTS; i++) { + struct ahci_slot *slot = &ch->slot[i]; + + slot->dev = dev; + slot->slot = i; + slot->state = AHCI_SLOT_EMPTY; + slot->ccb = NULL; + callout_init_mtx(&slot->timeout, &ch->mtx, 0); + + if (bus_dma_tag_create(bus_get_dma_tag(dev), PAGE_SIZE, PAGE_SIZE, + ch->dma.max_address, BUS_SPACE_MAXADDR, + NULL, NULL, PAGE_SIZE, 1, PAGE_SIZE, + 0, NULL, NULL, &slot->dma.sg_tag)) { + device_printf(ch->dev, "FAILURE - create sg_tag\n"); + } + + if (bus_dmamem_alloc(slot->dma.sg_tag, (void **)&slot->dma.sg, + 0, &slot->dma.sg_map)) + device_printf(ch->dev, "FAILURE - alloc sg_map\n"); + + if (bus_dmamap_load(slot->dma.sg_tag, slot->dma.sg_map, slot->dma.sg, PAGE_SIZE, + ahci_dmasetupc_cb, &dcba, BUS_DMA_NOWAIT) || dcba.error) + device_printf(ch->dev, "FAILURE - load sg\n"); + slot->dma.sg_bus = dcba.maddr; + + if (bus_dmamap_create(ch->dma.data_tag, 0, &slot->dma.data_map)) + device_printf(ch->dev, "FAILURE - create data_map\n"); + } +} + +static void +ahci_slotsfree(device_t dev) +{ + struct ahci_channel *ch = device_get_softc(dev); + int i; + + /* Free all dma slots */ + for (i = 0; i < AHCI_MAX_SLOTS; i++) { + struct ahci_slot *slot = &ch->slot[i]; + + if (slot->dma.sg_tag) { + bus_dma_tag_destroy(slot->dma.sg_tag); + slot->dma.sg_tag = NULL; + } + if (slot->dma.sg_bus) { + bus_dmamap_unload(slot->dma.sg_tag, slot->dma.sg_map); + slot->dma.sg_bus = 0; + } + if (slot->dma.sg_map) { + bus_dmamem_free(slot->dma.sg_tag, slot->dma.sg, slot->dma.sg_map); + bus_dmamap_destroy(slot->dma.sg_tag, slot->dma.sg_map); + slot->dma.sg = NULL; + slot->dma.sg_map = NULL; + } + if (slot->dma.data_map) { + bus_dmamap_destroy(ch->dma.data_tag, slot->dma.data_map); + slot->dma.data_map = NULL; + } + } +} + +static void ahci_phy_check_events(device_t dev) { struct ahci_channel *ch = device_get_softc(dev); - u_int32_t error = ATA_IDX_INL(ch, ATA_SERROR); + u_int32_t error = ATA_INL(ch->r_mem, AHCI_P_SERR); /* Clear error bits/interrupt */ - ATA_IDX_OUTL(ch, ATA_SERROR, error); + ATA_OUTL(ch->r_mem, AHCI_P_SERR, error); /* If we have a connection event deal with it */ if ((error & ATA_SE_PHY_CHANGED) && (ch->pm_level == 0)) { - u_int32_t status = ATA_IDX_INL(ch, ATA_SSTATUS); + u_int32_t status = ATA_INL(ch->r_mem, AHCI_P_SSTS); if (((status & ATA_SS_DET_MASK) == ATA_SS_DET_PHY_ONLINE) && ((status & ATA_SS_SPD_MASK) != ATA_SS_SPD_NO_SPEED) && ((status & ATA_SS_IPM_MASK) == ATA_SS_IPM_ACTIVE)) { @@ -667,7 +810,7 @@ /* Read interrupt and command statuses. */ istatus = ATA_INL(ch->r_mem, AHCI_P_IS); cstatus = ATA_INL(ch->r_mem, AHCI_P_CI); - sstatus = ATA_IDX_INL(ch, ATA_SACTIVE); + sstatus = ATA_INL(ch->r_mem, AHCI_P_SACT); //device_printf(dev, "%s is %08x cs %08x ss %08x rslots %08x\n", __func__, istatus, cstatus, sstatus, ch->rslots); /* Clear interrupt(s) */ @@ -724,7 +867,7 @@ struct ahci_slot *slot; int tag; - tag = ch->lastslot; + tag = ch->lastslot; do { tag++; if (tag >= AHCI_MAX_SLOTS) @@ -843,7 +986,7 @@ if ((slot->ccb->ccb_h.func_code == XPT_ATA_IO) && (slot->ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA)) { ch->aslots |= (1 << slot->slot); - ATA_IDX_OUTL(ch, ATA_SACTIVE, 1 << slot->slot); + ATA_OUTL(ch->r_mem, AHCI_P_SACT, 1 << slot->slot); } /* Issue command to the controller. */ slot->state = AHCI_SLOT_RUNNING; @@ -854,14 +997,14 @@ ATA_INL(ch->r_mem, AHCI_P_CI), ATA_INL(ch->r_mem, AHCI_P_IS), ATA_INL(ch->r_mem, AHCI_P_TFD), - ATA_IDX_INL(ch, ATA_SERROR), + ATA_INL(ch->r_mem, AHCI_P_SERR), ATA_INL(ch->r_mem, AHCI_P_SIG)); DELAY(100000); printf("ci %08x is %08x tfd %08x serr %08x sign %08x\n", ATA_INL(ch->r_mem, AHCI_P_CI), ATA_INL(ch->r_mem, AHCI_P_IS), ATA_INL(ch->r_mem, AHCI_P_TFD), - ATA_IDX_INL(ch, ATA_SERROR), + ATA_INL(ch->r_mem, AHCI_P_SERR), ATA_INL(ch->r_mem, AHCI_P_SIG)); */ /* Device reset commands doesn't interrupt. Poll them. */ @@ -1002,7 +1145,7 @@ u_int32_t cmd; /* Clear SATA error register */ - ATA_IDX_OUTL(ch, ATA_SERROR, ATA_IDX_INL(ch, ATA_SERROR)); + ATA_OUTL(ch->r_mem, AHCI_P_SERR, ATA_INL(ch->r_mem, AHCI_P_SERR)); /* Clear any interrupts pending on this channel */ ATA_OUTL(ch->r_mem, AHCI_P_IS, ATA_INL(ch->r_mem, AHCI_P_IS)); /* Start operations on this channel */ @@ -1120,7 +1263,7 @@ *signature = 0xffffffff; ahci_stop(dev); /* Reset port */ - if (!ata_sata_phy_reset(dev, 0)) + if (!ahci_sata_phy_reset(dev, 0)) return (ENOENT); /* Wait for clearing busy status. */ if (ahci_wait_ready(dev, 10000)) { @@ -1170,176 +1313,6 @@ xpt_async(AC_BUS_RESET, ch->path, NULL); } -struct ahci_dc_cb_args { - bus_addr_t maddr; - int error; -}; - -static void -ahci_dmainit(device_t dev) -{ - struct ahci_controller *ctlr = device_get_softc(device_get_parent(dev)); - struct ahci_channel *ch = device_get_softc(dev); - struct ahci_dc_cb_args dcba; - - /* note start and stop are not used here */ - ch->dma.max_iosize = 8192 * DEV_BSIZE; - if (ATA_INL(ctlr->r_mem, AHCI_CAP) & AHCI_CAP_64BIT) - ch->dma.max_address = BUS_SPACE_MAXADDR; - - ch->dma.alignment = 2; - ch->dma.boundary = 65536; - ch->dma.segsize = 65536; - ch->dma.max_iosize = 128 * DEV_BSIZE; - ch->dma.max_address = BUS_SPACE_MAXADDR_32BIT; - - if (bus_dma_tag_create(bus_get_dma_tag(dev), ch->dma.alignment, 0, - ch->dma.max_address, BUS_SPACE_MAXADDR, - NULL, NULL, ch->dma.max_iosize, - ATA_DMA_ENTRIES, ch->dma.segsize, - 0, NULL, NULL, &ch->dma.dmatag)) - goto error; - - if (bus_dma_tag_create(ch->dma.dmatag, PAGE_SIZE, 64 * 1024, - ch->dma.max_address, BUS_SPACE_MAXADDR, - NULL, NULL, MAXWSPCSZ, 1, MAXWSPCSZ, - 0, NULL, NULL, &ch->dma.work_tag)) - goto error; - - if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, 0, - &ch->dma.work_map)) - goto error; - - if (bus_dmamap_load(ch->dma.work_tag, ch->dma.work_map, ch->dma.work, - MAXWSPCSZ, ahci_dmasetupc_cb, &dcba, 0) || - dcba.error) { - bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); - goto error; - } - ch->dma.work_bus = dcba.maddr; - - if (bus_dma_tag_create(ch->dma.dmatag, - ch->dma.alignment, ch->dma.boundary, - ch->dma.max_address, BUS_SPACE_MAXADDR, - NULL, NULL, - ch->dma.max_iosize * AHCI_MAX_SLOTS, - ATA_DMA_ENTRIES, ch->dma.segsize, - 0, NULL, NULL, &ch->dma.data_tag)) { - goto error; - } - - return; - -error: - device_printf(dev, "WARNING - DMA initialization failed, disabling DMA\n"); - ahci_dmafini(dev); -} - -static void -ahci_dmasetupc_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int error) -{ - struct ahci_dc_cb_args *dcba = (struct ahci_dc_cb_args *)xsc; - - if (!(dcba->error = error)) - dcba->maddr = segs[0].ds_addr; -} - -static void -ahci_dmafini(device_t dev) -{ - struct ahci_channel *ch = device_get_softc(dev); - - if (ch->dma.data_tag) { - bus_dma_tag_destroy(ch->dma.data_tag); - ch->dma.data_tag = NULL; - } - if (ch->dma.work_bus) { - bus_dmamap_unload(ch->dma.work_tag, ch->dma.work_map); - bus_dmamem_free(ch->dma.work_tag, ch->dma.work, ch->dma.work_map); - ch->dma.work_bus = 0; - ch->dma.work_map = NULL; - ch->dma.work = NULL; - } - if (ch->dma.work_tag) { - bus_dma_tag_destroy(ch->dma.work_tag); - ch->dma.work_tag = NULL; - } - if (ch->dma.dmatag) { - bus_dma_tag_destroy(ch->dma.dmatag); - ch->dma.dmatag = NULL; - } -} - -static void -ahci_slotsalloc(device_t dev) -{ - struct ahci_channel *ch = device_get_softc(dev); - struct ahci_dc_cb_args dcba; - int i; - - /* Alloc and setup command/dma slots */ - bzero(ch->slot, sizeof(ch->slot)); - for (i = 0; i < AHCI_MAX_SLOTS; i++) { - struct ahci_slot *slot = &ch->slot[i]; - - slot->dev = dev; - slot->slot = i; - slot->state = AHCI_SLOT_EMPTY; - slot->ccb = NULL; - callout_init_mtx(&slot->timeout, &ch->mtx, 0); - - if (bus_dma_tag_create(ch->dma.dmatag, PAGE_SIZE, PAGE_SIZE, - ch->dma.max_address, BUS_SPACE_MAXADDR, - NULL, NULL, PAGE_SIZE, 1, PAGE_SIZE, - 0, NULL, NULL, &slot->dma.sg_tag)) { - device_printf(ch->dev, "FAILURE - create sg_tag\n"); - } - - if (bus_dmamem_alloc(slot->dma.sg_tag, (void **)&slot->dma.sg, - 0, &slot->dma.sg_map)) - device_printf(ch->dev, "FAILURE - alloc sg_map\n"); - - if (bus_dmamap_load(slot->dma.sg_tag, slot->dma.sg_map, slot->dma.sg, PAGE_SIZE, - ahci_dmasetupc_cb, &dcba, BUS_DMA_NOWAIT) || dcba.error) - device_printf(ch->dev, "FAILURE - load sg\n"); - slot->dma.sg_bus = dcba.maddr; - - if (bus_dmamap_create(ch->dma.data_tag, 0, &slot->dma.data_map)) - device_printf(ch->dev, "FAILURE - create data_map\n"); - } -} - -static void -ahci_slotsfree(device_t dev) -{ - struct ahci_channel *ch = device_get_softc(dev); - int i; - - /* Free all dma slots */ - for (i = 0; i < AHCI_MAX_SLOTS; i++) { - struct ahci_slot *slot = &ch->slot[i]; - - if (slot->dma.sg_tag) { - bus_dma_tag_destroy(slot->dma.sg_tag); - slot->dma.sg_tag = NULL; - } - if (slot->dma.sg_bus) { - bus_dmamap_unload(slot->dma.sg_tag, slot->dma.sg_map); - slot->dma.sg_bus = 0; - } - if (slot->dma.sg_map) { - bus_dmamem_free(slot->dma.sg_tag, slot->dma.sg, slot->dma.sg_map); - bus_dmamap_destroy(slot->dma.sg_tag, slot->dma.sg_map); - slot->dma.sg = NULL; - slot->dma.sg_map = NULL; - } - if (slot->dma.data_map) { - bus_dmamap_destroy(ch->dma.data_tag, slot->dma.data_map); - slot->dma.data_map = NULL; - } - } -} - static int ahci_setup_fis(struct ahci_cmd_tab *ctp, union ccb *ccb, int tag) { @@ -1390,14 +1363,14 @@ } static int -ata_sata_connect(struct ahci_channel *ch) +ahci_sata_connect(struct ahci_channel *ch) { u_int32_t status; int timeout; /* Wait up to 1 second for "connect well" */ for (timeout = 0; timeout < 1000 ; timeout++) { - status = ATA_IDX_INL(ch, ATA_SSTATUS); + status = ATA_INL(ch->r_mem, AHCI_P_SSTS); if (((status & ATA_SS_DET_MASK) == ATA_SS_DET_PHY_ONLINE) && ((status & ATA_SS_SPD_MASK) != ATA_SS_SPD_NO_SPEED) && ((status & ATA_SS_IPM_MASK) == ATA_SS_IPM_ACTIVE)) @@ -1416,30 +1389,30 @@ timeout, status); } /* Clear SATA error register */ - ATA_IDX_OUTL(ch, ATA_SERROR, 0xffffffff); + ATA_OUTL(ch->r_mem, AHCI_P_SERR, 0xffffffff); return (1); } static int -ata_sata_phy_reset(device_t dev, int quick) +ahci_sata_phy_reset(device_t dev, int quick) { struct ahci_channel *ch = device_get_softc(dev); uint32_t val; if (quick) { - val = ATA_IDX_INL(ch, ATA_SCONTROL); + val = ATA_INL(ch->r_mem, AHCI_P_SCTL); if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) - return (ata_sata_connect(ch)); + return (ahci_sata_connect(ch)); } if (bootverbose) device_printf(dev, "hardware reset ...\n"); - ATA_IDX_OUTL(ch, ATA_SCONTROL, ATA_SC_DET_RESET); + ATA_OUTL(ch->r_mem, AHCI_P_SCTL, ATA_SC_DET_RESET); DELAY(50000); - ATA_IDX_OUTL(ch, ATA_SCONTROL, + ATA_OUTL(ch->r_mem, AHCI_P_SCTL, ATA_SC_DET_IDLE /*| ATA_SC_SPD_SPEED_GEN1*/ | ((ch->pm_level > 0) ? 0 : ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER)); - return (ata_sata_connect(ch)); + return (ahci_sata_connect(ch)); } static void @@ -1490,9 +1463,9 @@ cts->proto_specific.valid = 0; cts->xport_specific.sata.valid = CTS_SATA_VALID_SPEED; if (cts->type == CTS_TYPE_CURRENT_SETTINGS) - status = ATA_IDX_INL(ch, ATA_SSTATUS) & ATA_SS_SPD_MASK; + status = ATA_INL(ch->r_mem, AHCI_P_SSTS) & ATA_SS_SPD_MASK; else - status = ATA_IDX_INL(ch, ATA_SCONTROL) & ATA_SC_SPD_MASK; + status = ATA_INL(ch->r_mem, AHCI_P_SSTS) & ATA_SC_SPD_MASK; if (status & ATA_SS_SPD_GEN3) cts->xport_specific.sata.bitrate = 600000; else if (status & ATA_SS_SPD_GEN2) ==== //depot/projects/scottl-camlock/src/sys/dev/ahci/ahci.h#6 (text+ko) ==== @@ -76,10 +76,6 @@ #define ATA_S_BUSY 0x80 /* busy */ #define ATA_CONTROL 12 /* (W) control */ - -#define ATA_CTLOFFSET 0x206 /* control register offset */ -#define ATA_PCCARD_CTLOFFSET 0x0e /* do for PCCARD devices */ -#define ATA_PC98_CTLOFFSET 0x10c /* do for PC98 devices */ #define ATA_A_IDS 0x02 /* disable interrupts */ #define ATA_A_RESET 0x04 /* RESET controller */ #define ATA_A_4BIT 0x08 /* 4 head bits */ @@ -105,13 +101,6 @@ #define ATA_SS_IPM_PARTIAL 0x00000200 #define ATA_SS_IPM_SLUMBER 0x00000600 -#define ATA_SS_CONWELL_MASK \ - (ATA_SS_DET_MASK|ATA_SS_SPD_MASK|ATA_SS_IPM_MASK) -#define ATA_SS_CONWELL_GEN1 \ - (ATA_SS_DET_PHY_ONLINE|ATA_SS_SPD_GEN1|ATA_SS_IPM_ACTIVE) -#define ATA_SS_CONWELL_GEN2 \ - (ATA_SS_DET_PHY_ONLINE|ATA_SS_SPD_GEN2|ATA_SS_IPM_ACTIVE) - #define ATA_SERROR 14 #define ATA_SE_DATA_CORRECTED 0x00000001 #define ATA_SE_COMM_CORRECTED 0x00000002 @@ -286,63 +275,12 @@ u_int64_t cmd_table_phys; /* 128byte aligned */ } __packed; - /* DMA register defines */ #define ATA_DMA_ENTRIES 256 -#define ATA_DMA_EOT 0x80000000 - -#define ATA_BMCMD_PORT 17 -#define ATA_BMCMD_START_STOP 0x01 -#define ATA_BMCMD_WRITE_READ 0x08 - -#define ATA_BMDEVSPEC_0 18 -#define ATA_BMSTAT_PORT 19 -#define ATA_BMSTAT_ACTIVE 0x01 -#define ATA_BMSTAT_ERROR 0x02 -#define ATA_BMSTAT_INTERRUPT 0x04 -#define ATA_BMSTAT_MASK 0x07 -#define ATA_BMSTAT_DMA_MASTER 0x20 -#define ATA_BMSTAT_DMA_SLAVE 0x40 -#define ATA_BMSTAT_DMA_SIMPLEX 0x80 - -#define ATA_BMDEVSPEC_1 20 -#define ATA_BMDTP_PORT 21 -#define ATA_IDX_ADDR 22 -#define ATA_IDX_DATA 23 -#define ATA_MAX_RES 24 - /* misc defines */ -#define ATA_PRIMARY 0x1f0 -#define ATA_SECONDARY 0x170 -#define ATA_PC98_BANK 0x432 -#define ATA_IOSIZE 0x08 -#define ATA_PC98_IOSIZE 0x10 -#define ATA_CTLIOSIZE 0x01 -#define ATA_BMIOSIZE 0x08 -#define ATA_PC98_BANKIOSIZE 0x01 -#define ATA_IOADDR_RID 0 -#define ATA_CTLADDR_RID 1 -#define ATA_BMADDR_RID 0x20 -#define ATA_PC98_CTLADDR_RID 8 -#define ATA_PC98_BANKADDR_RID 9 #define ATA_IRQ_RID 0 -#define ATA_DEV(unit) ((unit > 0) ? 0x10 : 0) -#define ATA_CFA_MAGIC1 0x844A -#define ATA_CFA_MAGIC2 0x848A -#define ATA_CFA_MAGIC3 0x8400 -#define ATAPI_MAGIC_LSB 0x14 -#define ATAPI_MAGIC_MSB 0xeb -#define ATAPI_P_READ (ATA_S_DRQ | ATA_I_IN) -#define ATAPI_P_WRITE (ATA_S_DRQ) -#define ATAPI_P_CMDOUT (ATA_S_DRQ | ATA_I_CMD) -#define ATAPI_P_DONEDRQ (ATA_S_DRQ | ATA_I_CMD | ATA_I_IN) -#define ATAPI_P_DONE (ATA_I_CMD | ATA_I_IN) -#define ATAPI_P_ABORT 0 #define ATA_INTR_FLAGS (INTR_MPSAFE|INTR_TYPE_BIO|INTR_ENTROPY) -#define ATA_OP_CONTINUES 0 -#define ATA_OP_FINISHED 1 -#define ATA_MAX_28BIT_LBA 268435455UL /* structure for holding DMA Physical Region Descriptors (PRD) entries */ struct ata_dma_prdentry { @@ -385,12 +323,6 @@ #define ATA_DMA_ACTIVE 0x01 /* DMA transfer in progress */ }; -/* structure holding resources for an ATA channel */ -struct ata_resource { - struct resource *res; - int offset; -}; - #define ATA_MASTER 0x00 #define ATA_SLAVE 0x01 #define ATA_PM 0x0f @@ -419,7 +351,6 @@ struct ahci_channel { device_t dev; /* device handle */ int unit; /* physical channel */ - struct ata_resource r_io[ATA_MAX_RES];/* I/O resources */ struct resource *r_mem; struct resource *r_irq; /* interrupt of this channel */ void *ih; /* interrupt handle */ @@ -475,13 +406,6 @@ AHCI_ERR_TIMEOUT }; -/* disk bay/enclosure related */ -#define ATA_LED_OFF 0x00 -#define ATA_LED_RED 0x01 -#define ATA_LED_GREEN 0x02 -#define ATA_LED_ORANGE 0x03 -#define ATA_LED_MASK 0x03 - /* macros to hide busspace uglyness */ #define ATA_INB(res, offset) \ bus_read_1((res), (offset)) @@ -511,45 +435,3 @@ bus_write_multi_4((res), (offset), (addr), (count)) #define ATA_OUTSL_STRM(res, offset, addr, count) \ bus_write_multi_stream_4((res), (offset), (addr), (count)) - -#define ATA_IDX_INB(ch, idx) \ - ATA_INB(ch->r_io[idx].res, ch->r_io[idx].offset) - -#define ATA_IDX_INW(ch, idx) \ - ATA_INW(ch->r_io[idx].res, ch->r_io[idx].offset) - -#define ATA_IDX_INL(ch, idx) \ - ATA_INL(ch->r_io[idx].res, ch->r_io[idx].offset) - -#define ATA_IDX_INSW(ch, idx, addr, count) \ - ATA_INSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_INSW_STRM(ch, idx, addr, count) \ - ATA_INSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_INSL(ch, idx, addr, count) \ - ATA_INSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_INSL_STRM(ch, idx, addr, count) \ - ATA_INSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_OUTB(ch, idx, value) \ - ATA_OUTB(ch->r_io[idx].res, ch->r_io[idx].offset, value) - -#define ATA_IDX_OUTW(ch, idx, value) \ - ATA_OUTW(ch->r_io[idx].res, ch->r_io[idx].offset, value) - -#define ATA_IDX_OUTL(ch, idx, value) \ - ATA_OUTL(ch->r_io[idx].res, ch->r_io[idx].offset, value) - -#define ATA_IDX_OUTSW(ch, idx, addr, count) \ - ATA_OUTSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_OUTSW_STRM(ch, idx, addr, count) \ - ATA_OUTSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_OUTSL(ch, idx, addr, count) \ - ATA_OUTSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) - -#define ATA_IDX_OUTSL_STRM(ch, idx, addr, count) \ - ATA_OUTSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count)