Lines Matching +full:short +full:- +full:descriptor

1 /*-
53 /* Hardware Descriptor Constants - Control Field */
62 /* Hardware Descriptor Constants - Status Field */
83 #define ISMT_MSTR_MDBA 0x100 /* Master Descriptor Base Address */
86 #define ISMT_MSTR_MDS 0x110 /* Master Descriptor Size */
108 /* Master Descriptor Size (MDS) bit definitions */
109 #define ISMT_MDS_MASK 0xff /* Master Descriptor Size mask (MDS) */
128 /* iSMT Hardware Descriptor */
182 val = bus_read_4(sc->mmio_res, ISMT_MSTR_MSTS); in ismt_intr()
183 ISMT_DEBUG(sc->pcidev, "%s MSTS=0x%x\n", __func__, val); in ismt_intr()
186 bus_write_4(sc->mmio_res, ISMT_MSTR_MSTS, val); in ismt_intr()
202 (uintptr_t *)&sc->bus_reserved, in ismt_callback()
211 KASSERT(sc->bus_reserved == curthread, in ismt_callback()
214 atomic_store_rel_ptr((uintptr_t *)&sc->bus_reserved, in ismt_callback()
231 KASSERT(sc->bus_reserved == curthread, in ismt_alloc_desc()
233 curthread, sc->bus_reserved)); in ismt_alloc_desc()
235 desc = &sc->desc[sc->head++]; in ismt_alloc_desc()
236 if (sc->head == ISMT_DESC_ENTRIES) in ismt_alloc_desc()
237 sc->head = 0; in ismt_alloc_desc()
250 desc->control |= ISMT_DESC_FAIR; in ismt_submit()
251 if (sc->using_msi) in ismt_submit()
252 desc->control |= ISMT_DESC_INT; in ismt_submit()
254 desc->tgtaddr_rw = ISMT_DESC_ADDR_RW(slave, is_read); in ismt_submit()
255 desc->dptr_low = (sc->dma_buffer_bus_addr & 0xFFFFFFFFLL); in ismt_submit()
256 desc->dptr_high = (sc->dma_buffer_bus_addr >> 32); in ismt_submit()
260 fmhp = sc->head << 16; in ismt_submit()
261 val = bus_read_4(sc->mmio_res, ISMT_MSTR_MCTRL); in ismt_submit()
264 bus_write_4(sc->mmio_res, ISMT_MSTR_MCTRL, val); in ismt_submit()
267 val = bus_read_4(sc->mmio_res, ISMT_MSTR_MCTRL); in ismt_submit()
269 bus_write_4(sc->mmio_res, ISMT_MSTR_MCTRL, val); in ismt_submit()
274 ISMT_DEBUG(sc->pcidev, "%s timeout\n", __func__); in ismt_submit()
278 ISMT_DEBUG(sc->pcidev, "%s status=0x%x\n", __func__, desc->status); in ismt_submit()
280 if (desc->status & ISMT_DESC_SCS) in ismt_submit()
283 if (desc->status & ISMT_DESC_NAK) in ismt_submit()
286 if (desc->status & ISMT_DESC_CRC) in ismt_submit()
289 if (desc->status & ISMT_DESC_COL) in ismt_submit()
292 if (desc->status & ISMT_DESC_LPR) in ismt_submit()
295 if (desc->status & (ISMT_DESC_DLTO | ISMT_DESC_CLTO)) in ismt_submit()
331 desc->control = ISMT_DESC_CWRL; in ismt_sendb()
332 desc->wr_len_cmd = byte; in ismt_sendb()
348 desc->rd_len = 1; in ismt_recvb()
355 *byte = sc->dma_buffer[0]; in ismt_recvb()
370 desc->wr_len_cmd = 2; in ismt_writeb()
371 sc->dma_buffer[0] = cmd; in ismt_writeb()
372 sc->dma_buffer[1] = byte; in ismt_writeb()
378 ismt_writew(device_t dev, u_char slave, char cmd, short word) in ismt_writew()
387 desc->wr_len_cmd = 3; in ismt_writew()
388 sc->dma_buffer[0] = cmd; in ismt_writew()
389 sc->dma_buffer[1] = word & 0xFF; in ismt_writew()
390 sc->dma_buffer[2] = word >> 8; in ismt_writew()
406 desc->control = ISMT_DESC_CWRL; in ismt_readb()
407 desc->wr_len_cmd = cmd; in ismt_readb()
408 desc->rd_len = 1; in ismt_readb()
415 *byte = sc->dma_buffer[0]; in ismt_readb()
421 ismt_readw(device_t dev, u_char slave, char cmd, short *word) in ismt_readw()
431 desc->control = ISMT_DESC_CWRL; in ismt_readw()
432 desc->wr_len_cmd = cmd; in ismt_readw()
433 desc->rd_len = 2; in ismt_readw()
440 *word = sc->dma_buffer[0] | (sc->dma_buffer[1] << 8); in ismt_readw()
446 ismt_pcall(device_t dev, u_char slave, char cmd, short sdata, short *rdata) in ismt_pcall()
456 desc->wr_len_cmd = 3; in ismt_pcall()
457 desc->rd_len = 2; in ismt_pcall()
458 sc->dma_buffer[0] = cmd; in ismt_pcall()
459 sc->dma_buffer[1] = sdata & 0xff; in ismt_pcall()
460 sc->dma_buffer[2] = sdata >> 8; in ismt_pcall()
467 *rdata = sc->dma_buffer[0] | (sc->dma_buffer[1] << 8); in ismt_pcall()
485 desc->control = ISMT_DESC_I2C; in ismt_bwrite()
486 desc->wr_len_cmd = count + 1; in ismt_bwrite()
487 sc->dma_buffer[0] = cmd; in ismt_bwrite()
488 memcpy(&sc->dma_buffer[1], buf, count); in ismt_bwrite()
507 desc->control = ISMT_DESC_I2C | ISMT_DESC_CWRL; in ismt_bread()
508 desc->wr_len_cmd = cmd; in ismt_bread()
509 desc->rd_len = *count; in ismt_bread()
516 memcpy(buf, sc->dma_buffer, desc->rxbytes); in ismt_bread()
517 *count = desc->rxbytes; in ismt_bread()
535 if (sc->intr_handle != NULL) { in ismt_detach()
536 bus_teardown_intr(dev, sc->intr_res, sc->intr_handle); in ismt_detach()
537 sc->intr_handle = NULL; in ismt_detach()
539 if (sc->intr_res != NULL) { in ismt_detach()
541 SYS_RES_IRQ, sc->intr_rid, sc->intr_res); in ismt_detach()
542 sc->intr_res = NULL; in ismt_detach()
544 if (sc->using_msi == 1) in ismt_detach()
547 if (sc->mmio_res != NULL) { in ismt_detach()
549 SYS_RES_MEMORY, sc->mmio_rid, sc->mmio_res); in ismt_detach()
550 sc->mmio_res = NULL; in ismt_detach()
553 bus_dmamap_unload(sc->desc_dma_tag, sc->desc_dma_map); in ismt_detach()
554 bus_dmamap_unload(sc->dma_buffer_dma_tag, sc->dma_buffer_dma_map); in ismt_detach()
556 bus_dmamem_free(sc->desc_dma_tag, sc->desc, in ismt_detach()
557 sc->desc_dma_map); in ismt_detach()
558 bus_dmamem_free(sc->dma_buffer_dma_tag, sc->dma_buffer, in ismt_detach()
559 sc->dma_buffer_dma_map); in ismt_detach()
561 bus_dma_tag_destroy(sc->desc_dma_tag); in ismt_detach()
562 bus_dma_tag_destroy(sc->dma_buffer_dma_tag); in ismt_detach()
586 sc->pcidev = dev; in ismt_attach()
589 if ((sc->smbdev = device_add_child(dev, "smbus", in ismt_attach()
596 sc->mmio_rid = PCIR_BAR(0); in ismt_attach()
597 sc->mmio_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in ismt_attach()
598 &sc->mmio_rid, RF_ACTIVE); in ismt_attach()
599 if (sc->mmio_res == NULL) { in ismt_attach()
605 sc->mmio_tag = rman_get_bustag(sc->mmio_res); in ismt_attach()
606 sc->mmio_handle = rman_get_bushandle(sc->mmio_res); in ismt_attach()
614 0, NULL, NULL, &sc->desc_dma_tag); in ismt_attach()
619 0, NULL, NULL, &sc->dma_buffer_dma_tag); in ismt_attach()
621 bus_dmamap_create(sc->desc_dma_tag, 0, in ismt_attach()
622 &sc->desc_dma_map); in ismt_attach()
623 bus_dmamap_create(sc->dma_buffer_dma_tag, 0, in ismt_attach()
624 &sc->dma_buffer_dma_map); in ismt_attach()
626 bus_dmamem_alloc(sc->desc_dma_tag, in ismt_attach()
627 (void **)&sc->desc, BUS_DMA_WAITOK, in ismt_attach()
628 &sc->desc_dma_map); in ismt_attach()
629 bus_dmamem_alloc(sc->dma_buffer_dma_tag, in ismt_attach()
630 (void **)&sc->dma_buffer, BUS_DMA_WAITOK, in ismt_attach()
631 &sc->dma_buffer_dma_map); in ismt_attach()
633 bus_dmamap_load(sc->desc_dma_tag, in ismt_attach()
634 sc->desc_dma_map, sc->desc, DESC_SIZE, in ismt_attach()
635 ismt_single_map, &sc->desc_bus_addr, 0); in ismt_attach()
636 bus_dmamap_load(sc->dma_buffer_dma_tag, in ismt_attach()
637 sc->dma_buffer_dma_map, sc->dma_buffer, DMA_BUFFER_SIZE, in ismt_attach()
638 ismt_single_map, &sc->dma_buffer_bus_addr, 0); in ismt_attach()
640 bus_write_4(sc->mmio_res, ISMT_MSTR_MDBA, in ismt_attach()
641 (sc->desc_bus_addr & 0xFFFFFFFFLL)); in ismt_attach()
642 bus_write_4(sc->mmio_res, ISMT_MSTR_MDBA + 4, in ismt_attach()
643 (sc->desc_bus_addr >> 32)); in ismt_attach()
646 bus_write_4(sc->mmio_res, ISMT_MSTR_MCTRL, ISMT_MCTRL_MEIE); in ismt_attach()
649 bus_write_4(sc->mmio_res, ISMT_MSTR_MSTS, 0); in ismt_attach()
651 /* initialize the Master Descriptor Size (MDS) */ in ismt_attach()
652 val = bus_read_4(sc->mmio_res, ISMT_MSTR_MDS); in ismt_attach()
654 val |= (ISMT_DESC_ENTRIES - 1); in ismt_attach()
655 bus_write_4(sc->mmio_res, ISMT_MSTR_MDS, val); in ismt_attach()
657 sc->using_msi = 1; in ismt_attach()
660 sc->using_msi = 0; in ismt_attach()
666 sc->using_msi = 0; in ismt_attach()
670 sc->intr_rid = 1; in ismt_attach()
671 sc->intr_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, in ismt_attach()
672 &sc->intr_rid, RF_ACTIVE); in ismt_attach()
674 if (sc->intr_res == NULL) { in ismt_attach()
675 sc->using_msi = 0; in ismt_attach()
680 if (sc->using_msi == 0) { in ismt_attach()
681 sc->intr_rid = 0; in ismt_attach()
682 sc->intr_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, in ismt_attach()
683 &sc->intr_rid, RF_SHAREABLE | RF_ACTIVE); in ismt_attach()
684 if (sc->intr_res == NULL) { in ismt_attach()
691 ISMT_DEBUG(dev, "using_msi = %d\n", sc->using_msi); in ismt_attach()
693 err = bus_setup_intr(dev, sc->intr_res, in ismt_attach()
695 &sc->intr_handle); in ismt_attach()