patch-2.4.21 linux-2.4.21/drivers/usb/serial/io_ti.c
Next file: linux-2.4.21/drivers/usb/serial/ipaq.c
Previous file: linux-2.4.21/drivers/usb/serial/io_edgeport.c
Back to the patch index
Back to the overall index
- Lines: 103
- Date:
2003-06-13 07:51:37.000000000 -0700
- Orig file:
linux-2.4.20/drivers/usb/serial/io_ti.c
- Orig date:
2002-11-28 15:53:14.000000000 -0800
diff -urN linux-2.4.20/drivers/usb/serial/io_ti.c linux-2.4.21/drivers/usb/serial/io_ti.c
@@ -460,7 +460,7 @@
{
int status;
struct out_endpoint_desc_block *oedb;
- __u8 lsr;
+ __u8 *lsr;
int bytes_left = 0;
oedb = kmalloc (sizeof (* oedb), GFP_KERNEL);
@@ -469,6 +469,13 @@
return -ENOMEM;
}
+ lsr = kmalloc (1, GFP_KERNEL); /* Sigh, that's right, just one byte,
+ as not all platforms can do DMA
+ from stack */
+ if (!lsr) {
+ kfree(oedb);
+ return -ENOMEM;
+ }
/* Read the DMA Count Registers */
status = TIReadRam (port->port->serial->dev,
port->dma_address,
@@ -484,22 +491,25 @@
status = TIReadRam (port->port->serial->dev,
port->uart_base + UMPMEM_OFFS_UART_LSR,
1,
- &lsr);
+ lsr);
if (status)
goto exit_is_tx_active;
- dbg ("%s - LSR = 0x%X", __FUNCTION__, lsr);
+ dbg ("%s - LSR = 0x%X", __FUNCTION__, *lsr);
/* If either buffer has data or we are transmitting then return TRUE */
if ((oedb->XByteCount & 0x80 ) != 0 )
bytes_left += 64;
- if ((lsr & UMP_UART_LSR_TX_MASK ) == 0 )
+ if ((*lsr & UMP_UART_LSR_TX_MASK ) == 0 )
bytes_left += 1;
/* We return Not Active if we get any kind of error */
exit_is_tx_active:
dbg ("%s - return %d", __FUNCTION__, bytes_left );
+
+ kfree(lsr);
+ kfree(oedb);
return bytes_left;
}
@@ -1141,8 +1151,12 @@
dbg ( "%s - HARDWARE RESET return %d", __FUNCTION__, status);
/* return an error on purpose. */
+ kfree (firmware_version);
+ kfree (rom_desc);
+ kfree (ti_manuf_desc);
return -ENODEV;
}
+ kfree (firmware_version);
}
// Search for type 0xF2 record (firmware blank record)
else if ((start_address = TIGetDescriptorAddress (serial, I2C_DESC_TYPE_FIRMWARE_BLANK, rom_desc)) != 0) {
@@ -1549,17 +1563,17 @@
dbg ("%s - %02x", __FUNCTION__, msr);
- if (msr & (MSR_DELTA_CTS | MSR_DELTA_DSR | MSR_DELTA_RI | MSR_DELTA_CD)) {
+ if (msr & (EDGEPORT_MSR_DELTA_CTS | EDGEPORT_MSR_DELTA_DSR | EDGEPORT_MSR_DELTA_RI | EDGEPORT_MSR_DELTA_CD)) {
icount = &edge_port->icount;
/* update input line counters */
- if (msr & MSR_DELTA_CTS)
+ if (msr & EDGEPORT_MSR_DELTA_CTS)
icount->cts++;
- if (msr & MSR_DELTA_DSR)
+ if (msr & EDGEPORT_MSR_DELTA_DSR)
icount->dsr++;
- if (msr & MSR_DELTA_CD)
+ if (msr & EDGEPORT_MSR_DELTA_CD)
icount->dcd++;
- if (msr & MSR_DELTA_RI)
+ if (msr & EDGEPORT_MSR_DELTA_RI)
icount->rng++;
wake_up_interruptible (&edge_port->delta_msr_wait);
}
@@ -2416,10 +2430,10 @@
result = ((mcr & MCR_DTR) ? TIOCM_DTR: 0) /* 0x002 */
| ((mcr & MCR_RTS) ? TIOCM_RTS: 0) /* 0x004 */
- | ((msr & MSR_CTS) ? TIOCM_CTS: 0) /* 0x020 */
- | ((msr & MSR_CD) ? TIOCM_CAR: 0) /* 0x040 */
- | ((msr & MSR_RI) ? TIOCM_RI: 0) /* 0x080 */
- | ((msr & MSR_DSR) ? TIOCM_DSR: 0); /* 0x100 */
+ | ((msr & EDGEPORT_MSR_CTS) ? TIOCM_CTS: 0) /* 0x020 */
+ | ((msr & EDGEPORT_MSR_CD) ? TIOCM_CAR: 0) /* 0x040 */
+ | ((msr & EDGEPORT_MSR_RI) ? TIOCM_RI: 0) /* 0x080 */
+ | ((msr & EDGEPORT_MSR_DSR) ? TIOCM_DSR: 0); /* 0x100 */
dbg("%s -- %x", __FUNCTION__, result);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)