diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2cfg.h b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2cfg.h index fafdd7cc0a..d60544eff4 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2cfg.h +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2cfg.h @@ -27,7 +27,6 @@ #define BT_SURVIVE_WITHOUT_HCI #define BT_SURVIVE_WITHOUT_NET_BUFFERS -//#define BT_IOCTLS_PASS_SIZE #endif diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.c b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.c index 0b3603c317..edfe63879c 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.c +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.c @@ -18,8 +18,9 @@ #include #include "snet_buffer.h" -#include -#include +#include +#include +#include #define BT_DEBUG_THIS_MODULE #include @@ -34,7 +35,7 @@ int32 api_version = B_CUR_DRIVER_API_VERSION; /* Modules */ static char* usb_name = B_USB_MODULE_NAME; -static char* hci_name = B_BT_HCI_MODULE_NAME; +static char* hci_name = BT_HCI_MODULE_NAME; usb_module_info *usb = NULL; bt_hci_module_info *hci = NULL; @@ -149,7 +150,6 @@ exit: static void kill_device(bt_usb_dev* dev) { - uint16 i; debugf("remove_device(%p)\n", dev); delete_sem(dev->lock); @@ -217,9 +217,9 @@ device_added(const usb_device* dev, void** cookie) status_t err = B_ERROR; bt_usb_dev* new_bt_dev = spawn_device(dev); - int e, i; + int e; - debugf("device_added(%ld, %p)\n", dev, new_bt_dev); + debugf("device_added(%p, %p)\n", dev, new_bt_dev); if (new_bt_dev == NULL) { flowf("Couldn't allocate device record.\n"); @@ -339,7 +339,7 @@ bail: kill_device(new_bt_dev); bail_no_mem: *cookie = NULL; -done: + return err; } @@ -361,7 +361,7 @@ device_removed(void* cookie) // TODO: Consider some other place // TX for (i = 0; i < BT_DRIVER_TXCOVERAGE; i++) { - if (i = BT_COMMAND) + if (i == BT_COMMAND) while ((item = list_remove_head_item(&bdev->nbuffersTx[i])) != NULL) { snb_free(item); } @@ -514,7 +514,7 @@ device_close(void *cookie) if (bdev == NULL) panic("bad cookie"); - debugf("device_close() called on %s\n", DEVICE_PATH, bdev->hdev ); + debugf("device_close() called on %ld\n", bdev->hdev ); if (!TEST_AND_CLEAR(&bdev->state, RUNNING) ) { @@ -581,13 +581,13 @@ static status_t device_control(void *cookie, uint32 msg, void *params, size_t size) { status_t err = B_ERROR; - bt_usb_dev* dev = (bt_usb_dev*)cookie; + bt_usb_dev* bdev = (bt_usb_dev*)cookie; snet_buffer* snbuf; TOUCH(size); debugf("ioctl() opcode %ld size %ld.\n", msg, size); - if (dev == NULL) { + if (bdev == NULL) { flowf("Bad cookie\n"); return B_BAD_VALUE; } @@ -597,7 +597,7 @@ device_control(void *cookie, uint32 msg, void *params, size_t size) return B_BAD_VALUE; } - acquire_sem(dev->lock); + acquire_sem(bdev->lock); switch (msg) { case ISSUE_BT_COMMAND: @@ -616,12 +616,12 @@ device_control(void *cookie, uint32 msg, void *params, size_t size) snbuf = snb_create(size); snb_put(snbuf, params, size); - err = send_command(dev->hdev, snbuf); + err = submit_tx_command(bdev, snbuf); break; - case ISSUE_STATICS: - memcpy(params, &dev->stat, sizeof(bt_hci_statistics)); + case GET_STATICS: + memcpy(params, &bdev->stat, sizeof(bt_hci_statistics)); err = B_OK; break; @@ -631,7 +631,7 @@ device_control(void *cookie, uint32 msg, void *params, size_t size) break; } - release_sem(dev->lock); + release_sem(bdev->lock); return err; } @@ -640,7 +640,7 @@ device_control(void *cookie, uint32 msg, void *params, size_t size) static status_t device_read(void *cookie, off_t pos, void *buf, size_t *count) { - debugf("Reading... pos = %ld || count = %ld\n", pos, *count); + debugf("Reading... count = %ld\n", *count); *count = 0; return B_OK; diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.h b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.h index 6ade24431d..7bad302b37 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.h +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2generic.h @@ -12,7 +12,8 @@ #include #include -#include +#include +#include #include @@ -37,9 +38,9 @@ // Expecting nobody is gonna have 16 USB-BT dongles connected in their system #define MAX_BT_GENERIC_USB_DEVICES 16 -extern usb_module_info *usb; -extern bt_hci_module_info *hci; -extern struct net_buffer_module_info *nb; +extern usb_module_info* usb; +extern bt_hci_module_info* hci; +extern struct net_buffer_module_info* nb; #define MAX_COMMAND_WINDOW 1 #define MAX_ACL_OUT_WINDOW 4 diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2transactions.c b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2transactions.c index 2e2f64cdd8..b9637837c2 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2transactions.c +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2transactions.c @@ -10,38 +10,52 @@ #include "h2upper.h" #include "h2util.h" -#include -#include -#include +#include +#include +#include #include -#define BT_DEBUG_THIS_MODULE -#include "btDebug.h" +#include -#if 0 -#pragma mark --- RX Complete --- +#define BT_DEBUG_THIS_MODULE +#include + + +/* Forward declaration */ + +#ifndef HAIKU_TARGET_PLATFORM_HAIKU +void acl_tx_complete(void* cookie, uint32 status, void* data, uint32 actual_len); +void acl_rx_complete(void* cookie, uint32 status, void* data, uint32 actual_len); +void command_complete(void* cookie, uint32 status, void* data, uint32 actual_len); +void event_complete(void* cookie, uint32 status, void* data, uint32 actual_len); +#else +/* TODO: propagate this definitions */ +void acl_tx_complete(void* cookie, status_t status, void* data, size_t actual_len); +void acl_rx_complete(void* cookie, status_t status, void* data, size_t actual_len); +void command_complete(void* cookie, status_t status, void* data, size_t actual_len); +void event_complete(void* cookie, status_t status, void* data, size_t actual_len); #endif -status_t +static status_t assembly_rx(bt_usb_dev* bdev, bt_packet_t type, void *data, int count) { - net_buffer* nbuf; - snet_buffer* snbuf; + net_buffer* nbuf = NULL; + snet_buffer* snbuf = NULL; - size_t currentPacketLen; - size_t expectedPacketLen; + size_t currentPacketLen = 0; + size_t expectedPacketLen = 0; bdev->stat.bytesRX += count; - while (count) { + if (type == BT_EVENT) + snbuf = bdev->eventRx; + else + nbuf = bdev->nbufferRx[type]; - if (type == BT_EVENT) - snbuf = bdev->eventRx; - else - nbuf = bdev->nbufferRx[type]; + while (count) { debugf("count %d %p %p\n",count, nbuf, nb); @@ -141,11 +155,19 @@ assembly_rx(bt_usb_dev* bdev, bt_packet_t type, void *data, int count) /* in case in the pipe there is info about the next buffer ... */ count -= currentPacketLen; data += currentPacketLen; - } + } + + return B_OK; } + +#if 0 +#pragma mark --- RX Complete --- +#endif + + void -event_complete(void* cookie, uint32 status, void* data, uint32 actual_len) +event_complete(void* cookie, status_t status, void* data, size_t actual_len) { bt_usb_dev* bdev = cookie; @@ -180,7 +202,7 @@ resubmit: } void -acl_rx_complete(void* cookie, uint32 status, void* data, uint32 actual_len) +acl_rx_complete(void* cookie, status_t status, void* data, size_t actual_len) { bt_usb_dev* bdev = cookie; status_t err; @@ -200,12 +222,12 @@ resubmit: err = usb->queue_bulk(bdev->bulk_in_ep->handle, data, max(HCI_MAX_FRAME_SIZE,bdev->max_packet_size_bulk_in), - acl_rx_complete, bdev); + acl_rx_complete, (void*) bdev); if (err != B_OK ) { reuse_room(&bdev->aclRoom, data); bdev->stat.rejectedRX++; - debugf("RX acl resubmittion failed %s\n",strerror(err)); + debugf("RX acl resubmittion failed %s\n", strerror(err)); } else { bdev->stat.acceptedRX++; @@ -228,14 +250,14 @@ submit_rx_event(bt_usb_dev* bdev) err = usb->queue_interrupt(bdev->intr_in_ep->handle, buf, size , - event_complete, bdev); + event_complete, (void*) bdev); if (err != B_OK ) { reuse_room(&bdev->eventRoom, buf); bdev->stat.rejectedRX++; } else { bdev->stat.acceptedRX++; - debugf("Accepted RX Event\n",bdev->stat.acceptedRX); + debugf("Accepted RX Event %d\n", bdev->stat.acceptedRX); } return err; @@ -282,14 +304,18 @@ submit_rx_sco(bt_usb_dev* bdev) #pragma mark --- TX Complete --- #endif +#ifndef HAIKU void -command_complete(void* cookie, uint32 status, void* data, uint32 actual_len) +command_complete(void* cookie, status_t status, void* data, size_t actual_len) +#else +void +command_complete(void* cookie, uint32 status, void* data, size_t actual_len) +#endif { snet_buffer* snbuf = (snet_buffer*) cookie; bt_usb_dev* bdev = snb_cookie(snbuf); - status_t err; - debugf("%d %02x:%02x:%02x:\n", actual_len, ((uint8*)data)[0],((uint8*)data)[1],((uint8*)data)[2]); + debugf("%ld %02x:%02x:%02x:\n", actual_len, ((uint8*)data)[0],((uint8*)data)[1],((uint8*)data)[2]); if (status != B_OK) { @@ -310,13 +336,18 @@ command_complete(void* cookie, uint32 status, void* data, uint32 actual_len) #endif } + void -aclTxComplete(void* cookie, uint32 status, void* data, uint32 actual_len) +#ifndef HAIKU_TARGET_PLATFORM_HAIKU +acl_tx_complete(void* cookie, uint32 status, void* data, uint32 actual_len) +#else +acl_tx_complete(void* cookie, status_t status, void* data, size_t actual_len) +#endif + { net_buffer* nbuf = (net_buffer*) cookie; bt_usb_dev* bdev = GET_DEVICE(nbuf); - status_t err; if (status != B_OK) { @@ -357,7 +388,7 @@ submit_tx_command(bt_usb_dev* bdev, snet_buffer* snbuf) err = usb->queue_request(bdev->dev, bRequestType, bRequest, value, wIndex, wLength, snb_get(snbuf), wLength //??? - ,command_complete, snbuf); + ,command_complete, (void*) snbuf); if (err != B_OK ) { bdev->stat.rejectedTX++; @@ -379,7 +410,7 @@ submit_tx_acl(bt_usb_dev* bdev, net_buffer* nbuf) err = usb->queue_bulk(bdev->bulk_out_ep->handle, nb_get_whole_buffer(nbuf), nbuf->size, - aclTxComplete, nbuf); + acl_tx_complete, (void*) nbuf); if (err != B_OK ) { bdev->stat.rejectedTX++; diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.c b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.c index 002cf4acf0..4b7ee8a59a 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.c +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.c @@ -5,16 +5,19 @@ * */ + +#include + +#include +#include + #include "h2upper.h" #include "h2transactions.h" +#include "snet_buffer.h" #define BT_DEBUG_THIS_MODULE -#include "btDebug.h" +#include -#include -#include - -#include "snet_buffer.h" /* TODO: split for commands and comunication(ACL&SCO) */ void @@ -84,7 +87,7 @@ status_t post_packet_up(bt_usb_dev* bdev, bt_packet_t type, void* buf) { - status_t err; + status_t err = B_OK; port_id port; if (hci == NULL) { @@ -92,20 +95,19 @@ post_packet_up(bt_usb_dev* bdev, bt_packet_t type, void* buf) err = B_ERROR; // ERROR but we will try to send if its a event! - if (type != BT_EVENT) { - err = B_ERROR; - } else { - snet_buffer* snbuf = (snet_buffer*)buf; + if (type == BT_EVENT) { + + snet_buffer* snbuf = (snet_buffer*) buf; flowf("HCI not present, Posting to userland\n"); port = find_port(BT_USERLAND_PORT_NAME); if (port != B_NAME_NOT_FOUND) { - err = write_port_etc(port, PACK_HEADER_PORT(bdev->num,type), + err = write_port_etc(port, PACK_PORTCODE(type,bdev->hdev, -1), snb_get(snbuf), snb_size(snbuf), B_TIMEOUT, 1*1000*1000); if (err != B_OK) - debugf("Error posting userland %s\n",strerror(err)); + debugf("Error posting userland %s\n", strerror(err)); } else { diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.h b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.h index cd5b1b74ec..be6c45b05a 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.h +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2upper.h @@ -12,10 +12,9 @@ #include "h2generic.h" -#define PACK_HEADER_PORT(x,y) (x<<24|y<<16) - status_t post_packet_up(bt_usb_dev* bdev, bt_packet_t type, void* buf); status_t send_packet(hci_id hid, bt_packet_t type, net_buffer* nbuf); +status_t send_command(hci_id hid, snet_buffer* snbuf); void sched_tx_processing(bt_usb_dev* bdev); diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.c b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.c index fcc5be1545..78b52a74a7 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.c +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.c @@ -5,22 +5,23 @@ * */ +#include + #include "h2upper.h" #include "h2util.h" #include "h2transactions.h" -#define BT_DEBUG_THIS_MODULE -#include "btDebug.h" +#include +#include +#include + +#define BT_DEBUG_THIS_MODULE +#include -#include -#include -#include -#include void* nb_get_whole_buffer(net_buffer* nbuf) { - void* conPointer; status_t err; @@ -52,7 +53,7 @@ nb_get_whole_buffer(net_buffer* nbuf) return conPointer; free: - free(nbuf->COOKIEFIELD); + free((void*) nbuf->COOKIEFIELD); fail: return NULL; } @@ -99,9 +100,11 @@ get_expected_size(net_buffer* nbuf) return header->elen; } default: - - break; + + break; } + + return B_ERROR; } #if 0 diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.h b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.h index 5ba3c678a2..311ad9859b 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.h +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/h2util.h @@ -12,7 +12,7 @@ #include "h2generic.h" -/* net buffer utils for ACL, to be reviwed */ +/* net buffer utils for ACL, to be reviewed */ #define DEVICEFIELD type #define SET_DEVICE(nbuf,hid) (nbuf->DEVICEFIELD=(nbuf->DEVICEFIELD&0xFFF0)|(hid&0xF)) #define GET_DEVICE(nbuf) fetch_device(NULL,(nbuf->DEVICEFIELD&0x0F)) diff --git a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/snet_buffer.c b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/snet_buffer.c index 79096ad268..f2fb2e4b63 100644 --- a/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/snet_buffer.c +++ b/src/add-ons/kernel/drivers/bluetooth/h2/h2generic/snet_buffer.c @@ -7,6 +7,8 @@ #include "snet_buffer.h" +#include +#include struct snet_buffer { struct list_link link;