cregit-Linux how code gets into the kernel

Release 4.7 drivers/net/irda/sir-dev.h

Directory: drivers/net/irda
/*********************************************************************
 *
 *      sir.h:  include file for irda-sir device abstraction layer
 *
 *      Copyright (c) 2002 Martin Diehl
 *
 *      This program is free software; you can redistribute it and/or 
 *      modify it under the terms of the GNU General Public License as 
 *      published by the Free Software Foundation; either version 2 of 
 *      the License, or (at your option) any later version.
 *
 ********************************************************************/

#ifndef IRDA_SIR_H

#define IRDA_SIR_H

#include <linux/netdevice.h>
#include <linux/workqueue.h>

#include <net/irda/irda.h>
#include <net/irda/irda_device.h>		// iobuff_t


struct sir_fsm {
	
struct semaphore	sem;
	
struct delayed_work	work;
	

unsigned		state, substate;
	
int			param;
	
int			result;
};


#define SIRDEV_STATE_WAIT_TX_COMPLETE	0x0100

/* substates for wait_tx_complete */

#define SIRDEV_STATE_WAIT_XMIT		0x0101

#define SIRDEV_STATE_WAIT_UNTIL_SENT	0x0102

#define SIRDEV_STATE_TX_DONE		0x0103


#define SIRDEV_STATE_DONGLE_OPEN		0x0300

/* 0x0301-0x03ff reserved for individual dongle substates */


#define SIRDEV_STATE_DONGLE_CLOSE	0x0400

/* 0x0401-0x04ff reserved for individual dongle substates */


#define SIRDEV_STATE_SET_DTR_RTS		0x0500


#define SIRDEV_STATE_SET_SPEED		0x0700

#define SIRDEV_STATE_DONGLE_CHECK	0x0800

#define SIRDEV_STATE_DONGLE_RESET	0x0900

/* 0x0901-0x09ff reserved for individual dongle substates */


#define SIRDEV_STATE_DONGLE_SPEED	0x0a00
/* 0x0a01-0x0aff reserved for individual dongle substates */


#define SIRDEV_STATE_PORT_SPEED		0x0b00

#define SIRDEV_STATE_DONE		0x0c00

#define SIRDEV_STATE_ERROR		0x0d00

#define SIRDEV_STATE_COMPLETE		0x0e00


#define SIRDEV_STATE_DEAD		0xffff


struct sir_dev;


struct dongle_driver {

	
struct module *owner;

	
const char *driver_name;

	
IRDA_DONGLE type;

	
int	(*open)(struct sir_dev *dev);
	
int	(*close)(struct sir_dev *dev);
	
int	(*reset)(struct sir_dev *dev);
	
int	(*set_speed)(struct sir_dev *dev, unsigned speed);

	
struct list_head dongle_list;
};


struct sir_driver {

	
struct module *owner;

	
const char *driver_name;

	
int qos_mtt_bits;

	
int (*chars_in_buffer)(struct sir_dev *dev);
	
void (*wait_until_sent)(struct sir_dev *dev);
	
int (*set_speed)(struct sir_dev *dev, unsigned speed);
	
int (*set_dtr_rts)(struct sir_dev *dev, int dtr, int rts);

	
int (*do_write)(struct sir_dev *dev, const unsigned char *ptr, size_t len);

	
int (*start_dev)(struct sir_dev *dev);
	
int (*stop_dev)(struct sir_dev *dev);
};


/* exported */

int irda_register_dongle(struct dongle_driver *new);
int irda_unregister_dongle(struct dongle_driver *drv);

struct sir_dev *sirdev_get_instance(const struct sir_driver *drv,
				    const char *name);
int sirdev_put_instance(struct sir_dev *self);

int sirdev_set_dongle(struct sir_dev *dev, IRDA_DONGLE type);
void sirdev_write_complete(struct sir_dev *dev);
int sirdev_receive(struct sir_dev *dev, const unsigned char *cp, size_t count);

/* low level helpers for SIR device/dongle setup */
int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len);
int sirdev_raw_read(struct sir_dev *dev, char *buf, int len);
int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts);

/* not exported */

int sirdev_get_dongle(struct sir_dev *self, IRDA_DONGLE type);
int sirdev_put_dongle(struct sir_dev *self);

void sirdev_enable_rx(struct sir_dev *dev);
int sirdev_schedule_request(struct sir_dev *dev, int state, unsigned param);

/* inline helpers */


static inline int sirdev_schedule_speed(struct sir_dev *dev, unsigned speed) { return sirdev_schedule_request(dev, SIRDEV_STATE_SET_SPEED, speed); }

Contributors

PersonTokensPropCommitsCommitProp
jean tourrilhesjean tourrilhes25100.00%1100.00%
Total25100.00%1100.00%


static inline int sirdev_schedule_dongle_open(struct sir_dev *dev, int dongle_id) { return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_OPEN, dongle_id); }

Contributors

PersonTokensPropCommitsCommitProp
jean tourrilhesjean tourrilhes25100.00%1100.00%
Total25100.00%1100.00%


static inline int sirdev_schedule_dongle_close(struct sir_dev *dev) { return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_CLOSE, 0); }

Contributors

PersonTokensPropCommitsCommitProp
jean tourrilhesjean tourrilhes22100.00%1100.00%
Total22100.00%1100.00%


static inline int sirdev_schedule_dtr_rts(struct sir_dev *dev, int dtr, int rts) { int dtrrts; dtrrts = ((dtr) ? 0x02 : 0x00) | ((rts) ? 0x01 : 0x00); return sirdev_schedule_request(dev, SIRDEV_STATE_SET_DTR_RTS, dtrrts); }

Contributors

PersonTokensPropCommitsCommitProp
jean tourrilhesjean tourrilhes53100.00%1100.00%
Total53100.00%1100.00%

#if 0 static inline int sirdev_schedule_mode(struct sir_dev *dev, int mode) { return sirdev_schedule_request(dev, SIRDEV_STATE_SET_MODE, mode); } #endif struct sir_dev { struct net_device *netdev; struct irlap_cb *irlap; struct qos_info qos; char hwname[32]; struct sir_fsm fsm; atomic_t enable_rx; int raw_tx; spinlock_t tx_lock; u32 new_speed; u32 flags; unsigned speed; iobuff_t tx_buff; /* Transmit buffer */ iobuff_t rx_buff; /* Receive buffer */ struct sk_buff *tx_skb; const struct dongle_driver * dongle_drv; const struct sir_driver * drv; void *priv; }; #endif /* IRDA_SIR_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
jean tourrilhesjean tourrilhes69499.28%360.00%
christoph hellwigchristoph hellwig40.57%120.00%
david howellsdavid howells10.14%120.00%
Total699100.00%5100.00%
Directory: drivers/net/irda
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}