From owner-svn-src-projects@FreeBSD.ORG Sun Jun 23 04:06:20 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 7A171CC3; Sun, 23 Jun 2013 04:06:20 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 6DEB51DE3; Sun, 23 Jun 2013 04:06:20 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5N46KD6090620; Sun, 23 Jun 2013 04:06:20 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r5N46KjE090617; Sun, 23 Jun 2013 04:06:20 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201306230406.r5N46KjE090617@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 23 Jun 2013 04:06:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r252105 - in projects/altix2/sys: kern sys X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Jun 2013 04:06:20 -0000 Author: marcel Date: Sun Jun 23 04:06:19 2013 New Revision: 252105 URL: http://svnweb.freebsd.org/changeset/base/252105 Log: Provide a bare-bones implementation for busdma_md_load_ccb(). Modified: projects/altix2/sys/kern/subr_busdma.c projects/altix2/sys/sys/busdma.h Modified: projects/altix2/sys/kern/subr_busdma.c ============================================================================== --- projects/altix2/sys/kern/subr_busdma.c Sun Jun 23 02:51:22 2013 (r252104) +++ projects/altix2/sys/kern/subr_busdma.c Sun Jun 23 04:06:19 2013 (r252105) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Marcel Moolenaar + * Copyright (c) 2012-2013 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include #include @@ -740,6 +742,70 @@ busdma_md_get_vaddr(struct busdma_md *md } int +busdma_md_load_ccb(busdma_md_t md, union ccb *ccb, busdma_callback_f cb, + void *arg, u_int flags) +{ + struct ccb_hdr *ccb_h; + void *buf; + size_t cnt, len; + int error; + + CTR6(KTR_BUSDMA, "%s: md=%p, ccb=%p, cb=%p, arg=%p, flags=%#x", + __func__, md, ccb, cb, arg, flags); + + flags = _busdma_flags(__func__, md->md_tag->dt_device, flags); + + if (md == NULL || ccb == NULL) + return (EINVAL); + + ccb_h = &ccb->ccb_h; + if ((ccb_h->flags & CAM_DIR_MASK) == CAM_DIR_NONE) { + (*cb)(arg, NULL, 0); + return (0); + } + + switch (ccb_h->func_code) { + case XPT_SCSI_IO: + buf = ccb->csio.data_ptr; + len = ccb->csio.dxfer_len; + cnt = ccb->csio.sglist_cnt; + break; + case XPT_CONT_TARGET_IO: + buf = ccb->ctio.data_ptr; + len = ccb->ctio.dxfer_len; + cnt = ccb->ctio.sglist_cnt; + break; + case XPT_ATA_IO: + buf = ccb->ataio.data_ptr; + len = ccb->ataio.dxfer_len; + cnt = 0; + break; + default: + return (EINVAL); + } + + switch (ccb_h->flags & CAM_DATA_MASK) { + case CAM_DATA_VADDR: + error = _busdma_md_load(md, NULL, (uintptr_t)buf, len); + break; + case CAM_DATA_PADDR: + case CAM_DATA_SG: + case CAM_DATA_SG_PADDR: + case CAM_DATA_BIO: + default: + panic(__func__); + } + + if (!error) { + error = _busdma_iommu_map(md->md_tag->dt_device, md); + if (error) + printf("_busdma_iommu_map: error=%d\n", error); + } + (*cb)(arg, md, error); + return (0); +} + +int busdma_md_load_linear(struct busdma_md *md, void *buf, size_t len, busdma_callback_f cb, void *arg, u_int flags) { Modified: projects/altix2/sys/sys/busdma.h ============================================================================== --- projects/altix2/sys/sys/busdma.h Sun Jun 23 02:51:22 2013 (r252104) +++ projects/altix2/sys/sys/busdma.h Sun Jun 23 04:06:19 2013 (r252105) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2012 Marcel Moolenaar + * Copyright (c) 2012-2013 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -98,6 +98,7 @@ bus_addr_t busdma_tag_get_maxaddr(busdma /* * */ +union ccb; struct mbuf; struct uio; @@ -105,14 +106,16 @@ typedef void (*busdma_callback_f)(void * int busdma_md_create(busdma_tag_t tag, u_int flags, busdma_md_t *md_p); int busdma_md_destroy(busdma_md_t md); +int busdma_md_load_ccb(busdma_md_t md, union ccb *ccb, busdma_callback_f cb, + void *arg, u_int flags); int busdma_md_load_linear(busdma_md_t md, void *buf, size_t size, busdma_callback_f cb, void *arg, u_int flags); int busdma_md_load_mbuf(busdma_md_t md, struct mbuf *mbuf, busdma_callback_f cb, void *arg, u_int flags); int busdma_md_load_phys(busdma_md_t md, vm_paddr_t buf, size_t size, busdma_callback_f cb, void *arg, u_int flags); -int busdma_md_load_uio(busdma_md_t md, struct uio *uio, - busdma_callback_f cb, void *arg, u_int flags); +int busdma_md_load_uio(busdma_md_t md, struct uio *uio, busdma_callback_f cb, + void *arg, u_int flags); int busdma_md_unload(busdma_md_t md); u_int busdma_md_get_flags(busdma_md_t md); u_int busdma_md_get_nsegs(busdma_md_t md);