Lines Matching defs:win

84  * @win:		current window
96 struct msc_window *win;
278 static inline struct scatterlist *msc_win_base_sg(struct msc_window *win)
280 return win->sgt->sgl;
283 static inline struct msc_block_desc *msc_win_base(struct msc_window *win)
285 return sg_virt(msc_win_base_sg(win));
288 static inline dma_addr_t msc_win_base_dma(struct msc_window *win)
290 return sg_dma_address(msc_win_base_sg(win));
294 msc_win_base_pfn(struct msc_window *win)
296 return PFN_DOWN(msc_win_base_dma(win));
301 * @win: window
302 * Return: true if @win is the last window in MSC's multiblock buffer
304 static inline bool msc_is_last_win(struct msc_window *win)
306 return win->entry.next == &win->msc->win_list;
311 * @win: current window
315 static struct msc_window *msc_next_window(struct msc_window *win)
317 if (msc_is_last_win(win))
318 return list_first_entry(&win->msc->win_list, struct msc_window,
321 return list_next_entry(win, entry);
324 static size_t msc_win_total_sz(struct msc_window *win)
330 for_each_sg(win->sgt->sgl, sg, win->nr_segs, blk) {
334 return (size_t)win->nr_blocks << PAGE_SHIFT;
356 struct msc_window *win;
367 list_for_each_entry(win, &msc->win_list, entry) {
368 if (win->sgt == sgt)
372 if (nonempty && msc_block_is_empty(msc_win_base(win)))
376 return win;
393 struct msc_window *win;
398 win = msc_find_window(msc, msc_next_window(msc->cur_win)->sgt, true);
399 if (win)
400 return win;
407 * @win: window to look at
411 static struct scatterlist *msc_win_oldest_sg(struct msc_window *win)
415 struct msc_block_desc *bdesc = msc_win_base(win);
419 return msc_win_base_sg(win);
425 for_each_sg(win->sgt->sgl, sg, win->nr_segs, blk) {
432 return msc_win_base_sg(win);
485 iter->start_block = msc_win_oldest_sg(iter->win);
508 iter->win = iter->start_win;
518 iter->win = msc_next_window(iter->win);
521 if (iter->win == iter->start_win) {
550 iter->block = msc_win_base_sg(iter->win);
656 struct msc_window *win;
659 list_for_each_entry(win, &msc->win_list, entry) {
664 for_each_sg(win->sgt->sgl, sg, win->nr_segs, blk) {
709 static int msc_win_set_lockout(struct msc_window *win,
717 if (!win->msc->mbuf)
720 spin_lock_irqsave(&win->lo_lock, flags);
721 old = win->lockout;
728 win->lockout = new;
731 atomic_inc(&win->msc->user_count);
733 atomic_dec(&win->msc->user_count);
736 spin_unlock_irqrestore(&win->lo_lock, flags);
746 dev_warn_ratelimited(msc_dev(win->msc),
821 struct msc_window *win = msc->cur_win;
827 msc_win_set_lockout(win, WIN_INUSE, WIN_LOCKED);
849 msc->mbuf->ready(msc->mbuf_priv, win->sgt,
850 msc_win_total_sz(win));
993 static int __msc_buffer_win_alloc(struct msc_window *win,
1000 ret = sg_alloc_table(win->sgt, nr_segs, GFP_KERNEL);
1004 for_each_sg(win->sgt->sgl, sg_ptr, nr_segs, i) {
1005 block = dma_alloc_coherent(msc_dev(win->msc)->parent->parent,
1017 for_each_sg(win->sgt->sgl, sg_ptr, i, ret)
1018 dma_free_coherent(msc_dev(win->msc)->parent->parent, PAGE_SIZE,
1021 sg_free_table(win->sgt);
1027 static void msc_buffer_set_uc(struct msc_window *win, unsigned int nr_segs)
1032 for_each_sg(win->sgt->sgl, sg_ptr, nr_segs, i) {
1039 static void msc_buffer_set_wb(struct msc_window *win)
1044 for_each_sg(win->sgt->sgl, sg_ptr, win->nr_segs, i) {
1052 msc_buffer_set_uc(struct msc_window *win, unsigned int nr_segs) {}
1053 static inline void msc_buffer_set_wb(struct msc_window *win) {}
1078 struct msc_window *win;
1084 win = kzalloc(sizeof(*win), GFP_KERNEL);
1085 if (!win)
1088 win->msc = msc;
1089 win->sgt = &win->_sgt;
1090 win->lockout = WIN_READY;
1091 spin_lock_init(&win->lo_lock);
1098 win->pgoff = prev->pgoff + prev->nr_blocks;
1102 ret = msc->mbuf->alloc_window(msc->mbuf_priv, &win->sgt,
1105 ret = __msc_buffer_win_alloc(win, nr_blocks);
1110 msc_buffer_set_uc(win, ret);
1112 win->nr_segs = ret;
1113 win->nr_blocks = nr_blocks;
1116 msc->base = msc_win_base(win);
1117 msc->base_addr = msc_win_base_dma(win);
1118 msc->cur_win = win;
1121 list_add_tail(&win->entry, &msc->win_list);
1127 kfree(win);
1132 static void __msc_buffer_win_free(struct msc *msc, struct msc_window *win)
1137 for_each_sg(win->sgt->sgl, sg, win->nr_segs, i) {
1141 dma_free_coherent(msc_dev(win->msc)->parent->parent, PAGE_SIZE,
1144 sg_free_table(win->sgt);
1150 * @win: window to free
1155 static void msc_buffer_win_free(struct msc *msc, struct msc_window *win)
1157 msc->nr_pages -= win->nr_blocks;
1159 list_del(&win->entry);
1165 msc_buffer_set_wb(win);
1168 msc->mbuf->free_window(msc->mbuf_priv, win->sgt);
1170 __msc_buffer_win_free(msc, win);
1172 kfree(win);
1184 struct msc_window *win, *next_win;
1187 list_for_each_entry(win, &msc->win_list, entry) {
1196 if (msc_is_last_win(win)) {
1201 next_win = list_next_entry(win, entry);
1204 for_each_sg(win->sgt->sgl, sg, win->nr_segs, blk) {
1215 if (blk == win->nr_segs - 1) {
1217 bdesc->next_blk = msc_win_base_pfn(win);
1238 struct msc_window *win, *iter;
1240 list_for_each_entry_safe(win, iter, &msc->win_list, entry)
1241 msc_buffer_win_free(msc, win);
1383 struct msc_window *win;
1390 list_for_each_entry(win, &msc->win_list, entry)
1391 if (pgoff >= win->pgoff && pgoff < win->pgoff + win->nr_blocks)
1397 pgoff -= win->pgoff;
1399 for_each_sg(win->sgt->sgl, sg, win->nr_segs, blk) {
1724 struct msc_window *win;
1729 win = msc_find_window(msc, sgt, false);
1730 if (!win)
1733 msc_win_set_lockout(win, WIN_LOCKED, WIN_READY);
1734 if (msc->switch_on_unlock == win) {
1753 struct msc_window *win, *next_win;
1769 win = msc->cur_win;
1770 if (!win)
1772 next_win = msc_next_window(win);
1787 msc_win_set_lockout(win, WIN_INUSE, WIN_LOCKED);
1792 msc->mbuf->ready(msc->mbuf_priv, win->sgt,
1793 msc_win_total_sz(win));
1950 struct msc_window *win;
1958 list_for_each_entry(win, &msc->win_list, entry) {
1960 "%d%c", win->nr_blocks,
1961 msc_is_last_win(win) ? '\n' : ',');
1977 unsigned long val, *win = NULL, *rewin;
2015 rewin = krealloc(win, sizeof(*win) * nr_wins, GFP_KERNEL);
2017 kfree(win);
2021 win = rewin;
2022 win[nr_wins - 1] = val;
2033 ret = msc_buffer_alloc(msc, win, nr_wins);
2037 kfree(win);