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) {