/* * osRgstry_parser.c * * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Texas Instruments nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * src/osRgstry_parser.c * */ #include "osRgstry_parser.h" extern void regReadLastDbgState(TWlanDrvIfObjPtr pAdapter); static char *init_file = NULL; static int init_file_length = 0; static PNDIS_CONFIGURATION_PARAMETER pNdisParm; int osInitTable_IniFile (TI_HANDLE hOs, TInitTable *InitTable, char *file_buf, int file_length) { TWlanDrvIfObjPtr drv = (TWlanDrvIfObjPtr)hOs; static NDIS_CONFIGURATION_PARAMETER vNdisParm; init_file = file_buf; init_file_length = file_length; pNdisParm = &vNdisParm; regFillInitTable (drv, InitTable); #ifdef TI_DBG regReadLastDbgState(drv); #endif return 0; } unsigned long TiDebugFlag; /* void PRINT( char * type, char *format, ... )*/ /* {*/ /* return ;*/ /* }*/ NDIS_STATUS NdisUnicodeStringToAnsiString( IN OUT PANSI_STRING DestinationString, IN PUNICODE_STRING SourceString ) { if( DestinationString->MaximumLength < SourceString->Length ) return NDIS_STATUS_BUFFER_TOO_SHORT; DestinationString->Length = SourceString->Length; os_memoryCopy( NULL, DestinationString->Buffer, SourceString->Buffer, SourceString->Length ); return NDIS_STATUS_SUCCESS; } #ifndef tolower #define tolower(c) ( (c) | 0x20) #endif /* Search sub-string in memory buffer */ /* From '#' to EOL ---- remarks */ char *mem_str(char *buf, char *str, char *end_buf) { int i; for( ; buf <= end_buf; buf++ ) { if( *buf == '#' ) { buf = strchr(buf+1, '\n' ); if( !buf ) return NULL; } for( i=0; &buf[i] <= end_buf && buf[i] && str[i] && (tolower(buf[i]) == tolower(str[i])); i++ ) ; if ((!str[i]) && (!((tolower(*(buf-1))>='a') && (tolower(*(buf-1))<='z')))) return buf; } return NULL; } char * ltrim(char *s ) { while( *s == ' ' || *s == '\t' ) s++; return s; } void NdisReadConfiguration( OUT PNDIS_STATUS status, OUT PNDIS_CONFIGURATION_PARAMETER *param_value, IN NDIS_HANDLE config_handle, IN PNDIS_STRING keyword, IN NDIS_PARAMETER_TYPE param_type ) { char *name = keyword->Buffer; char *s, *buf = init_file, *end_buf = init_file + init_file_length; static int count = 0; *status = NDIS_STATUS_FAILURE; *param_value = pNdisParm; if( !count ) { print_deb("\n++++++++++++\n%s+++++++++++\n", init_file); count++; } if( !name || !*name || !init_file || !init_file_length ) return ; memset(pNdisParm, 0, sizeof(NDIS_CONFIGURATION_PARAMETER)); while(buf < end_buf) { buf = ltrim(buf); if( !(s = mem_str(buf, name, end_buf)) ) break; buf = ltrim(s + strlen(name)); if( *buf == '=' ) buf++; else { /*print_err("\n...init_config err: delim not found (=): ** %s **\n", buf );*/ buf = s + 1; /*strlen(name);*/ continue; } buf = ltrim(buf); if( param_type == NdisParameterString ) { char *remark = NULL; s = strchr(buf, '\n'); if( !s ) s = buf+strlen(buf); remark = memchr(buf, '#', s - buf); /* skip remarks */ if( remark ) { do { /* remove whitespace */ remark--; } while( *remark == ' ' || *remark == '\t' ); pNdisParm->ParameterData.StringData.Length = remark - buf + 1; } else pNdisParm->ParameterData.StringData.Length = s - buf; pNdisParm->ParameterData.StringData.Buffer = (TI_UINT8*)&pNdisParm->StringBuffer[0]; pNdisParm->ParameterData.StringData.MaximumLength = NDIS_MAX_STRING_LEN; if( !pNdisParm->ParameterData.StringData.Length > NDIS_MAX_STRING_LEN ) { *status = NDIS_STATUS_BUFFER_TOO_SHORT; return; } memcpy(pNdisParm->ParameterData.StringData.Buffer, buf, pNdisParm->ParameterData.StringData.Length); print_info("NdisReadConfiguration(): %s = (%d)'%s'\n", name, pNdisParm->ParameterData.StringData.Length, pNdisParm->ParameterData.StringData.Buffer); } else if( param_type == NdisParameterInteger ) { char *end_p; pNdisParm->ParameterData.IntegerData = simple_strtol(buf, &end_p, 0); if (end_p && *end_p && *end_p!=' ' && *end_p!='\n' && *end_p!='\r' && *end_p!='\t') { print_err("\n...init_config: invalid int value for <%s> : %s\n", name, buf ); return; } /*print_deb(" NdisReadConfiguration(): buf = %p (%.20s)\n", buf, buf );*/ print_info("NdisReadConfiguration(): %s = %d\n", name, (TI_INT32) pNdisParm->ParameterData.IntegerData); } else { print_err("NdisReadConfiguration(): unknow parameter type %d for %s\n", param_type, name ); return; } *status = NDIS_STATUS_SUCCESS; return; } return ; } void NdisWriteConfiguration( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ConfigurationHandle, IN PNDIS_STRING Keyword, IN PNDIS_CONFIGURATION_PARAMETER ParameterValue ) { print_err(" NdisWriteConfiguration(): ** not implemented yet ...\n"); } void NdisMIndicateStatus( NDIS_HANDLE MiniportAdapterHandle, NDIS_STATUS GeneralStatus, void* StatusBuffer, TI_UINT32 StatusBufferSize ) { }