Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
C
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677/* SPDX-License-Identifier: GPL-2.0 *//* * GNSS receiver support * * Copyright (C) 2018 Johan Hovold <johan@kernel.org> */
#ifndef _LINUX_GNSS_H#define _LINUX_GNSS_H
#include <linux/cdev.h>#include <linux/device.h>#include <linux/kfifo.h>#include <linux/mutex.h>#include <linux/rwsem.h>#include <linux/types.h>#include <linux/wait.h>
struct gnss_device;
enum gnss_type { GNSS_TYPE_NMEA = 0, GNSS_TYPE_SIRF, GNSS_TYPE_UBX, GNSS_TYPE_MTK,
GNSS_TYPE_COUNT};
struct gnss_operations { int (*open)(struct gnss_device *gdev); void (*close)(struct gnss_device *gdev); int (*write_raw)(struct gnss_device *gdev, const unsigned char *buf, size_t count);};
struct gnss_device { struct device dev; struct cdev cdev; int id;
enum gnss_type type; unsigned long flags;
struct rw_semaphore rwsem; const struct gnss_operations *ops; unsigned int count; unsigned int disconnected:1;
struct mutex read_mutex; struct kfifo read_fifo; wait_queue_head_t read_queue;
struct mutex write_mutex; char *write_buf;};
struct gnss_device *gnss_allocate_device(struct device *parent);void gnss_put_device(struct gnss_device *gdev);int gnss_register_device(struct gnss_device *gdev);void gnss_deregister_device(struct gnss_device *gdev);
int gnss_insert_raw(struct gnss_device *gdev, const unsigned char *buf, size_t count);
static inline void gnss_set_drvdata(struct gnss_device *gdev, void *data){ dev_set_drvdata(&gdev->dev, data);}
static inline void *gnss_get_drvdata(struct gnss_device *gdev){ return dev_get_drvdata(&gdev->dev);}
#endif /* _LINUX_GNSS_H */