Deleted Added
full compact
usb_busdma.h (192984) usb_busdma.h (193045)
1/* $FreeBSD: head/sys/dev/usb/usb_busdma.h 192984 2009-05-28 17:36:36Z thompsa $ */
1/* $FreeBSD: head/sys/dev/usb/usb_busdma.h 193045 2009-05-29 18:46:57Z thompsa $ */
2/*-
3 * Copyright (c) 2008 Hans Petter Selasky. 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
9 * notice, this list of conditions and the following disclaimer.

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

47struct usb_xfer_root;
48struct usb_dma_parent_tag;
49struct usb_dma_tag;
50
51/*
52 * The following typedef defines the USB DMA load done callback.
53 */
54
2/*-
3 * Copyright (c) 2008 Hans Petter Selasky. 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
9 * notice, this list of conditions and the following disclaimer.

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

47struct usb_xfer_root;
48struct usb_dma_parent_tag;
49struct usb_dma_tag;
50
51/*
52 * The following typedef defines the USB DMA load done callback.
53 */
54
55typedef void (usb2_dma_callback_t)(struct usb_dma_parent_tag *udpt);
55typedef void (usb_dma_callback_t)(struct usb_dma_parent_tag *udpt);
56
57/*
58 * The following structure defines physical and non kernel virtual
59 * address of a memory page having size USB_PAGE_SIZE.
60 */
61struct usb_page {
62#if USB_HAVE_BUSDMA
63 bus_size_t physaddr;

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

70 * pointer and the physical address belonging to an offset in an USB
71 * page cache.
72 */
73struct usb_page_search {
74 void *buffer;
75#if USB_HAVE_BUSDMA
76 bus_size_t physaddr;
77#endif
56
57/*
58 * The following structure defines physical and non kernel virtual
59 * address of a memory page having size USB_PAGE_SIZE.
60 */
61struct usb_page {
62#if USB_HAVE_BUSDMA
63 bus_size_t physaddr;

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

70 * pointer and the physical address belonging to an offset in an USB
71 * page cache.
72 */
73struct usb_page_search {
74 void *buffer;
75#if USB_HAVE_BUSDMA
76 bus_size_t physaddr;
77#endif
78 usb2_size_t length;
78 size_t length;
79};
80
81/*
82 * The following structure is used to keep information about a DMA
83 * memory allocation.
84 */
85struct usb_page_cache {
86
87#if USB_HAVE_BUSDMA
88 bus_dma_tag_t tag;
89 bus_dmamap_t map;
90 struct usb_page *page_start;
91#endif
92 struct usb_dma_parent_tag *tag_parent; /* always set */
93 void *buffer; /* virtual buffer pointer */
94#if USB_HAVE_BUSDMA
79};
80
81/*
82 * The following structure is used to keep information about a DMA
83 * memory allocation.
84 */
85struct usb_page_cache {
86
87#if USB_HAVE_BUSDMA
88 bus_dma_tag_t tag;
89 bus_dmamap_t map;
90 struct usb_page *page_start;
91#endif
92 struct usb_dma_parent_tag *tag_parent; /* always set */
93 void *buffer; /* virtual buffer pointer */
94#if USB_HAVE_BUSDMA
95 usb2_size_t page_offset_buf;
96 usb2_size_t page_offset_end;
95 size_t page_offset_buf;
96 size_t page_offset_end;
97 uint8_t isread:1; /* set if we are currently reading
98 * from the memory. Else write. */
99 uint8_t ismultiseg:1; /* set if we can have multiple
100 * segments */
101#endif
102};
103
104/*
105 * The following structure describes the parent USB DMA tag.
106 */
107#if USB_HAVE_BUSDMA
108struct usb_dma_parent_tag {
109 struct cv cv[1]; /* internal condition variable */
110 bus_dma_tag_t tag; /* always set */
111
112 struct mtx *mtx; /* private mutex, always set */
97 uint8_t isread:1; /* set if we are currently reading
98 * from the memory. Else write. */
99 uint8_t ismultiseg:1; /* set if we can have multiple
100 * segments */
101#endif
102};
103
104/*
105 * The following structure describes the parent USB DMA tag.
106 */
107#if USB_HAVE_BUSDMA
108struct usb_dma_parent_tag {
109 struct cv cv[1]; /* internal condition variable */
110 bus_dma_tag_t tag; /* always set */
111
112 struct mtx *mtx; /* private mutex, always set */
113 usb2_dma_callback_t *func; /* load complete callback function */
113 usb_dma_callback_t *func; /* load complete callback function */
114 struct usb_dma_tag *utag_first;/* pointer to first USB DMA tag */
115 uint8_t dma_error; /* set if DMA load operation failed */
116 uint8_t dma_bits; /* number of DMA address lines */
117 uint8_t utag_max; /* number of USB DMA tags */
118};
119#else
120struct usb_dma_parent_tag {}; /* empty struct */
121#endif
122
123/*
124 * The following structure describes an USB DMA tag.
125 */
126#if USB_HAVE_BUSDMA
127struct usb_dma_tag {
128 struct usb_dma_parent_tag *tag_parent;
129 bus_dma_tag_t tag;
114 struct usb_dma_tag *utag_first;/* pointer to first USB DMA tag */
115 uint8_t dma_error; /* set if DMA load operation failed */
116 uint8_t dma_bits; /* number of DMA address lines */
117 uint8_t utag_max; /* number of USB DMA tags */
118};
119#else
120struct usb_dma_parent_tag {}; /* empty struct */
121#endif
122
123/*
124 * The following structure describes an USB DMA tag.
125 */
126#if USB_HAVE_BUSDMA
127struct usb_dma_tag {
128 struct usb_dma_parent_tag *tag_parent;
129 bus_dma_tag_t tag;
130 usb2_size_t align;
131 usb2_size_t size;
130 size_t align;
131 size_t size;
132};
133#else
134struct usb_dma_tag {}; /* empty struct */
135#endif
136
137/* function prototypes */
138
139int usb2_uiomove(struct usb_page_cache *pc, struct uio *uio,
132};
133#else
134struct usb_dma_tag {}; /* empty struct */
135#endif
136
137/* function prototypes */
138
139int usb2_uiomove(struct usb_page_cache *pc, struct uio *uio,
140 usb2_frlength_t pc_offset, usb2_frlength_t len);
140 usb_frlength_t pc_offset, usb_frlength_t len);
141struct usb_dma_tag *usb2_dma_tag_find(struct usb_dma_parent_tag *udpt,
141struct usb_dma_tag *usb2_dma_tag_find(struct usb_dma_parent_tag *udpt,
142 usb2_size_t size, usb2_size_t align);
142 size_t size, size_t align);
143uint8_t usb2_pc_alloc_mem(struct usb_page_cache *pc, struct usb_page *pg,
143uint8_t usb2_pc_alloc_mem(struct usb_page_cache *pc, struct usb_page *pg,
144 usb2_size_t size, usb2_size_t align);
145uint8_t usb2_pc_dmamap_create(struct usb_page_cache *pc, usb2_size_t size);
146uint8_t usb2_pc_load_mem(struct usb_page_cache *pc, usb2_size_t size,
144 size_t size, size_t align);
145uint8_t usb2_pc_dmamap_create(struct usb_page_cache *pc, size_t size);
146uint8_t usb2_pc_load_mem(struct usb_page_cache *pc, size_t size,
147 uint8_t sync);
148void usb2_bdma_done_event(struct usb_dma_parent_tag *udpt);
149void usb2_bdma_post_sync(struct usb_xfer *xfer);
150void usb2_bdma_pre_sync(struct usb_xfer *xfer);
151void usb2_bdma_work_loop(struct usb_xfer_queue *pq);
147 uint8_t sync);
148void usb2_bdma_done_event(struct usb_dma_parent_tag *udpt);
149void usb2_bdma_post_sync(struct usb_xfer *xfer);
150void usb2_bdma_pre_sync(struct usb_xfer *xfer);
151void usb2_bdma_work_loop(struct usb_xfer_queue *pq);
152void usb2_bzero(struct usb_page_cache *cache, usb2_frlength_t offset,
153 usb2_frlength_t len);
154void usb2_copy_in(struct usb_page_cache *cache, usb2_frlength_t offset,
155 const void *ptr, usb2_frlength_t len);
156int usb2_copy_in_user(struct usb_page_cache *cache, usb2_frlength_t offset,
157 const void *ptr, usb2_frlength_t len);
158void usb2_copy_out(struct usb_page_cache *cache, usb2_frlength_t offset,
159 void *ptr, usb2_frlength_t len);
160int usb2_copy_out_user(struct usb_page_cache *cache, usb2_frlength_t offset,
161 void *ptr, usb2_frlength_t len);
152void usb2_bzero(struct usb_page_cache *cache, usb_frlength_t offset,
153 usb_frlength_t len);
154void usb2_copy_in(struct usb_page_cache *cache, usb_frlength_t offset,
155 const void *ptr, usb_frlength_t len);
156int usb2_copy_in_user(struct usb_page_cache *cache, usb_frlength_t offset,
157 const void *ptr, usb_frlength_t len);
158void usb2_copy_out(struct usb_page_cache *cache, usb_frlength_t offset,
159 void *ptr, usb_frlength_t len);
160int usb2_copy_out_user(struct usb_page_cache *cache, usb_frlength_t offset,
161 void *ptr, usb_frlength_t len);
162void usb2_dma_tag_setup(struct usb_dma_parent_tag *udpt,
163 struct usb_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx,
162void usb2_dma_tag_setup(struct usb_dma_parent_tag *udpt,
163 struct usb_dma_tag *udt, bus_dma_tag_t dmat, struct mtx *mtx,
164 usb2_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt);
164 usb_dma_callback_t *func, uint8_t ndmabits, uint8_t nudt);
165void usb2_dma_tag_unsetup(struct usb_dma_parent_tag *udpt);
165void usb2_dma_tag_unsetup(struct usb_dma_parent_tag *udpt);
166void usb2_get_page(struct usb_page_cache *pc, usb2_frlength_t offset,
166void usb2_get_page(struct usb_page_cache *pc, usb_frlength_t offset,
167 struct usb_page_search *res);
167 struct usb_page_search *res);
168void usb2_m_copy_in(struct usb_page_cache *cache, usb2_frlength_t dst_offset,
169 struct mbuf *m, usb2_size_t src_offset, usb2_frlength_t src_len);
168void usb2_m_copy_in(struct usb_page_cache *cache, usb_frlength_t dst_offset,
169 struct mbuf *m, size_t src_offset, usb_frlength_t src_len);
170void usb2_pc_cpu_flush(struct usb_page_cache *pc);
171void usb2_pc_cpu_invalidate(struct usb_page_cache *pc);
172void usb2_pc_dmamap_destroy(struct usb_page_cache *pc);
173void usb2_pc_free_mem(struct usb_page_cache *pc);
174
175#endif /* _USB2_BUSDMA_H_ */
170void usb2_pc_cpu_flush(struct usb_page_cache *pc);
171void usb2_pc_cpu_invalidate(struct usb_page_cache *pc);
172void usb2_pc_dmamap_destroy(struct usb_page_cache *pc);
173void usb2_pc_free_mem(struct usb_page_cache *pc);
174
175#endif /* _USB2_BUSDMA_H_ */