⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tm1if_pc.c

📁 wince host 和 target PCI驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	RPCServ_SeekFunc    seek,	RPCServ_IsattyFunc  isatty,	RPCServ_FstatFunc   fstat,	RPCServ_FcntlFunc   fcntl,	RPCServ_StatFunc    stat,	RPCServ_ExitFunc    exit,        Endian              endian                     ){	static WSADATA WSAData;        serving_stopped= False;        same_endian    = endian==LCURRENT_ENDIAN;	WSAStartup(MAKEWORD(1, 1), &WSAData);        nrof_dsps= tmmanDSPGetNum();        nodedata= malloc( nrof_dsps * sizeof(NodeData) );        if (nodedata == Null) {            return False;        }        memset( nodedata, 0, nrof_dsps * sizeof(NodeData) );	MessageSynchHandle = CreateEvent( NULL, FALSE, FALSE, NULL );    	if ( MessageSynchHandle == NULL ) {	    return False;	}        return 	     RPCServ_init(		open,		open_dll,		close,		read,		write,		seek,		isatty,		fstat,		fcntl,		stat,		exit,		endian                	     );}/* * Function         : Add information on new node  * Parameters       : node_number         (I) Node number assigned to executable *                                            via TMDownLoader interface. *                    argc, argv          (I) Command line arguments *                    Stdin,Stdout,Stderr (I) file descriptors to be used as *                                            standard file descriptors. *                                            NB: these must be legal parameter *                                                values for the IO functions *                    address_shift       (I) the difference between the virtual *                                            and physical address of the each location *                                            in the node's SDRAM, as seen from the host *                    sdram_base          (I) physical address of the node's SDRAM start *                    sdram_limit         (I) physical address of the node's SDRAM limit *                    data                (I) additional, monitor specific data * Function Result  : True iff add succeeded. */static void terminate( NodeData *data ){        data->valid= False;	tmmanMessageDestroy( data->hostcall_channel ); }Bool TM1IF_add_node_info(            UInt32    node_number,           UInt32    argc,           String   *argv,           UInt32    Stdin,           UInt32    Stdout,           UInt32    Stderr,           UInt32    address_shift,           UInt32    sdram_base,           UInt32    sdram_limit,           Pointer   data     ){        Int                 dsp_number;        NodeData           *newdata;        dsp_number          = (DWORD)data;        newdata             = &nodedata[dsp_number];        newdata->dsp_number = dsp_number;        if (newdata->valid) {            return False;	}	if ( tmmanDSPOpen( dsp_number, &newdata->dsp_handle ) != statusSuccess	     || tmmanMessageCreate (                        newdata->dsp_handle,                        "CRunTime",                        MessageSynchHandle,                        constTMManModuleHostUser,                       &newdata->hostcall_channel ) != statusSuccess            ) {            return False;	}	if ( RPCServ_add_node_info( 		   node_number,		   argc,		   argv,		   Stdin,		   Stdout,		   Stderr,		   address_shift,                   sdram_base,                   sdram_limit,                   terminate,                   newdata	     )) {            newdata->valid= True;            return True;        } else {            terminate(newdata);            return False;        }}/* * Function         : Remove information on node, when present.  * Parameters       : node_number         (I) Node number assigned to executable *                                            via TMDownLoader interface. * Function Result  : - */void TM1IF_remove_node_info( UInt32 node_number ){    RPCServ_remove_node_info(node_number);}/* * Function         : Stops and deletes the previously started  *                    TM-1 application serving task(s), and return *                    *after* they have been stopped (this makes sure *                    that the servers stopped writing into TM memory). * Parameters       :  * Function Result  :  * Precondition     : - * Postcondition    : - * Sideeffects      :  */void TM1IF_term(){    Int32 i;    serving_stopped= True;    SetEvent ( MessageSynchHandle );    WaitForMultipleObjects( nrof_created_servers, created_servers, TRUE, 2000 );    CloseHandle ( MessageSynchHandle );    RPCServ_term();    WSACleanup();    free( created_servers );    free( nodedata        );}/* * Function         : Allocate a range of pagelocked memory, *                    and return scatter information. * Parameters       : node_number         (I)  allocating node *                    size                (I)  size to allocate *                    address             (O)  returned virtual start address, *                                             or Null when pagelocked allocation failed *                    scatter             (O)  an array of scatter block descriptors, *                                             to contain the returned scatter desctiptor *                    size                (IO) input: capacity of 'scatter', in nrof entries *                                             output: number of scatter entries of result * Function Result  : - */void  TM1IF_malloc_pagelocked(                   UInt                     node_number,                  UInt                     size,                  Pointer                 *retval,                   HostCall_MemoryBlock    *scatter,                   UInt                    *scatter_size ){        *retval= Null;}/* * Function         : Free a range of pagelocked memory. * Parameters       : node_number (I)  freeing node *                    address     (I)  virtual start address of previously *                                     allocated pagelocked memory * Function Result  : - */void  TM1IF_free_pagelocked( UInt node_number, Pointer address ){}UInt32 TM1IF_endian_swap( UInt32 value ){     return (same_endian           ? value           : LIENDIAN_SWAP4(value)); }UInt32 TM1IF_endian_swap_short (UInt32 value){    return same_endian? value: LIENDIAN_SWAP2 (value);}Address TM1IF_tm2host( RPCServ_NodeInfo *ninfo, Address tm_address ){     return (tm_address == Null           ? Null           : (Address)(TM1IF_endian_swap((Int32)tm_address)+ninfo->address_shift)); }Address TM1IF_host2tm( RPCServ_NodeInfo *ninfo, Address host_address ){    return (host_address == Null          ? Null	  : (Address)TM1IF_endian_swap(((Int32)host_address)-ninfo->address_shift));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -