drivers/misc/bcm-vk/bcm_vk_sg.h

Source file repositories/reference/linux-study-clean/drivers/misc/bcm-vk/bcm_vk_sg.h

File Facts

System
Linux kernel
Corpus path
drivers/misc/bcm-vk/bcm_vk_sg.h
Extension
.h
Size
1444 bytes
Lines
62
Domain
Driver Families
Bucket
drivers/misc
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct bcm_vk_dma {
	/* for userland buffer */
	struct page **pages;
	int nr_pages;

	/* common */
	dma_addr_t handle;
	/*
	 * sglist is of the following LE format
	 * [U32] num_sg  = number of sg addresses (N)
	 * [U32] totalsize = totalsize of data being transferred in sglist
	 * [U32] size[0] = size of data in address0
	 * [U32] addr_l[0] = lower 32-bits of address0
	 * [U32] addr_h[0] = higher 32-bits of address0
	 * ..
	 * [U32] size[N-1] = size of data in addressN-1
	 * [U32] addr_l[N-1] = lower 32-bits of addressN-1
	 * [U32] addr_h[N-1] = higher 32-bits of addressN-1
	 */
	u32 *sglist;
#define SGLIST_NUM_SG		0
#define SGLIST_TOTALSIZE	1
#define SGLIST_VKDATA_START	2

	int sglen; /* Length (bytes) of sglist */
	int direction;
};

struct _vk_data {
	u32 size;    /* data size in bytes */
	u64 address; /* Pointer to data     */
} __packed;

/*
 * Scatter-gather DMA buffer API.
 *
 * These functions provide a simple way to create a page list and a
 * scatter-gather list from userspace address and map the memory
 * for DMA operation.
 */
int bcm_vk_sg_alloc(struct device *dev,
		    struct bcm_vk_dma *dma,
		    int dir,
		    struct _vk_data *vkdata,
		    int num);

int bcm_vk_sg_free(struct device *dev, struct bcm_vk_dma *dma, int num,
		   int *proc_cnt);

#endif

Annotation

Implementation Notes