Introduction
RDK-B components are designed to avoid platform or silicon dependencies. Hardware Abstraction Layer (HAL) defines a standard interface for hardware vendors to implement. The HAL layer abstracts the underlying hardware like MOCA, Wi-Fi, etc. through a standard set of APIs defined as part of RDK-B HAL for the respective components. This HAL layer is implemented per platform and the rest of the components can be compiled to run on the new platform without major modifications.
The HAL in RDK-B Architecture section gives an overview of CCSP framework's Hardware Abstraction Layer.
HAL can be common-HAL or component-specific-HAL. Components may define a component specific HAL to hardware drivers, that are only used by that component
Component Specific HAL
- HAL APIs will be available in the CMF repo path: "../rdkb/components/opensource/ccsp/hal/source/"
- PandM HAL Integration (back-end) Layer is also known as component specific HAL.
- This layer makes call to underlying Linux system calls/commands, third party modules, open source modules and other CCSP components to execute the requests.
- This layer will be more component specific and will be providing APIs to CCSP so as to manage a particular hardware module of the system.
- Following are some of the component specific HALs available in "../rdkb/components/opensource/ccsp/hal/source/" path.
- Wifi
- MoCA
- MTA Agent
- CM
- DHCPv4C
- Ethernet Switch
- MSO_Management
Wi-Fi HAL
All HAL functions prototypes and structure definitions are available in wifi_hal.h file.
MOCA HAL
All HAL functions prototypes and structure definitions are available in moca_hal.h file.
MTA HAL
All HAL functions prototypes and structure definitions are available in mta_hal.h file. An MTA can deliver Home Phone service in addition to High Speed Internet.
- MTA HAL used for the RDK-Broadband hardware abstraction layer for Cable Modem.
- An abstraction layer, implemented to interact with MTA device.
- mta_hal.c file provides the function call prototypes and structure definitions used for the MTA hardware abstraction layer.
- Some of the APIs are :
- mta_hal_InitDB
- mta_hal_LineTableGetEntry
- mta_hal_GetCalls
- mta_hal_GetDect
- To see the API specification of MTA HAL please refer - https://rdkwiki.com/doxygen/rdkb/dc/db7/group___m_t_a___h_a_l___a_p_i_s.html
CM HAL
All HAL functions prototypes and structure definitions are available in cm_hal.h file.
- CM HAL is used for the RDK-Broadband hardware abstraction layer for Cable Modem.
- It provides interface that cable modem software developers can use to interface to RDK-B.
- Some of the APIs are :
- cm_hal_InitDB
- docsis_GetErrorCodewords
- cm_hal_GetDHCPInfo
- cm_hal_GetCPEList
- To see the API specification of CM HAL please refer - https://rdkwiki.com/doxygen/rdkb/dd/d9e/group___c_m___h_a_l___a_p_i_s.html
Ethernet Switch HAL
All HAL functions prototypes and structure definitions are available in ccsp_hal_ethsw.h file.
- It provides implementation for Ethernet Switch Control.
- Based on how vendor exposes their driver capabilities in user space, the HAL API’s can be implemented in hal-ethsw-generic/git/source/ethsw/ccsp_hal_ethsw.c
- Some of the APIs are :
- CcspHalEthSwInit
- CcspHalEthSwGetPortStatus
- CcspHalEthSwGetPortCfg
- CcspHalEthSwSetPortCfg
DHCPv4C HAL
All HAL functions prototypes and structure definitions are available in dhcpv4c_api.h file.
- DHCPv4C HAL is used for the RDK-B DHCPv4 Client Status abstraction layer.
- DHCPv4C HAL API's functionality should be implemented by OEMs.
- dhcpv4c_api.c provides the function call prototypes and structure definitions used for the RDK-Broadband DHCPv4 Client Status abstraction layer.
- Some of the APIs are :
- dhcpv4c_get_ert_ifname
- dhcpv4c_get_ert_ip_addr
- dhcpv4c_get_ert_dns_svrs
- dhcpv4c_get_ert_mask
- To see the API specification of DHCPv4C HAL please refer - https://rdkwiki.com/doxygen/rdkb/db/d07/group___d_h_c_p_v4_c___h_a_l___a_p_i_s.html
VLAN HAL
All HAL functions prototypes and structure definitions are available in vlan_hal.h file.
- VLAN HAL is or the RDK-B Broadband VLAN abstraction layer.
- VLAN HAL layer is intended to support VLAN drivers through the System Calls.
- Some of the APIs are :
- vlan_hal_addGroup
- vlan_hal_delGroup
- vlan_hal_addInterface
- vlan_hal_delInterface
- vlan_hal_delete_all_Interfaces
- To see the API specification of VLAN HAL please refer - https://rdkwiki.com/doxygen/rdkb/d6/d34/group___v_l_a_n___h_a_l___a_p_i_s.html
Firewall HAL
All HAL functions prototypes and structure definitions are available in hal_firewall.h file.
- This module is responsible for setting firewall rules like port forwarding, port triggering Parental control etc.
- Some of the APIs are :
- firewall_service_init
- firewall_service_start
- firewall_service_restart
- GetHttpPortValue
DPOE HAL
All HAL functions prototypes and structure definitions are available in dpoe_hal.h file.
Bluetooth HAL
All HAL functions prototypes and structure definitions are available in bt_hal.h file.
MSO Management HAL
All HAL functions prototypes and structure definitions are available in mso_mgmt_hal.h file.
Voice HAL
All HAL functions prototypes and structure definitions are available in voice_hal.h file.
WAN HAL
All HAL functions prototypes and structure definitions are available in wan_hal.h file.
TR69_TLV HAL
All HAL functions prototypes and structure definitions are available in Tr69_Tlv.h file.
- Telemetry Key fields and data fields are stored in the database as TLV (Tag, Length, Value)
- Tag - uniquely identifies the field.
- Length - gives the size (in number of bytes) of the data associated with the field.
- Value - contains the actual data associated with the field stored in network byte ordering.
Common HAL
- A common HAL provides the necessary abstraction to all the CCSP components to interface with other common hardware components.
- Eg : Platform HAL
- Platform HAL is an abstraction layer, implemented to interact with cable modem device for getting the hardware specific details such as Firmware Name, Boot loader Version, etc.
- This HAL layer is intended to support platform drivers
- platform_hal.c file provides the function call prototypes and structure definitions used for the platform hardware abstraction layer
- Some of the APIs are :
- platform_hal_GetSerialNumber
- platform_hal_GetFirmwareName
- platform_hal_GetBootloaderVersion