/** * cb710_sg_dwiter_read_next_block() - get next 32-bit word from sg buffer * @miter: sg mapping iterator used for reading * * Description: * Returns 32-bit word starting at byte pointed to by @miter@ * handling any alignment issues. Bytes past the buffer's end * are not accessed (read) but are returned as zeroes. @miter@ * is advanced by 4 bytes or to the end of buffer whichever is * closer. * * Context: * Same requirements as in sg_miter_next(). * * Returns: * 32-bit word just read.
*/
uint32_t cb710_sg_dwiter_read_next_block(struct sg_mapping_iter *miter)
{
uint32_t *ptr = NULL;
if (likely(sg_dwiter_get_next_block(miter, &ptr))) return ptr ? *ptr : 0;
do {
len = min(miter->length - miter->consumed, left);
memcpy(miter->addr, addr, len);
miter->consumed += len;
left -= len; if (!left) return;
addr += len;
} while (sg_dwiter_next(miter));
}
/** * cb710_sg_dwiter_write_next_block() - write next 32-bit word to sg buffer * @miter: sg mapping iterator used for writing * @data: data to write to sg buffer * * Description: * Writes 32-bit word starting at byte pointed to by @miter@ * handling any alignment issues. Bytes which would be written * past the buffer's end are silently discarded. @miter@ is * advanced by 4 bytes or to the end of buffer whichever is closer. * * Context: * Same requirements as in sg_miter_next().
*/ void cb710_sg_dwiter_write_next_block(struct sg_mapping_iter *miter, uint32_t data)
{
uint32_t *ptr = NULL;
if (likely(sg_dwiter_get_next_block(miter, &ptr))) { if (ptr)
*ptr = data; else return;
} else
sg_dwiter_write_slow(miter, data);
}
EXPORT_SYMBOL_GPL(cb710_sg_dwiter_write_next_block);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.