IOCTL Interfaces
This chapter explains how to use driver provided private IOCTL for configuring hardware in Linux OS.
How to Use IOCTL Interfaces
/* include */
#include "ether_export.h"
static int open_socket(char *ifname)
{
int sockfd;
sockfd = socket(PF_INET, SOCK_STREAM, 0);
return sockfd;
}
static void close_socket(int sockfd)
{
close(sockfd);
}
int main(int argc, char *argv[])
{
int sockfd;
static char *if_name;
struct ifreq ifr;
struct ifr_data_struct data;
struct osi_est_config cfg;
sockfd = open_socket(argv[1]);
if_name = strdup(argv[1]);
/* Update all fields of osi_est_config from user input for example..*/
cfg.en_dis = atoi(argv1);
cfg.btr[0] = atoi(argv2);
cfg.btr[1] = atoi(argv3);
cfg.btr_offset[0] = atoi(argv4);
cfg.btr_offset[1] = atoi(argv5);
cfg.ctr[0] = strtol(argv6, NULL, 16);
cfg.ctr[1] = strtol(argv7, NULL, 16);
data.cmd = ETHER_EST_CFG;
data.ptr = &cfg;
strcpy(ifr.ifr_ifrn.ifrn_name, ifname);
ifr.ifr_ifru.ifru_data = &data;
ret = ioctl(sockfd, DWC_ETH_QOS_PRV_IOCTL, &ifr);
if (ret < 0)
printf("IOCTL Error in %s()\n",__func__);
else
printf("Configured successfully\n");
close_socket(sockfd);
Return ret;
}
Supported IOCTL Commands
/**
* @addtogroup private IOCTL related info
*
* @brief MACRO are defined for driver supported
* private IOCTLs. These IOCTLs can be called using
* SIOCDEVPRIVATE custom ioctl command.
* @{
*/
/** Line speed */
#define EQOS_GET_CONNECTED_SPEED 25
/** To set HW AVB configuration from user application */
#define ETHER_AVB_ALGORITHM 27
/** To get current configuration in HW */
#define ETHER_GET_AVB_ALGORITHM 46
/** To configure EST(802.1 bv) in HW */
#define ETHER_CONFIG_EST 49
/** For configure FPE (802.1 bu + 803.2 br) in HW */
#define ETHER_CONFIG_FPE 50
/** @} */
Data Structures
Data structure is part of the drive-linux/include/
folder.