1 //------------------------------------------------------------------------------
2 // Copyright (c) 2009-2010 Atheros Corporation. All rights reserved.
5 // Permission to use, copy, modify, and/or distribute this software for any
6 // purpose with or without fee is hereby granted, provided that the above
7 // copyright notice and this permission notice appear in all copies.
9 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 //------------------------------------------------------------------------------
19 //==============================================================================
20 // HCI bridge implementation
22 // Author(s): ="Atheros"
23 //==============================================================================
31 #include "common_drv.h"
33 #include "hci_transport_api.h"
35 #include "AR6002/hw4.0/hw/apb_athr_wlan_map.h"
36 #include "AR6002/hw4.0/hw/uart_reg.h"
37 #include "AR6002/hw4.0/hw/rtc_wlan_reg.h"
39 HCI_TRANSPORT_HANDLE (*_HCI_TransportAttach
)(void *HTCHandle
, HCI_TRANSPORT_CONFIG_INFO
*pInfo
);
40 void (*_HCI_TransportDetach
)(HCI_TRANSPORT_HANDLE HciTrans
);
41 A_STATUS (*_HCI_TransportAddReceivePkts
)(HCI_TRANSPORT_HANDLE HciTrans
, HTC_PACKET_QUEUE
*pQueue
);
42 A_STATUS (*_HCI_TransportSendPkt
)(HCI_TRANSPORT_HANDLE HciTrans
, HTC_PACKET
*pPacket
, A_BOOL Synchronous
);
43 void (*_HCI_TransportStop
)(HCI_TRANSPORT_HANDLE HciTrans
);
44 A_STATUS (*_HCI_TransportStart
)(HCI_TRANSPORT_HANDLE HciTrans
);
45 A_STATUS (*_HCI_TransportEnableDisableAsyncRecv
)(HCI_TRANSPORT_HANDLE HciTrans
, A_BOOL Enable
);
46 A_STATUS (*_HCI_TransportRecvHCIEventSync
)(HCI_TRANSPORT_HANDLE HciTrans
,
49 A_STATUS (*_HCI_TransportSetBaudRate
)(HCI_TRANSPORT_HANDLE HciTrans
, A_UINT32 Baud
);
50 A_STATUS (*_HCI_TransportEnablePowerMgmt
)(HCI_TRANSPORT_HANDLE HciTrans
, A_BOOL Enable
);
52 extern HCI_TRANSPORT_CALLBACKS ar6kHciTransCallbacks
;
54 A_STATUS
ar6000_register_hci_transport(HCI_TRANSPORT_CALLBACKS
*hciTransCallbacks
)
56 ar6kHciTransCallbacks
= *hciTransCallbacks
;
58 _HCI_TransportAttach
= HCI_TransportAttach
;
59 _HCI_TransportDetach
= HCI_TransportDetach
;
60 _HCI_TransportAddReceivePkts
= HCI_TransportAddReceivePkts
;
61 _HCI_TransportSendPkt
= HCI_TransportSendPkt
;
62 _HCI_TransportStop
= HCI_TransportStop
;
63 _HCI_TransportStart
= HCI_TransportStart
;
64 _HCI_TransportEnableDisableAsyncRecv
= HCI_TransportEnableDisableAsyncRecv
;
65 _HCI_TransportRecvHCIEventSync
= HCI_TransportRecvHCIEventSync
;
66 _HCI_TransportSetBaudRate
= HCI_TransportSetBaudRate
;
67 _HCI_TransportEnablePowerMgmt
= HCI_TransportEnablePowerMgmt
;
73 ar6000_get_hif_dev(HIF_DEVICE
*device
, void *config
)
77 status
= HIFConfigureDevice(device
,
78 HIF_DEVICE_GET_OS_DEVICE
,
79 (HIF_DEVICE_OS_DEVICE_INFO
*)config
,
80 sizeof(HIF_DEVICE_OS_DEVICE_INFO
));
84 A_STATUS
ar6000_set_uart_config(HIF_DEVICE
*hifDevice
,
92 regAddress
= WLAN_UART_BASE_ADDRESS
| UART_CLKDIV_ADDRESS
;
93 regVal
= ((A_UINT32
)scale
<< 16) | step
;
94 /* change the HCI UART scale/step values through the diagnostic window */
95 status
= ar6000_WriteRegDiag(hifDevice
, ®Address
, ®Val
);
100 A_STATUS
ar6000_get_core_clock_config(HIF_DEVICE
*hifDevice
, A_UINT32
*data
)
105 regAddress
= WLAN_RTC_BASE_ADDRESS
| WLAN_CPU_CLOCK_ADDRESS
;
106 /* read CPU clock settings*/
107 status
= ar6000_ReadRegDiag(hifDevice
, ®Address
, data
);
112 EXPORT_SYMBOL(ar6000_register_hci_transport
);
113 EXPORT_SYMBOL(ar6000_get_hif_dev
);
114 EXPORT_SYMBOL(ar6000_set_uart_config
);
115 EXPORT_SYMBOL(ar6000_get_core_clock_config
);
116 EXPORT_SYMBOL(_HCI_TransportAttach
);
117 EXPORT_SYMBOL(_HCI_TransportDetach
);
118 EXPORT_SYMBOL(_HCI_TransportAddReceivePkts
);
119 EXPORT_SYMBOL(_HCI_TransportSendPkt
);
120 EXPORT_SYMBOL(_HCI_TransportStop
);
121 EXPORT_SYMBOL(_HCI_TransportStart
);
122 EXPORT_SYMBOL(_HCI_TransportEnableDisableAsyncRecv
);
123 EXPORT_SYMBOL(_HCI_TransportRecvHCIEventSync
);
124 EXPORT_SYMBOL(_HCI_TransportSetBaudRate
);
125 EXPORT_SYMBOL(_HCI_TransportEnablePowerMgmt
);