Commit c9fb442e authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/jgarzik/irda-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 342f5580 c085b996
...@@ -173,13 +173,34 @@ typedef struct { ...@@ -173,13 +173,34 @@ typedef struct {
__u8 *head; /* start of buffer */ __u8 *head; /* start of buffer */
__u8 *data; /* start of data in buffer */ __u8 *data; /* start of data in buffer */
__u8 *tail; /* end of data in buffer */
int len; /* length of data */ int len; /* current length of data */
int truesize; /* total size of buffer */ int truesize; /* total allocated size of buffer */
__u16 fcs; __u16 fcs;
struct sk_buff *skb; /* ZeroCopy Rx in async_unwrap_char() */
} iobuff_t; } iobuff_t;
/* Maximum SIR frame (skb) that we expect to receive *unwrapped*.
* Max LAP MTU (I field) is 2048 bytes max (IrLAP 1.1, chapt 6.6.5, p40).
* Max LAP header is 2 bytes (for now).
* Max CRC is 2 bytes at SIR, 4 bytes at FIR.
* Need 1 byte for skb_reserve() to align IP header for IrLAN.
* Add a few extra bytes just to be safe (buffer is power of two anyway)
* Jean II */
#define IRDA_SKB_MAX_MTU 2064
/* Maximum SIR frame that we expect to send, wrapped (i.e. with XBOFS
* and escaped characters on top of above). */
#define IRDA_SIR_MAX_FRAME 4269
/* The SIR unwrapper async_unwrap_char() will use a Rx-copy-break mechanism
* when using the optional ZeroCopy Rx, where only small frames are memcpy
* to a smaller skb to save memory. This is the thresold under which copy
* will happen (and over which it won't happen).
* Some FIR drivers may use this #define as well...
* This is the same value as various Ethernet drivers. - Jean II */
#define IRDA_RX_COPY_THRESHOLD 256
/* Function prototypes */ /* Function prototypes */
int irda_device_init(void); int irda_device_init(void);
void irda_device_cleanup(void); void irda_device_cleanup(void);
......
...@@ -52,8 +52,6 @@ enum { ...@@ -52,8 +52,6 @@ enum {
/* Proto definitions */ /* Proto definitions */
int async_wrap_skb(struct sk_buff *skb, __u8 *tx_buff, int buffsize); int async_wrap_skb(struct sk_buff *skb, __u8 *tx_buff, int buffsize);
void async_bump(struct net_device *dev, struct net_device_stats *stats,
__u8 *buf, int len);
void async_unwrap_char(struct net_device *dev, struct net_device_stats *stats, void async_unwrap_char(struct net_device *dev, struct net_device_stats *stats,
iobuff_t *buf, __u8 byte); iobuff_t *buf, __u8 byte);
......
...@@ -443,6 +443,8 @@ static int ircomm_param_dte(void *instance, irda_param_t *param, int get) ...@@ -443,6 +443,8 @@ static int ircomm_param_dte(void *instance, irda_param_t *param, int get)
else { else {
dte = (__u8) param->pv.i; dte = (__u8) param->pv.i;
self->settings.dce = 0;
if (dte & IRCOMM_DELTA_DTR) if (dte & IRCOMM_DELTA_DTR)
self->settings.dce |= (IRCOMM_DELTA_DSR| self->settings.dce |= (IRCOMM_DELTA_DSR|
IRCOMM_DELTA_RI | IRCOMM_DELTA_RI |
......
...@@ -490,7 +490,8 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp) ...@@ -490,7 +490,8 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp)
if (line < 0x10) { if (line < 0x10) {
self->service_type = IRCOMM_3_WIRE | IRCOMM_9_WIRE; self->service_type = IRCOMM_3_WIRE | IRCOMM_9_WIRE;
self->settings.service_type = IRCOMM_9_WIRE; /* 9 wire as default */ self->settings.service_type = IRCOMM_9_WIRE; /* 9 wire as default */
self->settings.dce = IRCOMM_CTS | IRCOMM_CD; /* Default line settings */ /* Jan Kiszka -> add DSR/RI -> Conform to IrCOMM spec */
self->settings.dce = IRCOMM_CTS | IRCOMM_CD | IRCOMM_DSR | IRCOMM_RI; /* Default line settings */
IRDA_DEBUG(2, "%s(), IrCOMM device\n", __FUNCTION__ ); IRDA_DEBUG(2, "%s(), IrCOMM device\n", __FUNCTION__ );
} else { } else {
IRDA_DEBUG(2, "%s(), IrLPT device\n", __FUNCTION__ ); IRDA_DEBUG(2, "%s(), IrLPT device\n", __FUNCTION__ );
......
...@@ -1870,7 +1870,7 @@ static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event, ...@@ -1870,7 +1870,7 @@ static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event,
irlap_update_nr_received(self, info->nr); irlap_update_nr_received(self, info->nr);
irlap_wait_min_turn_around(self, &self->qos_tx); irlap_wait_min_turn_around(self, &self->qos_tx);
irlap_send_rr_frame(self, CMD_FRAME); irlap_send_rr_frame(self, RSP_FRAME);
irlap_start_wd_timer(self, self->wd_timeout); irlap_start_wd_timer(self, self->wd_timeout);
} }
...@@ -2035,18 +2035,18 @@ static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event, ...@@ -2035,18 +2035,18 @@ static int irlap_state_nrm_s(struct irlap_cb *self, IRLAP_EVENT event,
irlap_update_nr_received(self, info->nr); irlap_update_nr_received(self, info->nr);
if (self->remote_busy) { if (self->remote_busy) {
irlap_wait_min_turn_around(self, &self->qos_tx); irlap_wait_min_turn_around(self, &self->qos_tx);
irlap_send_rr_frame(self, CMD_FRAME); irlap_send_rr_frame(self, RSP_FRAME);
} else } else
irlap_resend_rejected_frames(self, CMD_FRAME); irlap_resend_rejected_frames(self, RSP_FRAME);
irlap_start_wd_timer(self, self->wd_timeout); irlap_start_wd_timer(self, self->wd_timeout);
break; break;
case RECV_SREJ_CMD: case RECV_SREJ_CMD:
irlap_update_nr_received(self, info->nr); irlap_update_nr_received(self, info->nr);
if (self->remote_busy) { if (self->remote_busy) {
irlap_wait_min_turn_around(self, &self->qos_tx); irlap_wait_min_turn_around(self, &self->qos_tx);
irlap_send_rr_frame(self, CMD_FRAME); irlap_send_rr_frame(self, RSP_FRAME);
} else } else
irlap_resend_rejected_frame(self, CMD_FRAME); irlap_resend_rejected_frame(self, RSP_FRAME);
irlap_start_wd_timer(self, self->wd_timeout); irlap_start_wd_timer(self, self->wd_timeout);
break; break;
case WD_TIMER_EXPIRED: case WD_TIMER_EXPIRED:
......
...@@ -165,6 +165,7 @@ EXPORT_SYMBOL(irda_task_delete); ...@@ -165,6 +165,7 @@ EXPORT_SYMBOL(irda_task_delete);
EXPORT_SYMBOL(async_wrap_skb); EXPORT_SYMBOL(async_wrap_skb);
EXPORT_SYMBOL(async_unwrap_char); EXPORT_SYMBOL(async_unwrap_char);
EXPORT_SYMBOL(irda_calc_crc16); EXPORT_SYMBOL(irda_calc_crc16);
EXPORT_SYMBOL(irda_crc16_table);
EXPORT_SYMBOL(irda_start_timer); EXPORT_SYMBOL(irda_start_timer);
EXPORT_SYMBOL(setup_dma); EXPORT_SYMBOL(setup_dma);
EXPORT_SYMBOL(infrared_mode); EXPORT_SYMBOL(infrared_mode);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment