1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (C) 2021 Intel Corporation
- * Author: [email protected]
- */
- #ifndef __LOGIC_IOMEM_H
- #define __LOGIC_IOMEM_H
- #include <linux/types.h>
- #include <linux/ioport.h>
- /**
- * struct logic_iomem_ops - emulated IO memory ops
- * @read: read an 8, 16, 32 or 64 bit quantity from the given offset,
- * size is given in bytes (1, 2, 4 or 8)
- * (64-bit only necessary if CONFIG_64BIT is set)
- * @write: write an 8, 16 32 or 64 bit quantity to the given offset,
- * size is given in bytes (1, 2, 4 or 8)
- * (64-bit only necessary if CONFIG_64BIT is set)
- * @set: optional, for memset_io()
- * @copy_from: optional, for memcpy_fromio()
- * @copy_to: optional, for memcpy_toio()
- * @unmap: optional, this region is getting unmapped
- */
- struct logic_iomem_ops {
- unsigned long (*read)(void *priv, unsigned int offset, int size);
- void (*write)(void *priv, unsigned int offset, int size,
- unsigned long val);
- void (*set)(void *priv, unsigned int offset, u8 value, int size);
- void (*copy_from)(void *priv, void *buffer, unsigned int offset,
- int size);
- void (*copy_to)(void *priv, unsigned int offset, const void *buffer,
- int size);
- void (*unmap)(void *priv);
- };
- /**
- * struct logic_iomem_region_ops - ops for an IO memory handler
- * @map: map a range in the registered IO memory region, must
- * fill *ops with the ops and may fill *priv to be passed
- * to the ops. The offset is given as the offset into the
- * registered resource region.
- * The return value is negative for errors, or >= 0 for
- * success. On success, the return value is added to the
- * offset for later ops, to allow for partial mappings.
- */
- struct logic_iomem_region_ops {
- long (*map)(unsigned long offset, size_t size,
- const struct logic_iomem_ops **ops,
- void **priv);
- };
- /**
- * logic_iomem_add_region - register an IO memory region
- * @resource: the resource description for this region
- * @ops: the IO memory mapping ops for this resource
- */
- int logic_iomem_add_region(struct resource *resource,
- const struct logic_iomem_region_ops *ops);
- #endif /* __LOGIC_IOMEM_H */
|