702 #define DMAOBJ_PP_OFF dmao_ogj.pp_obj.pp_offset
703 #define ALO dma_lim->dlim_addr_lo
704 #define AHI dma_lim->dlim_addr_hi
705 #define OBJSIZE dmareq->dmar_object.dmao_size
706 #define ORIGVADDR dmareq->dmar_object.dmao_obj.virt_obj.v_addr
707 #define RED ((mp->dmai_rflags & DDI_DMA_REDZONE)? 1 : 0)
708 #define DIRECTION (mp->dmai_rflags & DDI_DMA_RDWR)
709
710 /*
711 * rootnex_map_fault:
712 *
713 * fault in mappings for requestors
714 */
715
716 /*ARGSUSED*/
717 static int
718 rootnex_map_fault(dev_info_t *dip, dev_info_t *rdip,
719 struct hat *hat, struct seg *seg, caddr_t addr,
720 struct devpage *dp, pfn_t pfn, uint_t prot, uint_t lock)
721 {
722 extern struct seg_ops segdev_ops;
723
724 DPRINTF(ROOTNEX_MAP_DEBUG, ("rootnex_map_fault: address <%p> "
725 "pfn <%lx>", (void *)addr, pfn));
726 DPRINTF(ROOTNEX_MAP_DEBUG, (" Seg <%s>\n",
727 seg->s_ops == &segdev_ops ? "segdev" :
728 seg == &kvseg ? "segkmem" : "NONE!"));
729
730 /*
731 * This is all terribly broken, but it is a start
732 *
733 * XXX Note that this test means that segdev_ops
734 * must be exported from seg_dev.c.
735 * XXX What about devices with their own segment drivers?
736 */
737 if (seg->s_ops == &segdev_ops) {
738 register struct segdev_data *sdp =
739 (struct segdev_data *)seg->s_data;
740
741 if (hat == NULL) {
742 /*
|
702 #define DMAOBJ_PP_OFF dmao_ogj.pp_obj.pp_offset
703 #define ALO dma_lim->dlim_addr_lo
704 #define AHI dma_lim->dlim_addr_hi
705 #define OBJSIZE dmareq->dmar_object.dmao_size
706 #define ORIGVADDR dmareq->dmar_object.dmao_obj.virt_obj.v_addr
707 #define RED ((mp->dmai_rflags & DDI_DMA_REDZONE)? 1 : 0)
708 #define DIRECTION (mp->dmai_rflags & DDI_DMA_RDWR)
709
710 /*
711 * rootnex_map_fault:
712 *
713 * fault in mappings for requestors
714 */
715
716 /*ARGSUSED*/
717 static int
718 rootnex_map_fault(dev_info_t *dip, dev_info_t *rdip,
719 struct hat *hat, struct seg *seg, caddr_t addr,
720 struct devpage *dp, pfn_t pfn, uint_t prot, uint_t lock)
721 {
722 extern const struct seg_ops segdev_ops;
723
724 DPRINTF(ROOTNEX_MAP_DEBUG, ("rootnex_map_fault: address <%p> "
725 "pfn <%lx>", (void *)addr, pfn));
726 DPRINTF(ROOTNEX_MAP_DEBUG, (" Seg <%s>\n",
727 seg->s_ops == &segdev_ops ? "segdev" :
728 seg == &kvseg ? "segkmem" : "NONE!"));
729
730 /*
731 * This is all terribly broken, but it is a start
732 *
733 * XXX Note that this test means that segdev_ops
734 * must be exported from seg_dev.c.
735 * XXX What about devices with their own segment drivers?
736 */
737 if (seg->s_ops == &segdev_ops) {
738 register struct segdev_data *sdp =
739 (struct segdev_data *)seg->s_data;
740
741 if (hat == NULL) {
742 /*
|