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 v3.2-rc1 3031 lines 79 kB view raw
1/********************************************************************* 2 * 3 * Description: Driver for the SMC Infrared Communications Controller 4 * Status: Experimental. 5 * Author: Daniele Peri (peri@csai.unipa.it) 6 * Created at: 7 * Modified at: 8 * Modified by: 9 * 10 * Copyright (c) 2002 Daniele Peri 11 * All Rights Reserved. 12 * Copyright (c) 2002 Jean Tourrilhes 13 * Copyright (c) 2006 Linus Walleij 14 * 15 * 16 * Based on smc-ircc.c: 17 * 18 * Copyright (c) 2001 Stefani Seibold 19 * Copyright (c) 1999-2001 Dag Brattli 20 * Copyright (c) 1998-1999 Thomas Davis, 21 * 22 * and irport.c: 23 * 24 * Copyright (c) 1997, 1998, 1999-2000 Dag Brattli, All Rights Reserved. 25 * 26 * 27 * This program is free software; you can redistribute it and/or 28 * modify it under the terms of the GNU General Public License as 29 * published by the Free Software Foundation; either version 2 of 30 * the License, or (at your option) any later version. 31 * 32 * This program is distributed in the hope that it will be useful, 33 * but WITHOUT ANY WARRANTY; without even the implied warranty of 34 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 35 * GNU General Public License for more details. 36 * 37 * You should have received a copy of the GNU General Public License 38 * along with this program; if not, write to the Free Software 39 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 40 * MA 02111-1307 USA 41 * 42 ********************************************************************/ 43 44#include <linux/module.h> 45#include <linux/kernel.h> 46#include <linux/types.h> 47#include <linux/skbuff.h> 48#include <linux/netdevice.h> 49#include <linux/ioport.h> 50#include <linux/delay.h> 51#include <linux/init.h> 52#include <linux/interrupt.h> 53#include <linux/rtnetlink.h> 54#include <linux/serial_reg.h> 55#include <linux/dma-mapping.h> 56#include <linux/pnp.h> 57#include <linux/platform_device.h> 58#include <linux/gfp.h> 59 60#include <asm/io.h> 61#include <asm/dma.h> 62#include <asm/byteorder.h> 63 64#include <linux/spinlock.h> 65#include <linux/pm.h> 66#ifdef CONFIG_PCI 67#include <linux/pci.h> 68#endif 69 70#include <net/irda/wrapper.h> 71#include <net/irda/irda.h> 72#include <net/irda/irda_device.h> 73 74#include "smsc-ircc2.h" 75#include "smsc-sio.h" 76 77 78MODULE_AUTHOR("Daniele Peri <peri@csai.unipa.it>"); 79MODULE_DESCRIPTION("SMC IrCC SIR/FIR controller driver"); 80MODULE_LICENSE("GPL"); 81 82static int smsc_nopnp = 1; 83module_param_named(nopnp, smsc_nopnp, bool, 0); 84MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings, defaults to true"); 85 86#define DMA_INVAL 255 87static int ircc_dma = DMA_INVAL; 88module_param(ircc_dma, int, 0); 89MODULE_PARM_DESC(ircc_dma, "DMA channel"); 90 91#define IRQ_INVAL 255 92static int ircc_irq = IRQ_INVAL; 93module_param(ircc_irq, int, 0); 94MODULE_PARM_DESC(ircc_irq, "IRQ line"); 95 96static int ircc_fir; 97module_param(ircc_fir, int, 0); 98MODULE_PARM_DESC(ircc_fir, "FIR Base Address"); 99 100static int ircc_sir; 101module_param(ircc_sir, int, 0); 102MODULE_PARM_DESC(ircc_sir, "SIR Base Address"); 103 104static int ircc_cfg; 105module_param(ircc_cfg, int, 0); 106MODULE_PARM_DESC(ircc_cfg, "Configuration register base address"); 107 108static int ircc_transceiver; 109module_param(ircc_transceiver, int, 0); 110MODULE_PARM_DESC(ircc_transceiver, "Transceiver type"); 111 112/* Types */ 113 114#ifdef CONFIG_PCI 115struct smsc_ircc_subsystem_configuration { 116 unsigned short vendor; /* PCI vendor ID */ 117 unsigned short device; /* PCI vendor ID */ 118 unsigned short subvendor; /* PCI subsystem vendor ID */ 119 unsigned short subdevice; /* PCI subsystem device ID */ 120 unsigned short sir_io; /* I/O port for SIR */ 121 unsigned short fir_io; /* I/O port for FIR */ 122 unsigned char fir_irq; /* FIR IRQ */ 123 unsigned char fir_dma; /* FIR DMA */ 124 unsigned short cfg_base; /* I/O port for chip configuration */ 125 int (*preconfigure)(struct pci_dev *dev, struct smsc_ircc_subsystem_configuration *conf); /* Preconfig function */ 126 const char *name; /* name shown as info */ 127}; 128#endif 129 130struct smsc_transceiver { 131 char *name; 132 void (*set_for_speed)(int fir_base, u32 speed); 133 int (*probe)(int fir_base); 134}; 135 136struct smsc_chip { 137 char *name; 138 #if 0 139 u8 type; 140 #endif 141 u16 flags; 142 u8 devid; 143 u8 rev; 144}; 145 146struct smsc_chip_address { 147 unsigned int cfg_base; 148 unsigned int type; 149}; 150 151/* Private data for each instance */ 152struct smsc_ircc_cb { 153 struct net_device *netdev; /* Yes! we are some kind of netdevice */ 154 struct irlap_cb *irlap; /* The link layer we are binded to */ 155 156 chipio_t io; /* IrDA controller information */ 157 iobuff_t tx_buff; /* Transmit buffer */ 158 iobuff_t rx_buff; /* Receive buffer */ 159 dma_addr_t tx_buff_dma; 160 dma_addr_t rx_buff_dma; 161 162 struct qos_info qos; /* QoS capabilities for this device */ 163 164 spinlock_t lock; /* For serializing operations */ 165 166 __u32 new_speed; 167 __u32 flags; /* Interface flags */ 168 169 int tx_buff_offsets[10]; /* Offsets between frames in tx_buff */ 170 int tx_len; /* Number of frames in tx_buff */ 171 172 int transceiver; 173 struct platform_device *pldev; 174}; 175 176/* Constants */ 177 178#define SMSC_IRCC2_DRIVER_NAME "smsc-ircc2" 179 180#define SMSC_IRCC2_C_IRDA_FALLBACK_SPEED 9600 181#define SMSC_IRCC2_C_DEFAULT_TRANSCEIVER 1 182#define SMSC_IRCC2_C_NET_TIMEOUT 0 183#define SMSC_IRCC2_C_SIR_STOP 0 184 185static const char *driver_name = SMSC_IRCC2_DRIVER_NAME; 186 187/* Prototypes */ 188 189static int smsc_ircc_open(unsigned int firbase, unsigned int sirbase, u8 dma, u8 irq); 190static int smsc_ircc_present(unsigned int fir_base, unsigned int sir_base); 191static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq); 192static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self); 193static void smsc_ircc_init_chip(struct smsc_ircc_cb *self); 194static int __exit smsc_ircc_close(struct smsc_ircc_cb *self); 195static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self); 196static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self); 197static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self); 198static netdev_tx_t smsc_ircc_hard_xmit_sir(struct sk_buff *skb, 199 struct net_device *dev); 200static netdev_tx_t smsc_ircc_hard_xmit_fir(struct sk_buff *skb, 201 struct net_device *dev); 202static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs); 203static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self); 204static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed); 205static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed); 206static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id); 207static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev); 208static void smsc_ircc_sir_start(struct smsc_ircc_cb *self); 209#if SMSC_IRCC2_C_SIR_STOP 210static void smsc_ircc_sir_stop(struct smsc_ircc_cb *self); 211#endif 212static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self); 213static int smsc_ircc_sir_write(int iobase, int fifo_size, __u8 *buf, int len); 214static int smsc_ircc_net_open(struct net_device *dev); 215static int smsc_ircc_net_close(struct net_device *dev); 216static int smsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 217#if SMSC_IRCC2_C_NET_TIMEOUT 218static void smsc_ircc_timeout(struct net_device *dev); 219#endif 220static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self); 221static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self); 222static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed); 223static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self); 224 225/* Probing */ 226static int __init smsc_ircc_look_for_chips(void); 227static const struct smsc_chip * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const struct smsc_chip *chip, char *type); 228static int __init smsc_superio_flat(const struct smsc_chip *chips, unsigned short cfg_base, char *type); 229static int __init smsc_superio_paged(const struct smsc_chip *chips, unsigned short cfg_base, char *type); 230static int __init smsc_superio_fdc(unsigned short cfg_base); 231static int __init smsc_superio_lpc(unsigned short cfg_base); 232#ifdef CONFIG_PCI 233static int __init preconfigure_smsc_chip(struct smsc_ircc_subsystem_configuration *conf); 234static int __init preconfigure_through_82801(struct pci_dev *dev, struct smsc_ircc_subsystem_configuration *conf); 235static void __init preconfigure_ali_port(struct pci_dev *dev, 236 unsigned short port); 237static int __init preconfigure_through_ali(struct pci_dev *dev, struct smsc_ircc_subsystem_configuration *conf); 238static int __init smsc_ircc_preconfigure_subsystems(unsigned short ircc_cfg, 239 unsigned short ircc_fir, 240 unsigned short ircc_sir, 241 unsigned char ircc_dma, 242 unsigned char ircc_irq); 243#endif 244 245/* Transceivers specific functions */ 246 247static void smsc_ircc_set_transceiver_toshiba_sat1800(int fir_base, u32 speed); 248static int smsc_ircc_probe_transceiver_toshiba_sat1800(int fir_base); 249static void smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select(int fir_base, u32 speed); 250static int smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select(int fir_base); 251static void smsc_ircc_set_transceiver_smsc_ircc_atc(int fir_base, u32 speed); 252static int smsc_ircc_probe_transceiver_smsc_ircc_atc(int fir_base); 253 254/* Power Management */ 255 256static int smsc_ircc_suspend(struct platform_device *dev, pm_message_t state); 257static int smsc_ircc_resume(struct platform_device *dev); 258 259static struct platform_driver smsc_ircc_driver = { 260 .suspend = smsc_ircc_suspend, 261 .resume = smsc_ircc_resume, 262 .driver = { 263 .name = SMSC_IRCC2_DRIVER_NAME, 264 }, 265}; 266 267/* Transceivers for SMSC-ircc */ 268 269static struct smsc_transceiver smsc_transceivers[] = 270{ 271 { "Toshiba Satellite 1800 (GP data pin select)", smsc_ircc_set_transceiver_toshiba_sat1800, smsc_ircc_probe_transceiver_toshiba_sat1800 }, 272 { "Fast pin select", smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select, smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select }, 273 { "ATC IRMode", smsc_ircc_set_transceiver_smsc_ircc_atc, smsc_ircc_probe_transceiver_smsc_ircc_atc }, 274 { NULL, NULL } 275}; 276#define SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS (ARRAY_SIZE(smsc_transceivers) - 1) 277 278/* SMC SuperIO chipsets definitions */ 279 280#define KEY55_1 0 /* SuperIO Configuration mode with Key <0x55> */ 281#define KEY55_2 1 /* SuperIO Configuration mode with Key <0x55,0x55> */ 282#define NoIRDA 2 /* SuperIO Chip has no IRDA Port */ 283#define SIR 0 /* SuperIO Chip has only slow IRDA */ 284#define FIR 4 /* SuperIO Chip has fast IRDA */ 285#define SERx4 8 /* SuperIO Chip supports 115,2 KBaud * 4=460,8 KBaud */ 286 287static struct smsc_chip __initdata fdc_chips_flat[] = 288{ 289 /* Base address 0x3f0 or 0x370 */ 290 { "37C44", KEY55_1|NoIRDA, 0x00, 0x00 }, /* This chip cannot be detected */ 291 { "37C665GT", KEY55_2|NoIRDA, 0x65, 0x01 }, 292 { "37C665GT", KEY55_2|NoIRDA, 0x66, 0x01 }, 293 { "37C669", KEY55_2|SIR|SERx4, 0x03, 0x02 }, 294 { "37C669", KEY55_2|SIR|SERx4, 0x04, 0x02 }, /* ID? */ 295 { "37C78", KEY55_2|NoIRDA, 0x78, 0x00 }, 296 { "37N769", KEY55_1|FIR|SERx4, 0x28, 0x00 }, 297 { "37N869", KEY55_1|FIR|SERx4, 0x29, 0x00 }, 298 { NULL } 299}; 300 301static struct smsc_chip __initdata fdc_chips_paged[] = 302{ 303 /* Base address 0x3f0 or 0x370 */ 304 { "37B72X", KEY55_1|SIR|SERx4, 0x4c, 0x00 }, 305 { "37B77X", KEY55_1|SIR|SERx4, 0x43, 0x00 }, 306 { "37B78X", KEY55_1|SIR|SERx4, 0x44, 0x00 }, 307 { "37B80X", KEY55_1|SIR|SERx4, 0x42, 0x00 }, 308 { "37C67X", KEY55_1|FIR|SERx4, 0x40, 0x00 }, 309 { "37C93X", KEY55_2|SIR|SERx4, 0x02, 0x01 }, 310 { "37C93XAPM", KEY55_1|SIR|SERx4, 0x30, 0x01 }, 311 { "37C93XFR", KEY55_2|FIR|SERx4, 0x03, 0x01 }, 312 { "37M707", KEY55_1|SIR|SERx4, 0x42, 0x00 }, 313 { "37M81X", KEY55_1|SIR|SERx4, 0x4d, 0x00 }, 314 { "37N958FR", KEY55_1|FIR|SERx4, 0x09, 0x04 }, 315 { "37N971", KEY55_1|FIR|SERx4, 0x0a, 0x00 }, 316 { "37N972", KEY55_1|FIR|SERx4, 0x0b, 0x00 }, 317 { NULL } 318}; 319 320static struct smsc_chip __initdata lpc_chips_flat[] = 321{ 322 /* Base address 0x2E or 0x4E */ 323 { "47N227", KEY55_1|FIR|SERx4, 0x5a, 0x00 }, 324 { "47N227", KEY55_1|FIR|SERx4, 0x7a, 0x00 }, 325 { "47N267", KEY55_1|FIR|SERx4, 0x5e, 0x00 }, 326 { NULL } 327}; 328 329static struct smsc_chip __initdata lpc_chips_paged[] = 330{ 331 /* Base address 0x2E or 0x4E */ 332 { "47B27X", KEY55_1|SIR|SERx4, 0x51, 0x00 }, 333 { "47B37X", KEY55_1|SIR|SERx4, 0x52, 0x00 }, 334 { "47M10X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, 335 { "47M120", KEY55_1|NoIRDA|SERx4, 0x5c, 0x00 }, 336 { "47M13X", KEY55_1|SIR|SERx4, 0x59, 0x00 }, 337 { "47M14X", KEY55_1|SIR|SERx4, 0x5f, 0x00 }, 338 { "47N252", KEY55_1|FIR|SERx4, 0x0e, 0x00 }, 339 { "47S42X", KEY55_1|SIR|SERx4, 0x57, 0x00 }, 340 { NULL } 341}; 342 343#define SMSCSIO_TYPE_FDC 1 344#define SMSCSIO_TYPE_LPC 2 345#define SMSCSIO_TYPE_FLAT 4 346#define SMSCSIO_TYPE_PAGED 8 347 348static struct smsc_chip_address __initdata possible_addresses[] = 349{ 350 { 0x3f0, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED }, 351 { 0x370, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED }, 352 { 0xe0, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED }, 353 { 0x2e, SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED }, 354 { 0x4e, SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED }, 355 { 0, 0 } 356}; 357 358/* Globals */ 359 360static struct smsc_ircc_cb *dev_self[] = { NULL, NULL }; 361static unsigned short dev_count; 362 363static inline void register_bank(int iobase, int bank) 364{ 365 outb(((inb(iobase + IRCC_MASTER) & 0xf0) | (bank & 0x07)), 366 iobase + IRCC_MASTER); 367} 368 369/* PNP hotplug support */ 370static const struct pnp_device_id smsc_ircc_pnp_table[] = { 371 { .id = "SMCf010", .driver_data = 0 }, 372 /* and presumably others */ 373 { } 374}; 375MODULE_DEVICE_TABLE(pnp, smsc_ircc_pnp_table); 376 377static int pnp_driver_registered; 378 379#ifdef CONFIG_PNP 380static int __devinit smsc_ircc_pnp_probe(struct pnp_dev *dev, 381 const struct pnp_device_id *dev_id) 382{ 383 unsigned int firbase, sirbase; 384 u8 dma, irq; 385 386 if (!(pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && 387 pnp_dma_valid(dev, 0) && pnp_irq_valid(dev, 0))) 388 return -EINVAL; 389 390 sirbase = pnp_port_start(dev, 0); 391 firbase = pnp_port_start(dev, 1); 392 dma = pnp_dma(dev, 0); 393 irq = pnp_irq(dev, 0); 394 395 if (smsc_ircc_open(firbase, sirbase, dma, irq)) 396 return -ENODEV; 397 398 return 0; 399} 400 401static struct pnp_driver smsc_ircc_pnp_driver = { 402 .name = "smsc-ircc2", 403 .id_table = smsc_ircc_pnp_table, 404 .probe = smsc_ircc_pnp_probe, 405}; 406#else /* CONFIG_PNP */ 407static struct pnp_driver smsc_ircc_pnp_driver; 408#endif 409 410/******************************************************************************* 411 * 412 * 413 * SMSC-ircc stuff 414 * 415 * 416 *******************************************************************************/ 417 418static int __init smsc_ircc_legacy_probe(void) 419{ 420 int ret = 0; 421 422#ifdef CONFIG_PCI 423 if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir, ircc_dma, ircc_irq) < 0) { 424 /* Ignore errors from preconfiguration */ 425 IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name); 426 } 427#endif 428 429 if (ircc_fir > 0 && ircc_sir > 0) { 430 IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir); 431 IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir); 432 433 if (smsc_ircc_open(ircc_fir, ircc_sir, ircc_dma, ircc_irq)) 434 ret = -ENODEV; 435 } else { 436 ret = -ENODEV; 437 438 /* try user provided configuration register base address */ 439 if (ircc_cfg > 0) { 440 IRDA_MESSAGE(" Overriding configuration address " 441 "0x%04x\n", ircc_cfg); 442 if (!smsc_superio_fdc(ircc_cfg)) 443 ret = 0; 444 if (!smsc_superio_lpc(ircc_cfg)) 445 ret = 0; 446 } 447 448 if (smsc_ircc_look_for_chips() > 0) 449 ret = 0; 450 } 451 return ret; 452} 453 454/* 455 * Function smsc_ircc_init () 456 * 457 * Initialize chip. Just try to find out how many chips we are dealing with 458 * and where they are 459 */ 460static int __init smsc_ircc_init(void) 461{ 462 int ret; 463 464 IRDA_DEBUG(1, "%s\n", __func__); 465 466 ret = platform_driver_register(&smsc_ircc_driver); 467 if (ret) { 468 IRDA_ERROR("%s, Can't register driver!\n", driver_name); 469 return ret; 470 } 471 472 dev_count = 0; 473 474 if (smsc_nopnp || !pnp_platform_devices || 475 ircc_cfg || ircc_fir || ircc_sir || 476 ircc_dma != DMA_INVAL || ircc_irq != IRQ_INVAL) { 477 ret = smsc_ircc_legacy_probe(); 478 } else { 479 if (pnp_register_driver(&smsc_ircc_pnp_driver) == 0) 480 pnp_driver_registered = 1; 481 } 482 483 if (ret) { 484 if (pnp_driver_registered) 485 pnp_unregister_driver(&smsc_ircc_pnp_driver); 486 platform_driver_unregister(&smsc_ircc_driver); 487 } 488 489 return ret; 490} 491 492static netdev_tx_t smsc_ircc_net_xmit(struct sk_buff *skb, 493 struct net_device *dev) 494{ 495 struct smsc_ircc_cb *self = netdev_priv(dev); 496 497 if (self->io.speed > 115200) 498 return smsc_ircc_hard_xmit_fir(skb, dev); 499 else 500 return smsc_ircc_hard_xmit_sir(skb, dev); 501} 502 503static const struct net_device_ops smsc_ircc_netdev_ops = { 504 .ndo_open = smsc_ircc_net_open, 505 .ndo_stop = smsc_ircc_net_close, 506 .ndo_do_ioctl = smsc_ircc_net_ioctl, 507 .ndo_start_xmit = smsc_ircc_net_xmit, 508#if SMSC_IRCC2_C_NET_TIMEOUT 509 .ndo_tx_timeout = smsc_ircc_timeout, 510#endif 511}; 512 513/* 514 * Function smsc_ircc_open (firbase, sirbase, dma, irq) 515 * 516 * Try to open driver instance 517 * 518 */ 519static int __devinit smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq) 520{ 521 struct smsc_ircc_cb *self; 522 struct net_device *dev; 523 int err; 524 525 IRDA_DEBUG(1, "%s\n", __func__); 526 527 err = smsc_ircc_present(fir_base, sir_base); 528 if (err) 529 goto err_out; 530 531 err = -ENOMEM; 532 if (dev_count >= ARRAY_SIZE(dev_self)) { 533 IRDA_WARNING("%s(), too many devices!\n", __func__); 534 goto err_out1; 535 } 536 537 /* 538 * Allocate new instance of the driver 539 */ 540 dev = alloc_irdadev(sizeof(struct smsc_ircc_cb)); 541 if (!dev) { 542 IRDA_WARNING("%s() can't allocate net device\n", __func__); 543 goto err_out1; 544 } 545 546#if SMSC_IRCC2_C_NET_TIMEOUT 547 dev->watchdog_timeo = HZ * 2; /* Allow enough time for speed change */ 548#endif 549 dev->netdev_ops = &smsc_ircc_netdev_ops; 550 551 self = netdev_priv(dev); 552 self->netdev = dev; 553 554 /* Make ifconfig display some details */ 555 dev->base_addr = self->io.fir_base = fir_base; 556 dev->irq = self->io.irq = irq; 557 558 /* Need to store self somewhere */ 559 dev_self[dev_count] = self; 560 spin_lock_init(&self->lock); 561 562 self->rx_buff.truesize = SMSC_IRCC2_RX_BUFF_TRUESIZE; 563 self->tx_buff.truesize = SMSC_IRCC2_TX_BUFF_TRUESIZE; 564 565 self->rx_buff.head = 566 dma_alloc_coherent(NULL, self->rx_buff.truesize, 567 &self->rx_buff_dma, GFP_KERNEL); 568 if (self->rx_buff.head == NULL) { 569 IRDA_ERROR("%s, Can't allocate memory for receive buffer!\n", 570 driver_name); 571 goto err_out2; 572 } 573 574 self->tx_buff.head = 575 dma_alloc_coherent(NULL, self->tx_buff.truesize, 576 &self->tx_buff_dma, GFP_KERNEL); 577 if (self->tx_buff.head == NULL) { 578 IRDA_ERROR("%s, Can't allocate memory for transmit buffer!\n", 579 driver_name); 580 goto err_out3; 581 } 582 583 memset(self->rx_buff.head, 0, self->rx_buff.truesize); 584 memset(self->tx_buff.head, 0, self->tx_buff.truesize); 585 586 self->rx_buff.in_frame = FALSE; 587 self->rx_buff.state = OUTSIDE_FRAME; 588 self->tx_buff.data = self->tx_buff.head; 589 self->rx_buff.data = self->rx_buff.head; 590 591 smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq); 592 smsc_ircc_setup_qos(self); 593 smsc_ircc_init_chip(self); 594 595 if (ircc_transceiver > 0 && 596 ircc_transceiver < SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS) 597 self->transceiver = ircc_transceiver; 598 else 599 smsc_ircc_probe_transceiver(self); 600 601 err = register_netdev(self->netdev); 602 if (err) { 603 IRDA_ERROR("%s, Network device registration failed!\n", 604 driver_name); 605 goto err_out4; 606 } 607 608 self->pldev = platform_device_register_simple(SMSC_IRCC2_DRIVER_NAME, 609 dev_count, NULL, 0); 610 if (IS_ERR(self->pldev)) { 611 err = PTR_ERR(self->pldev); 612 goto err_out5; 613 } 614 platform_set_drvdata(self->pldev, self); 615 616 IRDA_MESSAGE("IrDA: Registered device %s\n", dev->name); 617 dev_count++; 618 619 return 0; 620 621 err_out5: 622 unregister_netdev(self->netdev); 623 624 err_out4: 625 dma_free_coherent(NULL, self->tx_buff.truesize, 626 self->tx_buff.head, self->tx_buff_dma); 627 err_out3: 628 dma_free_coherent(NULL, self->rx_buff.truesize, 629 self->rx_buff.head, self->rx_buff_dma); 630 err_out2: 631 free_netdev(self->netdev); 632 dev_self[dev_count] = NULL; 633 err_out1: 634 release_region(fir_base, SMSC_IRCC2_FIR_CHIP_IO_EXTENT); 635 release_region(sir_base, SMSC_IRCC2_SIR_CHIP_IO_EXTENT); 636 err_out: 637 return err; 638} 639 640/* 641 * Function smsc_ircc_present(fir_base, sir_base) 642 * 643 * Check the smsc-ircc chip presence 644 * 645 */ 646static int smsc_ircc_present(unsigned int fir_base, unsigned int sir_base) 647{ 648 unsigned char low, high, chip, config, dma, irq, version; 649 650 if (!request_region(fir_base, SMSC_IRCC2_FIR_CHIP_IO_EXTENT, 651 driver_name)) { 652 IRDA_WARNING("%s: can't get fir_base of 0x%03x\n", 653 __func__, fir_base); 654 goto out1; 655 } 656 657 if (!request_region(sir_base, SMSC_IRCC2_SIR_CHIP_IO_EXTENT, 658 driver_name)) { 659 IRDA_WARNING("%s: can't get sir_base of 0x%03x\n", 660 __func__, sir_base); 661 goto out2; 662 } 663 664 register_bank(fir_base, 3); 665 666 high = inb(fir_base + IRCC_ID_HIGH); 667 low = inb(fir_base + IRCC_ID_LOW); 668 chip = inb(fir_base + IRCC_CHIP_ID); 669 version = inb(fir_base + IRCC_VERSION); 670 config = inb(fir_base + IRCC_INTERFACE); 671 dma = config & IRCC_INTERFACE_DMA_MASK; 672 irq = (config & IRCC_INTERFACE_IRQ_MASK) >> 4; 673 674 if (high != 0x10 || low != 0xb8 || (chip != 0xf1 && chip != 0xf2)) { 675 IRDA_WARNING("%s(), addr 0x%04x - no device found!\n", 676 __func__, fir_base); 677 goto out3; 678 } 679 IRDA_MESSAGE("SMsC IrDA Controller found\n IrCC version %d.%d, " 680 "firport 0x%03x, sirport 0x%03x dma=%d, irq=%d\n", 681 chip & 0x0f, version, fir_base, sir_base, dma, irq); 682 683 return 0; 684 685 out3: 686 release_region(sir_base, SMSC_IRCC2_SIR_CHIP_IO_EXTENT); 687 out2: 688 release_region(fir_base, SMSC_IRCC2_FIR_CHIP_IO_EXTENT); 689 out1: 690 return -ENODEV; 691} 692 693/* 694 * Function smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq) 695 * 696 * Setup I/O 697 * 698 */ 699static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, 700 unsigned int fir_base, unsigned int sir_base, 701 u8 dma, u8 irq) 702{ 703 unsigned char config, chip_dma, chip_irq; 704 705 register_bank(fir_base, 3); 706 config = inb(fir_base + IRCC_INTERFACE); 707 chip_dma = config & IRCC_INTERFACE_DMA_MASK; 708 chip_irq = (config & IRCC_INTERFACE_IRQ_MASK) >> 4; 709 710 self->io.fir_base = fir_base; 711 self->io.sir_base = sir_base; 712 self->io.fir_ext = SMSC_IRCC2_FIR_CHIP_IO_EXTENT; 713 self->io.sir_ext = SMSC_IRCC2_SIR_CHIP_IO_EXTENT; 714 self->io.fifo_size = SMSC_IRCC2_FIFO_SIZE; 715 self->io.speed = SMSC_IRCC2_C_IRDA_FALLBACK_SPEED; 716 717 if (irq != IRQ_INVAL) { 718 if (irq != chip_irq) 719 IRDA_MESSAGE("%s, Overriding IRQ - chip says %d, using %d\n", 720 driver_name, chip_irq, irq); 721 self->io.irq = irq; 722 } else 723 self->io.irq = chip_irq; 724 725 if (dma != DMA_INVAL) { 726 if (dma != chip_dma) 727 IRDA_MESSAGE("%s, Overriding DMA - chip says %d, using %d\n", 728 driver_name, chip_dma, dma); 729 self->io.dma = dma; 730 } else 731 self->io.dma = chip_dma; 732 733} 734 735/* 736 * Function smsc_ircc_setup_qos(self) 737 * 738 * Setup qos 739 * 740 */ 741static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self) 742{ 743 /* Initialize QoS for this device */ 744 irda_init_max_qos_capabilies(&self->qos); 745 746 self->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| 747 IR_115200|IR_576000|IR_1152000|(IR_4000000 << 8); 748 749 self->qos.min_turn_time.bits = SMSC_IRCC2_MIN_TURN_TIME; 750 self->qos.window_size.bits = SMSC_IRCC2_WINDOW_SIZE; 751 irda_qos_bits_to_value(&self->qos); 752} 753 754/* 755 * Function smsc_ircc_init_chip(self) 756 * 757 * Init chip 758 * 759 */ 760static void smsc_ircc_init_chip(struct smsc_ircc_cb *self) 761{ 762 int iobase = self->io.fir_base; 763 764 register_bank(iobase, 0); 765 outb(IRCC_MASTER_RESET, iobase + IRCC_MASTER); 766 outb(0x00, iobase + IRCC_MASTER); 767 768 register_bank(iobase, 1); 769 outb(((inb(iobase + IRCC_SCE_CFGA) & 0x87) | IRCC_CFGA_IRDA_SIR_A), 770 iobase + IRCC_SCE_CFGA); 771 772#ifdef smsc_669 /* Uses pin 88/89 for Rx/Tx */ 773 outb(((inb(iobase + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_COM), 774 iobase + IRCC_SCE_CFGB); 775#else 776 outb(((inb(iobase + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_IR), 777 iobase + IRCC_SCE_CFGB); 778#endif 779 (void) inb(iobase + IRCC_FIFO_THRESHOLD); 780 outb(SMSC_IRCC2_FIFO_THRESHOLD, iobase + IRCC_FIFO_THRESHOLD); 781 782 register_bank(iobase, 4); 783 outb((inb(iobase + IRCC_CONTROL) & 0x30), iobase + IRCC_CONTROL); 784 785 register_bank(iobase, 0); 786 outb(0, iobase + IRCC_LCR_A); 787 788 smsc_ircc_set_sir_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); 789 790 /* Power on device */ 791 outb(0x00, iobase + IRCC_MASTER); 792} 793 794/* 795 * Function smsc_ircc_net_ioctl (dev, rq, cmd) 796 * 797 * Process IOCTL commands for this device 798 * 799 */ 800static int smsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 801{ 802 struct if_irda_req *irq = (struct if_irda_req *) rq; 803 struct smsc_ircc_cb *self; 804 unsigned long flags; 805 int ret = 0; 806 807 IRDA_ASSERT(dev != NULL, return -1;); 808 809 self = netdev_priv(dev); 810 811 IRDA_ASSERT(self != NULL, return -1;); 812 813 IRDA_DEBUG(2, "%s(), %s, (cmd=0x%X)\n", __func__, dev->name, cmd); 814 815 switch (cmd) { 816 case SIOCSBANDWIDTH: /* Set bandwidth */ 817 if (!capable(CAP_NET_ADMIN)) 818 ret = -EPERM; 819 else { 820 /* Make sure we are the only one touching 821 * self->io.speed and the hardware - Jean II */ 822 spin_lock_irqsave(&self->lock, flags); 823 smsc_ircc_change_speed(self, irq->ifr_baudrate); 824 spin_unlock_irqrestore(&self->lock, flags); 825 } 826 break; 827 case SIOCSMEDIABUSY: /* Set media busy */ 828 if (!capable(CAP_NET_ADMIN)) { 829 ret = -EPERM; 830 break; 831 } 832 833 irda_device_set_media_busy(self->netdev, TRUE); 834 break; 835 case SIOCGRECEIVING: /* Check if we are receiving right now */ 836 irq->ifr_receiving = smsc_ircc_is_receiving(self); 837 break; 838 #if 0 839 case SIOCSDTRRTS: 840 if (!capable(CAP_NET_ADMIN)) { 841 ret = -EPERM; 842 break; 843 } 844 smsc_ircc_sir_set_dtr_rts(dev, irq->ifr_dtr, irq->ifr_rts); 845 break; 846 #endif 847 default: 848 ret = -EOPNOTSUPP; 849 } 850 851 return ret; 852} 853 854#if SMSC_IRCC2_C_NET_TIMEOUT 855/* 856 * Function smsc_ircc_timeout (struct net_device *dev) 857 * 858 * The networking timeout management. 859 * 860 */ 861 862static void smsc_ircc_timeout(struct net_device *dev) 863{ 864 struct smsc_ircc_cb *self = netdev_priv(dev); 865 unsigned long flags; 866 867 IRDA_WARNING("%s: transmit timed out, changing speed to: %d\n", 868 dev->name, self->io.speed); 869 spin_lock_irqsave(&self->lock, flags); 870 smsc_ircc_sir_start(self); 871 smsc_ircc_change_speed(self, self->io.speed); 872 dev->trans_start = jiffies; /* prevent tx timeout */ 873 netif_wake_queue(dev); 874 spin_unlock_irqrestore(&self->lock, flags); 875} 876#endif 877 878/* 879 * Function smsc_ircc_hard_xmit_sir (struct sk_buff *skb, struct net_device *dev) 880 * 881 * Transmits the current frame until FIFO is full, then 882 * waits until the next transmit interrupt, and continues until the 883 * frame is transmitted. 884 */ 885static netdev_tx_t smsc_ircc_hard_xmit_sir(struct sk_buff *skb, 886 struct net_device *dev) 887{ 888 struct smsc_ircc_cb *self; 889 unsigned long flags; 890 s32 speed; 891 892 IRDA_DEBUG(1, "%s\n", __func__); 893 894 IRDA_ASSERT(dev != NULL, return NETDEV_TX_OK;); 895 896 self = netdev_priv(dev); 897 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); 898 899 netif_stop_queue(dev); 900 901 /* Make sure test of self->io.speed & speed change are atomic */ 902 spin_lock_irqsave(&self->lock, flags); 903 904 /* Check if we need to change the speed */ 905 speed = irda_get_next_speed(skb); 906 if (speed != self->io.speed && speed != -1) { 907 /* Check for empty frame */ 908 if (!skb->len) { 909 /* 910 * We send frames one by one in SIR mode (no 911 * pipelining), so at this point, if we were sending 912 * a previous frame, we just received the interrupt 913 * telling us it is finished (UART_IIR_THRI). 914 * Therefore, waiting for the transmitter to really 915 * finish draining the fifo won't take too long. 916 * And the interrupt handler is not expected to run. 917 * - Jean II */ 918 smsc_ircc_sir_wait_hw_transmitter_finish(self); 919 smsc_ircc_change_speed(self, speed); 920 spin_unlock_irqrestore(&self->lock, flags); 921 dev_kfree_skb(skb); 922 return NETDEV_TX_OK; 923 } 924 self->new_speed = speed; 925 } 926 927 /* Init tx buffer */ 928 self->tx_buff.data = self->tx_buff.head; 929 930 /* Copy skb to tx_buff while wrapping, stuffing and making CRC */ 931 self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data, 932 self->tx_buff.truesize); 933 934 dev->stats.tx_bytes += self->tx_buff.len; 935 936 /* Turn on transmit finished interrupt. Will fire immediately! */ 937 outb(UART_IER_THRI, self->io.sir_base + UART_IER); 938 939 spin_unlock_irqrestore(&self->lock, flags); 940 941 dev_kfree_skb(skb); 942 943 return NETDEV_TX_OK; 944} 945 946/* 947 * Function smsc_ircc_set_fir_speed (self, baud) 948 * 949 * Change the speed of the device 950 * 951 */ 952static void smsc_ircc_set_fir_speed(struct smsc_ircc_cb *self, u32 speed) 953{ 954 int fir_base, ir_mode, ctrl, fast; 955 956 IRDA_ASSERT(self != NULL, return;); 957 fir_base = self->io.fir_base; 958 959 self->io.speed = speed; 960 961 switch (speed) { 962 default: 963 case 576000: 964 ir_mode = IRCC_CFGA_IRDA_HDLC; 965 ctrl = IRCC_CRC; 966 fast = 0; 967 IRDA_DEBUG(0, "%s(), handling baud of 576000\n", __func__); 968 break; 969 case 1152000: 970 ir_mode = IRCC_CFGA_IRDA_HDLC; 971 ctrl = IRCC_1152 | IRCC_CRC; 972 fast = IRCC_LCR_A_FAST | IRCC_LCR_A_GP_DATA; 973 IRDA_DEBUG(0, "%s(), handling baud of 1152000\n", 974 __func__); 975 break; 976 case 4000000: 977 ir_mode = IRCC_CFGA_IRDA_4PPM; 978 ctrl = IRCC_CRC; 979 fast = IRCC_LCR_A_FAST; 980 IRDA_DEBUG(0, "%s(), handling baud of 4000000\n", 981 __func__); 982 break; 983 } 984 #if 0 985 Now in tranceiver! 986 /* This causes an interrupt */ 987 register_bank(fir_base, 0); 988 outb((inb(fir_base + IRCC_LCR_A) & 0xbf) | fast, fir_base + IRCC_LCR_A); 989 #endif 990 991 register_bank(fir_base, 1); 992 outb(((inb(fir_base + IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | ir_mode), fir_base + IRCC_SCE_CFGA); 993 994 register_bank(fir_base, 4); 995 outb((inb(fir_base + IRCC_CONTROL) & 0x30) | ctrl, fir_base + IRCC_CONTROL); 996} 997 998/* 999 * Function smsc_ircc_fir_start(self) 1000 * 1001 * Change the speed of the device 1002 * 1003 */ 1004static void smsc_ircc_fir_start(struct smsc_ircc_cb *self) 1005{ 1006 struct net_device *dev; 1007 int fir_base; 1008 1009 IRDA_DEBUG(1, "%s\n", __func__); 1010 1011 IRDA_ASSERT(self != NULL, return;); 1012 dev = self->netdev; 1013 IRDA_ASSERT(dev != NULL, return;); 1014 1015 fir_base = self->io.fir_base; 1016 1017 /* Reset everything */ 1018 1019 /* Clear FIFO */ 1020 outb(inb(fir_base + IRCC_LCR_A) | IRCC_LCR_A_FIFO_RESET, fir_base + IRCC_LCR_A); 1021 1022 /* Enable interrupt */ 1023 /*outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, fir_base + IRCC_IER);*/ 1024 1025 register_bank(fir_base, 1); 1026 1027 /* Select the TX/RX interface */ 1028#ifdef SMSC_669 /* Uses pin 88/89 for Rx/Tx */ 1029 outb(((inb(fir_base + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_COM), 1030 fir_base + IRCC_SCE_CFGB); 1031#else 1032 outb(((inb(fir_base + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_IR), 1033 fir_base + IRCC_SCE_CFGB); 1034#endif 1035 (void) inb(fir_base + IRCC_FIFO_THRESHOLD); 1036 1037 /* Enable SCE interrupts */ 1038 outb(0, fir_base + IRCC_MASTER); 1039 register_bank(fir_base, 0); 1040 outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, fir_base + IRCC_IER); 1041 outb(IRCC_MASTER_INT_EN, fir_base + IRCC_MASTER); 1042} 1043 1044/* 1045 * Function smsc_ircc_fir_stop(self, baud) 1046 * 1047 * Change the speed of the device 1048 * 1049 */ 1050static void smsc_ircc_fir_stop(struct smsc_ircc_cb *self) 1051{ 1052 int fir_base; 1053 1054 IRDA_DEBUG(1, "%s\n", __func__); 1055 1056 IRDA_ASSERT(self != NULL, return;); 1057 1058 fir_base = self->io.fir_base; 1059 register_bank(fir_base, 0); 1060 /*outb(IRCC_MASTER_RESET, fir_base + IRCC_MASTER);*/ 1061 outb(inb(fir_base + IRCC_LCR_B) & IRCC_LCR_B_SIP_ENABLE, fir_base + IRCC_LCR_B); 1062} 1063 1064 1065/* 1066 * Function smsc_ircc_change_speed(self, baud) 1067 * 1068 * Change the speed of the device 1069 * 1070 * This function *must* be called with spinlock held, because it may 1071 * be called from the irq handler. - Jean II 1072 */ 1073static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed) 1074{ 1075 struct net_device *dev; 1076 int last_speed_was_sir; 1077 1078 IRDA_DEBUG(0, "%s() changing speed to: %d\n", __func__, speed); 1079 1080 IRDA_ASSERT(self != NULL, return;); 1081 dev = self->netdev; 1082 1083 last_speed_was_sir = self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED; 1084 1085 #if 0 1086 /* Temp Hack */ 1087 speed= 1152000; 1088 self->io.speed = speed; 1089 last_speed_was_sir = 0; 1090 smsc_ircc_fir_start(self); 1091 #endif 1092 1093 if (self->io.speed == 0) 1094 smsc_ircc_sir_start(self); 1095 1096 #if 0 1097 if (!last_speed_was_sir) speed = self->io.speed; 1098 #endif 1099 1100 if (self->io.speed != speed) 1101 smsc_ircc_set_transceiver_for_speed(self, speed); 1102 1103 self->io.speed = speed; 1104 1105 if (speed <= SMSC_IRCC2_MAX_SIR_SPEED) { 1106 if (!last_speed_was_sir) { 1107 smsc_ircc_fir_stop(self); 1108 smsc_ircc_sir_start(self); 1109 } 1110 smsc_ircc_set_sir_speed(self, speed); 1111 } else { 1112 if (last_speed_was_sir) { 1113 #if SMSC_IRCC2_C_SIR_STOP 1114 smsc_ircc_sir_stop(self); 1115 #endif 1116 smsc_ircc_fir_start(self); 1117 } 1118 smsc_ircc_set_fir_speed(self, speed); 1119 1120 #if 0 1121 self->tx_buff.len = 10; 1122 self->tx_buff.data = self->tx_buff.head; 1123 1124 smsc_ircc_dma_xmit(self, 4000); 1125 #endif 1126 /* Be ready for incoming frames */ 1127 smsc_ircc_dma_receive(self); 1128 } 1129 1130 netif_wake_queue(dev); 1131} 1132 1133/* 1134 * Function smsc_ircc_set_sir_speed (self, speed) 1135 * 1136 * Set speed of IrDA port to specified baudrate 1137 * 1138 */ 1139static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, __u32 speed) 1140{ 1141 int iobase; 1142 int fcr; /* FIFO control reg */ 1143 int lcr; /* Line control reg */ 1144 int divisor; 1145 1146 IRDA_DEBUG(0, "%s(), Setting speed to: %d\n", __func__, speed); 1147 1148 IRDA_ASSERT(self != NULL, return;); 1149 iobase = self->io.sir_base; 1150 1151 /* Update accounting for new speed */ 1152 self->io.speed = speed; 1153 1154 /* Turn off interrupts */ 1155 outb(0, iobase + UART_IER); 1156 1157 divisor = SMSC_IRCC2_MAX_SIR_SPEED / speed; 1158 1159 fcr = UART_FCR_ENABLE_FIFO; 1160 1161 /* 1162 * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and 1163 * almost 1,7 ms at 19200 bps. At speeds above that we can just forget 1164 * about this timeout since it will always be fast enough. 1165 */ 1166 fcr |= self->io.speed < 38400 ? 1167 UART_FCR_TRIGGER_1 : UART_FCR_TRIGGER_14; 1168 1169 /* IrDA ports use 8N1 */ 1170 lcr = UART_LCR_WLEN8; 1171 1172 outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */ 1173 outb(divisor & 0xff, iobase + UART_DLL); /* Set speed */ 1174 outb(divisor >> 8, iobase + UART_DLM); 1175 outb(lcr, iobase + UART_LCR); /* Set 8N1 */ 1176 outb(fcr, iobase + UART_FCR); /* Enable FIFO's */ 1177 1178 /* Turn on interrups */ 1179 outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER); 1180 1181 IRDA_DEBUG(2, "%s() speed changed to: %d\n", __func__, speed); 1182} 1183 1184 1185/* 1186 * Function smsc_ircc_hard_xmit_fir (skb, dev) 1187 * 1188 * Transmit the frame! 1189 * 1190 */ 1191static netdev_tx_t smsc_ircc_hard_xmit_fir(struct sk_buff *skb, 1192 struct net_device *dev) 1193{ 1194 struct smsc_ircc_cb *self; 1195 unsigned long flags; 1196 s32 speed; 1197 int mtt; 1198 1199 IRDA_ASSERT(dev != NULL, return NETDEV_TX_OK;); 1200 self = netdev_priv(dev); 1201 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); 1202 1203 netif_stop_queue(dev); 1204 1205 /* Make sure test of self->io.speed & speed change are atomic */ 1206 spin_lock_irqsave(&self->lock, flags); 1207 1208 /* Check if we need to change the speed after this frame */ 1209 speed = irda_get_next_speed(skb); 1210 if (speed != self->io.speed && speed != -1) { 1211 /* Check for empty frame */ 1212 if (!skb->len) { 1213 /* Note : you should make sure that speed changes 1214 * are not going to corrupt any outgoing frame. 1215 * Look at nsc-ircc for the gory details - Jean II */ 1216 smsc_ircc_change_speed(self, speed); 1217 spin_unlock_irqrestore(&self->lock, flags); 1218 dev_kfree_skb(skb); 1219 return NETDEV_TX_OK; 1220 } 1221 1222 self->new_speed = speed; 1223 } 1224 1225 skb_copy_from_linear_data(skb, self->tx_buff.head, skb->len); 1226 1227 self->tx_buff.len = skb->len; 1228 self->tx_buff.data = self->tx_buff.head; 1229 1230 mtt = irda_get_mtt(skb); 1231 if (mtt) { 1232 int bofs; 1233 1234 /* 1235 * Compute how many BOFs (STA or PA's) we need to waste the 1236 * min turn time given the speed of the link. 1237 */ 1238 bofs = mtt * (self->io.speed / 1000) / 8000; 1239 if (bofs > 4095) 1240 bofs = 4095; 1241 1242 smsc_ircc_dma_xmit(self, bofs); 1243 } else { 1244 /* Transmit frame */ 1245 smsc_ircc_dma_xmit(self, 0); 1246 } 1247 1248 spin_unlock_irqrestore(&self->lock, flags); 1249 dev_kfree_skb(skb); 1250 1251 return NETDEV_TX_OK; 1252} 1253 1254/* 1255 * Function smsc_ircc_dma_xmit (self, bofs) 1256 * 1257 * Transmit data using DMA 1258 * 1259 */ 1260static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs) 1261{ 1262 int iobase = self->io.fir_base; 1263 u8 ctrl; 1264 1265 IRDA_DEBUG(3, "%s\n", __func__); 1266#if 1 1267 /* Disable Rx */ 1268 register_bank(iobase, 0); 1269 outb(0x00, iobase + IRCC_LCR_B); 1270#endif 1271 register_bank(iobase, 1); 1272 outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 1273 iobase + IRCC_SCE_CFGB); 1274 1275 self->io.direction = IO_XMIT; 1276 1277 /* Set BOF additional count for generating the min turn time */ 1278 register_bank(iobase, 4); 1279 outb(bofs & 0xff, iobase + IRCC_BOF_COUNT_LO); 1280 ctrl = inb(iobase + IRCC_CONTROL) & 0xf0; 1281 outb(ctrl | ((bofs >> 8) & 0x0f), iobase + IRCC_BOF_COUNT_HI); 1282 1283 /* Set max Tx frame size */ 1284 outb(self->tx_buff.len >> 8, iobase + IRCC_TX_SIZE_HI); 1285 outb(self->tx_buff.len & 0xff, iobase + IRCC_TX_SIZE_LO); 1286 1287 /*outb(UART_MCR_OUT2, self->io.sir_base + UART_MCR);*/ 1288 1289 /* Enable burst mode chip Tx DMA */ 1290 register_bank(iobase, 1); 1291 outb(inb(iobase + IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE | 1292 IRCC_CFGB_DMA_BURST, iobase + IRCC_SCE_CFGB); 1293 1294 /* Setup DMA controller (must be done after enabling chip DMA) */ 1295 irda_setup_dma(self->io.dma, self->tx_buff_dma, self->tx_buff.len, 1296 DMA_TX_MODE); 1297 1298 /* Enable interrupt */ 1299 1300 register_bank(iobase, 0); 1301 outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER); 1302 outb(IRCC_MASTER_INT_EN, iobase + IRCC_MASTER); 1303 1304 /* Enable transmit */ 1305 outb(IRCC_LCR_B_SCE_TRANSMIT | IRCC_LCR_B_SIP_ENABLE, iobase + IRCC_LCR_B); 1306} 1307 1308/* 1309 * Function smsc_ircc_dma_xmit_complete (self) 1310 * 1311 * The transfer of a frame in finished. This function will only be called 1312 * by the interrupt handler 1313 * 1314 */ 1315static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self) 1316{ 1317 int iobase = self->io.fir_base; 1318 1319 IRDA_DEBUG(3, "%s\n", __func__); 1320#if 0 1321 /* Disable Tx */ 1322 register_bank(iobase, 0); 1323 outb(0x00, iobase + IRCC_LCR_B); 1324#endif 1325 register_bank(iobase, 1); 1326 outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 1327 iobase + IRCC_SCE_CFGB); 1328 1329 /* Check for underrun! */ 1330 register_bank(iobase, 0); 1331 if (inb(iobase + IRCC_LSR) & IRCC_LSR_UNDERRUN) { 1332 self->netdev->stats.tx_errors++; 1333 self->netdev->stats.tx_fifo_errors++; 1334 1335 /* Reset error condition */ 1336 register_bank(iobase, 0); 1337 outb(IRCC_MASTER_ERROR_RESET, iobase + IRCC_MASTER); 1338 outb(0x00, iobase + IRCC_MASTER); 1339 } else { 1340 self->netdev->stats.tx_packets++; 1341 self->netdev->stats.tx_bytes += self->tx_buff.len; 1342 } 1343 1344 /* Check if it's time to change the speed */ 1345 if (self->new_speed) { 1346 smsc_ircc_change_speed(self, self->new_speed); 1347 self->new_speed = 0; 1348 } 1349 1350 netif_wake_queue(self->netdev); 1351} 1352 1353/* 1354 * Function smsc_ircc_dma_receive(self) 1355 * 1356 * Get ready for receiving a frame. The device will initiate a DMA 1357 * if it starts to receive a frame. 1358 * 1359 */ 1360static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self) 1361{ 1362 int iobase = self->io.fir_base; 1363#if 0 1364 /* Turn off chip DMA */ 1365 register_bank(iobase, 1); 1366 outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 1367 iobase + IRCC_SCE_CFGB); 1368#endif 1369 1370 /* Disable Tx */ 1371 register_bank(iobase, 0); 1372 outb(0x00, iobase + IRCC_LCR_B); 1373 1374 /* Turn off chip DMA */ 1375 register_bank(iobase, 1); 1376 outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 1377 iobase + IRCC_SCE_CFGB); 1378 1379 self->io.direction = IO_RECV; 1380 self->rx_buff.data = self->rx_buff.head; 1381 1382 /* Set max Rx frame size */ 1383 register_bank(iobase, 4); 1384 outb((2050 >> 8) & 0x0f, iobase + IRCC_RX_SIZE_HI); 1385 outb(2050 & 0xff, iobase + IRCC_RX_SIZE_LO); 1386 1387 /* Setup DMA controller */ 1388 irda_setup_dma(self->io.dma, self->rx_buff_dma, self->rx_buff.truesize, 1389 DMA_RX_MODE); 1390 1391 /* Enable burst mode chip Rx DMA */ 1392 register_bank(iobase, 1); 1393 outb(inb(iobase + IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE | 1394 IRCC_CFGB_DMA_BURST, iobase + IRCC_SCE_CFGB); 1395 1396 /* Enable interrupt */ 1397 register_bank(iobase, 0); 1398 outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER); 1399 outb(IRCC_MASTER_INT_EN, iobase + IRCC_MASTER); 1400 1401 /* Enable receiver */ 1402 register_bank(iobase, 0); 1403 outb(IRCC_LCR_B_SCE_RECEIVE | IRCC_LCR_B_SIP_ENABLE, 1404 iobase + IRCC_LCR_B); 1405 1406 return 0; 1407} 1408 1409/* 1410 * Function smsc_ircc_dma_receive_complete(self) 1411 * 1412 * Finished with receiving frames 1413 * 1414 */ 1415static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self) 1416{ 1417 struct sk_buff *skb; 1418 int len, msgcnt, lsr; 1419 int iobase = self->io.fir_base; 1420 1421 register_bank(iobase, 0); 1422 1423 IRDA_DEBUG(3, "%s\n", __func__); 1424#if 0 1425 /* Disable Rx */ 1426 register_bank(iobase, 0); 1427 outb(0x00, iobase + IRCC_LCR_B); 1428#endif 1429 register_bank(iobase, 0); 1430 outb(inb(iobase + IRCC_LSAR) & ~IRCC_LSAR_ADDRESS_MASK, iobase + IRCC_LSAR); 1431 lsr= inb(iobase + IRCC_LSR); 1432 msgcnt = inb(iobase + IRCC_LCR_B) & 0x08; 1433 1434 IRDA_DEBUG(2, "%s: dma count = %d\n", __func__, 1435 get_dma_residue(self->io.dma)); 1436 1437 len = self->rx_buff.truesize - get_dma_residue(self->io.dma); 1438 1439 /* Look for errors */ 1440 if (lsr & (IRCC_LSR_FRAME_ERROR | IRCC_LSR_CRC_ERROR | IRCC_LSR_SIZE_ERROR)) { 1441 self->netdev->stats.rx_errors++; 1442 if (lsr & IRCC_LSR_FRAME_ERROR) 1443 self->netdev->stats.rx_frame_errors++; 1444 if (lsr & IRCC_LSR_CRC_ERROR) 1445 self->netdev->stats.rx_crc_errors++; 1446 if (lsr & IRCC_LSR_SIZE_ERROR) 1447 self->netdev->stats.rx_length_errors++; 1448 if (lsr & (IRCC_LSR_UNDERRUN | IRCC_LSR_OVERRUN)) 1449 self->netdev->stats.rx_length_errors++; 1450 return; 1451 } 1452 1453 /* Remove CRC */ 1454 len -= self->io.speed < 4000000 ? 2 : 4; 1455 1456 if (len < 2 || len > 2050) { 1457 IRDA_WARNING("%s(), bogus len=%d\n", __func__, len); 1458 return; 1459 } 1460 IRDA_DEBUG(2, "%s: msgcnt = %d, len=%d\n", __func__, msgcnt, len); 1461 1462 skb = dev_alloc_skb(len + 1); 1463 if (!skb) { 1464 IRDA_WARNING("%s(), memory squeeze, dropping frame.\n", 1465 __func__); 1466 return; 1467 } 1468 /* Make sure IP header gets aligned */ 1469 skb_reserve(skb, 1); 1470 1471 memcpy(skb_put(skb, len), self->rx_buff.data, len); 1472 self->netdev->stats.rx_packets++; 1473 self->netdev->stats.rx_bytes += len; 1474 1475 skb->dev = self->netdev; 1476 skb_reset_mac_header(skb); 1477 skb->protocol = htons(ETH_P_IRDA); 1478 netif_rx(skb); 1479} 1480 1481/* 1482 * Function smsc_ircc_sir_receive (self) 1483 * 1484 * Receive one frame from the infrared port 1485 * 1486 */ 1487static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self) 1488{ 1489 int boguscount = 0; 1490 int iobase; 1491 1492 IRDA_ASSERT(self != NULL, return;); 1493 1494 iobase = self->io.sir_base; 1495 1496 /* 1497 * Receive all characters in Rx FIFO, unwrap and unstuff them. 1498 * async_unwrap_char will deliver all found frames 1499 */ 1500 do { 1501 async_unwrap_char(self->netdev, &self->netdev->stats, &self->rx_buff, 1502 inb(iobase + UART_RX)); 1503 1504 /* Make sure we don't stay here to long */ 1505 if (boguscount++ > 32) { 1506 IRDA_DEBUG(2, "%s(), breaking!\n", __func__); 1507 break; 1508 } 1509 } while (inb(iobase + UART_LSR) & UART_LSR_DR); 1510} 1511 1512 1513/* 1514 * Function smsc_ircc_interrupt (irq, dev_id, regs) 1515 * 1516 * An interrupt from the chip has arrived. Time to do some work 1517 * 1518 */ 1519static irqreturn_t smsc_ircc_interrupt(int dummy, void *dev_id) 1520{ 1521 struct net_device *dev = dev_id; 1522 struct smsc_ircc_cb *self = netdev_priv(dev); 1523 int iobase, iir, lcra, lsr; 1524 irqreturn_t ret = IRQ_NONE; 1525 1526 /* Serialise the interrupt handler in various CPUs, stop Tx path */ 1527 spin_lock(&self->lock); 1528 1529 /* Check if we should use the SIR interrupt handler */ 1530 if (self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED) { 1531 ret = smsc_ircc_interrupt_sir(dev); 1532 goto irq_ret_unlock; 1533 } 1534 1535 iobase = self->io.fir_base; 1536 1537 register_bank(iobase, 0); 1538 iir = inb(iobase + IRCC_IIR); 1539 if (iir == 0) 1540 goto irq_ret_unlock; 1541 ret = IRQ_HANDLED; 1542 1543 /* Disable interrupts */ 1544 outb(0, iobase + IRCC_IER); 1545 lcra = inb(iobase + IRCC_LCR_A); 1546 lsr = inb(iobase + IRCC_LSR); 1547 1548 IRDA_DEBUG(2, "%s(), iir = 0x%02x\n", __func__, iir); 1549 1550 if (iir & IRCC_IIR_EOM) { 1551 if (self->io.direction == IO_RECV) 1552 smsc_ircc_dma_receive_complete(self); 1553 else 1554 smsc_ircc_dma_xmit_complete(self); 1555 1556 smsc_ircc_dma_receive(self); 1557 } 1558 1559 if (iir & IRCC_IIR_ACTIVE_FRAME) { 1560 /*printk(KERN_WARNING "%s(): Active Frame\n", __func__);*/ 1561 } 1562 1563 /* Enable interrupts again */ 1564 1565 register_bank(iobase, 0); 1566 outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER); 1567 1568 irq_ret_unlock: 1569 spin_unlock(&self->lock); 1570 1571 return ret; 1572} 1573 1574/* 1575 * Function irport_interrupt_sir (irq, dev_id) 1576 * 1577 * Interrupt handler for SIR modes 1578 */ 1579static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev) 1580{ 1581 struct smsc_ircc_cb *self = netdev_priv(dev); 1582 int boguscount = 0; 1583 int iobase; 1584 int iir, lsr; 1585 1586 /* Already locked coming here in smsc_ircc_interrupt() */ 1587 /*spin_lock(&self->lock);*/ 1588 1589 iobase = self->io.sir_base; 1590 1591 iir = inb(iobase + UART_IIR) & UART_IIR_ID; 1592 if (iir == 0) 1593 return IRQ_NONE; 1594 while (iir) { 1595 /* Clear interrupt */ 1596 lsr = inb(iobase + UART_LSR); 1597 1598 IRDA_DEBUG(4, "%s(), iir=%02x, lsr=%02x, iobase=%#x\n", 1599 __func__, iir, lsr, iobase); 1600 1601 switch (iir) { 1602 case UART_IIR_RLSI: 1603 IRDA_DEBUG(2, "%s(), RLSI\n", __func__); 1604 break; 1605 case UART_IIR_RDI: 1606 /* Receive interrupt */ 1607 smsc_ircc_sir_receive(self); 1608 break; 1609 case UART_IIR_THRI: 1610 if (lsr & UART_LSR_THRE) 1611 /* Transmitter ready for data */ 1612 smsc_ircc_sir_write_wakeup(self); 1613 break; 1614 default: 1615 IRDA_DEBUG(0, "%s(), unhandled IIR=%#x\n", 1616 __func__, iir); 1617 break; 1618 } 1619 1620 /* Make sure we don't stay here to long */ 1621 if (boguscount++ > 100) 1622 break; 1623 1624 iir = inb(iobase + UART_IIR) & UART_IIR_ID; 1625 } 1626 /*spin_unlock(&self->lock);*/ 1627 return IRQ_HANDLED; 1628} 1629 1630 1631#if 0 /* unused */ 1632/* 1633 * Function ircc_is_receiving (self) 1634 * 1635 * Return TRUE is we are currently receiving a frame 1636 * 1637 */ 1638static int ircc_is_receiving(struct smsc_ircc_cb *self) 1639{ 1640 int status = FALSE; 1641 /* int iobase; */ 1642 1643 IRDA_DEBUG(1, "%s\n", __func__); 1644 1645 IRDA_ASSERT(self != NULL, return FALSE;); 1646 1647 IRDA_DEBUG(0, "%s: dma count = %d\n", __func__, 1648 get_dma_residue(self->io.dma)); 1649 1650 status = (self->rx_buff.state != OUTSIDE_FRAME); 1651 1652 return status; 1653} 1654#endif /* unused */ 1655 1656static int smsc_ircc_request_irq(struct smsc_ircc_cb *self) 1657{ 1658 int error; 1659 1660 error = request_irq(self->io.irq, smsc_ircc_interrupt, 0, 1661 self->netdev->name, self->netdev); 1662 if (error) 1663 IRDA_DEBUG(0, "%s(), unable to allocate irq=%d, err=%d\n", 1664 __func__, self->io.irq, error); 1665 1666 return error; 1667} 1668 1669static void smsc_ircc_start_interrupts(struct smsc_ircc_cb *self) 1670{ 1671 unsigned long flags; 1672 1673 spin_lock_irqsave(&self->lock, flags); 1674 1675 self->io.speed = 0; 1676 smsc_ircc_change_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); 1677 1678 spin_unlock_irqrestore(&self->lock, flags); 1679} 1680 1681static void smsc_ircc_stop_interrupts(struct smsc_ircc_cb *self) 1682{ 1683 int iobase = self->io.fir_base; 1684 unsigned long flags; 1685 1686 spin_lock_irqsave(&self->lock, flags); 1687 1688 register_bank(iobase, 0); 1689 outb(0, iobase + IRCC_IER); 1690 outb(IRCC_MASTER_RESET, iobase + IRCC_MASTER); 1691 outb(0x00, iobase + IRCC_MASTER); 1692 1693 spin_unlock_irqrestore(&self->lock, flags); 1694} 1695 1696 1697/* 1698 * Function smsc_ircc_net_open (dev) 1699 * 1700 * Start the device 1701 * 1702 */ 1703static int smsc_ircc_net_open(struct net_device *dev) 1704{ 1705 struct smsc_ircc_cb *self; 1706 char hwname[16]; 1707 1708 IRDA_DEBUG(1, "%s\n", __func__); 1709 1710 IRDA_ASSERT(dev != NULL, return -1;); 1711 self = netdev_priv(dev); 1712 IRDA_ASSERT(self != NULL, return 0;); 1713 1714 if (self->io.suspended) { 1715 IRDA_DEBUG(0, "%s(), device is suspended\n", __func__); 1716 return -EAGAIN; 1717 } 1718 1719 if (request_irq(self->io.irq, smsc_ircc_interrupt, 0, dev->name, 1720 (void *) dev)) { 1721 IRDA_DEBUG(0, "%s(), unable to allocate irq=%d\n", 1722 __func__, self->io.irq); 1723 return -EAGAIN; 1724 } 1725 1726 smsc_ircc_start_interrupts(self); 1727 1728 /* Give self a hardware name */ 1729 /* It would be cool to offer the chip revision here - Jean II */ 1730 sprintf(hwname, "SMSC @ 0x%03x", self->io.fir_base); 1731 1732 /* 1733 * Open new IrLAP layer instance, now that everything should be 1734 * initialized properly 1735 */ 1736 self->irlap = irlap_open(dev, &self->qos, hwname); 1737 1738 /* 1739 * Always allocate the DMA channel after the IRQ, 1740 * and clean up on failure. 1741 */ 1742 if (request_dma(self->io.dma, dev->name)) { 1743 smsc_ircc_net_close(dev); 1744 1745 IRDA_WARNING("%s(), unable to allocate DMA=%d\n", 1746 __func__, self->io.dma); 1747 return -EAGAIN; 1748 } 1749 1750 netif_start_queue(dev); 1751 1752 return 0; 1753} 1754 1755/* 1756 * Function smsc_ircc_net_close (dev) 1757 * 1758 * Stop the device 1759 * 1760 */ 1761static int smsc_ircc_net_close(struct net_device *dev) 1762{ 1763 struct smsc_ircc_cb *self; 1764 1765 IRDA_DEBUG(1, "%s\n", __func__); 1766 1767 IRDA_ASSERT(dev != NULL, return -1;); 1768 self = netdev_priv(dev); 1769 IRDA_ASSERT(self != NULL, return 0;); 1770 1771 /* Stop device */ 1772 netif_stop_queue(dev); 1773 1774 /* Stop and remove instance of IrLAP */ 1775 if (self->irlap) 1776 irlap_close(self->irlap); 1777 self->irlap = NULL; 1778 1779 smsc_ircc_stop_interrupts(self); 1780 1781 /* if we are called from smsc_ircc_resume we don't have IRQ reserved */ 1782 if (!self->io.suspended) 1783 free_irq(self->io.irq, dev); 1784 1785 disable_dma(self->io.dma); 1786 free_dma(self->io.dma); 1787 1788 return 0; 1789} 1790 1791static int smsc_ircc_suspend(struct platform_device *dev, pm_message_t state) 1792{ 1793 struct smsc_ircc_cb *self = platform_get_drvdata(dev); 1794 1795 if (!self->io.suspended) { 1796 IRDA_DEBUG(1, "%s, Suspending\n", driver_name); 1797 1798 rtnl_lock(); 1799 if (netif_running(self->netdev)) { 1800 netif_device_detach(self->netdev); 1801 smsc_ircc_stop_interrupts(self); 1802 free_irq(self->io.irq, self->netdev); 1803 disable_dma(self->io.dma); 1804 } 1805 self->io.suspended = 1; 1806 rtnl_unlock(); 1807 } 1808 1809 return 0; 1810} 1811 1812static int smsc_ircc_resume(struct platform_device *dev) 1813{ 1814 struct smsc_ircc_cb *self = platform_get_drvdata(dev); 1815 1816 if (self->io.suspended) { 1817 IRDA_DEBUG(1, "%s, Waking up\n", driver_name); 1818 1819 rtnl_lock(); 1820 smsc_ircc_init_chip(self); 1821 if (netif_running(self->netdev)) { 1822 if (smsc_ircc_request_irq(self)) { 1823 /* 1824 * Don't fail resume process, just kill this 1825 * network interface 1826 */ 1827 unregister_netdevice(self->netdev); 1828 } else { 1829 enable_dma(self->io.dma); 1830 smsc_ircc_start_interrupts(self); 1831 netif_device_attach(self->netdev); 1832 } 1833 } 1834 self->io.suspended = 0; 1835 rtnl_unlock(); 1836 } 1837 return 0; 1838} 1839 1840/* 1841 * Function smsc_ircc_close (self) 1842 * 1843 * Close driver instance 1844 * 1845 */ 1846static int __exit smsc_ircc_close(struct smsc_ircc_cb *self) 1847{ 1848 IRDA_DEBUG(1, "%s\n", __func__); 1849 1850 IRDA_ASSERT(self != NULL, return -1;); 1851 1852 platform_device_unregister(self->pldev); 1853 1854 /* Remove netdevice */ 1855 unregister_netdev(self->netdev); 1856 1857 smsc_ircc_stop_interrupts(self); 1858 1859 /* Release the PORTS that this driver is using */ 1860 IRDA_DEBUG(0, "%s(), releasing 0x%03x\n", __func__, 1861 self->io.fir_base); 1862 1863 release_region(self->io.fir_base, self->io.fir_ext); 1864 1865 IRDA_DEBUG(0, "%s(), releasing 0x%03x\n", __func__, 1866 self->io.sir_base); 1867 1868 release_region(self->io.sir_base, self->io.sir_ext); 1869 1870 if (self->tx_buff.head) 1871 dma_free_coherent(NULL, self->tx_buff.truesize, 1872 self->tx_buff.head, self->tx_buff_dma); 1873 1874 if (self->rx_buff.head) 1875 dma_free_coherent(NULL, self->rx_buff.truesize, 1876 self->rx_buff.head, self->rx_buff_dma); 1877 1878 free_netdev(self->netdev); 1879 1880 return 0; 1881} 1882 1883static void __exit smsc_ircc_cleanup(void) 1884{ 1885 int i; 1886 1887 IRDA_DEBUG(1, "%s\n", __func__); 1888 1889 for (i = 0; i < 2; i++) { 1890 if (dev_self[i]) 1891 smsc_ircc_close(dev_self[i]); 1892 } 1893 1894 if (pnp_driver_registered) 1895 pnp_unregister_driver(&smsc_ircc_pnp_driver); 1896 1897 platform_driver_unregister(&smsc_ircc_driver); 1898} 1899 1900/* 1901 * Start SIR operations 1902 * 1903 * This function *must* be called with spinlock held, because it may 1904 * be called from the irq handler (via smsc_ircc_change_speed()). - Jean II 1905 */ 1906static void smsc_ircc_sir_start(struct smsc_ircc_cb *self) 1907{ 1908 struct net_device *dev; 1909 int fir_base, sir_base; 1910 1911 IRDA_DEBUG(3, "%s\n", __func__); 1912 1913 IRDA_ASSERT(self != NULL, return;); 1914 dev = self->netdev; 1915 IRDA_ASSERT(dev != NULL, return;); 1916 1917 fir_base = self->io.fir_base; 1918 sir_base = self->io.sir_base; 1919 1920 /* Reset everything */ 1921 outb(IRCC_MASTER_RESET, fir_base + IRCC_MASTER); 1922 1923 #if SMSC_IRCC2_C_SIR_STOP 1924 /*smsc_ircc_sir_stop(self);*/ 1925 #endif 1926 1927 register_bank(fir_base, 1); 1928 outb(((inb(fir_base + IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | IRCC_CFGA_IRDA_SIR_A), fir_base + IRCC_SCE_CFGA); 1929 1930 /* Initialize UART */ 1931 outb(UART_LCR_WLEN8, sir_base + UART_LCR); /* Reset DLAB */ 1932 outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), sir_base + UART_MCR); 1933 1934 /* Turn on interrups */ 1935 outb(UART_IER_RLSI | UART_IER_RDI |UART_IER_THRI, sir_base + UART_IER); 1936 1937 IRDA_DEBUG(3, "%s() - exit\n", __func__); 1938 1939 outb(0x00, fir_base + IRCC_MASTER); 1940} 1941 1942#if SMSC_IRCC2_C_SIR_STOP 1943void smsc_ircc_sir_stop(struct smsc_ircc_cb *self) 1944{ 1945 int iobase; 1946 1947 IRDA_DEBUG(3, "%s\n", __func__); 1948 iobase = self->io.sir_base; 1949 1950 /* Reset UART */ 1951 outb(0, iobase + UART_MCR); 1952 1953 /* Turn off interrupts */ 1954 outb(0, iobase + UART_IER); 1955} 1956#endif 1957 1958/* 1959 * Function smsc_sir_write_wakeup (self) 1960 * 1961 * Called by the SIR interrupt handler when there's room for more data. 1962 * If we have more packets to send, we send them here. 1963 * 1964 */ 1965static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self) 1966{ 1967 int actual = 0; 1968 int iobase; 1969 int fcr; 1970 1971 IRDA_ASSERT(self != NULL, return;); 1972 1973 IRDA_DEBUG(4, "%s\n", __func__); 1974 1975 iobase = self->io.sir_base; 1976 1977 /* Finished with frame? */ 1978 if (self->tx_buff.len > 0) { 1979 /* Write data left in transmit buffer */ 1980 actual = smsc_ircc_sir_write(iobase, self->io.fifo_size, 1981 self->tx_buff.data, self->tx_buff.len); 1982 self->tx_buff.data += actual; 1983 self->tx_buff.len -= actual; 1984 } else { 1985 1986 /*if (self->tx_buff.len ==0) {*/ 1987 1988 /* 1989 * Now serial buffer is almost free & we can start 1990 * transmission of another packet. But first we must check 1991 * if we need to change the speed of the hardware 1992 */ 1993 if (self->new_speed) { 1994 IRDA_DEBUG(5, "%s(), Changing speed to %d.\n", 1995 __func__, self->new_speed); 1996 smsc_ircc_sir_wait_hw_transmitter_finish(self); 1997 smsc_ircc_change_speed(self, self->new_speed); 1998 self->new_speed = 0; 1999 } else { 2000 /* Tell network layer that we want more frames */ 2001 netif_wake_queue(self->netdev); 2002 } 2003 self->netdev->stats.tx_packets++; 2004 2005 if (self->io.speed <= 115200) { 2006 /* 2007 * Reset Rx FIFO to make sure that all reflected transmit data 2008 * is discarded. This is needed for half duplex operation 2009 */ 2010 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR; 2011 fcr |= self->io.speed < 38400 ? 2012 UART_FCR_TRIGGER_1 : UART_FCR_TRIGGER_14; 2013 2014 outb(fcr, iobase + UART_FCR); 2015 2016 /* Turn on receive interrupts */ 2017 outb(UART_IER_RDI, iobase + UART_IER); 2018 } 2019 } 2020} 2021 2022/* 2023 * Function smsc_ircc_sir_write (iobase, fifo_size, buf, len) 2024 * 2025 * Fill Tx FIFO with transmit data 2026 * 2027 */ 2028static int smsc_ircc_sir_write(int iobase, int fifo_size, __u8 *buf, int len) 2029{ 2030 int actual = 0; 2031 2032 /* Tx FIFO should be empty! */ 2033 if (!(inb(iobase + UART_LSR) & UART_LSR_THRE)) { 2034 IRDA_WARNING("%s(), failed, fifo not empty!\n", __func__); 2035 return 0; 2036 } 2037 2038 /* Fill FIFO with current frame */ 2039 while (fifo_size-- > 0 && actual < len) { 2040 /* Transmit next byte */ 2041 outb(buf[actual], iobase + UART_TX); 2042 actual++; 2043 } 2044 return actual; 2045} 2046 2047/* 2048 * Function smsc_ircc_is_receiving (self) 2049 * 2050 * Returns true is we are currently receiving data 2051 * 2052 */ 2053static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self) 2054{ 2055 return self->rx_buff.state != OUTSIDE_FRAME; 2056} 2057 2058 2059/* 2060 * Function smsc_ircc_probe_transceiver(self) 2061 * 2062 * Tries to find the used Transceiver 2063 * 2064 */ 2065static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self) 2066{ 2067 unsigned int i; 2068 2069 IRDA_ASSERT(self != NULL, return;); 2070 2071 for (i = 0; smsc_transceivers[i].name != NULL; i++) 2072 if (smsc_transceivers[i].probe(self->io.fir_base)) { 2073 IRDA_MESSAGE(" %s transceiver found\n", 2074 smsc_transceivers[i].name); 2075 self->transceiver= i + 1; 2076 return; 2077 } 2078 2079 IRDA_MESSAGE("No transceiver found. Defaulting to %s\n", 2080 smsc_transceivers[SMSC_IRCC2_C_DEFAULT_TRANSCEIVER].name); 2081 2082 self->transceiver = SMSC_IRCC2_C_DEFAULT_TRANSCEIVER; 2083} 2084 2085 2086/* 2087 * Function smsc_ircc_set_transceiver_for_speed(self, speed) 2088 * 2089 * Set the transceiver according to the speed 2090 * 2091 */ 2092static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed) 2093{ 2094 unsigned int trx; 2095 2096 trx = self->transceiver; 2097 if (trx > 0) 2098 smsc_transceivers[trx - 1].set_for_speed(self->io.fir_base, speed); 2099} 2100 2101/* 2102 * Function smsc_ircc_wait_hw_transmitter_finish () 2103 * 2104 * Wait for the real end of HW transmission 2105 * 2106 * The UART is a strict FIFO, and we get called only when we have finished 2107 * pushing data to the FIFO, so the maximum amount of time we must wait 2108 * is only for the FIFO to drain out. 2109 * 2110 * We use a simple calibrated loop. We may need to adjust the loop 2111 * delay (udelay) to balance I/O traffic and latency. And we also need to 2112 * adjust the maximum timeout. 2113 * It would probably be better to wait for the proper interrupt, 2114 * but it doesn't seem to be available. 2115 * 2116 * We can't use jiffies or kernel timers because : 2117 * 1) We are called from the interrupt handler, which disable softirqs, 2118 * so jiffies won't be increased 2119 * 2) Jiffies granularity is usually very coarse (10ms), and we don't 2120 * want to wait that long to detect stuck hardware. 2121 * Jean II 2122 */ 2123 2124static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self) 2125{ 2126 int iobase = self->io.sir_base; 2127 int count = SMSC_IRCC2_HW_TRANSMITTER_TIMEOUT_US; 2128 2129 /* Calibrated busy loop */ 2130 while (count-- > 0 && !(inb(iobase + UART_LSR) & UART_LSR_TEMT)) 2131 udelay(1); 2132 2133 if (count < 0) 2134 IRDA_DEBUG(0, "%s(): stuck transmitter\n", __func__); 2135} 2136 2137 2138/* PROBING 2139 * 2140 * REVISIT we can be told about the device by PNP, and should use that info 2141 * instead of probing hardware and creating a platform_device ... 2142 */ 2143 2144static int __init smsc_ircc_look_for_chips(void) 2145{ 2146 struct smsc_chip_address *address; 2147 char *type; 2148 unsigned int cfg_base, found; 2149 2150 found = 0; 2151 address = possible_addresses; 2152 2153 while (address->cfg_base) { 2154 cfg_base = address->cfg_base; 2155 2156 /*printk(KERN_WARNING "%s(): probing: 0x%02x for: 0x%02x\n", __func__, cfg_base, address->type);*/ 2157 2158 if (address->type & SMSCSIO_TYPE_FDC) { 2159 type = "FDC"; 2160 if (address->type & SMSCSIO_TYPE_FLAT) 2161 if (!smsc_superio_flat(fdc_chips_flat, cfg_base, type)) 2162 found++; 2163 2164 if (address->type & SMSCSIO_TYPE_PAGED) 2165 if (!smsc_superio_paged(fdc_chips_paged, cfg_base, type)) 2166 found++; 2167 } 2168 if (address->type & SMSCSIO_TYPE_LPC) { 2169 type = "LPC"; 2170 if (address->type & SMSCSIO_TYPE_FLAT) 2171 if (!smsc_superio_flat(lpc_chips_flat, cfg_base, type)) 2172 found++; 2173 2174 if (address->type & SMSCSIO_TYPE_PAGED) 2175 if (!smsc_superio_paged(lpc_chips_paged, cfg_base, type)) 2176 found++; 2177 } 2178 address++; 2179 } 2180 return found; 2181} 2182 2183/* 2184 * Function smsc_superio_flat (chip, base, type) 2185 * 2186 * Try to get configuration of a smc SuperIO chip with flat register model 2187 * 2188 */ 2189static int __init smsc_superio_flat(const struct smsc_chip *chips, unsigned short cfgbase, char *type) 2190{ 2191 unsigned short firbase, sirbase; 2192 u8 mode, dma, irq; 2193 int ret = -ENODEV; 2194 2195 IRDA_DEBUG(1, "%s\n", __func__); 2196 2197 if (smsc_ircc_probe(cfgbase, SMSCSIOFLAT_DEVICEID_REG, chips, type) == NULL) 2198 return ret; 2199 2200 outb(SMSCSIOFLAT_UARTMODE0C_REG, cfgbase); 2201 mode = inb(cfgbase + 1); 2202 2203 /*printk(KERN_WARNING "%s(): mode: 0x%02x\n", __func__, mode);*/ 2204 2205 if (!(mode & SMSCSIOFLAT_UART2MODE_VAL_IRDA)) 2206 IRDA_WARNING("%s(): IrDA not enabled\n", __func__); 2207 2208 outb(SMSCSIOFLAT_UART2BASEADDR_REG, cfgbase); 2209 sirbase = inb(cfgbase + 1) << 2; 2210 2211 /* FIR iobase */ 2212 outb(SMSCSIOFLAT_FIRBASEADDR_REG, cfgbase); 2213 firbase = inb(cfgbase + 1) << 3; 2214 2215 /* DMA */ 2216 outb(SMSCSIOFLAT_FIRDMASELECT_REG, cfgbase); 2217 dma = inb(cfgbase + 1) & SMSCSIOFLAT_FIRDMASELECT_MASK; 2218 2219 /* IRQ */ 2220 outb(SMSCSIOFLAT_UARTIRQSELECT_REG, cfgbase); 2221 irq = inb(cfgbase + 1) & SMSCSIOFLAT_UART2IRQSELECT_MASK; 2222 2223 IRDA_MESSAGE("%s(): fir: 0x%02x, sir: 0x%02x, dma: %02d, irq: %d, mode: 0x%02x\n", __func__, firbase, sirbase, dma, irq, mode); 2224 2225 if (firbase && smsc_ircc_open(firbase, sirbase, dma, irq) == 0) 2226 ret = 0; 2227 2228 /* Exit configuration */ 2229 outb(SMSCSIO_CFGEXITKEY, cfgbase); 2230 2231 return ret; 2232} 2233 2234/* 2235 * Function smsc_superio_paged (chip, base, type) 2236 * 2237 * Try to get configuration of a smc SuperIO chip with paged register model 2238 * 2239 */ 2240static int __init smsc_superio_paged(const struct smsc_chip *chips, unsigned short cfg_base, char *type) 2241{ 2242 unsigned short fir_io, sir_io; 2243 int ret = -ENODEV; 2244 2245 IRDA_DEBUG(1, "%s\n", __func__); 2246 2247 if (smsc_ircc_probe(cfg_base, 0x20, chips, type) == NULL) 2248 return ret; 2249 2250 /* Select logical device (UART2) */ 2251 outb(0x07, cfg_base); 2252 outb(0x05, cfg_base + 1); 2253 2254 /* SIR iobase */ 2255 outb(0x60, cfg_base); 2256 sir_io = inb(cfg_base + 1) << 8; 2257 outb(0x61, cfg_base); 2258 sir_io |= inb(cfg_base + 1); 2259 2260 /* Read FIR base */ 2261 outb(0x62, cfg_base); 2262 fir_io = inb(cfg_base + 1) << 8; 2263 outb(0x63, cfg_base); 2264 fir_io |= inb(cfg_base + 1); 2265 outb(0x2b, cfg_base); /* ??? */ 2266 2267 if (fir_io && smsc_ircc_open(fir_io, sir_io, ircc_dma, ircc_irq) == 0) 2268 ret = 0; 2269 2270 /* Exit configuration */ 2271 outb(SMSCSIO_CFGEXITKEY, cfg_base); 2272 2273 return ret; 2274} 2275 2276 2277static int __init smsc_access(unsigned short cfg_base, unsigned char reg) 2278{ 2279 IRDA_DEBUG(1, "%s\n", __func__); 2280 2281 outb(reg, cfg_base); 2282 return inb(cfg_base) != reg ? -1 : 0; 2283} 2284 2285static const struct smsc_chip * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const struct smsc_chip *chip, char *type) 2286{ 2287 u8 devid, xdevid, rev; 2288 2289 IRDA_DEBUG(1, "%s\n", __func__); 2290 2291 /* Leave configuration */ 2292 2293 outb(SMSCSIO_CFGEXITKEY, cfg_base); 2294 2295 if (inb(cfg_base) == SMSCSIO_CFGEXITKEY) /* not a smc superio chip */ 2296 return NULL; 2297 2298 outb(reg, cfg_base); 2299 2300 xdevid = inb(cfg_base + 1); 2301 2302 /* Enter configuration */ 2303 2304 outb(SMSCSIO_CFGACCESSKEY, cfg_base); 2305 2306 #if 0 2307 if (smsc_access(cfg_base,0x55)) /* send second key and check */ 2308 return NULL; 2309 #endif 2310 2311 /* probe device ID */ 2312 2313 if (smsc_access(cfg_base, reg)) 2314 return NULL; 2315 2316 devid = inb(cfg_base + 1); 2317 2318 if (devid == 0 || devid == 0xff) /* typical values for unused port */ 2319 return NULL; 2320 2321 /* probe revision ID */ 2322 2323 if (smsc_access(cfg_base, reg + 1)) 2324 return NULL; 2325 2326 rev = inb(cfg_base + 1); 2327 2328 if (rev >= 128) /* i think this will make no sense */ 2329 return NULL; 2330 2331 if (devid == xdevid) /* protection against false positives */ 2332 return NULL; 2333 2334 /* Check for expected device ID; are there others? */ 2335 2336 while (chip->devid != devid) { 2337 2338 chip++; 2339 2340 if (chip->name == NULL) 2341 return NULL; 2342 } 2343 2344 IRDA_MESSAGE("found SMC SuperIO Chip (devid=0x%02x rev=%02X base=0x%04x): %s%s\n", 2345 devid, rev, cfg_base, type, chip->name); 2346 2347 if (chip->rev > rev) { 2348 IRDA_MESSAGE("Revision higher than expected\n"); 2349 return NULL; 2350 } 2351 2352 if (chip->flags & NoIRDA) 2353 IRDA_MESSAGE("chipset does not support IRDA\n"); 2354 2355 return chip; 2356} 2357 2358static int __init smsc_superio_fdc(unsigned short cfg_base) 2359{ 2360 int ret = -1; 2361 2362 if (!request_region(cfg_base, 2, driver_name)) { 2363 IRDA_WARNING("%s: can't get cfg_base of 0x%03x\n", 2364 __func__, cfg_base); 2365 } else { 2366 if (!smsc_superio_flat(fdc_chips_flat, cfg_base, "FDC") || 2367 !smsc_superio_paged(fdc_chips_paged, cfg_base, "FDC")) 2368 ret = 0; 2369 2370 release_region(cfg_base, 2); 2371 } 2372 2373 return ret; 2374} 2375 2376static int __init smsc_superio_lpc(unsigned short cfg_base) 2377{ 2378 int ret = -1; 2379 2380 if (!request_region(cfg_base, 2, driver_name)) { 2381 IRDA_WARNING("%s: can't get cfg_base of 0x%03x\n", 2382 __func__, cfg_base); 2383 } else { 2384 if (!smsc_superio_flat(lpc_chips_flat, cfg_base, "LPC") || 2385 !smsc_superio_paged(lpc_chips_paged, cfg_base, "LPC")) 2386 ret = 0; 2387 2388 release_region(cfg_base, 2); 2389 } 2390 return ret; 2391} 2392 2393/* 2394 * Look for some specific subsystem setups that need 2395 * pre-configuration not properly done by the BIOS (especially laptops) 2396 * This code is based in part on smcinit.c, tosh1800-smcinit.c 2397 * and tosh2450-smcinit.c. The table lists the device entries 2398 * for ISA bridges with an LPC (Low Pin Count) controller which 2399 * handles the communication with the SMSC device. After the LPC 2400 * controller is initialized through PCI, the SMSC device is initialized 2401 * through a dedicated port in the ISA port-mapped I/O area, this latter 2402 * area is used to configure the SMSC device with default 2403 * SIR and FIR I/O ports, DMA and IRQ. Different vendors have 2404 * used different sets of parameters and different control port 2405 * addresses making a subsystem device table necessary. 2406 */ 2407#ifdef CONFIG_PCI 2408static struct smsc_ircc_subsystem_configuration subsystem_configurations[] __initdata = { 2409 /* 2410 * Subsystems needing entries: 2411 * 0x10b9:0x1533 0x103c:0x0850 HP nx9010 family 2412 * 0x10b9:0x1533 0x0e11:0x005a Compaq nc4000 family 2413 * 0x8086:0x24cc 0x0e11:0x002a HP nx9000 family 2414 */ 2415 { 2416 /* Guessed entry */ 2417 .vendor = PCI_VENDOR_ID_INTEL, /* Intel 82801DBM LPC bridge */ 2418 .device = 0x24cc, 2419 .subvendor = 0x103c, 2420 .subdevice = 0x08bc, 2421 .sir_io = 0x02f8, 2422 .fir_io = 0x0130, 2423 .fir_irq = 0x05, 2424 .fir_dma = 0x03, 2425 .cfg_base = 0x004e, 2426 .preconfigure = preconfigure_through_82801, 2427 .name = "HP nx5000 family", 2428 }, 2429 { 2430 .vendor = PCI_VENDOR_ID_INTEL, /* Intel 82801DBM LPC bridge */ 2431 .device = 0x24cc, 2432 .subvendor = 0x103c, 2433 .subdevice = 0x088c, 2434 /* Quite certain these are the same for nc8000 as for nc6000 */ 2435 .sir_io = 0x02f8, 2436 .fir_io = 0x0130, 2437 .fir_irq = 0x05, 2438 .fir_dma = 0x03, 2439 .cfg_base = 0x004e, 2440 .preconfigure = preconfigure_through_82801, 2441 .name = "HP nc8000 family", 2442 }, 2443 { 2444 .vendor = PCI_VENDOR_ID_INTEL, /* Intel 82801DBM LPC bridge */ 2445 .device = 0x24cc, 2446 .subvendor = 0x103c, 2447 .subdevice = 0x0890, 2448 .sir_io = 0x02f8, 2449 .fir_io = 0x0130, 2450 .fir_irq = 0x05, 2451 .fir_dma = 0x03, 2452 .cfg_base = 0x004e, 2453 .preconfigure = preconfigure_through_82801, 2454 .name = "HP nc6000 family", 2455 }, 2456 { 2457 .vendor = PCI_VENDOR_ID_INTEL, /* Intel 82801DBM LPC bridge */ 2458 .device = 0x24cc, 2459 .subvendor = 0x0e11, 2460 .subdevice = 0x0860, 2461 /* I assume these are the same for x1000 as for the others */ 2462 .sir_io = 0x02e8, 2463 .fir_io = 0x02f8, 2464 .fir_irq = 0x07, 2465 .fir_dma = 0x03, 2466 .cfg_base = 0x002e, 2467 .preconfigure = preconfigure_through_82801, 2468 .name = "Compaq x1000 family", 2469 }, 2470 { 2471 /* Intel 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge */ 2472 .vendor = PCI_VENDOR_ID_INTEL, 2473 .device = 0x24c0, 2474 .subvendor = 0x1179, 2475 .subdevice = 0xffff, /* 0xffff is "any" */ 2476 .sir_io = 0x03f8, 2477 .fir_io = 0x0130, 2478 .fir_irq = 0x07, 2479 .fir_dma = 0x01, 2480 .cfg_base = 0x002e, 2481 .preconfigure = preconfigure_through_82801, 2482 .name = "Toshiba laptop with Intel 82801DB/DBL LPC bridge", 2483 }, 2484 { 2485 .vendor = PCI_VENDOR_ID_INTEL, /* Intel 82801CAM ISA bridge */ 2486 .device = 0x248c, 2487 .subvendor = 0x1179, 2488 .subdevice = 0xffff, /* 0xffff is "any" */ 2489 .sir_io = 0x03f8, 2490 .fir_io = 0x0130, 2491 .fir_irq = 0x03, 2492 .fir_dma = 0x03, 2493 .cfg_base = 0x002e, 2494 .preconfigure = preconfigure_through_82801, 2495 .name = "Toshiba laptop with Intel 82801CAM ISA bridge", 2496 }, 2497 { 2498 /* 82801DBM (ICH4-M) LPC Interface Bridge */ 2499 .vendor = PCI_VENDOR_ID_INTEL, 2500 .device = 0x24cc, 2501 .subvendor = 0x1179, 2502 .subdevice = 0xffff, /* 0xffff is "any" */ 2503 .sir_io = 0x03f8, 2504 .fir_io = 0x0130, 2505 .fir_irq = 0x03, 2506 .fir_dma = 0x03, 2507 .cfg_base = 0x002e, 2508 .preconfigure = preconfigure_through_82801, 2509 .name = "Toshiba laptop with Intel 8281DBM LPC bridge", 2510 }, 2511 { 2512 /* ALi M1533/M1535 PCI to ISA Bridge [Aladdin IV/V/V+] */ 2513 .vendor = PCI_VENDOR_ID_AL, 2514 .device = 0x1533, 2515 .subvendor = 0x1179, 2516 .subdevice = 0xffff, /* 0xffff is "any" */ 2517 .sir_io = 0x02e8, 2518 .fir_io = 0x02f8, 2519 .fir_irq = 0x07, 2520 .fir_dma = 0x03, 2521 .cfg_base = 0x002e, 2522 .preconfigure = preconfigure_through_ali, 2523 .name = "Toshiba laptop with ALi ISA bridge", 2524 }, 2525 { } // Terminator 2526}; 2527 2528 2529/* 2530 * This sets up the basic SMSC parameters 2531 * (FIR port, SIR port, FIR DMA, FIR IRQ) 2532 * through the chip configuration port. 2533 */ 2534static int __init preconfigure_smsc_chip(struct 2535 smsc_ircc_subsystem_configuration 2536 *conf) 2537{ 2538 unsigned short iobase = conf->cfg_base; 2539 unsigned char tmpbyte; 2540 2541 outb(LPC47N227_CFGACCESSKEY, iobase); // enter configuration state 2542 outb(SMSCSIOFLAT_DEVICEID_REG, iobase); // set for device ID 2543 tmpbyte = inb(iobase +1); // Read device ID 2544 IRDA_DEBUG(0, 2545 "Detected Chip id: 0x%02x, setting up registers...\n", 2546 tmpbyte); 2547 2548 /* Disable UART1 and set up SIR I/O port */ 2549 outb(0x24, iobase); // select CR24 - UART1 base addr 2550 outb(0x00, iobase + 1); // disable UART1 2551 outb(SMSCSIOFLAT_UART2BASEADDR_REG, iobase); // select CR25 - UART2 base addr 2552 outb( (conf->sir_io >> 2), iobase + 1); // bits 2-9 of 0x3f8 2553 tmpbyte = inb(iobase + 1); 2554 if (tmpbyte != (conf->sir_io >> 2) ) { 2555 IRDA_WARNING("ERROR: could not configure SIR ioport.\n"); 2556 IRDA_WARNING("Try to supply ircc_cfg argument.\n"); 2557 return -ENXIO; 2558 } 2559 2560 /* Set up FIR IRQ channel for UART2 */ 2561 outb(SMSCSIOFLAT_UARTIRQSELECT_REG, iobase); // select CR28 - UART1,2 IRQ select 2562 tmpbyte = inb(iobase + 1); 2563 tmpbyte &= SMSCSIOFLAT_UART1IRQSELECT_MASK; // Do not touch the UART1 portion 2564 tmpbyte |= (conf->fir_irq & SMSCSIOFLAT_UART2IRQSELECT_MASK); 2565 outb(tmpbyte, iobase + 1); 2566 tmpbyte = inb(iobase + 1) & SMSCSIOFLAT_UART2IRQSELECT_MASK; 2567 if (tmpbyte != conf->fir_irq) { 2568 IRDA_WARNING("ERROR: could not configure FIR IRQ channel.\n"); 2569 return -ENXIO; 2570 } 2571 2572 /* Set up FIR I/O port */ 2573 outb(SMSCSIOFLAT_FIRBASEADDR_REG, iobase); // CR2B - SCE (FIR) base addr 2574 outb((conf->fir_io >> 3), iobase + 1); 2575 tmpbyte = inb(iobase + 1); 2576 if (tmpbyte != (conf->fir_io >> 3) ) { 2577 IRDA_WARNING("ERROR: could not configure FIR I/O port.\n"); 2578 return -ENXIO; 2579 } 2580 2581 /* Set up FIR DMA channel */ 2582 outb(SMSCSIOFLAT_FIRDMASELECT_REG, iobase); // CR2C - SCE (FIR) DMA select 2583 outb((conf->fir_dma & LPC47N227_FIRDMASELECT_MASK), iobase + 1); // DMA 2584 tmpbyte = inb(iobase + 1) & LPC47N227_FIRDMASELECT_MASK; 2585 if (tmpbyte != (conf->fir_dma & LPC47N227_FIRDMASELECT_MASK)) { 2586 IRDA_WARNING("ERROR: could not configure FIR DMA channel.\n"); 2587 return -ENXIO; 2588 } 2589 2590 outb(SMSCSIOFLAT_UARTMODE0C_REG, iobase); // CR0C - UART mode 2591 tmpbyte = inb(iobase + 1); 2592 tmpbyte &= ~SMSCSIOFLAT_UART2MODE_MASK | 2593 SMSCSIOFLAT_UART2MODE_VAL_IRDA; 2594 outb(tmpbyte, iobase + 1); // enable IrDA (HPSIR) mode, high speed 2595 2596 outb(LPC47N227_APMBOOTDRIVE_REG, iobase); // CR07 - Auto Pwr Mgt/boot drive sel 2597 tmpbyte = inb(iobase + 1); 2598 outb(tmpbyte | LPC47N227_UART2AUTOPWRDOWN_MASK, iobase + 1); // enable UART2 autopower down 2599 2600 /* This one was not part of tosh1800 */ 2601 outb(0x0a, iobase); // CR0a - ecp fifo / ir mux 2602 tmpbyte = inb(iobase + 1); 2603 outb(tmpbyte | 0x40, iobase + 1); // send active device to ir port 2604 2605 outb(LPC47N227_UART12POWER_REG, iobase); // CR02 - UART 1,2 power 2606 tmpbyte = inb(iobase + 1); 2607 outb(tmpbyte | LPC47N227_UART2POWERDOWN_MASK, iobase + 1); // UART2 power up mode, UART1 power down 2608 2609 outb(LPC47N227_FDCPOWERVALIDCONF_REG, iobase); // CR00 - FDC Power/valid config cycle 2610 tmpbyte = inb(iobase + 1); 2611 outb(tmpbyte | LPC47N227_VALID_MASK, iobase + 1); // valid config cycle done 2612 2613 outb(LPC47N227_CFGEXITKEY, iobase); // Exit configuration 2614 2615 return 0; 2616} 2617 2618/* 82801CAM generic registers */ 2619#define VID 0x00 2620#define DID 0x02 2621#define PIRQ_A_D_ROUT 0x60 2622#define SIRQ_CNTL 0x64 2623#define PIRQ_E_H_ROUT 0x68 2624#define PCI_DMA_C 0x90 2625/* LPC-specific registers */ 2626#define COM_DEC 0xe0 2627#define GEN1_DEC 0xe4 2628#define LPC_EN 0xe6 2629#define GEN2_DEC 0xec 2630/* 2631 * Sets up the I/O range using the 82801CAM ISA bridge, 82801DBM LPC bridge 2632 * or Intel 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge. 2633 * They all work the same way! 2634 */ 2635static int __init preconfigure_through_82801(struct pci_dev *dev, 2636 struct 2637 smsc_ircc_subsystem_configuration 2638 *conf) 2639{ 2640 unsigned short tmpword; 2641 unsigned char tmpbyte; 2642 2643 IRDA_MESSAGE("Setting up Intel 82801 controller and SMSC device\n"); 2644 /* 2645 * Select the range for the COMA COM port (SIR) 2646 * Register COM_DEC: 2647 * Bit 7: reserved 2648 * Bit 6-4, COMB decode range 2649 * Bit 3: reserved 2650 * Bit 2-0, COMA decode range 2651 * 2652 * Decode ranges: 2653 * 000 = 0x3f8-0x3ff (COM1) 2654 * 001 = 0x2f8-0x2ff (COM2) 2655 * 010 = 0x220-0x227 2656 * 011 = 0x228-0x22f 2657 * 100 = 0x238-0x23f 2658 * 101 = 0x2e8-0x2ef (COM4) 2659 * 110 = 0x338-0x33f 2660 * 111 = 0x3e8-0x3ef (COM3) 2661 */ 2662 pci_read_config_byte(dev, COM_DEC, &tmpbyte); 2663 tmpbyte &= 0xf8; /* mask COMA bits */ 2664 switch(conf->sir_io) { 2665 case 0x3f8: 2666 tmpbyte |= 0x00; 2667 break; 2668 case 0x2f8: 2669 tmpbyte |= 0x01; 2670 break; 2671 case 0x220: 2672 tmpbyte |= 0x02; 2673 break; 2674 case 0x228: 2675 tmpbyte |= 0x03; 2676 break; 2677 case 0x238: 2678 tmpbyte |= 0x04; 2679 break; 2680 case 0x2e8: 2681 tmpbyte |= 0x05; 2682 break; 2683 case 0x338: 2684 tmpbyte |= 0x06; 2685 break; 2686 case 0x3e8: 2687 tmpbyte |= 0x07; 2688 break; 2689 default: 2690 tmpbyte |= 0x01; /* COM2 default */ 2691 } 2692 IRDA_DEBUG(1, "COM_DEC (write): 0x%02x\n", tmpbyte); 2693 pci_write_config_byte(dev, COM_DEC, tmpbyte); 2694 2695 /* Enable Low Pin Count interface */ 2696 pci_read_config_word(dev, LPC_EN, &tmpword); 2697 /* These seem to be set up at all times, 2698 * just make sure it is properly set. 2699 */ 2700 switch(conf->cfg_base) { 2701 case 0x04e: 2702 tmpword |= 0x2000; 2703 break; 2704 case 0x02e: 2705 tmpword |= 0x1000; 2706 break; 2707 case 0x062: 2708 tmpword |= 0x0800; 2709 break; 2710 case 0x060: 2711 tmpword |= 0x0400; 2712 break; 2713 default: 2714 IRDA_WARNING("Uncommon I/O base address: 0x%04x\n", 2715 conf->cfg_base); 2716 break; 2717 } 2718 tmpword &= 0xfffd; /* disable LPC COMB */ 2719 tmpword |= 0x0001; /* set bit 0 : enable LPC COMA addr range (GEN2) */ 2720 IRDA_DEBUG(1, "LPC_EN (write): 0x%04x\n", tmpword); 2721 pci_write_config_word(dev, LPC_EN, tmpword); 2722 2723 /* 2724 * Configure LPC DMA channel 2725 * PCI_DMA_C bits: 2726 * Bit 15-14: DMA channel 7 select 2727 * Bit 13-12: DMA channel 6 select 2728 * Bit 11-10: DMA channel 5 select 2729 * Bit 9-8: Reserved 2730 * Bit 7-6: DMA channel 3 select 2731 * Bit 5-4: DMA channel 2 select 2732 * Bit 3-2: DMA channel 1 select 2733 * Bit 1-0: DMA channel 0 select 2734 * 00 = Reserved value 2735 * 01 = PC/PCI DMA 2736 * 10 = Reserved value 2737 * 11 = LPC I/F DMA 2738 */ 2739 pci_read_config_word(dev, PCI_DMA_C, &tmpword); 2740 switch(conf->fir_dma) { 2741 case 0x07: 2742 tmpword |= 0xc000; 2743 break; 2744 case 0x06: 2745 tmpword |= 0x3000; 2746 break; 2747 case 0x05: 2748 tmpword |= 0x0c00; 2749 break; 2750 case 0x03: 2751 tmpword |= 0x00c0; 2752 break; 2753 case 0x02: 2754 tmpword |= 0x0030; 2755 break; 2756 case 0x01: 2757 tmpword |= 0x000c; 2758 break; 2759 case 0x00: 2760 tmpword |= 0x0003; 2761 break; 2762 default: 2763 break; /* do not change settings */ 2764 } 2765 IRDA_DEBUG(1, "PCI_DMA_C (write): 0x%04x\n", tmpword); 2766 pci_write_config_word(dev, PCI_DMA_C, tmpword); 2767 2768 /* 2769 * GEN2_DEC bits: 2770 * Bit 15-4: Generic I/O range 2771 * Bit 3-1: reserved (read as 0) 2772 * Bit 0: enable GEN2 range on LPC I/F 2773 */ 2774 tmpword = conf->fir_io & 0xfff8; 2775 tmpword |= 0x0001; 2776 IRDA_DEBUG(1, "GEN2_DEC (write): 0x%04x\n", tmpword); 2777 pci_write_config_word(dev, GEN2_DEC, tmpword); 2778 2779 /* Pre-configure chip */ 2780 return preconfigure_smsc_chip(conf); 2781} 2782 2783/* 2784 * Pre-configure a certain port on the ALi 1533 bridge. 2785 * This is based on reverse-engineering since ALi does not 2786 * provide any data sheet for the 1533 chip. 2787 */ 2788static void __init preconfigure_ali_port(struct pci_dev *dev, 2789 unsigned short port) 2790{ 2791 unsigned char reg; 2792 /* These bits obviously control the different ports */ 2793 unsigned char mask; 2794 unsigned char tmpbyte; 2795 2796 switch(port) { 2797 case 0x0130: 2798 case 0x0178: 2799 reg = 0xb0; 2800 mask = 0x80; 2801 break; 2802 case 0x03f8: 2803 reg = 0xb4; 2804 mask = 0x80; 2805 break; 2806 case 0x02f8: 2807 reg = 0xb4; 2808 mask = 0x30; 2809 break; 2810 case 0x02e8: 2811 reg = 0xb4; 2812 mask = 0x08; 2813 break; 2814 default: 2815 IRDA_ERROR("Failed to configure unsupported port on ALi 1533 bridge: 0x%04x\n", port); 2816 return; 2817 } 2818 2819 pci_read_config_byte(dev, reg, &tmpbyte); 2820 /* Turn on the right bits */ 2821 tmpbyte |= mask; 2822 pci_write_config_byte(dev, reg, tmpbyte); 2823 IRDA_MESSAGE("Activated ALi 1533 ISA bridge port 0x%04x.\n", port); 2824} 2825 2826static int __init preconfigure_through_ali(struct pci_dev *dev, 2827 struct 2828 smsc_ircc_subsystem_configuration 2829 *conf) 2830{ 2831 /* Configure the two ports on the ALi 1533 */ 2832 preconfigure_ali_port(dev, conf->sir_io); 2833 preconfigure_ali_port(dev, conf->fir_io); 2834 2835 /* Pre-configure chip */ 2836 return preconfigure_smsc_chip(conf); 2837} 2838 2839static int __init smsc_ircc_preconfigure_subsystems(unsigned short ircc_cfg, 2840 unsigned short ircc_fir, 2841 unsigned short ircc_sir, 2842 unsigned char ircc_dma, 2843 unsigned char ircc_irq) 2844{ 2845 struct pci_dev *dev = NULL; 2846 unsigned short ss_vendor = 0x0000; 2847 unsigned short ss_device = 0x0000; 2848 int ret = 0; 2849 2850 for_each_pci_dev(dev) { 2851 struct smsc_ircc_subsystem_configuration *conf; 2852 2853 /* 2854 * Cache the subsystem vendor/device: 2855 * some manufacturers fail to set this for all components, 2856 * so we save it in case there is just 0x0000 0x0000 on the 2857 * device we want to check. 2858 */ 2859 if (dev->subsystem_vendor != 0x0000U) { 2860 ss_vendor = dev->subsystem_vendor; 2861 ss_device = dev->subsystem_device; 2862 } 2863 conf = subsystem_configurations; 2864 for( ; conf->subvendor; conf++) { 2865 if(conf->vendor == dev->vendor && 2866 conf->device == dev->device && 2867 conf->subvendor == ss_vendor && 2868 /* Sometimes these are cached values */ 2869 (conf->subdevice == ss_device || 2870 conf->subdevice == 0xffff)) { 2871 struct smsc_ircc_subsystem_configuration 2872 tmpconf; 2873 2874 memcpy(&tmpconf, conf, 2875 sizeof(struct smsc_ircc_subsystem_configuration)); 2876 2877 /* 2878 * Override the default values with anything 2879 * passed in as parameter 2880 */ 2881 if (ircc_cfg != 0) 2882 tmpconf.cfg_base = ircc_cfg; 2883 if (ircc_fir != 0) 2884 tmpconf.fir_io = ircc_fir; 2885 if (ircc_sir != 0) 2886 tmpconf.sir_io = ircc_sir; 2887 if (ircc_dma != DMA_INVAL) 2888 tmpconf.fir_dma = ircc_dma; 2889 if (ircc_irq != IRQ_INVAL) 2890 tmpconf.fir_irq = ircc_irq; 2891 2892 IRDA_MESSAGE("Detected unconfigured %s SMSC IrDA chip, pre-configuring device.\n", conf->name); 2893 if (conf->preconfigure) 2894 ret = conf->preconfigure(dev, &tmpconf); 2895 else 2896 ret = -ENODEV; 2897 } 2898 } 2899 } 2900 2901 return ret; 2902} 2903#endif // CONFIG_PCI 2904 2905/************************************************ 2906 * 2907 * Transceivers specific functions 2908 * 2909 ************************************************/ 2910 2911 2912/* 2913 * Function smsc_ircc_set_transceiver_smsc_ircc_atc(fir_base, speed) 2914 * 2915 * Program transceiver through smsc-ircc ATC circuitry 2916 * 2917 */ 2918 2919static void smsc_ircc_set_transceiver_smsc_ircc_atc(int fir_base, u32 speed) 2920{ 2921 unsigned long jiffies_now, jiffies_timeout; 2922 u8 val; 2923 2924 jiffies_now = jiffies; 2925 jiffies_timeout = jiffies + SMSC_IRCC2_ATC_PROGRAMMING_TIMEOUT_JIFFIES; 2926 2927 /* ATC */ 2928 register_bank(fir_base, 4); 2929 outb((inb(fir_base + IRCC_ATC) & IRCC_ATC_MASK) | IRCC_ATC_nPROGREADY|IRCC_ATC_ENABLE, 2930 fir_base + IRCC_ATC); 2931 2932 while ((val = (inb(fir_base + IRCC_ATC) & IRCC_ATC_nPROGREADY)) && 2933 !time_after(jiffies, jiffies_timeout)) 2934 /* empty */; 2935 2936 if (val) 2937 IRDA_WARNING("%s(): ATC: 0x%02x\n", __func__, 2938 inb(fir_base + IRCC_ATC)); 2939} 2940 2941/* 2942 * Function smsc_ircc_probe_transceiver_smsc_ircc_atc(fir_base) 2943 * 2944 * Probe transceiver smsc-ircc ATC circuitry 2945 * 2946 */ 2947 2948static int smsc_ircc_probe_transceiver_smsc_ircc_atc(int fir_base) 2949{ 2950 return 0; 2951} 2952 2953/* 2954 * Function smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select(self, speed) 2955 * 2956 * Set transceiver 2957 * 2958 */ 2959 2960static void smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select(int fir_base, u32 speed) 2961{ 2962 u8 fast_mode; 2963 2964 switch (speed) { 2965 default: 2966 case 576000 : 2967 fast_mode = 0; 2968 break; 2969 case 1152000 : 2970 case 4000000 : 2971 fast_mode = IRCC_LCR_A_FAST; 2972 break; 2973 } 2974 register_bank(fir_base, 0); 2975 outb((inb(fir_base + IRCC_LCR_A) & 0xbf) | fast_mode, fir_base + IRCC_LCR_A); 2976} 2977 2978/* 2979 * Function smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select(fir_base) 2980 * 2981 * Probe transceiver 2982 * 2983 */ 2984 2985static int smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select(int fir_base) 2986{ 2987 return 0; 2988} 2989 2990/* 2991 * Function smsc_ircc_set_transceiver_toshiba_sat1800(fir_base, speed) 2992 * 2993 * Set transceiver 2994 * 2995 */ 2996 2997static void smsc_ircc_set_transceiver_toshiba_sat1800(int fir_base, u32 speed) 2998{ 2999 u8 fast_mode; 3000 3001 switch (speed) { 3002 default: 3003 case 576000 : 3004 fast_mode = 0; 3005 break; 3006 case 1152000 : 3007 case 4000000 : 3008 fast_mode = /*IRCC_LCR_A_FAST |*/ IRCC_LCR_A_GP_DATA; 3009 break; 3010 3011 } 3012 /* This causes an interrupt */ 3013 register_bank(fir_base, 0); 3014 outb((inb(fir_base + IRCC_LCR_A) & 0xbf) | fast_mode, fir_base + IRCC_LCR_A); 3015} 3016 3017/* 3018 * Function smsc_ircc_probe_transceiver_toshiba_sat1800(fir_base) 3019 * 3020 * Probe transceiver 3021 * 3022 */ 3023 3024static int smsc_ircc_probe_transceiver_toshiba_sat1800(int fir_base) 3025{ 3026 return 0; 3027} 3028 3029 3030module_init(smsc_ircc_init); 3031module_exit(smsc_ircc_cleanup);