Deleted Added
full compact
busdma_bounce.c (191011) busdma_bounce.c (191201)
1/*-
2 * Copyright (c) 1997, 1998 Justin T. Gibbs.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1997, 1998 Justin T. Gibbs.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/i386/i386/busdma_machdep.c 191011 2009-04-13 19:20:32Z kib $");
28__FBSDID("$FreeBSD: head/sys/i386/i386/busdma_machdep.c 191201 2009-04-17 13:22:18Z jhb $");
29
30#include <sys/param.h>
31#include <sys/kdb.h>
32#include <ddb/ddb.h>
33#include <ddb/db_output.h>
34#include <sys/systm.h>
35#include <sys/malloc.h>
36#include <sys/bus.h>

--- 1113 unchanged lines hidden (view full) ---

1150 panic("add_bounce_page: free page list is empty");
1151
1152 STAILQ_REMOVE_HEAD(&bz->bounce_page_list, links);
1153 bz->reserved_bpages--;
1154 bz->active_bpages++;
1155 mtx_unlock(&bounce_lock);
1156
1157 if (dmat->flags & BUS_DMA_KEEP_PG_OFFSET) {
29
30#include <sys/param.h>
31#include <sys/kdb.h>
32#include <ddb/ddb.h>
33#include <ddb/db_output.h>
34#include <sys/systm.h>
35#include <sys/malloc.h>
36#include <sys/bus.h>

--- 1113 unchanged lines hidden (view full) ---

1150 panic("add_bounce_page: free page list is empty");
1151
1152 STAILQ_REMOVE_HEAD(&bz->bounce_page_list, links);
1153 bz->reserved_bpages--;
1154 bz->active_bpages++;
1155 mtx_unlock(&bounce_lock);
1156
1157 if (dmat->flags & BUS_DMA_KEEP_PG_OFFSET) {
1158 /* page offset needs to be preserved */
1159 bpage->vaddr &= ~PAGE_MASK;
1160 bpage->busaddr &= ~PAGE_MASK;
1158 /* Page offset needs to be preserved. */
1161 bpage->vaddr |= vaddr & PAGE_MASK;
1162 bpage->busaddr |= vaddr & PAGE_MASK;
1163 }
1164 bpage->datavaddr = vaddr;
1165 bpage->datacount = size;
1166 STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
1167 return (bpage->busaddr);
1168}
1169
1170static void
1171free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage)
1172{
1173 struct bus_dmamap *map;
1174 struct bounce_zone *bz;
1175
1176 bz = dmat->bounce_zone;
1177 bpage->datavaddr = 0;
1178 bpage->datacount = 0;
1159 bpage->vaddr |= vaddr & PAGE_MASK;
1160 bpage->busaddr |= vaddr & PAGE_MASK;
1161 }
1162 bpage->datavaddr = vaddr;
1163 bpage->datacount = size;
1164 STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
1165 return (bpage->busaddr);
1166}
1167
1168static void
1169free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage)
1170{
1171 struct bus_dmamap *map;
1172 struct bounce_zone *bz;
1173
1174 bz = dmat->bounce_zone;
1175 bpage->datavaddr = 0;
1176 bpage->datacount = 0;
1177 if (dmat->flags & BUS_DMA_KEEP_PG_OFFSET) {
1178 /*
1179 * Reset the bounce page to start at offset 0. Other uses
1180 * of this bounce page may need to store a full page of
1181 * data and/or assume it starts on a page boundary.
1182 */
1183 bpage->vaddr &= ~PAGE_MASK;
1184 bpage->busaddr &= ~PAGE_MASK;
1185 }
1179
1180 mtx_lock(&bounce_lock);
1181 STAILQ_INSERT_HEAD(&bz->bounce_page_list, bpage, links);
1182 bz->free_bpages++;
1183 bz->active_bpages--;
1184 if ((map = STAILQ_FIRST(&bounce_map_waitinglist)) != NULL) {
1185 if (reserve_bounce_pages(map->dmat, map, 1) == 0) {
1186 STAILQ_REMOVE_HEAD(&bounce_map_waitinglist, links);

--- 29 unchanged lines hidden ---
1186
1187 mtx_lock(&bounce_lock);
1188 STAILQ_INSERT_HEAD(&bz->bounce_page_list, bpage, links);
1189 bz->free_bpages++;
1190 bz->active_bpages--;
1191 if ((map = STAILQ_FIRST(&bounce_map_waitinglist)) != NULL) {
1192 if (reserve_bounce_pages(map->dmat, map, 1) == 0) {
1193 STAILQ_REMOVE_HEAD(&bounce_map_waitinglist, links);

--- 29 unchanged lines hidden ---