mirror of https://gitee.com/openkylin/linux.git
greybus: add framework for 'struct gbuf'
This is the equlivant of sk_buf or urbs for Greybus.
This commit is contained in:
parent
83ddaaab01
commit
d5d1903dcd
|
@ -1,4 +1,4 @@
|
|||
greybus-y := core.o
|
||||
greybus-y := core.o gbuf.o
|
||||
|
||||
obj-m += greybus.o
|
||||
obj-m += i2c-gb.o
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Greybus gbuf handling
|
||||
*
|
||||
* Copyright 2014 Google Inc.
|
||||
*
|
||||
* Released under the GPLv2 only.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include "greybus.h"
|
||||
|
||||
|
||||
struct gbuf *greybus_alloc_gbuf(struct greybus_device *gdev,
|
||||
struct cport *cport,
|
||||
gfp_t mem_flags)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void greybus_free_gbuf(struct gbuf *gbuf)
|
||||
{
|
||||
}
|
||||
|
||||
int greybus_submit_gbuf(struct gbuf *gbuf, gfp_t mem_flags)
|
||||
{
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
int greybus_kill_gbuf(struct gbuf *gbuf)
|
||||
{
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -29,19 +29,68 @@
|
|||
.match_flags = GREYBUS_DEVICE_ID_MATCH_SERIAL, \
|
||||
.lSerial = (serial),
|
||||
|
||||
|
||||
struct greybus_descriptor {
|
||||
__u16 wVendor;
|
||||
__u16 wProduct;
|
||||
__u64 lSerialNumber;
|
||||
};
|
||||
|
||||
|
||||
struct gbuf;
|
||||
|
||||
struct cport {
|
||||
u16 number;
|
||||
// FIXME, what else?
|
||||
};
|
||||
|
||||
typedef void (*gbuf_complete_t)(struct gbuf *gbuf);
|
||||
|
||||
struct gbuf {
|
||||
struct kref kref;
|
||||
void *hcpriv;
|
||||
|
||||
struct list_head anchor_list;
|
||||
struct gbuf_anchor *anchor; // FIXME do we need?
|
||||
|
||||
struct greybus_device *gdev;
|
||||
struct cport *cport;
|
||||
int status;
|
||||
void *transfer_buffer;
|
||||
u32 transfer_flags; /* flags for the transfer buffer */
|
||||
u32 transfer_buffer_length;
|
||||
u32 actual_length;
|
||||
|
||||
struct scatterlist *sg; // FIXME do we need?
|
||||
int num_sgs;
|
||||
|
||||
void *context;
|
||||
gbuf_complete_t complete;
|
||||
};
|
||||
|
||||
/*
|
||||
* gbuf->transfer_flags
|
||||
*/
|
||||
#define GBUF_FREE_BUFFER BIT(0) /* Free the transfer buffer with the gbuf */
|
||||
|
||||
|
||||
struct greybus_device {
|
||||
struct device dev;
|
||||
struct greybus_descriptor descriptor;
|
||||
int num_cport;
|
||||
struct cport cport[0];
|
||||
};
|
||||
#define to_greybus_device(d) container_of(d, struct greybus_device, dev)
|
||||
|
||||
|
||||
struct gbuf *greybus_alloc_gbuf(struct greybus_device *gdev,
|
||||
struct cport *cport,
|
||||
gfp_t mem_flags);
|
||||
void greybus_free_gbuf(struct gbuf *gbuf);
|
||||
|
||||
int greybus_submit_gbuf(struct gbuf *gbuf, gfp_t mem_flags);
|
||||
int greybus_kill_gbuf(struct gbuf *gbuf);
|
||||
|
||||
|
||||
struct greybus_driver {
|
||||
const char *name;
|
||||
|
||||
|
|
Loading…
Reference in New Issue