software/drivers/sd8887/src/wlan/mapp/mlanutl/mlanregclass.c
/**
 *  @brief      Regclass dump channel table
 *
 *  @param argc     Number of arguments
 *  @param argv     A pointer to arguments array
 *
 *  @return         MLAN_STATUS_SUCCESS--success, otherwise--fail
 */
@brief      Regclass dump channel table
@param argc     Number of arguments
@param argv     A pointer to arguments array


@brief Regclass dump channel table @param argc Number of arguments @param argv A pointer to arguments array
static int
reg_class_dump_chan_table(int argc, char *argv[])
{
	int ret = MLAN_STATUS_SUCCESS;
	struct ifreq ifr;
	t_u8 *buffer = NULL, *pos = NULL;
	t_u32 cmd_len = 0, cmd_header_len;
	struct eth_priv_cmd *cmd = NULL;
	HostCmd_DS_GEN *hostcmd;
	HostCmd_DS_REGCLASS_GET_CHAN_TABLE *get_table;
	int idx;
	t_u16 regLimits;
	boolean invalid_cmd = FALSE;
	printf("ERR:Cannot allocate buffer for command!\n");
	if (argv[0] == NULL) {
		invalid_cmd = TRUE;
	} else {
		cmd_header_len = strlen(CMD_NXP) + strlen(HOSTCMD);
		buffer = (t_u8 *)malloc(BUFFER_LENGTH);
		if (buffer == NULL) {
			fprintf(stderr, "Cannot alloc memory\n");
			ret = ENOMEM;
			goto done;
		}
		memset(buffer, 0, BUFFER_LENGTH);
		cmd = (struct eth_priv_cmd *)
			malloc(sizeof(struct eth_priv_cmd));
		if (!cmd) {
			printf("ERR:Cannot allocate buffer for command!\n");
			ret = ENOMEM;
			goto done;
		}
#ifdef USERSPACE_32BIT_OVER_KERNEL_64BIT
		memset(cmd, 0, sizeof(struct eth_priv_cmd));
		memcpy(&cmd->buf, &buffer, sizeof(buffer));
#else
		cmd->buf = buffer;
#endif
		cmd->used_len = 0;
		cmd->total_len = BUFFER_LENGTH;
		strncpy((char *)buffer, CMD_NXP, strlen(CMD_NXP));
		strncpy((char *)buffer + strlen(CMD_NXP), HOSTCMD,
			strlen(HOSTCMD));
		hostcmd =
			(HostCmd_DS_GEN *)(buffer + cmd_header_len +
					   sizeof(t_u32));
		pos = (t_u8 *)hostcmd + S_DS_GEN;
		cmd_len = S_DS_GEN + sizeof(HostCmd_DS_REGCLASS_GET_CHAN_TABLE);
		hostcmd->command = cpu_to_le16(HostCmd_CMD_REGCLASS_CHAN_TABLE);
		hostcmd->size = cpu_to_le16(cmd_len);
		hostcmd->seq_num = 0;
		hostcmd->result = 0;
		get_table = (HostCmd_DS_REGCLASS_GET_CHAN_TABLE *)pos;
		get_table->action = cpu_to_le16(HostCmd_ACT_GEN_GET);
		if (reg_class_table_select(argv[0], (reg_chan_table_e *)
					   &get_table->table_select) == FALSE) {
			invalid_cmd = TRUE;
		}
	}
	if (invalid_cmd) {
		printf("\nValid tables table; valid [user, md, ess, default]\n\n");
		ret = MLAN_STATUS_FAILURE;
		goto done;
	}
	get_table->table_select = cpu_to_le16((t_u16)(get_table->table_select));
	memcpy(buffer + cmd_header_len, &cmd_len, sizeof(t_u32));
	memset(&ifr, 0, sizeof(ifr));
	strncpy(ifr.ifr_ifrn.ifrn_name, dev_name, strlen(dev_name));
	ifr.ifr_ifru.ifru_data = (void *)cmd;
	if (ioctl(sockfd, MLAN_ETH_PRIV, &ifr)) {
		perror("ioctl[regClassIoctl]");
		printf("ERR:Command sending failed!\n");
		ret = -EFAULT;
		goto done;
	}
	if (!le16_to_cpu(hostcmd->result)) {
		printf("HOSTCMD_RESP: ReturnCode=%#04x, Result=%#04x\n",
		       le16_to_cpu(hostcmd->command),
		       le16_to_cpu(hostcmd->result));
	} else {
		printf("HOSTCMD failed: ReturnCode=%#04x, Result=%#04x\n",
		       le16_to_cpu(hostcmd->command),
		       le16_to_cpu(hostcmd->result));
	}
	get_table->table_select = le16_to_cpu(get_table->table_select);
	get_table->chan = le32_to_cpu(get_table->chan);
	printf("---------------------------------------");
	printf("---------------------------------------\n");
	printf("%35s: %s [%d]\n", "Channel Table",
	       table_num_to_str(get_table->table_select), (int)get_table->chan);
	printf("---------------------------------------");
	printf("---------------------------------------\n");
	printf(" chn | freq | sfrq | sp |  class   | maxP | behavior limits\n");
	printf("---------------------------------------");
	printf("---------------------------------------\n");
	for (idx = 0; (unsigned int)idx < get_table->chan; idx++) {
		char regDisp[8];
		sprintf(regDisp, "%4s-%02u",
			reg_domain_to_str(get_table->chan_entry[idx].
					  reg_domain),
			get_table->chan_entry[idx].regulatory_class);
		printf(" %03u | %04u | %04u | %02u | %-8s |  %02u  |",
		       get_table->chan_entry[idx].chan_num,
		       (get_table->chan_entry[idx].start_freq +
			(get_table->chan_entry[idx].chan_num * 5)),
		       le16_to_cpu(get_table->chan_entry[idx].start_freq),
		       le16_to_cpu(get_table->chan_entry[idx].chan_spacing),
		       regDisp, get_table->chan_entry[idx].max_tx_power);
		regLimits = le16_to_cpu(get_table->chan_entry[idx].reg_limits);
		if (regLimits & BLIMIT_NOMADIC)
			printf(" nomadic");
		if (regLimits & BLIMIT_INDOOR_ONLY)
			printf(" indoor");
		if (regLimits & BLIMIT_TPC)
			printf(" tpc");
		if (regLimits & BLIMIT_DFS)
			printf(" dfs");
		if (regLimits & BLIMIT_IBSS_PROHIBIT)
			printf(" no_ibss");
		if (regLimits & BLIMIT_FOUR_MS_CS)
			printf(" 4ms_cs");
		if (regLimits & BLIMIT_LIC_BASE_STA)
			printf(" base_sta");
		if (regLimits & BLIMIT_MOBILE_STA)
			printf(" mobile");
		if (regLimits & BLIMIT_PUBLIC_SAFETY)
			printf(" safety");
		if (regLimits & BLIMIT_ISM_BANDS)
			printf(" ism");
		printf("\n");
	}
	printf("---------------------------------------");
	printf("---------------------------------------\n");
	printf("\n");
done:
	if (buffer)
		free(buffer);
	if (cmd)
		free(cmd);
	return ret;
}
static int reg_class_dump_chan_table ( int argc , char * argv [ ] ) { int ret = MLAN_STATUS_SUCCESS ; struct ifreq ifr ; t_u8 * buffer = NULL , * pos = NULL ; t_u32 cmd_len = 0 , cmd_header_len ; struct eth_priv_cmd * cmd = NULL ; HostCmd_DS_GEN * hostcmd ; HostCmd_DS_REGCLASS_GET_CHAN_TABLE * get_table ; int idx ; t_u16 regLimits ; boolean invalid_cmd = FALSE ; printf ( " \n " ) ; if ( argv [ 0 ] == NULL ) { invalid_cmd = TRUE ; } else { cmd_header_len = strlen ( CMD_NXP ) + strlen ( HOSTCMD ) ; buffer = ( t_u8 * ) malloc ( BUFFER_LENGTH ) ; if ( buffer == NULL ) { fprintf ( stderr , " \n " ) ; ret = ENOMEM ; goto done ; } memset ( buffer , 0 , BUFFER_LENGTH ) ; cmd = ( struct eth_priv_cmd * ) malloc ( sizeof ( struct eth_priv_cmd ) ) ; if ( ! cmd ) { printf ( " \n " ) ; ret = ENOMEM ; goto done ; } #ifdef USERSPACE_32BIT_OVER_KERNEL_64BIT memset ( cmd , 0 , sizeof ( struct eth_priv_cmd ) ) ; memcpy ( & cmd -> buf , & buffer , sizeof ( buffer ) ) ; #else cmd -> buf = buffer ; #endif cmd -> used_len = 0 ; cmd -> total_len = BUFFER_LENGTH ; strncpy ( ( char * ) buffer , CMD_NXP , strlen ( CMD_NXP ) ) ; strncpy ( ( char * ) buffer + strlen ( CMD_NXP ) , HOSTCMD , strlen ( HOSTCMD ) ) ; hostcmd = ( HostCmd_DS_GEN * ) ( buffer + cmd_header_len + sizeof ( t_u32 ) ) ; pos = ( t_u8 * ) hostcmd + S_DS_GEN ; cmd_len = S_DS_GEN + sizeof ( HostCmd_DS_REGCLASS_GET_CHAN_TABLE ) ; hostcmd -> command = cpu_to_le16 ( HostCmd_CMD_REGCLASS_CHAN_TABLE ) ; hostcmd -> size = cpu_to_le16 ( cmd_len ) ; hostcmd -> seq_num = 0 ; hostcmd -> result = 0 ; get_table = ( HostCmd_DS_REGCLASS_GET_CHAN_TABLE * ) pos ; get_table -> action = cpu_to_le16 ( HostCmd_ACT_GEN_GET ) ; if ( reg_class_table_select ( argv [ 0 ] , ( reg_chan_table_e * ) & get_table -> table_select ) == FALSE ) { invalid_cmd = TRUE ; } } if ( invalid_cmd ) { printf ( " \n \n \n " ) ; ret = MLAN_STATUS_FAILURE ; goto done ; } get_table -> table_select = cpu_to_le16 ( ( t_u16 ) ( get_table -> table_select ) ) ; memcpy ( buffer + cmd_header_len , & cmd_len , sizeof ( t_u32 ) ) ; memset ( & ifr , 0 , sizeof ( ifr ) ) ; strncpy ( ifr . ifr_ifrn . ifrn_name , dev_name , strlen ( dev_name ) ) ; ifr . ifr_ifru . ifru_data = ( void * ) cmd ; if ( ioctl ( sockfd , MLAN_ETH_PRIV , & ifr ) ) { perror ( " " ) ; printf ( " \n " ) ; ret = - EFAULT ; goto done ; } if ( ! le16_to_cpu ( hostcmd -> result ) ) { printf ( " \n " , le16_to_cpu ( hostcmd -> command ) , le16_to_cpu ( hostcmd -> result ) ) ; } else { printf ( " \n " , le16_to_cpu ( hostcmd -> command ) , le16_to_cpu ( hostcmd -> result ) ) ; } get_table -> table_select = le16_to_cpu ( get_table -> table_select ) ; get_table -> chan = le32_to_cpu ( get_table -> chan ) ; printf ( " " ) ; printf ( " \n " ) ; printf ( " \n " , " " , table_num_to_str ( get_table -> table_select ) , ( int ) get_table -> chan ) ; printf ( " " ) ; printf ( " \n " ) ; printf ( " \n " ) ; printf ( " " ) ; printf ( " \n " ) ; for ( idx = 0 ; ( unsigned int ) idx < get_table -> chan ; idx ++ ) { char regDisp [ 8 ] ; sprintf ( regDisp , " " , reg_domain_to_str ( get_table -> chan_entry [ idx ] . reg_domain ) , get_table -> chan_entry [ idx ] . regulatory_class ) ; printf ( " " , get_table -> chan_entry [ idx ] . chan_num , ( get_table -> chan_entry [ idx ] . start_freq + ( get_table -> chan_entry [ idx ] . chan_num * 5 ) ) , le16_to_cpu ( get_table -> chan_entry [ idx ] . start_freq ) , le16_to_cpu ( get_table -> chan_entry [ idx ] . chan_spacing ) , regDisp , get_table -> chan_entry [ idx ] . max_tx_power ) ; regLimits = le16_to_cpu ( get_table -> chan_entry [ idx ] . reg_limits ) ; if ( regLimits & BLIMIT_NOMADIC ) printf ( " " ) ; if ( regLimits & BLIMIT_INDOOR_ONLY ) printf ( " " ) ; if ( regLimits & BLIMIT_TPC ) printf ( " " ) ; if ( regLimits & BLIMIT_DFS ) printf ( " " ) ; if ( regLimits & BLIMIT_IBSS_PROHIBIT ) printf ( " " ) ; if ( regLimits & BLIMIT_FOUR_MS_CS ) printf ( " " ) ; if ( regLimits & BLIMIT_LIC_BASE_STA ) printf ( " " ) ; if ( regLimits & BLIMIT_MOBILE_STA ) printf ( " " ) ; if ( regLimits & BLIMIT_PUBLIC_SAFETY ) printf ( " " ) ; if ( regLimits & BLIMIT_ISM_BANDS ) printf ( " " ) ; printf ( " \n " ) ; } printf ( " " ) ; printf ( " \n " ) ; printf ( " \n " ) ; done : if ( buffer ) free ( buffer ) ; if ( cmd ) free ( cmd ) ; return ret ; }
@brief      Regclass dump channel table
  @param argc     Number of arguments
  @param argv     A pointer to arguments array
@brief Regclass dump channel table @param argc Number of arguments @param argv A pointer to arguments array
/* Fill up buffer */ /* buffer = MRVL_CMD<cmd> */ /* buffer = MRVL_CMD<cmd><hostcmd_size><HostCmd_DS_GEN><CMD_DS> */ /* Point after host command header */ /* Put buffer length */ /* Initialize the ifr structure */ /* Perform ioctl */