phy: atheros: Clarify the intention of ar8021_config
[oweals/u-boot.git] / include / bouncebuf.h
index 31021c5b85e68149d9187730967e6b4d36d7790f..7427bd12e27c29d114e605387bd7f024505a5f0e 100644 (file)
@@ -1,30 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Generic bounce buffer implementation
  *
  * Copyright (C) 2012 Marek Vasut <marex@denx.de>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
  */
 
 #ifndef __INCLUDE_BOUNCEBUF_H__
 #define __INCLUDE_BOUNCEBUF_H__
 
+#include <linux/types.h>
+
 /*
  * GEN_BB_READ -- Data are read from the buffer eg. by DMA hardware.
  * The source buffer is copied into the bounce buffer (if unaligned, otherwise
  */
 #define GEN_BB_RW      (GEN_BB_READ | GEN_BB_WRITE)
 
-#ifdef CONFIG_BOUNCE_BUFFER
+struct bounce_buffer {
+       /* Copy of data parameter passed to start() */
+       void *user_buffer;
+       /*
+        * DMA-aligned buffer. This field is always set to the value that
+        * should be used for DMA; either equal to .user_buffer, or to a
+        * freshly allocated aligned buffer.
+        */
+       void *bounce_buffer;
+       /* Copy of len parameter passed to start() */
+       size_t len;
+       /* DMA-aligned buffer length */
+       size_t len_aligned;
+       /* Copy of flags parameter passed to start() */
+       unsigned int flags;
+};
+
 /**
  * bounce_buffer_start() -- Start the bounce buffer session
+ * state:      stores state passed between bounce_buffer_{start,stop}
  * data:       pointer to buffer to be aligned
  * len:                length of the buffer
- * backup:     pointer to backup buffer (the original value is stored here if
- *              needed
  * flags:      flags describing the transaction, see above.
  */
-int bounce_buffer_start(void **data, size_t len, void **backup, uint8_t flags);
+int bounce_buffer_start(struct bounce_buffer *state, void *data,
+                       size_t len, unsigned int flags);
+
 /**
- * bounce_buffer_stop() -- Finish the bounce buffer session
- * data:       pointer to buffer that was aligned
+ * bounce_buffer_start() -- Start the bounce buffer session with external align check function
+ * state:      stores state passed between bounce_buffer_{start,stop}
+ * data:       pointer to buffer to be aligned
  * len:                length of the buffer
- * backup:     pointer to backup buffer (the original value is stored here if
- *              needed
  * flags:      flags describing the transaction, see above.
+ * alignment:  alignment of the newly allocated bounce buffer
+ * addr_is_aligned: function for checking the alignment instead of the default one
  */
-int bounce_buffer_stop(void **data, size_t len, void **backup, uint8_t flags);
-#else
-static inline int bounce_buffer_start(void **data, size_t len, void **backup,
-                                       uint8_t flags)
-{
-       return 0;
-}
+int bounce_buffer_start_extalign(struct bounce_buffer *state, void *data,
+                                size_t len, unsigned int flags,
+                                size_t alignment,
+                                int (*addr_is_aligned)(struct bounce_buffer *state));
 
-static inline int bounce_buffer_stop(void **data, size_t len, void **backup,
-                                       uint8_t flags)
-{
-       return 0;
-}
-#endif
+/**
+ * bounce_buffer_stop() -- Finish the bounce buffer session
+ * state:      stores state passed between bounce_buffer_{start,stop}
+ */
+int bounce_buffer_stop(struct bounce_buffer *state);
 
 #endif