Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 77b2555b52a894a2e39a42e43d993df875c46a6a 202 lines 5.2 kB view raw
1/********************************************************************* 2 * 3 * sir.h: include file for irda-sir device abstraction layer 4 * 5 * Copyright (c) 2002 Martin Diehl 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as 9 * published by the Free Software Foundation; either version 2 of 10 * the License, or (at your option) any later version. 11 * 12 ********************************************************************/ 13 14#ifndef IRDA_SIR_H 15#define IRDA_SIR_H 16 17#include <linux/netdevice.h> 18 19#include <net/irda/irda.h> 20#include <net/irda/irda_device.h> // iobuff_t 21 22/* FIXME: unify irda_request with sir_fsm! */ 23 24struct irda_request { 25 struct list_head lh_request; 26 unsigned long pending; 27 void (*func)(void *); 28 void *data; 29 struct timer_list timer; 30}; 31 32struct sir_fsm { 33 struct semaphore sem; 34 struct irda_request rq; 35 unsigned state, substate; 36 int param; 37 int result; 38}; 39 40#define SIRDEV_STATE_WAIT_TX_COMPLETE 0x0100 41 42/* substates for wait_tx_complete */ 43#define SIRDEV_STATE_WAIT_XMIT 0x0101 44#define SIRDEV_STATE_WAIT_UNTIL_SENT 0x0102 45#define SIRDEV_STATE_TX_DONE 0x0103 46 47#define SIRDEV_STATE_DONGLE_OPEN 0x0300 48 49/* 0x0301-0x03ff reserved for individual dongle substates */ 50 51#define SIRDEV_STATE_DONGLE_CLOSE 0x0400 52 53/* 0x0401-0x04ff reserved for individual dongle substates */ 54 55#define SIRDEV_STATE_SET_DTR_RTS 0x0500 56 57#define SIRDEV_STATE_SET_SPEED 0x0700 58#define SIRDEV_STATE_DONGLE_CHECK 0x0800 59#define SIRDEV_STATE_DONGLE_RESET 0x0900 60 61/* 0x0901-0x09ff reserved for individual dongle substates */ 62 63#define SIRDEV_STATE_DONGLE_SPEED 0x0a00 64/* 0x0a01-0x0aff reserved for individual dongle substates */ 65 66#define SIRDEV_STATE_PORT_SPEED 0x0b00 67#define SIRDEV_STATE_DONE 0x0c00 68#define SIRDEV_STATE_ERROR 0x0d00 69#define SIRDEV_STATE_COMPLETE 0x0e00 70 71#define SIRDEV_STATE_DEAD 0xffff 72 73 74struct sir_dev; 75 76struct dongle_driver { 77 78 struct module *owner; 79 80 const char *driver_name; 81 82 IRDA_DONGLE type; 83 84 int (*open)(struct sir_dev *dev); 85 int (*close)(struct sir_dev *dev); 86 int (*reset)(struct sir_dev *dev); 87 int (*set_speed)(struct sir_dev *dev, unsigned speed); 88 89 struct list_head dongle_list; 90}; 91 92struct sir_driver { 93 94 struct module *owner; 95 96 const char *driver_name; 97 98 int qos_mtt_bits; 99 100 int (*chars_in_buffer)(struct sir_dev *dev); 101 void (*wait_until_sent)(struct sir_dev *dev); 102 int (*set_speed)(struct sir_dev *dev, unsigned speed); 103 int (*set_dtr_rts)(struct sir_dev *dev, int dtr, int rts); 104 105 int (*do_write)(struct sir_dev *dev, const unsigned char *ptr, size_t len); 106 107 int (*start_dev)(struct sir_dev *dev); 108 int (*stop_dev)(struct sir_dev *dev); 109}; 110 111 112/* exported */ 113 114extern int irda_register_dongle(struct dongle_driver *new); 115extern int irda_unregister_dongle(struct dongle_driver *drv); 116 117extern struct sir_dev * sirdev_get_instance(const struct sir_driver *drv, const char *name); 118extern int sirdev_put_instance(struct sir_dev *self); 119 120extern int sirdev_set_dongle(struct sir_dev *dev, IRDA_DONGLE type); 121extern void sirdev_write_complete(struct sir_dev *dev); 122extern int sirdev_receive(struct sir_dev *dev, const unsigned char *cp, size_t count); 123 124/* low level helpers for SIR device/dongle setup */ 125extern int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len); 126extern int sirdev_raw_read(struct sir_dev *dev, char *buf, int len); 127extern int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts); 128 129/* not exported */ 130 131extern int sirdev_get_dongle(struct sir_dev *self, IRDA_DONGLE type); 132extern int sirdev_put_dongle(struct sir_dev *self); 133 134extern void sirdev_enable_rx(struct sir_dev *dev); 135extern int sirdev_schedule_request(struct sir_dev *dev, int state, unsigned param); 136extern int __init irda_thread_create(void); 137extern void __exit irda_thread_join(void); 138 139/* inline helpers */ 140 141static inline int sirdev_schedule_speed(struct sir_dev *dev, unsigned speed) 142{ 143 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_SPEED, speed); 144} 145 146static inline int sirdev_schedule_dongle_open(struct sir_dev *dev, int dongle_id) 147{ 148 return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_OPEN, dongle_id); 149} 150 151static inline int sirdev_schedule_dongle_close(struct sir_dev *dev) 152{ 153 return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_CLOSE, 0); 154} 155 156static inline int sirdev_schedule_dtr_rts(struct sir_dev *dev, int dtr, int rts) 157{ 158 int dtrrts; 159 160 dtrrts = ((dtr) ? 0x02 : 0x00) | ((rts) ? 0x01 : 0x00); 161 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_DTR_RTS, dtrrts); 162} 163 164#if 0 165static inline int sirdev_schedule_mode(struct sir_dev *dev, int mode) 166{ 167 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_MODE, mode); 168} 169#endif 170 171 172struct sir_dev { 173 struct net_device *netdev; 174 struct net_device_stats stats; 175 176 struct irlap_cb *irlap; 177 178 struct qos_info qos; 179 180 char hwname[32]; 181 182 struct sir_fsm fsm; 183 atomic_t enable_rx; 184 int raw_tx; 185 spinlock_t tx_lock; 186 187 u32 new_speed; 188 u32 flags; 189 190 unsigned speed; 191 192 iobuff_t tx_buff; /* Transmit buffer */ 193 iobuff_t rx_buff; /* Receive buffer */ 194 struct sk_buff *tx_skb; 195 196 const struct dongle_driver * dongle_drv; 197 const struct sir_driver * drv; 198 void *priv; 199 200}; 201 202#endif /* IRDA_SIR_H */