Mercurial > illumos > git > illumos-gate
comparison usr/src/uts/i86pc/io/rootnex.c @ 19431:5599be23ae32
12183 Want new IPD 13 DMA Cookie APIs
Reviewed by: Alex Wilson <alex@uq.edu.au>
Reviewed by: Paul Winder <paul@winders.demon.co.uk>
Reviewed by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Garrett D'Amore <garrett@damore.org>
author | Robert Mustacchi <rm@fingolfin.org> |
---|---|
date | Wed, 18 Dec 2019 06:18:35 +0000 |
parents | 42631d95c231 |
children | 063a4bde1fa8 |
comparison
equal
deleted
inserted
replaced
19430:6e69910f8ded | 19431:5599be23ae32 |
---|---|
2184 */ | 2184 */ |
2185 *cookiep = dma->dp_cookies[0]; | 2185 *cookiep = dma->dp_cookies[0]; |
2186 *ccountp = sinfo->si_sgl_size; | 2186 *ccountp = sinfo->si_sgl_size; |
2187 hp->dmai_cookie++; | 2187 hp->dmai_cookie++; |
2188 hp->dmai_rflags &= ~DDI_DMA_PARTIAL; | 2188 hp->dmai_rflags &= ~DDI_DMA_PARTIAL; |
2189 hp->dmai_ncookies = *ccountp; | |
2190 hp->dmai_curcookie = 1; | |
2189 ROOTNEX_DPROF_INC(&rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS]); | 2191 ROOTNEX_DPROF_INC(&rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS]); |
2190 ROOTNEX_DPROBE4(rootnex__bind__fast, dev_info_t *, rdip, | 2192 ROOTNEX_DPROBE4(rootnex__bind__fast, dev_info_t *, rdip, |
2191 uint64_t, rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS], | 2193 uint64_t, rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS], |
2192 uint_t, dmao->dmao_size, uint_t, *ccountp); | 2194 uint_t, dmao->dmao_size, uint_t, *ccountp); |
2193 | 2195 |
2257 *ccountp = dma->dp_window[dma->dp_current_win].wd_cookie_cnt; | 2259 *ccountp = dma->dp_window[dma->dp_current_win].wd_cookie_cnt; |
2258 ASSERT(hp->dmai_nwin <= dma->dp_max_win); | 2260 ASSERT(hp->dmai_nwin <= dma->dp_max_win); |
2259 } | 2261 } |
2260 *cookiep = dma->dp_cookies[0]; | 2262 *cookiep = dma->dp_cookies[0]; |
2261 hp->dmai_cookie++; | 2263 hp->dmai_cookie++; |
2264 hp->dmai_ncookies = *ccountp; | |
2265 hp->dmai_curcookie = 1; | |
2262 | 2266 |
2263 ROOTNEX_DPROF_INC(&rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS]); | 2267 ROOTNEX_DPROF_INC(&rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS]); |
2264 ROOTNEX_DPROBE4(rootnex__bind__slow, dev_info_t *, rdip, uint64_t, | 2268 ROOTNEX_DPROBE4(rootnex__bind__slow, dev_info_t *, rdip, uint64_t, |
2265 rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS], uint_t, | 2269 rootnex_cnt[ROOTNEX_CNT_ACTIVE_BINDS], uint_t, |
2266 dmao->dmao_size, uint_t, *ccountp); | 2270 dmao->dmao_size, uint_t, *ccountp); |
2409 hp->dmai_cookie = window->wd_first_cookie; | 2413 hp->dmai_cookie = window->wd_first_cookie; |
2410 } else { | 2414 } else { |
2411 hp->dmai_cookie = dma->dp_cookies; | 2415 hp->dmai_cookie = dma->dp_cookies; |
2412 } | 2416 } |
2413 hp->dmai_cookie++; | 2417 hp->dmai_cookie++; |
2418 hp->dmai_curcookie = 1; | |
2414 } | 2419 } |
2415 | 2420 |
2416 /*ARGSUSED*/ | 2421 /*ARGSUSED*/ |
2417 static int | 2422 static int |
2418 rootnex_coredma_get_cookies(dev_info_t *dip, ddi_dma_handle_t handle, | 2423 rootnex_coredma_get_cookies(dev_info_t *dip, ddi_dma_handle_t handle, |
2669 hp->dmai_fault_notify = NULL; | 2674 hp->dmai_fault_notify = NULL; |
2670 hp->dmai_error.err_ena = 0; | 2675 hp->dmai_error.err_ena = 0; |
2671 hp->dmai_error.err_status = DDI_FM_OK; | 2676 hp->dmai_error.err_status = DDI_FM_OK; |
2672 hp->dmai_error.err_expected = DDI_FM_ERR_UNEXPECTED; | 2677 hp->dmai_error.err_expected = DDI_FM_ERR_UNEXPECTED; |
2673 hp->dmai_error.err_ontrap = NULL; | 2678 hp->dmai_error.err_ontrap = NULL; |
2679 | |
2680 /* Cookie tracking */ | |
2681 hp->dmai_ncookies = 0; | |
2682 hp->dmai_curcookie = 0; | |
2674 } | 2683 } |
2675 | 2684 |
2676 | 2685 |
2677 /* | 2686 /* |
2678 * rootnex_valid_alloc_parms() | 2687 * rootnex_valid_alloc_parms() |
4768 *offp = 0; | 4777 *offp = 0; |
4769 *lenp = dmao->dmao_size; | 4778 *lenp = dmao->dmao_size; |
4770 *ccountp = dma->dp_sglinfo.si_sgl_size; | 4779 *ccountp = dma->dp_sglinfo.si_sgl_size; |
4771 *cookiep = hp->dmai_cookie[0]; | 4780 *cookiep = hp->dmai_cookie[0]; |
4772 hp->dmai_cookie++; | 4781 hp->dmai_cookie++; |
4782 hp->dmai_ncookies = *ccountp; | |
4783 hp->dmai_curcookie = 1; | |
4773 return (DDI_SUCCESS); | 4784 return (DDI_SUCCESS); |
4774 } | 4785 } |
4775 | 4786 |
4776 /* sync the old window before moving on to the new one */ | 4787 /* sync the old window before moving on to the new one */ |
4777 window = &dma->dp_window[dma->dp_current_win]; | 4788 window = &dma->dp_window[dma->dp_current_win]; |
4863 hp->dmai_cookie = window->wd_first_cookie; | 4874 hp->dmai_cookie = window->wd_first_cookie; |
4864 *offp = window->wd_offset; | 4875 *offp = window->wd_offset; |
4865 *lenp = window->wd_size; | 4876 *lenp = window->wd_size; |
4866 *ccountp = window->wd_cookie_cnt; | 4877 *ccountp = window->wd_cookie_cnt; |
4867 *cookiep = hp->dmai_cookie[0]; | 4878 *cookiep = hp->dmai_cookie[0]; |
4879 hp->dmai_ncookies = *ccountp; | |
4880 hp->dmai_curcookie = 1; | |
4868 hp->dmai_cookie++; | 4881 hp->dmai_cookie++; |
4869 | 4882 |
4870 #if !defined(__amd64) | 4883 #if !defined(__amd64) |
4871 /* re-map copybuf if required for this window */ | 4884 /* re-map copybuf if required for this window */ |
4872 if (dma->dp_cb_remaping) { | 4885 if (dma->dp_cb_remaping) { |