x86/mm/pat: Don't report PAT on CPUs that don't support it
[linux/fpc-iii.git] / drivers / net / irda / sir-dev.h
blobf50b9c1c0639008b1e314099f4918e3eb0ed57db
1 /*********************************************************************
3 * sir.h: include file for irda-sir device abstraction layer
5 * Copyright (c) 2002 Martin Diehl
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.
12 ********************************************************************/
14 #ifndef IRDA_SIR_H
15 #define IRDA_SIR_H
17 #include <linux/netdevice.h>
18 #include <linux/workqueue.h>
20 #include <net/irda/irda.h>
21 #include <net/irda/irda_device.h> // iobuff_t
23 struct sir_fsm {
24 struct semaphore sem;
25 struct delayed_work work;
26 unsigned state, substate;
27 int param;
28 int result;
31 #define SIRDEV_STATE_WAIT_TX_COMPLETE 0x0100
33 /* substates for wait_tx_complete */
34 #define SIRDEV_STATE_WAIT_XMIT 0x0101
35 #define SIRDEV_STATE_WAIT_UNTIL_SENT 0x0102
36 #define SIRDEV_STATE_TX_DONE 0x0103
38 #define SIRDEV_STATE_DONGLE_OPEN 0x0300
40 /* 0x0301-0x03ff reserved for individual dongle substates */
42 #define SIRDEV_STATE_DONGLE_CLOSE 0x0400
44 /* 0x0401-0x04ff reserved for individual dongle substates */
46 #define SIRDEV_STATE_SET_DTR_RTS 0x0500
48 #define SIRDEV_STATE_SET_SPEED 0x0700
49 #define SIRDEV_STATE_DONGLE_CHECK 0x0800
50 #define SIRDEV_STATE_DONGLE_RESET 0x0900
52 /* 0x0901-0x09ff reserved for individual dongle substates */
54 #define SIRDEV_STATE_DONGLE_SPEED 0x0a00
55 /* 0x0a01-0x0aff reserved for individual dongle substates */
57 #define SIRDEV_STATE_PORT_SPEED 0x0b00
58 #define SIRDEV_STATE_DONE 0x0c00
59 #define SIRDEV_STATE_ERROR 0x0d00
60 #define SIRDEV_STATE_COMPLETE 0x0e00
62 #define SIRDEV_STATE_DEAD 0xffff
65 struct sir_dev;
67 struct dongle_driver {
69 struct module *owner;
71 const char *driver_name;
73 IRDA_DONGLE type;
75 int (*open)(struct sir_dev *dev);
76 int (*close)(struct sir_dev *dev);
77 int (*reset)(struct sir_dev *dev);
78 int (*set_speed)(struct sir_dev *dev, unsigned speed);
80 struct list_head dongle_list;
83 struct sir_driver {
85 struct module *owner;
87 const char *driver_name;
89 int qos_mtt_bits;
91 int (*chars_in_buffer)(struct sir_dev *dev);
92 void (*wait_until_sent)(struct sir_dev *dev);
93 int (*set_speed)(struct sir_dev *dev, unsigned speed);
94 int (*set_dtr_rts)(struct sir_dev *dev, int dtr, int rts);
96 int (*do_write)(struct sir_dev *dev, const unsigned char *ptr, size_t len);
98 int (*start_dev)(struct sir_dev *dev);
99 int (*stop_dev)(struct sir_dev *dev);
103 /* exported */
105 int irda_register_dongle(struct dongle_driver *new);
106 int irda_unregister_dongle(struct dongle_driver *drv);
108 struct sir_dev *sirdev_get_instance(const struct sir_driver *drv,
109 const char *name);
110 int sirdev_put_instance(struct sir_dev *self);
112 int sirdev_set_dongle(struct sir_dev *dev, IRDA_DONGLE type);
113 void sirdev_write_complete(struct sir_dev *dev);
114 int sirdev_receive(struct sir_dev *dev, const unsigned char *cp, size_t count);
116 /* low level helpers for SIR device/dongle setup */
117 int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len);
118 int sirdev_raw_read(struct sir_dev *dev, char *buf, int len);
119 int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts);
121 /* not exported */
123 int sirdev_get_dongle(struct sir_dev *self, IRDA_DONGLE type);
124 int sirdev_put_dongle(struct sir_dev *self);
126 void sirdev_enable_rx(struct sir_dev *dev);
127 int sirdev_schedule_request(struct sir_dev *dev, int state, unsigned param);
129 /* inline helpers */
131 static inline int sirdev_schedule_speed(struct sir_dev *dev, unsigned speed)
133 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_SPEED, speed);
136 static inline int sirdev_schedule_dongle_open(struct sir_dev *dev, int dongle_id)
138 return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_OPEN, dongle_id);
141 static inline int sirdev_schedule_dongle_close(struct sir_dev *dev)
143 return sirdev_schedule_request(dev, SIRDEV_STATE_DONGLE_CLOSE, 0);
146 static inline int sirdev_schedule_dtr_rts(struct sir_dev *dev, int dtr, int rts)
148 int dtrrts;
150 dtrrts = ((dtr) ? 0x02 : 0x00) | ((rts) ? 0x01 : 0x00);
151 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_DTR_RTS, dtrrts);
154 #if 0
155 static inline int sirdev_schedule_mode(struct sir_dev *dev, int mode)
157 return sirdev_schedule_request(dev, SIRDEV_STATE_SET_MODE, mode);
159 #endif
162 struct sir_dev {
163 struct net_device *netdev;
165 struct irlap_cb *irlap;
167 struct qos_info qos;
169 char hwname[32];
171 struct sir_fsm fsm;
172 atomic_t enable_rx;
173 int raw_tx;
174 spinlock_t tx_lock;
176 u32 new_speed;
177 u32 flags;
179 unsigned speed;
181 iobuff_t tx_buff; /* Transmit buffer */
182 iobuff_t rx_buff; /* Receive buffer */
183 struct sk_buff *tx_skb;
185 const struct dongle_driver * dongle_drv;
186 const struct sir_driver * drv;
187 void *priv;
191 #endif /* IRDA_SIR_H */