コード例 #1
0
ファイル: ttyDrv.c プロジェクト: andy345/vxworks5
LOCAL int ttyClose
    (
    TYCO_DEV *	pTyCoDev	/* device to control */
    )
    {

    if (!(--pTyCoDev->tyDev.numOpen))
	sioIoctl (pTyCoDev->pSioChan, SIO_HUP, NULL);
    return ((int) pTyCoDev);
    }
コード例 #2
0
ファイル: ttyDrv.c プロジェクト: andy345/vxworks5
LOCAL int ttyIoctl
    (
    TYCO_DEV *	pTyCoDev,	/* device to control */
    int		request,	/* request code */
    void *	arg		/* some argument */
    )
    {
    int status;

    if (request == FIOBAUDRATE)
	return (sioIoctl (pTyCoDev->pSioChan, SIO_BAUD_SET, arg) == OK ?
		OK : ERROR);

    status = sioIoctl (pTyCoDev->pSioChan, request, arg);

    if (status == ENOSYS)
	return (tyIoctl (&pTyCoDev->tyDev, request, (int)arg));

    return (status);
    }
コード例 #3
0
ファイル: ttyDrv.c プロジェクト: andy345/vxworks5
LOCAL int ttyOpen
    (
    TYCO_DEV *	pTyCoDev,	/* device to control */
    char     *	name,		/* device name */
    int		flags,		/* flags */
    int        	mode		/* mode selected */
    )
    {
    pTyCoDev->tyDev.numOpen++;  /* increment number of open paths */
    sioIoctl (pTyCoDev->pSioChan, SIO_OPEN, NULL);
    return ((int) pTyCoDev);
    }
コード例 #4
0
ファイル: ttyDrv.c プロジェクト: andy345/vxworks5
STATUS ttyDevCreate
    (
    char *      name,           /* name to use for this device      */
    SIO_CHAN *	pSioChan,	/* pointer to core driver structure */
    int         rdBufSize,      /* read buffer size, in bytes       */
    int         wrtBufSize      /* write buffer size, in bytes      */
    )
    {
    TYCO_DEV *pTyCoDev;

    if (ttyDrvNum <= 0)
        {
        errnoSet (S_ioLib_NO_DRIVER);
        return (ERROR);
        }

    if (pSioChan == (SIO_CHAN *) ERROR)
	{
        return (ERROR);
	}

    /* allocate memory for the device */

    if ((pTyCoDev = (TYCO_DEV *) malloc (sizeof (TYCO_DEV))) == NULL)
        return (ERROR);

    /* initialize the ty descriptor */

    if (tyDevInit (&pTyCoDev->tyDev, rdBufSize, wrtBufSize,
                   (FUNCPTR) ttyStartup) != OK)
        {
	free (pTyCoDev);
        return (ERROR);
        }

    /* initialize the SIO_CHAN structure */

    pTyCoDev->pSioChan	= pSioChan;
    sioCallbackInstall (pSioChan, SIO_CALLBACK_GET_TX_CHAR,
			tyITx, (void *)pTyCoDev);
    sioCallbackInstall (pSioChan, SIO_CALLBACK_PUT_RCV_CHAR,
			tyIRd, (void *)pTyCoDev);

    /* start the device cranking */

    sioIoctl (pSioChan, SIO_MODE_SET, (void *)SIO_MODE_INT);

    /* add the device to the I/O system */

    return (iosDevAdd (&pTyCoDev->tyDev.devHdr, name, ttyDrvNum));
    }
コード例 #5
0
void sysSerialHwInit (void)
{
    int i;

#ifndef BSP_CONFIG_HI3630
	dev_paras[0].int_level = ((SRAM_SMALL_SECTIONS * )SRAM_SMALL_SECTIONS_ADDR)->UART_INFORMATION[1].interrupt_num;
	dev_paras[0].base_addrs = (u32*)(((SRAM_SMALL_SECTIONS * )SRAM_SMALL_SECTIONS_ADDR)->UART_INFORMATION[1].base_addr);
	dev_paras[0].vector = ((SRAM_SMALL_SECTIONS * )SRAM_SMALL_SECTIONS_ADDR)->UART_INFORMATION[1].interrupt_num;
#else
    ((SRAM_SMALL_SECTIONS * )SRAM_SMALL_SECTIONS_ADDR)->UART_INFORMATION[1].interrupt_num = dev_paras[0].int_level;
    ((SRAM_SMALL_SECTIONS * )SRAM_SMALL_SECTIONS_ADDR)->UART_INFORMATION[1].base_addr = (u32)dev_paras[0].base_addrs;
#endif

    for (i = 0; i < AMBA_UART_CHANNELS_NUM; i++)
	{
	    amba_chan[i].regs       = dev_paras[i].base_addrs;
	    amba_chan[i].baud_rate  = CONSOLE_BAUD_RATE;
	    amba_chan[i].xtal       = UART_XTAL_FREQ;

	    amba_chan[i].level_rx   = dev_paras[i].int_level;
	    amba_chan[i].level_tx   = dev_paras[i].int_level;

	    /*
	      * Initialize driver functions, getTxChar, putRcvChar and channelMode
	      * and initialize UART
	      */

	    balongv7r2_uart_init(&amba_chan[i]);
	}



#ifdef	INCLUDE_SIO_POLL
    (BSP_VOID)sioIoctl (sysSioChans[SIO_POLL_CONSOLE], SIO_MODE_SET,
	      (void *) SIO_MODE_POLL);
    _func_consoleOut = (FUNCPTR)sysSerialPollConsoleOut;
#endif	/* INCLUDE_SIO_POLL */
}