3  *  Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)
 
   5  *  Copyright (C) 2001-2002  Marcel Holtmann <marcel@holtmann.org>
 
   8  *  This program is free software; you can redistribute it and/or modify
 
   9  *  it under the terms of the GNU General Public License version 2 as
 
  10  *  published by the Free Software Foundation;
 
  12  *  Software distributed under the License is distributed on an "AS
 
  13  *  IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 
  14  *  implied. See the License for the specific language governing
 
  15  *  rights and limitations under the License.
 
  17  *  The initial developer of the original code is David A. Hinds
 
  18  *  <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
 
  19  *  are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
 
  23 #include <linux/module.h>
 
  25 #include <linux/kernel.h>
 
  26 #include <linux/init.h>
 
  27 #include <linux/slab.h>
 
  28 #include <linux/types.h>
 
  29 #include <linux/sched.h>
 
  30 #include <linux/delay.h>
 
  31 #include <linux/timer.h>
 
  32 #include <linux/errno.h>
 
  33 #include <linux/ptrace.h>
 
  34 #include <linux/ioport.h>
 
  35 #include <linux/spinlock.h>
 
  36 #include <linux/moduleparam.h>
 
  37 #include <linux/wait.h>
 
  39 #include <linux/skbuff.h>
 
  42 #include <pcmcia/cs_types.h>
 
  43 #include <pcmcia/cs.h>
 
  44 #include <pcmcia/cistpl.h>
 
  45 #include <pcmcia/ciscode.h>
 
  46 #include <pcmcia/ds.h>
 
  47 #include <pcmcia/cisreg.h>
 
  49 #include <net/bluetooth/bluetooth.h>
 
  50 #include <net/bluetooth/hci_core.h>
 
  54 /* ======================== Module parameters ======================== */
 
  57 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 
  58 MODULE_DESCRIPTION("Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)");
 
  59 MODULE_LICENSE("GPL");
 
  63 /* ======================== Local structures ======================== */
 
  66 typedef struct bluecard_info_t {
 
  67         struct pcmcia_device *p_dev;
 
  72         spinlock_t lock;                /* For serializing operations */
 
  73         struct timer_list timer;        /* For LED control */
 
  75         struct sk_buff_head txq;
 
  76         unsigned long tx_state;
 
  78         unsigned long rx_state;
 
  79         unsigned long rx_count;
 
  80         struct sk_buff *rx_skb;
 
  82         unsigned char ctrl_reg;
 
  83         unsigned long hw_state;         /* Status of the hardware and LED control */
 
  87 static int bluecard_config(struct pcmcia_device *link);
 
  88 static void bluecard_release(struct pcmcia_device *link);
 
  90 static void bluecard_detach(struct pcmcia_device *p_dev);
 
  93 /* Default baud rate: 57600, 115200, 230400 or 460800 */
 
  94 #define DEFAULT_BAUD_RATE  230400
 
  99 #define CARD_HAS_PCCARD_ID     4
 
 100 #define CARD_HAS_POWER_LED     5
 
 101 #define CARD_HAS_ACTIVITY_LED  6
 
 103 /* Transmit states  */
 
 104 #define XMIT_SENDING         1
 
 105 #define XMIT_WAKEUP          2
 
 106 #define XMIT_BUFFER_NUMBER   5  /* unset = buffer one, set = buffer two */
 
 107 #define XMIT_BUF_ONE_READY   6
 
 108 #define XMIT_BUF_TWO_READY   7
 
 109 #define XMIT_SENDING_READY   8
 
 111 /* Receiver states */
 
 112 #define RECV_WAIT_PACKET_TYPE   0
 
 113 #define RECV_WAIT_EVENT_HEADER  1
 
 114 #define RECV_WAIT_ACL_HEADER    2
 
 115 #define RECV_WAIT_SCO_HEADER    3
 
 116 #define RECV_WAIT_DATA          4
 
 118 /* Special packet types */
 
 119 #define PKT_BAUD_RATE_57600   0x80
 
 120 #define PKT_BAUD_RATE_115200  0x81
 
 121 #define PKT_BAUD_RATE_230400  0x82
 
 122 #define PKT_BAUD_RATE_460800  0x83
 
 125 /* These are the register offsets */
 
 126 #define REG_COMMAND     0x20
 
 127 #define REG_INTERRUPT   0x21
 
 128 #define REG_CONTROL     0x22
 
 129 #define REG_RX_CONTROL  0x24
 
 130 #define REG_CARD_RESET  0x30
 
 131 #define REG_LED_CTRL    0x30
 
 134 #define REG_COMMAND_TX_BUF_ONE  0x01
 
 135 #define REG_COMMAND_TX_BUF_TWO  0x02
 
 136 #define REG_COMMAND_RX_BUF_ONE  0x04
 
 137 #define REG_COMMAND_RX_BUF_TWO  0x08
 
 138 #define REG_COMMAND_RX_WIN_ONE  0x00
 
 139 #define REG_COMMAND_RX_WIN_TWO  0x10
 
 142 #define REG_CONTROL_BAUD_RATE_57600   0x00
 
 143 #define REG_CONTROL_BAUD_RATE_115200  0x01
 
 144 #define REG_CONTROL_BAUD_RATE_230400  0x02
 
 145 #define REG_CONTROL_BAUD_RATE_460800  0x03
 
 146 #define REG_CONTROL_RTS               0x04
 
 147 #define REG_CONTROL_BT_ON             0x08
 
 148 #define REG_CONTROL_BT_RESET          0x10
 
 149 #define REG_CONTROL_BT_RES_PU         0x20
 
 150 #define REG_CONTROL_INTERRUPT         0x40
 
 151 #define REG_CONTROL_CARD_RESET        0x80
 
 154 #define RTS_LEVEL_SHIFT_BITS  0x02
 
 158 /* ======================== LED handling routines ======================== */
 
 161 static void bluecard_activity_led_timeout(u_long arg)
 
 163         bluecard_info_t *info = (bluecard_info_t *)arg;
 
 164         unsigned int iobase = info->p_dev->io.BasePort1;
 
 166         if (!test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
 
 169         if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
 
 170                 /* Disable activity LED */
 
 171                 outb(0x08 | 0x20, iobase + 0x30);
 
 173                 /* Disable power LED */
 
 174                 outb(0x00, iobase + 0x30);
 
 179 static void bluecard_enable_activity_led(bluecard_info_t *info)
 
 181         unsigned int iobase = info->p_dev->io.BasePort1;
 
 183         if (!test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
 
 186         if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
 
 187                 /* Enable activity LED */
 
 188                 outb(0x10 | 0x40, iobase + 0x30);
 
 190                 /* Stop the LED after HZ/4 */
 
 191                 mod_timer(&(info->timer), jiffies + HZ / 4);
 
 193                 /* Enable power LED */
 
 194                 outb(0x08 | 0x20, iobase + 0x30);
 
 196                 /* Stop the LED after HZ/2 */
 
 197                 mod_timer(&(info->timer), jiffies + HZ / 2);
 
 203 /* ======================== Interrupt handling ======================== */
 
 206 static int bluecard_write(unsigned int iobase, unsigned int offset, __u8 *buf, int len)
 
 210         actual = (len > 15) ? 15 : len;
 
 212         outb_p(actual, iobase + offset);
 
 214         for (i = 0; i < actual; i++)
 
 215                 outb_p(buf[i], iobase + offset + i + 1);
 
 221 static void bluecard_write_wakeup(bluecard_info_t *info)
 
 224                 BT_ERR("Unknown device");
 
 228         if (!test_bit(XMIT_SENDING_READY, &(info->tx_state)))
 
 231         if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
 
 232                 set_bit(XMIT_WAKEUP, &(info->tx_state));
 
 237                 register unsigned int iobase = info->p_dev->io.BasePort1;
 
 238                 register unsigned int offset;
 
 239                 register unsigned char command;
 
 240                 register unsigned long ready_bit;
 
 241                 register struct sk_buff *skb;
 
 244                 clear_bit(XMIT_WAKEUP, &(info->tx_state));
 
 246                 if (!pcmcia_dev_present(info->p_dev))
 
 249                 if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
 
 250                         if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state)))
 
 253                         command = REG_COMMAND_TX_BUF_TWO;
 
 254                         ready_bit = XMIT_BUF_TWO_READY;
 
 256                         if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state)))
 
 259                         command = REG_COMMAND_TX_BUF_ONE;
 
 260                         ready_bit = XMIT_BUF_ONE_READY;
 
 263                 if (!(skb = skb_dequeue(&(info->txq))))
 
 266                 if (bt_cb(skb)->pkt_type & 0x80) {
 
 268                         info->ctrl_reg |= REG_CONTROL_RTS;
 
 269                         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 273                 bluecard_enable_activity_led(info);
 
 276                 len = bluecard_write(iobase, offset, skb->data, skb->len);
 
 278                 /* Tell the FPGA to send the data */
 
 279                 outb_p(command, iobase + REG_COMMAND);
 
 281                 /* Mark the buffer as dirty */
 
 282                 clear_bit(ready_bit, &(info->tx_state));
 
 284                 if (bt_cb(skb)->pkt_type & 0x80) {
 
 285                         DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
 
 288                         unsigned char baud_reg;
 
 290                         switch (bt_cb(skb)->pkt_type) {
 
 291                         case PKT_BAUD_RATE_460800:
 
 292                                 baud_reg = REG_CONTROL_BAUD_RATE_460800;
 
 294                         case PKT_BAUD_RATE_230400:
 
 295                                 baud_reg = REG_CONTROL_BAUD_RATE_230400;
 
 297                         case PKT_BAUD_RATE_115200:
 
 298                                 baud_reg = REG_CONTROL_BAUD_RATE_115200;
 
 300                         case PKT_BAUD_RATE_57600:
 
 301                                 /* Fall through... */
 
 303                                 baud_reg = REG_CONTROL_BAUD_RATE_57600;
 
 307                         /* Wait until the command reaches the baseband */
 
 308                         prepare_to_wait(&wq, &wait, TASK_INTERRUPTIBLE);
 
 309                         schedule_timeout(HZ/10);
 
 310                         finish_wait(&wq, &wait);
 
 312                         /* Set baud on baseband */
 
 313                         info->ctrl_reg &= ~0x03;
 
 314                         info->ctrl_reg |= baud_reg;
 
 315                         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 318                         info->ctrl_reg &= ~REG_CONTROL_RTS;
 
 319                         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 321                         /* Wait before the next HCI packet can be send */
 
 322                         prepare_to_wait(&wq, &wait, TASK_INTERRUPTIBLE);
 
 323                         schedule_timeout(HZ);
 
 324                         finish_wait(&wq, &wait);
 
 327                 if (len == skb->len) {
 
 331                         skb_queue_head(&(info->txq), skb);
 
 334                 info->hdev->stat.byte_tx += len;
 
 337                 change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state));
 
 339         } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
 
 341         clear_bit(XMIT_SENDING, &(info->tx_state));
 
 345 static int bluecard_read(unsigned int iobase, unsigned int offset, __u8 *buf, int size)
 
 349         outb(REG_COMMAND_RX_WIN_ONE, iobase + REG_COMMAND);
 
 351         len = inb(iobase + offset);
 
 358                         outb(REG_COMMAND_RX_WIN_TWO, iobase + REG_COMMAND);
 
 362                 buf[n] = inb(iobase + offset + i);
 
 373 static void bluecard_receive(bluecard_info_t *info, unsigned int offset)
 
 376         unsigned char buf[31];
 
 380                 BT_ERR("Unknown device");
 
 384         iobase = info->p_dev->io.BasePort1;
 
 386         if (test_bit(XMIT_SENDING_READY, &(info->tx_state)))
 
 387                 bluecard_enable_activity_led(info);
 
 389         len = bluecard_read(iobase, offset, buf, sizeof(buf));
 
 391         for (i = 0; i < len; i++) {
 
 393                 /* Allocate packet */
 
 394                 if (info->rx_skb == NULL) {
 
 395                         info->rx_state = RECV_WAIT_PACKET_TYPE;
 
 397                         if (!(info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
 
 398                                 BT_ERR("Can't allocate mem for new packet");
 
 403                 if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
 
 405                         info->rx_skb->dev = (void *) info->hdev;
 
 406                         bt_cb(info->rx_skb)->pkt_type = buf[i];
 
 408                         switch (bt_cb(info->rx_skb)->pkt_type) {
 
 412                                 if (offset != 0x00) {
 
 413                                         set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
 
 414                                         set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
 
 415                                         set_bit(XMIT_SENDING_READY, &(info->tx_state));
 
 416                                         bluecard_write_wakeup(info);
 
 419                                 kfree_skb(info->rx_skb);
 
 424                                 info->rx_state = RECV_WAIT_EVENT_HEADER;
 
 425                                 info->rx_count = HCI_EVENT_HDR_SIZE;
 
 428                         case HCI_ACLDATA_PKT:
 
 429                                 info->rx_state = RECV_WAIT_ACL_HEADER;
 
 430                                 info->rx_count = HCI_ACL_HDR_SIZE;
 
 433                         case HCI_SCODATA_PKT:
 
 434                                 info->rx_state = RECV_WAIT_SCO_HEADER;
 
 435                                 info->rx_count = HCI_SCO_HDR_SIZE;
 
 440                                 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type);
 
 441                                 info->hdev->stat.err_rx++;
 
 443                                 kfree_skb(info->rx_skb);
 
 451                         *skb_put(info->rx_skb, 1) = buf[i];
 
 454                         if (info->rx_count == 0) {
 
 457                                 struct hci_event_hdr *eh;
 
 458                                 struct hci_acl_hdr *ah;
 
 459                                 struct hci_sco_hdr *sh;
 
 461                                 switch (info->rx_state) {
 
 463                                 case RECV_WAIT_EVENT_HEADER:
 
 464                                         eh = hci_event_hdr(info->rx_skb);
 
 465                                         info->rx_state = RECV_WAIT_DATA;
 
 466                                         info->rx_count = eh->plen;
 
 469                                 case RECV_WAIT_ACL_HEADER:
 
 470                                         ah = hci_acl_hdr(info->rx_skb);
 
 471                                         dlen = __le16_to_cpu(ah->dlen);
 
 472                                         info->rx_state = RECV_WAIT_DATA;
 
 473                                         info->rx_count = dlen;
 
 476                                 case RECV_WAIT_SCO_HEADER:
 
 477                                         sh = hci_sco_hdr(info->rx_skb);
 
 478                                         info->rx_state = RECV_WAIT_DATA;
 
 479                                         info->rx_count = sh->dlen;
 
 483                                         hci_recv_frame(info->rx_skb);
 
 496         info->hdev->stat.byte_rx += len;
 
 500 static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
 
 502         bluecard_info_t *info = dev_inst;
 
 508         if (!test_bit(CARD_READY, &(info->hw_state)))
 
 511         iobase = info->p_dev->io.BasePort1;
 
 513         spin_lock(&(info->lock));
 
 515         /* Disable interrupt */
 
 516         info->ctrl_reg &= ~REG_CONTROL_INTERRUPT;
 
 517         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 519         reg = inb(iobase + REG_INTERRUPT);
 
 521         if ((reg != 0x00) && (reg != 0xff)) {
 
 524                         bluecard_receive(info, 0x00);
 
 525                         outb(0x04, iobase + REG_INTERRUPT);
 
 526                         outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
 
 530                         bluecard_receive(info, 0x10);
 
 531                         outb(0x08, iobase + REG_INTERRUPT);
 
 532                         outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
 
 536                         set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
 
 537                         outb(0x01, iobase + REG_INTERRUPT);
 
 538                         bluecard_write_wakeup(info);
 
 542                         set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
 
 543                         outb(0x02, iobase + REG_INTERRUPT);
 
 544                         bluecard_write_wakeup(info);
 
 549         /* Enable interrupt */
 
 550         info->ctrl_reg |= REG_CONTROL_INTERRUPT;
 
 551         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 553         spin_unlock(&(info->lock));
 
 560 /* ======================== Device specific HCI commands ======================== */
 
 563 static int bluecard_hci_set_baud_rate(struct hci_dev *hdev, int baud)
 
 565         bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
 
 568         /* Ericsson baud rate command */
 
 569         unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
 
 571         if (!(skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
 
 572                 BT_ERR("Can't allocate mem for new packet");
 
 579                 bt_cb(skb)->pkt_type = PKT_BAUD_RATE_460800;
 
 583                 bt_cb(skb)->pkt_type = PKT_BAUD_RATE_230400;
 
 587                 bt_cb(skb)->pkt_type = PKT_BAUD_RATE_115200;
 
 590                 /* Fall through... */
 
 593                 bt_cb(skb)->pkt_type = PKT_BAUD_RATE_57600;
 
 597         memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
 
 599         skb_queue_tail(&(info->txq), skb);
 
 601         bluecard_write_wakeup(info);
 
 608 /* ======================== HCI interface ======================== */
 
 611 static int bluecard_hci_flush(struct hci_dev *hdev)
 
 613         bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
 
 616         skb_queue_purge(&(info->txq));
 
 622 static int bluecard_hci_open(struct hci_dev *hdev)
 
 624         bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
 
 625         unsigned int iobase = info->p_dev->io.BasePort1;
 
 627         if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)))
 
 628                 bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
 
 630         if (test_and_set_bit(HCI_RUNNING, &(hdev->flags)))
 
 633         if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
 
 635                 outb(0x08 | 0x20, iobase + 0x30);
 
 642 static int bluecard_hci_close(struct hci_dev *hdev)
 
 644         bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
 
 645         unsigned int iobase = info->p_dev->io.BasePort1;
 
 647         if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
 
 650         bluecard_hci_flush(hdev);
 
 652         if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) {
 
 654                 outb(0x00, iobase + 0x30);
 
 661 static int bluecard_hci_send_frame(struct sk_buff *skb)
 
 663         bluecard_info_t *info;
 
 664         struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
 
 667                 BT_ERR("Frame for unknown HCI device (hdev=NULL)");
 
 671         info = (bluecard_info_t *)(hdev->driver_data);
 
 673         switch (bt_cb(skb)->pkt_type) {
 
 674         case HCI_COMMAND_PKT:
 
 677         case HCI_ACLDATA_PKT:
 
 680         case HCI_SCODATA_PKT:
 
 685         /* Prepend skb with frame type */
 
 686         memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
 
 687         skb_queue_tail(&(info->txq), skb);
 
 689         bluecard_write_wakeup(info);
 
 695 static void bluecard_hci_destruct(struct hci_dev *hdev)
 
 700 static int bluecard_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
 
 707 /* ======================== Card services HCI interaction ======================== */
 
 710 static int bluecard_open(bluecard_info_t *info)
 
 712         unsigned int iobase = info->p_dev->io.BasePort1;
 
 713         struct hci_dev *hdev;
 
 716         spin_lock_init(&(info->lock));
 
 718         init_timer(&(info->timer));
 
 719         info->timer.function = &bluecard_activity_led_timeout;
 
 720         info->timer.data = (u_long)info;
 
 722         skb_queue_head_init(&(info->txq));
 
 724         info->rx_state = RECV_WAIT_PACKET_TYPE;
 
 728         /* Initialize HCI device */
 
 729         hdev = hci_alloc_dev();
 
 731                 BT_ERR("Can't allocate HCI device");
 
 737         hdev->type = HCI_PCCARD;
 
 738         hdev->driver_data = info;
 
 739         SET_HCIDEV_DEV(hdev, &info->p_dev->dev);
 
 741         hdev->open     = bluecard_hci_open;
 
 742         hdev->close    = bluecard_hci_close;
 
 743         hdev->flush    = bluecard_hci_flush;
 
 744         hdev->send     = bluecard_hci_send_frame;
 
 745         hdev->destruct = bluecard_hci_destruct;
 
 746         hdev->ioctl    = bluecard_hci_ioctl;
 
 748         hdev->owner = THIS_MODULE;
 
 750         id = inb(iobase + 0x30);
 
 752         if ((id & 0x0f) == 0x02)
 
 753                 set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state));
 
 756                 set_bit(CARD_HAS_POWER_LED, &(info->hw_state));
 
 759                 set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state));
 
 762         info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
 
 763         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 766         outb(0x80, iobase + 0x30);
 
 772         outb(0x00, iobase + 0x30);
 
 775         info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU;
 
 776         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 778         /* Enable interrupt */
 
 779         outb(0xff, iobase + REG_INTERRUPT);
 
 780         info->ctrl_reg |= REG_CONTROL_INTERRUPT;
 
 781         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 783         if ((id & 0x0f) == 0x03) {
 
 785                 info->ctrl_reg |= REG_CONTROL_RTS;
 
 786                 outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 789                 info->ctrl_reg |= 0x03;
 
 790                 outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 793                 info->ctrl_reg &= ~REG_CONTROL_RTS;
 
 794                 outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 796                 set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
 
 797                 set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
 
 798                 set_bit(XMIT_SENDING_READY, &(info->tx_state));
 
 801         /* Start the RX buffers */
 
 802         outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
 
 803         outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
 
 805         /* Signal that the hardware is ready */
 
 806         set_bit(CARD_READY, &(info->hw_state));
 
 809         skb_queue_purge(&(info->txq));
 
 811         /* Control the point at which RTS is enabled */
 
 812         outb((0x0f << RTS_LEVEL_SHIFT_BITS) | 1, iobase + REG_RX_CONTROL);
 
 814         /* Timeout before it is safe to send the first HCI packet */
 
 817         /* Register HCI device */
 
 818         if (hci_register_dev(hdev) < 0) {
 
 819                 BT_ERR("Can't register HCI device");
 
 829 static int bluecard_close(bluecard_info_t *info)
 
 831         unsigned int iobase = info->p_dev->io.BasePort1;
 
 832         struct hci_dev *hdev = info->hdev;
 
 837         bluecard_hci_close(hdev);
 
 839         clear_bit(CARD_READY, &(info->hw_state));
 
 842         info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
 
 843         outb(info->ctrl_reg, iobase + REG_CONTROL);
 
 846         outb(0x80, iobase + 0x30);
 
 848         if (hci_unregister_dev(hdev) < 0)
 
 849                 BT_ERR("Can't unregister HCI device %s", hdev->name);
 
 856 static int bluecard_probe(struct pcmcia_device *link)
 
 858         bluecard_info_t *info;
 
 860         /* Create new info device */
 
 861         info = kzalloc(sizeof(*info), GFP_KERNEL);
 
 868         link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
 
 869         link->io.NumPorts1 = 8;
 
 870         link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
 
 871         link->irq.IRQInfo1 = IRQ_LEVEL_ID;
 
 873         link->irq.Handler = bluecard_interrupt;
 
 874         link->irq.Instance = info;
 
 876         link->conf.Attributes = CONF_ENABLE_IRQ;
 
 877         link->conf.IntType = INT_MEMORY_AND_IO;
 
 879         return bluecard_config(link);
 
 883 static void bluecard_detach(struct pcmcia_device *link)
 
 885         bluecard_info_t *info = link->priv;
 
 887         bluecard_release(link);
 
 892 static int bluecard_config(struct pcmcia_device *link)
 
 894         bluecard_info_t *info = link->priv;
 
 897         link->conf.ConfigIndex = 0x20;
 
 898         link->io.NumPorts1 = 64;
 
 899         link->io.IOAddrLines = 6;
 
 901         for (n = 0; n < 0x400; n += 0x40) {
 
 902                 link->io.BasePort1 = n ^ 0x300;
 
 903                 i = pcmcia_request_io(link, &link->io);
 
 908         if (i != CS_SUCCESS) {
 
 909                 cs_error(link, RequestIO, i);
 
 913         i = pcmcia_request_irq(link, &link->irq);
 
 914         if (i != CS_SUCCESS) {
 
 915                 cs_error(link, RequestIRQ, i);
 
 916                 link->irq.AssignedIRQ = 0;
 
 919         i = pcmcia_request_configuration(link, &link->conf);
 
 920         if (i != CS_SUCCESS) {
 
 921                 cs_error(link, RequestConfiguration, i);
 
 925         if (bluecard_open(info) != 0)
 
 928         strcpy(info->node.dev_name, info->hdev->name);
 
 929         link->dev_node = &info->node;
 
 934         bluecard_release(link);
 
 939 static void bluecard_release(struct pcmcia_device *link)
 
 941         bluecard_info_t *info = link->priv;
 
 943         bluecard_close(info);
 
 945         del_timer(&(info->timer));
 
 947         pcmcia_disable_device(link);
 
 950 static struct pcmcia_device_id bluecard_ids[] = {
 
 951         PCMCIA_DEVICE_PROD_ID12("BlueCard", "LSE041", 0xbaf16fbf, 0x657cc15e),
 
 952         PCMCIA_DEVICE_PROD_ID12("BTCFCARD", "LSE139", 0xe3987764, 0x2524b59c),
 
 953         PCMCIA_DEVICE_PROD_ID12("WSS", "LSE039", 0x0a0736ec, 0x24e6dfab),
 
 956 MODULE_DEVICE_TABLE(pcmcia, bluecard_ids);
 
 958 static struct pcmcia_driver bluecard_driver = {
 
 959         .owner          = THIS_MODULE,
 
 961                 .name   = "bluecard_cs",
 
 963         .probe          = bluecard_probe,
 
 964         .remove         = bluecard_detach,
 
 965         .id_table       = bluecard_ids,
 
 968 static int __init init_bluecard_cs(void)
 
 970         return pcmcia_register_driver(&bluecard_driver);
 
 974 static void __exit exit_bluecard_cs(void)
 
 976         pcmcia_unregister_driver(&bluecard_driver);
 
 979 module_init(init_bluecard_cs);
 
 980 module_exit(exit_bluecard_cs);