Lines Matching +full:8 +full:- +full:ch

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 1998 - 2008 Søren Schmidt <sos@FreeBSD.org>
48 #include <dev/ata/ata-all.h>
49 #include <dev/ata/ata-pci.h>
86 { ATA_FRODO8, 0x00, SWKS_MIO, 8, ATA_SA150, "Frodo8" }, in ata_serverworks_probe()
92 if (!(ctlr->chip = ata_match_chip(dev, ids))) in ata_serverworks_probe()
96 ctlr->chipinit = ata_serverworks_chipinit; in ata_serverworks_probe()
103 struct ata_channel *ch = device_get_softc(dev); in ata_serverworks_status() local
109 if (!(ATA_INL(ctlr->r_res2, 0x1f80) & (1 << ch->unit))) in ata_serverworks_status()
113 * We need to do a 4-byte read on the status reg before the values in ata_serverworks_status()
117 ATA_IDX_INL(ch,ATA_STATUS); in ata_serverworks_status()
130 if (ctlr->chip->cfg1 == SWKS_MIO) { in ata_serverworks_chipinit()
131 ctlr->r_type2 = SYS_RES_MEMORY; in ata_serverworks_chipinit()
132 ctlr->r_rid2 = PCIR_BAR(5); in ata_serverworks_chipinit()
133 if (!(ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2, in ata_serverworks_chipinit()
134 &ctlr->r_rid2, RF_ACTIVE))) in ata_serverworks_chipinit()
137 ctlr->channels = ctlr->chip->cfg2; in ata_serverworks_chipinit()
138 ctlr->ch_attach = ata_serverworks_ch_attach; in ata_serverworks_chipinit()
139 ctlr->ch_detach = ata_serverworks_ch_detach; in ata_serverworks_chipinit()
140 ctlr->setmode = ata_sata_setmode; in ata_serverworks_chipinit()
141 ctlr->getrev = ata_sata_getrev; in ata_serverworks_chipinit()
142 ctlr->reset = ata_serverworks_sata_reset; in ata_serverworks_chipinit()
145 else if (ctlr->chip->cfg1 == SWKS_33) { in ata_serverworks_chipinit()
164 ((ctlr->chip->cfg1 == SWKS_100) ? 0x03 : 0x02), 1); in ata_serverworks_chipinit()
166 ctlr->setmode = ata_serverworks_setmode; in ata_serverworks_chipinit()
174 struct ata_channel *ch = device_get_softc(dev); in ata_serverworks_ch_attach() local
178 ch_offset = ch->unit * 0x100; in ata_serverworks_ch_attach()
181 ch->r_io[i].res = ctlr->r_res2; in ata_serverworks_ch_attach()
184 ch->r_io[ATA_DATA].offset = ch_offset + 0x00; in ata_serverworks_ch_attach()
185 ch->r_io[ATA_FEATURE].offset = ch_offset + 0x04; in ata_serverworks_ch_attach()
186 ch->r_io[ATA_COUNT].offset = ch_offset + 0x08; in ata_serverworks_ch_attach()
187 ch->r_io[ATA_SECTOR].offset = ch_offset + 0x0c; in ata_serverworks_ch_attach()
188 ch->r_io[ATA_CYL_LSB].offset = ch_offset + 0x10; in ata_serverworks_ch_attach()
189 ch->r_io[ATA_CYL_MSB].offset = ch_offset + 0x14; in ata_serverworks_ch_attach()
190 ch->r_io[ATA_DRIVE].offset = ch_offset + 0x18; in ata_serverworks_ch_attach()
191 ch->r_io[ATA_COMMAND].offset = ch_offset + 0x1c; in ata_serverworks_ch_attach()
192 ch->r_io[ATA_CONTROL].offset = ch_offset + 0x20; in ata_serverworks_ch_attach()
196 ch->r_io[ATA_BMCMD_PORT].offset = ch_offset + 0x30; in ata_serverworks_ch_attach()
197 ch->r_io[ATA_BMSTAT_PORT].offset = ch_offset + 0x32; in ata_serverworks_ch_attach()
198 ch->r_io[ATA_BMDTP_PORT].offset = ch_offset + 0x34; in ata_serverworks_ch_attach()
201 ch->r_io[ATA_SSTATUS].offset = ch_offset + 0x40; in ata_serverworks_ch_attach()
202 ch->r_io[ATA_SERROR].offset = ch_offset + 0x44; in ata_serverworks_ch_attach()
203 ch->r_io[ATA_SCONTROL].offset = ch_offset + 0x48; in ata_serverworks_ch_attach()
205 ch->flags |= ATA_NO_SLAVE | ATA_SATA | ATA_KNOWN_PRESENCE; in ata_serverworks_ch_attach()
207 ch->hw.tf_read = ata_serverworks_tf_read; in ata_serverworks_ch_attach()
208 ch->hw.tf_write = ata_serverworks_tf_write; in ata_serverworks_ch_attach()
210 if (ctlr->chip->chipid == ATA_K2) { in ata_serverworks_ch_attach()
216 ATA_OUTL(ctlr->r_res2, ch_offset + 0x80, in ata_serverworks_ch_attach()
217 ATA_INL(ctlr->r_res2, ch_offset + 0x80) & ~0x00040000); in ata_serverworks_ch_attach()
218 ATA_OUTL(ctlr->r_res2, ch_offset + 0x88, 0); in ata_serverworks_ch_attach()
228 ch->flags |= ATA_DMA_BEFORE_CMD; in ata_serverworks_ch_attach()
235 ch->hw.status = ata_serverworks_status; in ata_serverworks_ch_attach()
236 ch->flags |= ATA_STATUS_IS_LONG; in ata_serverworks_ch_attach()
240 ch->dma.max_iosize = 64 * DEV_BSIZE; in ata_serverworks_ch_attach()
258 struct ata_channel *ch = device_get_softc(request->parent); in ata_serverworks_tf_read() local
260 if (request->flags & ATA_R_48BIT) { in ata_serverworks_tf_read()
263 request->u.ata.count = ATA_IDX_INW(ch, ATA_COUNT); in ata_serverworks_tf_read()
264 temp = ATA_IDX_INW(ch, ATA_SECTOR); in ata_serverworks_tf_read()
265 request->u.ata.lba = (u_int64_t)(temp & 0x00ff) | in ata_serverworks_tf_read()
267 temp = ATA_IDX_INW(ch, ATA_CYL_LSB); in ata_serverworks_tf_read()
268 request->u.ata.lba |= ((u_int64_t)(temp & 0x00ff) << 8) | in ata_serverworks_tf_read()
270 temp = ATA_IDX_INW(ch, ATA_CYL_MSB); in ata_serverworks_tf_read()
271 request->u.ata.lba |= ((u_int64_t)(temp & 0x00ff) << 16) | in ata_serverworks_tf_read()
275 request->u.ata.count = ATA_IDX_INW(ch, ATA_COUNT) & 0x00ff; in ata_serverworks_tf_read()
276 request->u.ata.lba = (ATA_IDX_INW(ch, ATA_SECTOR) & 0x00ff) | in ata_serverworks_tf_read()
277 ((ATA_IDX_INW(ch, ATA_CYL_LSB) & 0x00ff) << 8) | in ata_serverworks_tf_read()
278 ((ATA_IDX_INW(ch, ATA_CYL_MSB) & 0x00ff) << 16) | in ata_serverworks_tf_read()
279 ((ATA_IDX_INW(ch, ATA_DRIVE) & 0xf) << 24); in ata_serverworks_tf_read()
286 struct ata_channel *ch = device_get_softc(request->parent); in ata_serverworks_tf_write() local
288 if (request->flags & ATA_R_48BIT) { in ata_serverworks_tf_write()
289 ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature); in ata_serverworks_tf_write()
290 ATA_IDX_OUTW(ch, ATA_COUNT, request->u.ata.count); in ata_serverworks_tf_write()
291 ATA_IDX_OUTW(ch, ATA_SECTOR, ((request->u.ata.lba >> 16) & 0xff00) | in ata_serverworks_tf_write()
292 (request->u.ata.lba & 0x00ff)); in ata_serverworks_tf_write()
293 ATA_IDX_OUTW(ch, ATA_CYL_LSB, ((request->u.ata.lba >> 24) & 0xff00) | in ata_serverworks_tf_write()
294 ((request->u.ata.lba >> 8) & 0x00ff)); in ata_serverworks_tf_write()
295 ATA_IDX_OUTW(ch, ATA_CYL_MSB, ((request->u.ata.lba >> 32) & 0xff00) | in ata_serverworks_tf_write()
296 ((request->u.ata.lba >> 16) & 0x00ff)); in ata_serverworks_tf_write()
297 ATA_IDX_OUTW(ch, ATA_DRIVE, ATA_D_LBA | ATA_DEV(request->unit)); in ata_serverworks_tf_write()
300 ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature); in ata_serverworks_tf_write()
301 ATA_IDX_OUTW(ch, ATA_COUNT, request->u.ata.count); in ata_serverworks_tf_write()
302 ATA_IDX_OUTW(ch, ATA_SECTOR, request->u.ata.lba); in ata_serverworks_tf_write()
303 ATA_IDX_OUTW(ch, ATA_CYL_LSB, request->u.ata.lba >> 8); in ata_serverworks_tf_write()
304 ATA_IDX_OUTW(ch, ATA_CYL_MSB, request->u.ata.lba >> 16); in ata_serverworks_tf_write()
305 ATA_IDX_OUTW(ch, ATA_DRIVE, in ata_serverworks_tf_write()
306 ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) | in ata_serverworks_tf_write()
307 ((request->u.ata.lba >> 24) & 0x0f)); in ata_serverworks_tf_write()
316 struct ata_channel *ch = device_get_softc(dev); in ata_serverworks_setmode() local
317 int devno = (ch->unit << 1) + target; in ata_serverworks_setmode()
323 mode = min(mode, ctlr->chip->max_dma); in ata_serverworks_setmode()
357 if (ctlr->chip->cfg1 != SWKS_33) { in ata_serverworks_setmode()
361 ((piomode - ATA_PIO0) << (devno<<2)),2); in ata_serverworks_setmode()
373 struct ata_channel *ch = device_get_softc(dev); in ata_serverworks_sata_reset() local
375 if (ata_sata_phy_reset(dev, -1, 0)) in ata_serverworks_sata_reset()
378 ch->devices = 0; in ata_serverworks_sata_reset()